diff --git a/API.md b/API.md index e73d5f8a4..9ecb99fa3 100644 --- a/API.md +++ b/API.md @@ -1,95 +1,20 @@ # API -## Groups -MineClone 2 makes very extensive use of groups. Making sure your items and objects have the correct group memberships is very important. -Groups are explained in `GROUPS.md`. ## Mod naming convention -Mods mods in MineClone 2 follow a simple naming convention: Mods with the prefix “`mcl_`” are specific to MineClone 2, although they may be based on an existing standalone. Mods which lack this prefix are *usually* verbatim copies of a standalone mod. Some modifications may still have been applied, but the APIs are held compatible. -## Adding items -### Special fields - -Items can have these fields: -* `_mcl_generate_description(itemstack)`: Required for any items which manipulate their - description in any way. This function takes an itemstack of its own type and must set - the proper advanced description for this itemstack. If you don't do this, anvils will - fail at properly restoring the description when their custom name gets cleared at an - anvil. - See `mcl_banners` for an example. - -Tools can have these fields: -* `_mcl_diggroups`: Specifies the digging groups that a tool can dig and how - efficiently. See `_mcl_autogroup` for more information. - -All nodes can have these fields: - -* `_mcl_hardness`: Hardness of the block, ranges from 0 to infinity (represented by -1). Determines digging times. Default: 0 -* `_mcl_blast_resistance`: How well this block blocks and resists explosions. Default: 0 -* `_mcl_falling_node_alternative`: If set to an itemstring, the node will turn into this node before it starts to fall. -* `_mcl_after_falling(pos)`: Called after a falling node finished falling and turned into a node. - -Use the `mcl_sounds` mod for the sounds. +Mods mods in MineCloneJEpC a simple naming convention: Mods with the prefix +“`mcljepc_`” are specific to MineCloneJEpC, although they may be based on an +existing standalone or a mod from a different MineClone fork. Mods which lack +this prefix are verbatim copies of a standalone mod. Some modifications may +still have been applied, but the APIs are held compatible. ## APIs -A lot of things are possible by using one of the APIs in the mods. Note that not all APIs are documented yet, but it is planned. The following APIs should be more or less stable but keep in mind that MineClone 2 is still unfinished. All directory names are relative to `mods/` - -### Items -* Doors: `ITEMS/mcl_doors` -* Fences and fence gates: `ITEMS/mcl_fences` -* Stairs and slabs: `ITEM/mcl_stairs` -* Walls: `ITEMS/mcl_walls` -* Beds: `ITEMS/mcl_beds` -* Buckets: `ITEMS/mcl_buckets` -* Dispenser support: `ITEMS/REDSTONE/mcl_dispensers` - -## Mobs -* Mobs: `ENTITIES/mcl_mobs` - -MineClone 2 uses its own mobs framework, called “Mobs Redo: MineClone 2 Edition” or “MRM” for short. -This is a fork of Mobs Redo [`mobs`] by TenPlus1. - -You can add your own mobs, spawn eggs and spawning rules with this mod. -API documnetation is included in `ENTITIES/mcl_mobs/api.txt`. - -This mod includes modificiations from the original Mobs Redo. Some items have been removed or moved to other mods. -The API is mostly identical, but a few features have been added. Compability is not really a goal, -but function and attribute names of Mobs Redo 1.41 are kept. -If you have code for a mod which works fine under Mobs Redo, it should be easy to make it work in MineClone 2, -chances are good that it works out of the box. - -### Help -* Item help texts: `HELP/doc/doc_items` -* Low-level help entry and category framework: `HELP/doc/doc` -* Support for lookup tool (required for all entities): `HELP/doc/doc_identifier` - -### HUD -* Statbars: `HUD/hudbars` - -### Utility APIs -* Change player physics: `PLAYER/playerphysics` -* Select random treasures: `CORE/mcl_loot` -* Get flowing direction of liquids: `CORE/flowlib` -* `on_walk_over` callback for nodes: `CORE/walkover` -* Get node names close to player (to reduce constant querying): `PLAYER/mcl_playerinfo` -* Explosion API -* Music discs API -* Flowers and flower pots - -### Unstable APIs -The following APIs may be subject to change in future. You could already use these APIs but there will probably be breaking changes in the future, or the API is not as fleshed out as it should be. Use at your own risk! - -* Panes (like glass panes and iron bars): `ITEMS/xpanes` -* `_on_ignite` callback: `ITEMS/mcl_fire` -* Farming: `ITEMS/mcl_farming` -* Anything related to redstone: Don't touch (yet) -* Any other mod not explicitly mentioned above +A lot of things are possible by using one of the APIs in the mods. Note that not +all APIs are documented yet, but it is planned. The following APIs should be +more or less stable but keep in mind that MineCloneJEpC is still unfinished. All +directory names are relative to `mods/` ### Planned APIs -* Saplings and trees -* Custom banner patterns -* Custom dimensions -* Custom portals -* Dispenser and dropper support -* Proper sky and weather APIs - +* Event-based apis to ensure that specific startup code inside of mods can run + in the correct order diff --git a/CREDITS.md b/CREDITS.md index c1174e797..b40829258 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -6,12 +6,20 @@ ## Creator of MineClone2 * Wuzzy +## Creator of Minecraftn't Classic +* ROllerozxa -## Maintainers +## Creator of Minecraftn't Pre-classic +* ROllerozxa + +## Creator of MinecloneJEpC +* Lazerbeak12345 + +## MCL2 Maintainers * Nicu * cora -## Previous Maintainers +## Previous MCL2 Maintainers * Fleckenstein * jordan4ibanez diff --git a/GROUPS.md b/GROUPS.md deleted file mode 100644 index 3c954111f..000000000 --- a/GROUPS.md +++ /dev/null @@ -1,220 +0,0 @@ -## Groups -This document explains all the groups used in this game. - -### Special groups - -* `not_in_creative_inventory=1`: Item will not be shown in creative inventory -* `not_in_craft_guide=1`: Item will not be shown as result or fuel item in crafting guide (but still may be shown as ingredient) - -### Digging time groups - -The basic digging time groups determine by which tools a node can be dug. - -* `pickaxey`: Diggable by pickaxe. The rating is for the possible tool materials in which the node will make its useful drop: - * `pickaxey=1`: Wood, gold, stone, iron and diamond - * `pickaxey=2`: Gold, stone, iron and diamond - * `pickaxey=3`: Stone, iron and diamond - * `pickaxey=4`: Iron and diamond - * `pickaxey=5`: Diamond -* `axey`: Axe. Rating is same as for `pickaxey` -* `shovely`: Shovel. Rating is same as for `pickaxey` -* `swordy=1`: Diggable by sword (any material), and this node is *not* a cobweb -* `swordy_cobweb=1`: Diggable by sword (any material), and this node is a cobweb -* `shearsy=1`: Diggable by shears, and this node is *not* wool -* `shearsy_wool=1`: Diggable by shears, and this node is wool -* `handy=1`: Breakable by hand and this node gives it useful drop when dug by hand. All nodes which are breakable by pickaxe, axe, shovel, sword or shears are also automatically breakable by hand, but not neccess -* `creative_breakable=1`: Block is breakable by hand in creative mode. This group is implied if the node belongs to any other digging group - -Please read to learn how digging times work in Minecraft, as MineClone 2 is based on the same system. - -### Groups for interactions - -* `crush_after_fall=1`: For falling nodes. These will crush whatever they hit after falling, not dropping as an item -* `falling_node_damage=1`: For falling nodes. Hurts any objects it hits while falling. Damage is based on anvils -* `dig_by_water=1`: Blocks with this group will drop when they are near flowing water -* `destroy_by_lava_flow=1`: Blocks with this group will be destroyed by flowing lava -* `dig_by_piston=1`: Blocks which will drop as an item when pushed by a piston. They also cannot be pulled by sticky pistons -* `cultivatable=2`: Block will be turned into Farmland by using a hoe on it -* `cultivatable=1`: Block will be turned into Dirt by using a hoe on it -* `flammable`: Block spreads fire - * `flammable>0`: Gets destroyed by fire - * `flammable=-1` Does not get destroyed by fire -* `fire_encouragement`: How quickly this block catches fire -* `fire_flammability`: How fast the block will burn away -* `path_creation_possible=1`: Node can be turned into grass path by using a shovel on it -* `spreading_dirt_type=1`: A dirt-type block with a cover (e.g. grass) which may spread to neighbor dirt blocks -* `dirtifies_below_solid=1`: This node turns into dirt immediately when a solid or dirtifier node is placed on top -* `dirtifier=1`: This node turns nodes the above group into dirt when placed above -* `non_mycelium_plant=1`: A plant which can't grow on mycelium. Placing it on mycelium fails and if mycelium spreads below it, it uproots -* `soil=1`: Saplings and other small plants can grow on it -* `soil_sapling=2`: Soil for saplings. Intended to be natural soil. All saplings will grow on this -* `soil_sapling=1`: Artificial soil (such as farmland) for saplings. Some saplings will not grow on this -* `soil_sugarcane=1`: Sugar canes will grow on this near water -* `soil_nether_wart=1`: Nether wart will grow on this -* `enderman_takable=1`: Block can be taken and placed by endermen -* `disable_suffocation=1`: Disables suffocation for full solid cubes (1) -* `destroys_items=1`: If an item happens to be *inside* this node, the item will be destroyed -* `no_eat_delay=1`: Only for foodstuffs. When eating this, all eating delays are ignored. -* `can_eat_when_full=1`: Only for foodstuffs. This item can be eaten when the user has a full hunger bar -* `attached_node_facedir=1`: Like `attached_node`, but for facedir nodes -* `supported_node=1`: Like `attached_node`, but can be placed on any nodes that do not have the `drawtype="airlike"` attribute. -* `cauldron`: Cauldron. 1: Empty. 2-4: Water height -* `anvil`: Anvil. 1: No damage. 2-3: Higher damage levels -* `no_rename=1`: Item cannot be renamed by anvil -* `comparator_signal=X`: If set, this node outputs a constant (!) comparator signal output of strength X. -* `piston=X`: Piston (main body) (1 = normal, 2 = sticky) -* `piston_pusher=X`: Piston pusher (1 = normal, 2 = sticky) -* `hopper=X`: Hopper (1 = downwards, 2 = sideways) -* `portal=1`: Portal (node that teleports players and things by standing inside) -* `end_portal_frame=X`: End portal frame (1 = no eye, 2 = with eye) -* `coral=X`: Coral (any type) (1 = alive, 2 = dead) -* `coral_plant=X`: Coral in the "plant" shape (1 = alive, 2 = dead) -* `coral_fan=X`: Coral fan (1 = alive, 2 = dead) -* `coral_block=X`: Coral block (1 = alive, 2 = dead) -* `coral_species=X`: Specifies the species of a coral; equal X means equal species -* `set_on_fire=X`: Sets any (not fire-resistant) mob or player on fire for X seconds when touching -* `compostability=X`: Item can be used on a composter block; X (1-100) is the % chance of adding a level of compost - -#### Footnotes - -1. Normally, all walkable blocks with the default 1×1×1 cube as a collision box (e.g. sand, - gravel, stone, but not fences) will damage the players while their head is inside. This - is called “suffocation”. Setting this group disables this behaviour - -### Groups (mostly) used for crafting recipes - -* `sand=1`: Sand (any color) -* `sandstone=1`: Sandstone (any color) and related nodes (chiseled and the like) (only full blocks) -* `normal_sandstone=1`: “Normal” (yellow) sandstone and related nodes (chiseled and the like) (only full blocks) -* `red_sandstone=1`: Red sandstone and related nodes (chiseled and the like) (only full blocks) -* `hardened_clay=1`: Terracotta (any color) -* `quartz_block=1`: Quartz Block and variants (chiseled, pillar, etc.) (only full blocks) -* `stonebrick=1`: Stone Bricks and related nodes (only full blocks) -* `shulker_box=1`: Block is a shulker box -* `tree=1`: Oak Wood, Birch Wood, etc. (tree trunks) -* `wood=1`: Oak Wood Planks, Birch Wood Planks, etc. (only full blocks) -* `wood_slab=1`: Slabs made out of a kind of wooden planks -* `wood_stairs=1`: Stairs made out of a kind of wooden planks -* `coal=1`: Coal of any kind (lumps only, not blocks) -* `wool=1`: Wool (only full blocks) -* `carpet=1:` (Wool) carpet -* `stick=1`: Stick -* `water_bucket=1`: Bucket containing a liquid of group “water” -* `enchantability=X`: How good the enchantments are the item gets (1 equals book) -* `enchanted=1`: The item is already enchanted, meaning that it can't be enchanted using an enchanting table -* `cobble=1`: Cobblestone of any kind -* `soul_block`: Fire burning on these blocks turns to soul fire, can be used to craft soul torch - -### Material groups - -These groups correspond to the Minecraft materials. They classify the block into a type, indicating what the block is “made off”. - -* `material_stone=1`: Stone -* `material_wood=1`: Wood -* `material_sand=1`: Sand -* `material_glass=1`: Glass - -Currently, these groups are used for the note block. -Note that not all Minecraft materials are used so far. More Minecraft materials will lilely only be added when they are needed for a concrete use case. - -### Declarative groups -These groups are used mostly for informational purposes - -* `solid=1`: Solid full-cube block (automatically assigned) -* `opaque=1`: Opaque block (automatically assigned) -* `not_solid=1`: Block is not solid (only assign this group for nodes which are automatically detected as “solid” in error -* `not_opaque=1`: Block is not opaque (only assign this group for nodes which are automatically detected as “opaque” in error -* `fire=1`: Fire -* `water=1`: Water -* `lava=1`: Lava -* `top_snow=X`: Top snow with X layers (1-8) -* `torch`: Torch or torch-like node - * `torch=1`: Torch on floor - * `torch=2`: Torch at wall -* `liquid`: Block is a liquid - * `liquid=1`: Unspecified type - * `liquid=2`: Water - * `liquid=3`: Lava -* `fence=1`: Fence -* `fence_gate=1`: Fence gate -* `fence_wood=1`: Wooden fence -* `fence_nether_brick=1`: Nether brick fence -* `flower_pot`: Flower pot - * `flower_pot=1`: Empty flower pot - * `flower_pot=2`: Flower pot with a plant or flower -* `flower=1`: Flower -* `place_flowerlike=1`: Node has placement rules like that of a flower -* `place_flowerlike=2`: Node has placement rules like tall grass -* `cake`: Cake (rating = slices left) -* `book=1`: Book -* `pane=1`: Node is a “pane”-like node glass pane or iron bars -* `bed=1`: Bed -* `door=1`: Door -* `trapdoor=1`: Closed trapdoor -* `trapdoor=2`: Open trapdoor -* `glass=1`: Glass (full cubes only) -* `rail=1`: Rail -* `music_record`: Item is Music Disc -* `tnt=1`: Block is TNT -* `boat=1`: Boat -* `minecart=1`: Minecart -* `food`: Item is a comestible item which can be consumed (healthy or unhealthy) - * `food=2`: Food - * `food=3`: Drink (including soups) - * `food=1`: Other/unsure -* `eatable`: Item can be *directly* eaten by wielding + right click (`on_use=item_eat`). Rating is the satiation gain -* `cocoa`: Node is a cocoa pod (rating is growth stage, ranging from 1 to 3) -* `ammo=1`: Item is used as ammo for a weapon -* `ammo_bow=1`: Item is used as ammo for bows -* `non_combat_armor=1`: Item can be equipped as armor, but is not made for combat (e.g. zombie head, pumpkin) -* `container`: Node is a container which physically stores items within and has at least 1 inventory - * `container=2`: Has one inventory with list name `"main"`. Items can be placed and taken freely - * `container=3`: Same as `container=2`, but shulker boxes can not be inserted - * `container=4`: Furnace-like, has lists `"src"`, `"fuel"` and `"dst"`. - It is expected that this also reacts on `on_timer`; - the node timer must be started from other mods when they add into `"src"` or `"fuel"` - * `container=5`: Left part of a 2-part horizontal connected container. Both parts have a `"main"` inventory - list. Both inventories are considered to belong together. This is used for large chests. - * `container=6`: Same as above, but for the right part. - * `container=7`: Has inventory list "`main`", no movement allowed - * `container=1`: Other/unspecified container type -* `spawn_egg=1`: Spawn egg - -* `pressure_plate=1`: Pressure plate (off) -* `pressure_plate=2`: Wooden pressure (on) -* `button=1`: Button (off) -* `button=2`: Button (on) -* `redstone_torch=1`: Redstone Torch (lit) -* `redstone_torch=2`: Redstone Torch (unlit) - -* `plant=1`: Plant or part of a plant -* `double_plant`: Part of a double-sized plant. 1 = lower part, 2 = upper part - -* `pickaxe=1`: Pickaxe -* `shovel=1`: Shovel -* `axe=1`: Axe -* `sword=1`: Sword -* `hoe=1`: Hoe (farming tool) -* `shears=1`: Shears - -* `weapon=1`: Item is primarily (!) a weapon -* `tool=1`: Item is primarily (!) a tool -* `craftitem=1`: Item is primarily (!) used for crafting -* `brewitem=1`: Item is primarily (!) used in brewing -* `transport=1`: Item is used for transportation -* `building_block=1`: Block is a building block -* `deco_block=1`: Block is a decorational block - -* `blast_furnace_smeltable=1` : Item or node is smeltable by a blast furnace -* `smoker_cookable=1` : Food is cookable by a smoker. - - -## Fake item groups -These groups put similar items together which should all be treated by the gameplay or the GUI as a single item. -You should not add custom items to these groups for no good reason, this is likely to cause a ton of conflicts. - -* `clock`: Clock (rating indicates the “frame”) -* `compass`: Compass (rating indicates the “frame”) - -This has the following implication: If you want to use a compass or clock in a crafting recipe, you *must* -use `group:compass` or `group:clock`, respectively. diff --git a/LEGAL.md b/LEGAL.md index e54bdc41b..06ddc04ce 100644 --- a/LEGAL.md +++ b/LEGAL.md @@ -5,10 +5,11 @@ Copying is an act of love. Please copy and share! <3 Here's the detailed legalese for those who need it: ## License of source code -MineClone 2 (by kay27, EliasFleckenstein, Wuzzy, davedevils and countless others) -is an imitation of Minecraft. +MineCloneJEpC (by kay27, EliasFleckenstein, Wuzzy, ROllerozxa, +Lazerbeak12345, davedevils and countless others) is an imitation +of Minecraft. -MineClone 2 is free software: you can redistribute it and/or modify +MineCloneJEpC 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. @@ -25,12 +26,15 @@ You can choose which license applies to you: Either the license of MineClone 2 (GNU GPLv3) or the mod's license. MineClone 2 is a direct continuation of the discontinued MineClone -project by davedevils. +project by davedevils. MineCloneJEpC is a fork of MineClone 2, which +was merged by Lazerbeak12345 with Minecraftn't Pre-classic by +ROllerozxa, a fork of Minecraftn't Classic by ROllerozxa, which is a +fork of MineClone 2. Mod credits: See `README.txt` or `README.md` in each mod directory for information about other authors. For mods that do not have such a file, the license is the source code license -of MineClone 2 and the author is Wuzzy. +of MineCloneJEpC and the author is documented in the git history. ## License of media (textures and sounds) No non-free licenses are used anywhere. @@ -50,3 +54,9 @@ http://creativecommons.org/licenses/by-sa/3.0/ See README.txt in each mod directory for detailed information about other authors. +Due to potential copyright problems with Minecraftn't Classic and +Pre-classic at one point containing assets copyrighted by Mojang +(which none of these projects are associated with), when manually +cherry-picking the code from Minecraftn't Pre-classic to be forked on +top of MCL2, I made sure to exclude anything that might be copyrighted +by Mojang. diff --git a/README.md b/README.md index 908769438..aefa560ac 100644 --- a/README.md +++ b/README.md @@ -1,195 +1,120 @@ -# MineClone2 -An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils. +# MineCloneJEpC + +An unofficial Minecraft-like game for Minetest. Forked from MineClone 2 by Wuzzy +and merged with Minecraftn't Pre-classic by ROllerozxa Developed by many people. Not developed or endorsed by Mojang AB. -Version: 0.75 (in development) +Version: 0.1 (in development) -### Gameplay -You start in a randomly-generated world made entirely of cubes. You can explore -the world and dig and build almost every block in the world to create new -structures. You can choose to play in a “survival mode” in which you have to -fight monsters and hunger for survival and slowly progress through the -various other aspects of the game, such as mining, farming, building machines, and so on -Or you can play in “creative mode” in which you can build almost anything instantly. +SPECIFIC VERSION OF MINECRAFT CLONED: `old_alpha rd-132211` -#### Gameplay summary +## Purpose and method + +### Purpose + +The primary purpose of this game is to improove MineClone 2 by researching the +development of Minecraft through implimenting each important release in-order. +As a side-effect, this will mean each release is a playable game on it's own - +but if this project ever catches up to MineClone 2, it will _not_ duplicate +code, and will avoid cloning the exact version that project is cloning. + +### Method + +- Make a game that clones the oldest Minecraft release. +- Make a modpack for each release following, that expands that game to become a +clone of the modpack's release. +- Where only absolutely necessary, fork the game to make a release. All future +modpacks are to be based on the new game. Such an example would be where making +a change to the `game.conf` file is the only option. + +## Gameplay +You start in a flat world made entirely of cubes. You can explore the world and +dig almost every block in the world, and can use cobblestone to create new +structures. + +Keeping true to the exact version of Minecraft that this is cloning, it's pretty +bare. There are only grass and cobblestone blocks. (TODO) Press the action key +to respawn. + +### Gameplay summary * Sandbox-style gameplay, no goals -* Survive: Fight against hostile monsters and hunger -* Mine for ores and other treasures -* Magic: Gain experience and enchant your tools -* Use the collected blocks to create great buildings, your imagination is the limit -* Collect flowers (and other dye sources) and colorize your world -* Find some seeds and start farming -* Find or craft one of hundreds of items -* Build a railway system and have fun with minecarts -* Build complex machines with redstone circuits -* In creative mode you can build almost anything for free and without limits +* Use blocks to create great buildings, your imagination is the limit +* You can build almost anything for free (no cost) and without limit ## How to play (quick start) ### Getting started -* **Punch a tree** trunk until it breaks and collect wood -* Place the **wood into the 2×2 grid** (your “crafting grid” in your inventory menu and craft 4 wood planks -* Place the 4 wood planks in a 2×2 shape in the crafting grid to **make a crafting table** -* **Rightclick the crafting table** for a 3×3 crafting grid to craft more complex things -* Use the **crafting guide** (book icon) to learn all the possible crafting recipes -* **Craft a wooden pickaxe** so you can dig stone -* Different tools break different kinds of blocks. Try them out! -* Continue playing as you wish. Have fun! - -### Farming -* Find seeds -* Craft hoe -* Rightclick dirt or similar block with hoe to create farmland -* Place seeds on farmland and watch them grow -* Collect plant when fully grown -* If near water, farmland becomes wet and speeds up growth - -### Furnace -* Craft furnace -* Furnace allows you to obtain more items -* Upper slot must contain a smeltable item (example: iron ore) -* Lower slot must contain a fuel item (example: coal) -* See tooltips in crafting guide to learn about fuels and smeltable items - -### Additional help -More help about the gameplay, blocks items and much more can be found from inside -the game. You can access the help from your inventory menu. - -### Special items -The following items are interesting for Creative Mode and for adventure -map builders. They can not be obtained in-game or in the creative inventory. - -* Barrier: `mcl_core:barrier` - -Use the `/giveme` chat command to obtain them. See the in-game help for -an explanation. +- Mine with right click +- Place with left click +- Walk around ## Installation This game requires [Minetest](http://minetest.net) to run (version 5.4.1 or -later). So you need to install Minetest first. Only stable versions of Minetest -are officially supported. -There is no support for running MineClone2 in development versions of Minetest. +later). Older versions might work, but this is untested. So you need to install +Minetest first. Only stable versions of Minetest are officially supported. +There is no support for running MineCloneJEpC on development versions of +Minetest. -To install MineClone2 (if you haven't already), move this directory into the -“games” directory of your Minetest data directory. Consult the help of +To install MineCloneJEpC (if you haven't already), move this directory into +the “games” directory of your Minetest data directory. Consult the help of Minetest to learn more. ## Useful links -The MineClone2 repository is hosted at Mesehub. To contribute or report issues, head there. +The MineCloneJEpC repository is hosted at Mesehub. To contribute or report issues, head there. -* Mesehub: -* Discord: -* YouTube -* IRC: -* Matrix: -* Reddit: -* Minetest forums: -* ContentDB: -* OpenCollective: +* Mesehub: + +Here's the Minecraft wiki page on the version of Minecraft that this is cloning. + + ## Target + - Crucially, create a stable, moddable, free/libre clone of Minecraft -based on the Minetest engine with polished features, usable in both -singleplayer and multiplayer. Currently, most of **Minecraft Java -Edition 1.12.2** features are already implemented and polishing existing -features are prioritized over new feature requests. -- With lessened priority yet strictly, implement features targetting -**Minecraft version 1.17 + OptiFine** (OptiFine only as far as supported -by the Minetest Engine). This means features in parity with the listed -Minecraft experiences are prioritized over those that don't fulfill this -scope. +`old_alpha rd-132211` based on the Minetest engine with polished features. + No other features will be added - though modifications to apis will be, if + they facilitate making mods or modpacks to expand this game to clone a newer + version of Minecraft. - Optionally, create a performant experience that will run relatively well on really low spec computers. Unfortunately, due to Minecraft's mechanisms and Minetest engine's limitations along with a very small playerbase on low spec computers, optimizations are hard to investigate. ## Completion status -This game is currently in **beta** stage. -It is playable, but not yet feature-complete. +This game is currently in **pre-alpha** stage. +It is playable, but has a few tweaks left. Backwards-compability is not entirely guaranteed, updating your world might cause small bugs. -If you want to use the git version of MineClone2 in production, consider using the production branch. -It is updated weekly and contains relatively stable code for servers. -The following main features are available: +These things need figured out, and I don't know how to do them: -* Tools, weapons -* Armor -* Crafting system: 2×2 grid, crafting table (3×3 grid), furnace, including a crafting guide -* Chests, large chests, ender chests, shulker boxes -* Furnaces, hoppers -* Hunger -* Most monsters and animals -* All ores from Minecraft -* Most blocks in the overworld -* Water and lava -* Weather -* 28 biomes -* The Nether, a fiery underworld in another dimension -* Redstone circuits (partially) -* Minecarts (partial) -* Status effects (partial) -* Experience -* Enchanting -* Brewing, potions, tipped arrow (partial) -* Boats -* Fire -* Buidling blocks: Stairs, slabs, doors, trapdoors, fences, fence gates, walls -* Clock -* Compass -* Sponge -* Slime block -* Small plants and saplings -* Dyes -* Banners -* Deco blocks: Glass, stained glass, glass panes, iron bars, hardened clay (and colors), heads and more -* Item frames -* Jukeboxes -* Beds -* Inventory menu -* Creative inventory -* Farming -* Writable books -* Commands -* Villages -* The End -* And more! +* In this edition of minecraft, a left-click places, and a right-click mines. + (opposite of later versions, and of Minetest defaults) +* A way for modpacks to change values in `game.conf` (This will only effect how mods expanding this game function) + * mapgen + * gamemodes + * etc. -The following features are incomplete: +The following main features are available (including features I must now remove): -* Some monsters and animals -* Redstone-related things -* Special minecarts -* A couple of non-trivial blocks and items - -Bonus features (not found in Minecraft 1.12): - -* Built-in crafting guide which shows you crafting and smelting recipes -* In-game help system containing extensive help about gameplay basics, blocks, items and more -* Temporary crafting recipes. They only exist to make some otherwise unaccessible items available when you're not in creative mode. These recipes will be removed as development goes on an more features become available -* Saplings in chests in mapgen v6 +* Blocks in the overworld +* Buidling blocks: Stone, Dirt +* Commands (TO BE REMOVED) * Fully moddable (thanks to Minetest's powerful Lua API) -* New blocks and items: - * Lookup tool, shows you the help for whatever it touches - * More slabs and stairs - * Nether Brick Fence Gate - * Red Nether Brick Fence - * Red Nether Brick Fence Gate +* And more! (It's a lot of work to remove - but not so much anymore thanks to ROllerozxa) Technical differences from Minecraft: * Height limit of ca. 31000 blocks (much higher than in Minecraft) * Horizontal world size is ca. 62000×62000 blocks (much smaller than in Minecraft, but it is still very large) * Still very incomplete and buggy -* Blocks, items, enemies and other features are missing +* Blocks, items and other features that shouldn't be there * A few items have slightly different names to make them easier to distinguish -* Different music for jukebox * Different textures (Pixel Perfection) -* Different sounds (various sources) +* Different sounds (various sources) (TO BE REMOVED) * Different engine (Minetest) * Different easter eggs -… and finally, MineClone2 is free software (“free” as in “freedom”)! +… and finally, MineCloneJEpC is free software (“free” as in “freedom”)! ## Other readme files diff --git a/README_locale/README.zh_TW.md b/README_locale/README.zh_TW.md deleted file mode 100644 index eb7540247..000000000 --- a/README_locale/README.zh_TW.md +++ /dev/null @@ -1,324 +0,0 @@ -# MineClone 2 -一個非官方的Minetest遊戲,遊玩方式和Minecraft類似。由davedevils從MineClone分拆。 -由許多人開發。並非由Mojang Studios開發。 - -版本:0.71.0 - -### 遊玩 -你開始在一個完全由方塊隨機生成的世界裡。你可以探索這個世界,挖掘和建造世界上幾乎所有的方塊,以創造新的結構。你可以選擇在「生存模式」中進行遊戲,在這個模式中,你必須與怪物戰鬥,飢餓求生,並在遊戲的其他各個環節中慢慢進步,如採礦、養殖、建造機器等等。 - -或者你也可以在「創造模式」中玩,在這個模式中,你可以瞬間建造大部分東西。 -#### Gameplay summary - -* 沙盒式遊戲,沒有明確目標 -* 生存:與怪物和飢餓搏鬥 -* 挖礦來獲得礦物和寶物 -* 附魔:獲得經驗值並以附魔強化你的工具 -* 使用收集的方塊來創造偉大的建築 -* 收集鮮花(和其他染料來源),令世界多姿多彩 -* 找些種子並開始耕種 -* 尋找或合成數百個物品之一 -* 建立一個鐵路系統,並從礦車中得到樂趣 -* 用紅石電路建造複雜的機器 -* 在創造模式下,你幾乎可以免費建造任何東西,而且沒有限制。 - -## 如何開始 -### 開始生存 -* **挖樹幹**直到其破裂並收集木材 -* 將木頭**放入2×2的格子中**(你的物品欄中的「合成格子」),然後製作4塊木材。 -* 將4塊木材按2×2的形狀擺放在合成格子裡,製作成合成臺。 -* **右鍵單擊製作臺**以獲得3×3製作網格,製作更複雜的東西 -* 使用**合成指南**(書形圖標)了解所有可能的合成方式 -* **製作一個木鎬**,這樣你就可以挖石頭了。 -* 不同的工具可以打破不同種類的方塊。試試吧! -* 繼續玩你想玩的。盡情享受吧! - -### 耕種 -* 找到種子 -* 合成鋤頭 -* 用鋤頭右鍵點擊泥土或類似的方塊,創建農田 -* 將種子放在農田上,看著它們長出來 -* Collect plant when fully grown -* If near water, farmland becomes wet and speeds up growth - -### Furnace -* Craft furnace -* Furnace allows you to obtain more items -* Upper slot must contain a smeltable item (example: iron ore) -* Lower slot must contain a fuel item (example: coal) -* See tooltips in crafting guide to learn about fuels and smeltable items - -### Additional help -More help about the gameplay, blocks items and much more can be found from inside -the game. You can access the help from your inventory menu. - -### Special items -The following items are interesting for Creative Mode and for adventure -map builders. They can not be obtained in-game or in the creative inventory. - -* Barrier: `mcl_core:barrier` - -Use the `/giveme` chat command to obtain them. See the in-game help for -an explanation. - -#### Incomplete items -These items do not work yet, but you can get them with `/giveme` for testing: - -* Minecart with Chest: `mcl_minecarts:chest_minecart` -* Minecart with Furnace: `mcl_minecarts:furnace_minecart` -* Minecart with Hopper: `mcl_minecarts:hopper_minecart` -* Minecart with Command Block: `mcl_minecarts:command_block_minecart` - -## Installation -This game requires [Minetest](http://minetest.net) to run (version 5.0.0 or -later). So you need to install Minetest first. Only stable versions of Minetest -are officially supported. -There is no support for running MineClone 2 in development versions of Minetest. - -To install MineClone 2 (if you haven't already), move this directory into the -“games” directory of your Minetest data directory. Consult the help of -Minetest to learn more. - -## Project description -The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software. - -* **開發目標:我的世界, Java版, 版本 1.12** -* MineClone2還包括Minetest支持的Optifine功能。 -* 後期Minecraft版本的功能可能會偷偷加入,但它們的優先級較低。 -* 總的來說,Minecraft的目標是在Minetest目前允許的情況下進行克隆。 -* 克隆Minecraft是最優先的。 -* MineClone2將使用不同的圖形和聲音,但風格相似。 -* 克隆界面沒有優先權。只會被粗略地模仿。 -* 在Minetest中發現的局限性將在開發過程中被記錄和報告。 - -## 完成程度 -該遊戲目前處於**alpha**階段。 -它是可玩的,但尚未完成,預計會出現許多錯誤。 -向後兼容性是**不能保證的**,更新你的世界可能會造成大大小小的bug(比如「缺少節點」的錯誤甚至崩潰)。 - -已經實現以下功能: - -* 工具,武器 -* 盔甲 -* 合成和熔煉系統:2×2 合成格, 合成臺 (3×3 合成格), 熔爐, 合成教學 -* 儲物箱,大型儲物箱,終界箱和界伏盒 -* 熔爐, 漏斗 -* 飢餓和飽食 -* 大多數怪物和動物 -* Minecraft 1.12中的所有礦物 -* 主世界的大部分方塊 -* 水和岩漿 -* 天氣 -* 28個生態域 -* 地獄,熾熱的維度 -* 紅石電路(部分) -* 礦車(部分) -* 狀態效果(部分) -* 經驗系統 -* 附魔 -* 釀造,藥水,藥水箭(部分) -* 船 -* 火 -* 建築方塊:樓梯、半磚、門、地板門、柵欄、柵欄門、牆。 -* 時鐘 -* 指南針 -* 海綿 -* 史萊姆方塊(不與紅石互動) -* 小植物和樹苗 -* 染料 -* 旗幟 -* 裝飾方塊:玻璃、染色玻璃、玻璃片、鐵柵欄、陶土(和染色版本)、頭顱等 -* 物品展示框 -* 唱片機 -* 床 -* 物品欄 -* 創造模式物品欄 -* 生產 -* 書和羽毛筆 -* 一些服務器命令 -* 還有更多! - -以下是不完整的特性: - -* 生成結構(特別是村莊) -* 一些怪物和動物 -* 紅石系統 -* 終界 -* 特殊的礦車 -* 一些不簡單的方塊和物品。 - -額外功能(在Minecraft 1.11中沒有)。 - -* 內置合成指南,向你展示製作和熔煉的配方 -* 遊戲中的幫助系統包含了大量關於遊戲基礎知識、方塊、物品等方面的幫助。 -* 臨時製作配方。它們的存在只是為了在你不在創造模式下時,提供一些其他無法獲得的物品。這些配方將隨著開發的進行和更多功能的出現而被移除。 -* v6地圖生成器中箱子裡的樹苗。 -* 完全可修改(得益於Minetest強大的Lua API)。 -* 新的方塊和物品: - * 查找工具,顯示觸及事物的幫助 - * 更多的半磚和樓梯 - * 地獄磚柵欄門 - * 紅地獄磚柵欄 - * 紅地獄磚柵欄門 - -與Minecraft的技性術差異: - -* 高度限制為31000格(遠高於Minecraft) -* 水平世界大小約為62000×62000格(比Minecraft中的小得多,但仍然非常大)。 -* 仍然非常不完整和有問題 -* 塊、物品、敵人和其他功能缺失。 -* 一些項目的名稱略有不同,以便於區分。 -* 唱片機的音樂不同 -* 不同的材質(像素完美) -* 不同的聲音(各種來源) -* 不同的引擎(Minetest) - -...最後,MineClone2是自由軟件! - -## 錯誤報告 -請在此處報告所有錯誤和缺少的功能: - - - -## Chating with the community -我們有Discord交流羣: - - - - -## Other readme files - -* `LICENSE.txt`:GPLv3許可文本 -* `CONTRIBUTING.md`: 為那些想參與貢獻的人提供資訊 -* `MISSING_ENGINE_FEATURES.md`: MineClone2需要改进,Minetest中缺失的功能列表。 -* `API.md`: 關於MineClone2的API - -## 參與者 -有這麼多人要列出(抱歉)。詳情請查看各mod目錄。本節只是粗略地介紹了本遊戲的核心作者。 - -### 程式碼 -* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082):大多數mod的主要程序員(已退休) -* davedevils:MineClone 2的原型——「MineClone」的創造者 -* [ex-bart](https://github.com/ex-bart):紅石比較器 -* [Rootyjr](https://github.com/Rootyjr):釣竿和錯誤修復 -* [aligator](https://github.com/aligator):改進門 -* [ryvnf](https://github.com/ryvnf):爆炸物理 -* MysticTempest:錯誤修復 -* [bzoss](https://github.com/bzoss):狀態效果,釀造,藥水 -* kay27 :經驗系統,錯誤修復和優化(當前維護者) -* [EliasFleckenstein03](https://github.com/EliasFleckenstein03):終界水晶,附魔,燃燒的怪物/玩家,箱子的動畫和錯誤修復(當前維護者) -* epCode:更好的玩家動畫,新徽標 -* 2mac:修復動力鐵軌的錯誤 -* 更多:待篇寫 (請查看各mod目錄) - -#### Mod(概括) - -* `controls`: Arcelmi -* `flowlib`: Qwertymine13 -* `walkover`: lordfingle -* `drippingwater`: kddekadenz -* `mobs_mc`: maikerumine, 22i and others -* `awards`: rubenwardy -* `screwdriver`: RealBadAngel, Maciej Kastakin, Minetest contributors -* `xpanes`: Minetest contributors -* `mesecons` mods: Jeija and contributors -* `wieldview`: Stuart Jones -* `mcl_meshhand`: Based on `newhand` by jordan4ibanez -* `mcl_mobs`: Based on Mobs Redo [`mobs`] by TenPlus1 and contributors -* 大多其他的Mod: Wuzzy - -每个mod的详细參與者可以在各个mod目录中找到。 - -### 圖形 -* [XSSheep](http://www.minecraftforum.net/members/XSSheep):主要作者;Minecraft 1.11的Pixel Perfection资源包的制作者 -* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082):主菜單圖像和各種編輯和添加的材質包 -* [kingoscargames](https://github.com/kingoscargames):現有材質的各種編輯和添加 -* [leorockway](https://github.com/leorockway):怪物紋理的一些編輯 -* [xMrVizzy](https://minecraft.curseforge.com/members/xMrVizzy):釉陶(材質以後會被替換) -* yutyo :MineClone2標志 -* 其他:GUI圖片 - -### 翻譯 -* Wuzzy:德語 -* Rocher Laurent :法語 -* wuniversales:西班牙語 -* kay27 :俄語 -* [Emoji](https://toyshost2.ddns.net):繁體中文 - -### 模型 -* [22i](https://github.com/22i):所有模型的作者 -* [tobyplowy](https://github.com/tobyplowy):對上述模型進行UV映射修復 - -### 聲音和音樂 -多種來源。 有關詳細信息,請參見相應的mod目錄。 - -### 特殊感謝 - -* Wuzzy,感謝他啟動和維護MineClone2多年。 -* celeron55,創建Minetest。 -* Minetest的社區提供了大量的mods選擇,其中一些最終被納入MineClone 2。 -* Jordach,為《Big Freaking Dig》的唱片機音樂合輯而來 -* 花了太多時間為Minecraft Wiki寫作的工作狂。它是創建這個遊戲的寶貴資源。 -* Notch和Jeb是Minecraft背后的主要力量 -* XSSheep用於創建Pixel Perfection資源包。 -* [22i](https://github.com/22i) 提供出色的模型和支持 -* [maikerumine](http://github.com/maikerumine) 揭開生物和生物群落的序幕 - -## 給程序員的信息 -你可以在「API.md」中找到有趣和有用的信息。 - -## 法律信息 -這是一款粉絲開發的遊戲,並非由Mojang AB開發或認可。 - -複製是一種愛的行為。請複制和分享! <3 -下面是詳細的法律條文,有需要的朋友可以參考。 - -### License of source code -``` -MineClone 2 (by kay27, EliasFleckenstein, Wuzzy, davedevils and countless others) -is an imitation of Minecraft. - -MineClone 2 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 (in the LICENSE.txt file) for more -details. - -In the mods you might find in the read-me or license -text files a different license. This counts as dual-licensing. -You can choose which license applies to you: Either the -license of MineClone 2 (GNU GPLv3) or the mod's license. - -MineClone 2 is a direct continuation of the discontinued MineClone -project by davedevils. - -Mod credits: -See `README.txt` or `README.md` in each mod directory for information about other authors. -For mods that do not have such a file, the license is the source code license -of MineClone 2 and the author is Wuzzy. -``` - -### License of media (textures and sounds) -``` -No non-free licenses are used anywhere. - -The textures, unless otherwise noted, are based on the Pixel Perfection resource pack for Minecraft 1.11, -authored by XSSheep. Most textures are verbatim copies, while some textures have been changed or redone -from scratch. -The glazed terracotta textures have been created by (MysticTempest)[https://github.com/MysticTempest]. -Source: -License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/) - -The main menu images are release under: [CC0](https://creativecommons.org/publicdomain/zero/1.0/) - -All other files, unless mentioned otherwise, fall under: -Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -See README.txt in each mod directory for detailed information about other authors. -``` diff --git a/description.txt b/description.txt index d45188894..739a206e5 100644 --- a/description.txt +++ b/description.txt @@ -1 +1 @@ -A survival sandbox game. Survive, gather, hunt, mine, build, explore, and do much more. Faithful clone of Minecraft 1.12. This is a work in progress! Expect bugs! +A clone of a historic sandbox game, Mincraft rd-132211. Mine, build and explore. This is a work in progress! Expect bugs! diff --git a/game.conf b/game.conf index db7357702..250442650 100644 --- a/game.conf +++ b/game.conf @@ -1,2 +1,5 @@ -name = MineClone 2 -description = A survival sandbox game. Survive, gather, hunt, build, explore, and do much more. +name = MineCloneJEpC +description = A clone of a historic sandbox game. Build, explore, and do little more. +disabled_settings = enable_damage,creative_mode,enable_server +allowed_mapgens = singlenode +disallowed_mapgen_settings = seed diff --git a/minetest.conf b/minetest.conf index 223587f4d..68426e8e3 100644 --- a/minetest.conf +++ b/minetest.conf @@ -4,44 +4,5 @@ # They will override these settings # Basic game rules -time_speed = 72 - -# Player physics -movement_acceleration_default = 2.4 -movement_acceleration_air = 1.2 -#movement_acceleration_fast = 10 - -movement_speed_walk = 4.317 -movement_speed_crouch = 1.295 -movement_speed_fast = 25.0 - -movement_speed_jump = 6.6 -movement_speed_climb = 2.35 -# TODO: Add descend speed (3.0) when available - -movement_liquid_fluidity = 1.13 -movement_liquid_fluidity_smooth = 0.5 -movement_liquid_sink = 23 - -movement_gravity = 10.4 - -# Mapgen stuff - -# altitude_chill and altitude_dry doesn't go well together with MCL2 biomes -# which already include "snowed" variants as you go higher. -# humid_rivers would cause the MushroomIsland biome to appear frequently around rivers. -mgvalleys_spflags = noaltitude_chill,noaltitude_dry,nohumid_rivers,vary_river_depth - -# MCL2-specific stuff -keepInventory = false - -# Performance settings -dedicated_server_step = 0.05 #tick rate -# abm_interval = 0.25 -# max_objects_per_block = 4096 -# max_packets_per_iteration = 10096 - -# Clientmodding to support official client -enable_client_modding = true -csm_restriction_flags = 0 -enable_mod_channels = true +item_entity_ttl = 1 +time_speed = 0 diff --git a/mods/CORE/_mcl_autogroup/README.txt b/mods/CORE/_mcl_autogroup/README.txt deleted file mode 100644 index 11383f311..000000000 --- a/mods/CORE/_mcl_autogroup/README.txt +++ /dev/null @@ -1,15 +0,0 @@ -This mod automatically adds groups to items based on item metadata. - -Specifically, this mod has 2 purposes: -1) Automatically adding the group “solid” for blocks considered “solid” in Minecraft. -2) Generating digging time group for all nodes based on node metadata (it's complicated) - -This mod also requires another mod called “mcl_autogroup” to function properly. -“mcl_autogroup” exposes the API used to register digging groups, while this mod -uses those digging groups to set the digging time groups for all the nodes and -tools. - -See init.lua for more infos. - -The leading underscore in the name “_mcl_autogroup” was added to force Minetest to load this mod as late as possible. -As of 0.4.16, Minetest loads mods in reverse alphabetical order. diff --git a/mods/CORE/_mcl_autogroup/init.lua b/mods/CORE/_mcl_autogroup/init.lua deleted file mode 100644 index e04fb2eac..000000000 --- a/mods/CORE/_mcl_autogroup/init.lua +++ /dev/null @@ -1,367 +0,0 @@ ---[[ -This mod implements a HACK to make 100% sure the digging times of all tools -match Minecraft's perfectly. The digging times system of Minetest is very -different, so this weird group trickery has to be used. In Minecraft, each -block has a hardness and the actual Minecraft digging time is determined by -this: - -1) The block's hardness -2) The tool being used (the tool speed and its efficiency level) -3) Whether the tool is considered as "eligible" for the block - (e.g. only diamond pick eligible for obsidian) - -See Minecraft Wiki for more -information. - -How the mod is used -=================== - -In MineClone 2, all diggable nodes have the hardness set in the custom field -"_mcl_hardness" (0 by default). These values are used together with digging -groups by this mod to create the correct digging times for nodes. Digging -groups are registered using the following code: - - mcl_autogroup.register_diggroup("shovely") - mcl_autogroup.register_diggroup("pickaxey", { - levels = { "wood", "gold", "stone", "iron", "diamond" } - }) - -The first line registers a simple digging group. The second line registers a -digging group with 5 different levels (in this case one for each material of a -pickaxes). - -Nodes indicate that they belong to a particular digging group by being member of -the digging group in their node definition. "mcl_core:dirt" for example has -shovely=1 in its groups. If the digging group has multiple levels the value of -the group indicates which digging level the node requires. -"mcl_core:stone_with_gold" for example has pickaxey=4 because it requires a -pickaxe of level 4 be mined. - -For tools to be able to dig nodes of digging groups they need to use the have -the custom field "_mcl_diggroups" function to get the groupcaps. The value of -this field is a table which defines which groups the tool can dig and how -efficiently. - - _mcl_diggroups = { - handy = { speed = 1, level = 1, uses = 0 }, - pickaxey = { speed = 1, level = 0, uses = 0 }, - } - -The "uses" field indicate how many uses (0 for infinite) a tool has when used on -the specified digging group. The "speed" field is a multiplier to the dig speed -on that digging group. - -The "level" field indicates which levels of the group the tool can harvest. A -level of 0 means that the tool cannot harvest blocks of that node. A level of 1 -or above means that the tool can harvest nodes with that level or below. See -"mcl_tools/init.lua" for examples on how "_mcl_diggroups" is used in practice. - -Information about the mod -========================= - -The mod is split up into two parts, mcl_autogroup and _mcl_autogroup. -mcl_autogroup contains the API functions used to register custom digging groups. -_mcl_autogroup contains most of the code. The leading underscore in the name -"_mcl_autogroup" is used to force Minetest to load that part of the mod as late -as possible. Minetest loads mods in reverse alphabetical order. - -This also means that it is very important that no mod adds _mcl_autogroup as a -dependency. ---]] - -assert(minetest.get_modpath("mcl_autogroup"), "This mod requires the mod mcl_autogroup to function") - --- Returns a table containing the unique "_mcl_hardness" for nodes belonging to --- each diggroup. -local function get_hardness_values_for_groups() - local maps = {} - local values = {} - for g, _ in pairs(mcl_autogroup.registered_diggroups) do - maps[g] = {} - values[g] = {} - end - - for _, ndef in pairs(minetest.registered_nodes) do - for g, _ in pairs(mcl_autogroup.registered_diggroups) do - if ndef.groups[g] then - maps[g][ndef._mcl_hardness or 0] = true - end - end - end - - for g, map in pairs(maps) do - for k, _ in pairs(map) do - table.insert(values[g], k) - end - end - - for g, _ in pairs(mcl_autogroup.registered_diggroups) do - table.sort(values[g]) - end - return values -end - --- Returns a table containing a table indexed by "_mcl_hardness_value" to get --- its index in the list of unique hardnesses for each diggroup. -local function get_hardness_lookup_for_groups(hardness_values) - local map = {} - for g, values in pairs(hardness_values) do - map[g] = {} - for k, v in pairs(values) do - map[g][v] = k - end - end - return map -end - --- Array of unique hardness values for each group which affects dig time. -local hardness_values = get_hardness_values_for_groups() - --- Map indexed by hardness values which return the index of that value in --- hardness_value. Used for quick lookup. -local hardness_lookup = get_hardness_lookup_for_groups(hardness_values) - ---[[local function compute_creativetimes(group) - local creativetimes = {} - - for index, hardness in pairs(hardness_values[group]) do - table.insert(creativetimes, 0) - end - - return creativetimes -end]] - --- Get the list of digging times for using a specific tool on a specific --- diggroup. --- --- Parameters: --- group - the group which it is digging --- can_harvest - if the tool can harvest the block --- speed - dig speed multiplier for tool (default 1) --- efficiency - efficiency level for the tool if applicable -local function get_digtimes(group, can_harvest, speed, efficiency) - local speed = speed or 1 - if efficiency then - speed = speed + efficiency * efficiency + 1 - end - - local digtimes = {} - - for index, hardness in pairs(hardness_values[group]) do - local digtime = (hardness or 0) / speed - if can_harvest then - digtime = digtime * 1.5 - else - digtime = digtime * 5 - end - - if digtime <= 0.05 then - digtime = 0 - else - digtime = math.ceil(digtime * 20) / 20 - end - table.insert(digtimes, digtime) - end - - return digtimes -end - --- Get one groupcap field for using a specific tool on a specific group. -local function get_groupcap(group, can_harvest, multiplier, efficiency, uses) - return { - times = get_digtimes(group, can_harvest, multiplier, efficiency), - uses = uses, - maxlevel = 0, - } -end - --- Add the groupcaps from a field in "_mcl_diggroups" to the groupcaps of a --- tool. -local function add_groupcaps(toolname, groupcaps, groupcaps_def, efficiency) - if not groupcaps_def then - return - end - - for g, capsdef in pairs(groupcaps_def) do - local mult = capsdef.speed or 1 - local uses = capsdef.uses - local def = mcl_autogroup.registered_diggroups[g] - local max_level = def.levels and #def.levels or 1 - - assert(capsdef.level, toolname .. ' is missing level for ' .. g) - local level = math.min(capsdef.level, max_level) - - if def.levels then - groupcaps[g .. "_dig_default"] = get_groupcap(g, false, mult, efficiency, uses) - if level > 0 then - groupcaps[g .. "_dig_" .. def.levels[level]] = get_groupcap(g, true, mult, efficiency, uses) - end - else - groupcaps[g .. "_dig"] = get_groupcap(g, level > 0, mult, efficiency, uses) - end - end -end - --- Checks if the given node would drop its useful drop if dug by a given tool. --- Returns true if it will yield its useful drop, false otherwise. -function mcl_autogroup.can_harvest(nodename, toolname) - local ndef = minetest.registered_nodes[nodename] - - if not ndef then - return false - end - - if minetest.get_item_group(nodename, "dig_immediate") >= 2 then - return true - end - - -- Check if it can be dug by tool - local tdef = minetest.registered_tools[toolname] - if tdef and tdef._mcl_diggroups then - for g, gdef in pairs(tdef._mcl_diggroups) do - if ndef.groups[g] then - if ndef.groups[g] <= gdef.level then - return true - end - end - end - end - - -- Check if it can be dug by hand - local tdef = minetest.registered_tools[""] - if tdef then - for g, gdef in pairs(tdef._mcl_diggroups) do - if ndef.groups[g] then - if ndef.groups[g] <= gdef.level then - return true - end - end - end - end - - return false -end - --- Get one groupcap field for using a specific tool on a specific group. ---[[local function get_groupcap(group, can_harvest, multiplier, efficiency, uses) - return { - times = get_digtimes(group, can_harvest, multiplier, efficiency), - uses = uses, - maxlevel = 0, - } -end]] - --- Returns the tool_capabilities from a tool definition or a default set of --- tool_capabilities -local function get_tool_capabilities(tdef) - if tdef.tool_capabilities then - return tdef.tool_capabilities - end - - -- If the damage group and punch interval from hand is not included, - -- then the user will not be able to attack with the tool. - local hand_toolcaps = minetest.registered_tools[""].tool_capabilities - return { - full_punch_interval = hand_toolcaps.full_punch_interval, - damage_groups = hand_toolcaps.damage_groups - } -end - --- Get the groupcaps for a tool. This function returns "groupcaps" table of --- digging which should be put in the "tool_capabilities" of the tool definition --- or in the metadata of an enchanted tool. --- --- Parameters: --- toolname - Name of the tool being enchanted (like "mcl_tools:diamond_pickaxe") --- efficiency - The efficiency level the tool is enchanted with (default 0) --- --- NOTE: --- This function can only be called after mod initialization. Otherwise a mod --- would have to add _mcl_autogroup as a dependency which would break the mod --- loading order. -function mcl_autogroup.get_groupcaps(toolname, efficiency) - local tdef = minetest.registered_tools[toolname] - local groupcaps = table.copy(get_tool_capabilities(tdef).groupcaps or {}) - add_groupcaps(toolname, groupcaps, tdef._mcl_diggroups, efficiency) - return groupcaps -end - --- Get the wear from using a tool on a digging group. --- --- Parameters --- toolname - Name of the tool used --- diggroup - The name of the diggroup the tool is used on --- --- NOTE: --- This function can only be called after mod initialization. Otherwise a mod --- would have to add _mcl_autogroup as a dependency which would break the mod --- loading order. -function mcl_autogroup.get_wear(toolname, diggroup) - local tdef = minetest.registered_tools[toolname] - local uses = tdef._mcl_diggroups[diggroup].uses - return math.ceil(65535 / uses) -end - -local function overwrite() - for nname, ndef in pairs(minetest.registered_nodes) do - local newgroups = table.copy(ndef.groups) - if (nname ~= "ignore" and ndef.diggable) then - -- Automatically assign the "solid" group for solid nodes - if (ndef.walkable == nil or ndef.walkable == true) - and (ndef.collision_box == nil or ndef.collision_box.type == "regular") - and (ndef.node_box == nil or ndef.node_box.type == "regular") - and (ndef.groups.not_solid == 0 or ndef.groups.not_solid == nil) then - newgroups.solid = 1 - end - -- Automatically assign the "opaque" group for opaque nodes - if (not (ndef.paramtype == "light" or ndef.sunlight_propagates)) and - (ndef.groups.not_opaque == 0 or ndef.groups.not_opaque == nil) then - newgroups.opaque = 1 - end - - --local creative_breakable = false - - -- Assign groups used for digging this node depending on - -- the registered digging groups - for g, gdef in pairs(mcl_autogroup.registered_diggroups) do - --creative_breakable = true - local index = hardness_lookup[g][ndef._mcl_hardness or 0] - if ndef.groups[g] then - if gdef.levels then - newgroups[g .. "_dig_default"] = index - - for i = ndef.groups[g], #gdef.levels do - newgroups[g .. "_dig_" .. gdef.levels[i]] = index - end - else - newgroups[g .. "_dig"] = index - end - end - end - - -- Automatically assign the node to the - -- creative_breakable group if it belongs to any digging - -- group. - newgroups["creative_breakable"] = 1 - - minetest.override_item(nname, { - groups = newgroups - }) - end - end - - for tname, tdef in pairs(minetest.registered_tools) do - -- Assign groupcaps for digging the registered digging groups - -- depending on the _mcl_diggroups in the tool definition - if tdef._mcl_diggroups then - local toolcaps = table.copy(get_tool_capabilities(tdef)) - toolcaps.groupcaps = mcl_autogroup.get_groupcaps(tname) - - minetest.override_item(tname, { - tool_capabilities = toolcaps - }) - end - end -end - -overwrite() diff --git a/mods/CORE/_mcl_autogroup/mod.conf b/mods/CORE/_mcl_autogroup/mod.conf deleted file mode 100644 index eea72c40f..000000000 --- a/mods/CORE/_mcl_autogroup/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = _mcl_autogroup -author = ryvnf -description = MineClone 2 core mod which automatically adds groups to all items. Very important for digging times. diff --git a/mods/CORE/biomeinfo/API.md b/mods/CORE/biomeinfo/API.md deleted file mode 100644 index 7713bf2a8..000000000 --- a/mods/CORE/biomeinfo/API.md +++ /dev/null @@ -1,42 +0,0 @@ -# Biome Info API -This document explains the API of this mod. - -## v6 mapgen functions -These are functions for the v6 mapgen only. - -Use these functions only in worlds in which the v6 mapgen is used. -If you use these in any other mapgen, bad things might happen. - -### `biomeinfo.get_v6_humidity(pos)` -Get the biome humidity at pos (for v6 mapgen). - -### `biomeinfo.get_v6_heat(pos)` -Get the biome heat/temperature at pos (for v6 mapgen). - -### `biomeinfo.get_v6_biome(pos)` -Get the v6 biome at pos. -Returns a string, which is the unique biome name. - -Note: This function currently ignores the `biomeblend` v6 mapgen flag, -it just pretends this setting is disabled. -This is normally not a problem, but at areas where biomes blend, -the result is not perfectly accurate and just an estimate. - -### `biomeinfo.get_active_v6_biomes()` -Returns a table containing the names of all v6 biomes that are actively -used in the current world, e.g. those that have been activated -by the use of the mapgen v6 flags (`mgv6_spflags`). - -### `biomeinfo.all_v6_biomes` -This is a table containing all v6 biomes (as strings), even those that -might not be used in the current world. - -### v6 biome names - -These are the biome names used in this mod: - -* Normal -* Desert -* Jungle -* Tundra -* Taiga diff --git a/mods/CORE/biomeinfo/README.md b/mods/CORE/biomeinfo/README.md deleted file mode 100644 index a99d1dbc7..000000000 --- a/mods/CORE/biomeinfo/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Biome Info API [`biomeinfo`] -This is an API mod for mod developers to add a couple of missing -biome-related functions. -Currently, this mod only adds v6-related functions. -Most importantly, you can get the heat, humidity and biome in the v6 mapgen. - -See `API.md` for the API documentation. - -Current version: 1.0.3 (this is a [SemVer](https://semver.org/)) - -License: MIT License diff --git a/mods/CORE/biomeinfo/init.lua b/mods/CORE/biomeinfo/init.lua deleted file mode 100644 index 950925f9d..000000000 --- a/mods/CORE/biomeinfo/init.lua +++ /dev/null @@ -1,211 +0,0 @@ -biomeinfo = {} - --- Copied from mapgen_v6.h -local MGV6_FREQ_HOT = 0.4 -local MGV6_FREQ_SNOW = -0.4 -local MGV6_FREQ_TAIGA = 0.5 -local MGV6_FREQ_JUNGLE = 0.5 - --- Biome types -local BT_NORMAL = "Normal" -local BT_TUNDRA = "Tundra" -local BT_TAIGA = "Taiga" -local BT_DESERT = "Desert" -local BT_JUNGLE = "Jungle" - --- Get mapgen settings - -local seed = tonumber(minetest.get_mapgen_setting("seed")) or 0 - -local mgv6_perlin_biome, mgv6_perlin_humidity, mgv6_np_biome - --- v6 default noiseparams are hardcoded here because Minetest doesn't give us those -local mgv6_np_biome_default = { - offset = 0, - scale = 1, - spread = { x = 500, y = 500, z = 500}, - seed = 9130, - octaves = 3, - persistence = 0.50, - lacunarity = 2.0, - flags = "eased", -} -local mgv6_np_humidity_default = { - offset = 0.5, - scale = 0.5, - spread = { x = 500, y = 500, z = 500}, - seed = 72384, - octaves = 3, - persistence = 0.50, - lacunarity = 2.0, - flags = "eased", -} - -local v6_flags_str = minetest.get_mapgen_setting("mgv6_spflags") -if v6_flags_str == nil then - v6_flags_str = "" -end -local v6_flags = string.split(v6_flags_str) -local v6_use_snow_biomes = true -local v6_use_jungles = true --- TODO: Implement biome blend. --- Currently we pretend biome blend is disabled. --- This just makes the calculations inaccurate near biome boundaries, --- but should be fine otherwise. -local v6_use_biome_blend = false -for f=1, #v6_flags do - local flag = v6_flags[f]:trim() - if flag == "nosnowbiomes" then - v6_use_snow_biomes = false - end - if flag == "snowbiomes" then - v6_use_snow_biomes = true - end - if flag == "nojungles" then - v6_use_jungles = false - end - if flag == "jungles" then - v6_use_jungles = true - end - if flag == "nobiomeblend" then - v6_use_biome_blend = false - end --- TODO --- if flag == "biomeblend" then --- v6_use_biome_blend = true --- end -end --- Force-enable jungles when snowbiomes flag is set -if v6_use_snow_biomes then - v6_use_jungles = true -end -local v6_freq_desert = tonumber(minetest.get_mapgen_setting("mgv6_freq_desert") or 0.45) - ---local NOISE_MAGIC_X = 1619 ---local NOISE_MAGIC_Y = 31337 ---local NOISE_MAGIC_Z = 52591 ---local NOISE_MAGIC_SEED = 1013 -local function noise2d(x, y, seed) - -- TODO: implement noise2d function for biome blend - return 0 ---[[ - local n = (NOISE_MAGIC_X * x + NOISE_MAGIC_Y * y - + NOISE_MAGIC_SEED * seed) & 0x7fffffff; - n = (n >> 13) ^ n; - n = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff; - return 1.0 - n / 0x40000000; -]] -end - -biomeinfo.all_v6_biomes = { - BT_NORMAL, - BT_DESERT, - BT_JUNGLE, - BT_TUNDRA, - BT_TAIGA -} - -local function init_perlins() - if not mgv6_perlin_biome then - mgv6_np_biome = minetest.get_mapgen_setting_noiseparams("mgv6_np_biome") - if not mgv6_np_biome then - mgv6_np_biome = mgv6_np_biome_default - minetest.log("action", "[biomeinfo] Using hardcoded mgv6_np_biome default") - end - mgv6_perlin_biome = minetest.get_perlin(mgv6_np_biome) - end - if not mgv6_perlin_humidity then - local np_humidity = minetest.get_mapgen_setting_noiseparams("mgv6_np_humidity") - if not np_humidity then - np_humidity = mgv6_np_humidity_default - minetest.log("action", "[biomeinfo] Using hardcoded mgv6_np_humidity default") - end - mgv6_perlin_humidity = minetest.get_perlin(np_humidity) - end -end - -function biomeinfo.get_active_v6_biomes() - local biomes = { BT_NORMAL, BT_DESERT } - if v6_use_jungles then - table.insert(biomes, BT_JUNGLE) - end - if v6_use_snow_biomes then - table.insert(biomes, BT_TUNDRA) - table.insert(biomes, BT_TAIGA) - end - return biomes -end - -function biomeinfo.get_v6_heat(pos) - init_perlins() - if not mgv6_perlin_biome then - return nil - end - local bpos = vector.floor(pos) - -- The temperature noise needs a special offset (see calculateNoise in mapgen_v6.cpp) - return mgv6_perlin_biome:get_2d({x=bpos.x + mgv6_np_biome.spread.x*0.6, y=bpos.z + mgv6_np_biome.spread.z*0.2}) -end - -function biomeinfo.get_v6_humidity(pos) - init_perlins() - if not mgv6_perlin_humidity then - return nil - end - local bpos = vector.floor(pos) - return mgv6_perlin_humidity:get_2d({x=bpos.x, y=bpos.z}) -end - --- Returns the v6 biome at pos. --- Returns a string representing the biome name. -function biomeinfo.get_v6_biome(pos) - init_perlins() - local bpos = vector.floor(pos) - -- Based on the algorithm MapgenV6::getBiome in mapgen_v6.cpp - - local pos2d = {x=bpos.x, y=bpos.z} - if not mgv6_perlin_biome or not mgv6_perlin_humidity then - return "???" - end - local d = biomeinfo.get_v6_heat(bpos) - local h = biomeinfo.get_v6_humidity(bpos) - - if (v6_use_snow_biomes) then - local blend - if v6_use_biome_blend then - blend = noise2d(pos2d.x, pos2d.y, seed) / 40 - else - blend = 0 - end - - if (d > MGV6_FREQ_HOT + blend) then - if (h > MGV6_FREQ_JUNGLE + blend) then - return BT_JUNGLE - end - return BT_DESERT - end - if (d < MGV6_FREQ_SNOW + blend) then - if (h > MGV6_FREQ_TAIGA + blend) then - return BT_TAIGA - end - return BT_TUNDRA - end - return BT_NORMAL - end - - if (d > v6_freq_desert) then - return BT_DESERT - end - - if ((v6_use_biome_blend) and (d > v6_freq_desert - 0.10) and - ((noise2d(pos2d.x, pos2d.y, seed) + 1.0) > (v6_freq_desert - d) * 20.0)) then - return BT_DESERT - end - - if ((v6_use_jungles) and (h > 0.75)) then - return BT_JUNGLE - end - - return BT_NORMAL -end - - diff --git a/mods/CORE/biomeinfo/mod.conf b/mods/CORE/biomeinfo/mod.conf deleted file mode 100644 index 8e9f3b1d0..000000000 --- a/mods/CORE/biomeinfo/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = biomeinfo -author = Wuzzy -description = Simple API to get data about biomes. diff --git a/mods/CORE/controls/API.md b/mods/CORE/controls/API.md deleted file mode 100644 index 8d9df6ca5..000000000 --- a/mods/CORE/controls/API.md +++ /dev/null @@ -1,23 +0,0 @@ -# controls - -## controls.players -Table containing player controls at runtime. -WARNING: Never use this table in writing - -## controls.register_on_press(func) -Register a function that will be executed with (player, keyname) every time a player press a key. - -## controls.registered_on_press -Table containing functions registered with controls.register_on_press(). - -## controls.register_on_release(func) -Register a function that will be executed with (player, keyname, clock_from_last_press) every time a player release a key. - -## controls.registered_on_release -Table containing functions registered with controls.register_on_release(). - -## controls.register_on_hold(func) -Register a function that will be executed with (player, keyname, clock_from_start_hold) every time a player hold a key. - -## controls.registered_on_hold -Table containing functions registered with controls.register_on_hold(). \ No newline at end of file diff --git a/mods/CORE/controls/LICENSE b/mods/CORE/controls/LICENSE deleted file mode 100644 index 8000a6faa..000000000 --- a/mods/CORE/controls/LICENSE +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. 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 not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the 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 -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library 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. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random - Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/mods/CORE/controls/README.md b/mods/CORE/controls/README.md deleted file mode 100644 index 9243d5529..000000000 --- a/mods/CORE/controls/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Controls framework by Arcelmi. -https://github.com/Arcelmi/minetest-controls diff --git a/mods/CORE/controls/init.lua b/mods/CORE/controls/init.lua deleted file mode 100644 index ef57281a4..000000000 --- a/mods/CORE/controls/init.lua +++ /dev/null @@ -1,77 +0,0 @@ -local get_connected_players = minetest.get_connected_players -local clock = os.clock - -local pairs = pairs - -controls = {} -controls.players = {} - -controls.registered_on_press = {} -function controls.register_on_press(func) - controls.registered_on_press[#controls.registered_on_press+1] = func -end - -controls.registered_on_release = {} -function controls.register_on_release(func) - controls.registered_on_release[#controls.registered_on_release+1] = func -end - -controls.registered_on_hold = {} -function controls.register_on_hold(func) - controls.registered_on_hold[#controls.registered_on_hold+1]=func -end - -local known_controls = { - jump = true, - right = true, - left = true, - LMB = true, - RMB = true, - sneak = true, - aux1 = true, - down = true, - up = true, -} - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - controls.players[name] = {} - for cname,_ in pairs(known_controls) do - controls.players[name][cname] = { false } - end -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - controls.players[name] = nil -end) - -minetest.register_globalstep(function(dtime) - for _, player in pairs(get_connected_players()) do - local player_name = player:get_player_name() - local player_controls = player:get_player_control() - if controls.players[player_name] then - for cname, cbool in pairs(player_controls) do - if known_controls[cname] == true then - --Press a key - if cbool == true and controls.players[player_name][cname][1] == false then - for _, func in pairs(controls.registered_on_press) do - func(player, cname) - end - controls.players[player_name][cname] = {true, clock()} - elseif cbool == true and controls.players[player_name][cname][1] == true then - for _, func in pairs(controls.registered_on_hold) do - func(player, cname, clock()-controls.players[player_name][cname][2]) - end - --Release a key - elseif cbool == false and controls.players[player_name][cname][1] == true then - for _, func in pairs(controls.registered_on_release) do - func(player, cname, clock()-controls.players[player_name][cname][2]) - end - controls.players[player_name][cname] = {false} - end - end - end - end - end -end) diff --git a/mods/CORE/controls/mod.conf b/mods/CORE/controls/mod.conf deleted file mode 100644 index 83ebb2e25..000000000 --- a/mods/CORE/controls/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = controls -author = Arcelmi -description = Controls framework by Arcelmi - diff --git a/mods/CORE/flowlib/API.md b/mods/CORE/flowlib/API.md deleted file mode 100644 index 20e85036b..000000000 --- a/mods/CORE/flowlib/API.md +++ /dev/null @@ -1,45 +0,0 @@ -# flowlib -Simple flow functions. - -## flowlib.is_touching(realpos, nodepos, radius) -Return true if a sphere of at collide with node at . -* realpos: position -* nodepos: position -* radius: number - -## flowlib.is_water(pos) -Return true if node at is water, false overwise. -* pos: position - -## flowlib.node_is_water(node) -Return true if is water, false overwise. -* node: node - -## flowlib.is_lava(pos) -Return true if node at is lava, false overwise. -* pos: position - -## flowlib.node_is_lava(node) -Return true if is lava, false overwise. -* node: node - -## flowlib.is_liquid(pos) -Return true if node at is liquid, false overwise. -* pos: position - -## flowlib.node_is_liquid(node) -Return true if is liquid, false overwise. -* node: node - -## flowlib.quick_flow(pos, node) -Return direction where the water is flowing (to be use to push mobs, items...). -* pos: position -* node: node - -## flowlib.move_centre(pos, realpos, node, radius) -Return the pos of the nearest not water block near from in a sphere of at . -WARNING: This function is never used in mcl2, use at your own risk. The informations described here may be wrong. -* pos: position -* realpos: position, position of the entity -* node: node -* radius: number \ No newline at end of file diff --git a/mods/CORE/flowlib/README.txt b/mods/CORE/flowlib/README.txt deleted file mode 100644 index 516f7bf60..000000000 --- a/mods/CORE/flowlib/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -Flowlib -================ -Simple flow functions for use in Minetest mods by Qwertymine3 - -License of source code: ------------------------ -WTFPL diff --git a/mods/CORE/flowlib/init.lua b/mods/CORE/flowlib/init.lua deleted file mode 100644 index ab710e476..000000000 --- a/mods/CORE/flowlib/init.lua +++ /dev/null @@ -1,153 +0,0 @@ -local math = math - -local get_node = minetest.get_node -local get_item_group = minetest.get_item_group - -local registered_nodes = minetest.registered_nodes - -flowlib = {} - ---sum of direction vectors must match an array index - ---(sum,root) ---(0,1), (1,1+0=1), (2,1+1=2), (3,1+2^2=5), (4,2^2+2^2=8) - -local inv_roots = { - [0] = 1, - [1] = 1, - [2] = 0.70710678118655, - [4] = 0.5, - [5] = 0.44721359549996, - [8] = 0.35355339059327, -} - -local function to_unit_vector(dir_vector) - local sum = dir_vector.x * dir_vector.x + dir_vector.z * dir_vector.z - return {x = dir_vector.x * inv_roots[sum], y = dir_vector.y, z = dir_vector.z * inv_roots[sum]} -end - -local function is_touching(realpos,nodepos,radius) - local boarder = 0.5 - radius - return math.abs(realpos - nodepos) > (boarder) -end - -flowlib.is_touching = is_touching - -local function is_water(pos) - return get_item_group(get_node(pos).name, "water") ~= 0 -end - -flowlib.is_water = is_water - -local function node_is_water(node) - return get_item_group(node.name, "water") ~= 0 -end - -flowlib.node_is_water = node_is_water - -local function is_lava(pos) - return get_item_group(get_node(pos).name, "lava") ~= 0 -end - -flowlib.is_lava = is_lava - -local function node_is_lava(node) - return get_item_group(node.name, "lava") ~= 0 -end - -flowlib.node_is_lava = node_is_lava - - -local function is_liquid(pos) - return get_item_group(get_node(pos).name, "liquid") ~= 0 -end - -flowlib.is_liquid = is_liquid - -local function node_is_liquid(node) - return minetest.get_item_group(node.name, "liquid") ~= 0 -end - -flowlib.node_is_liquid = node_is_liquid - ---This code is more efficient -local function quick_flow_logic(node, pos_testing, direction) - local name = node.name - if not registered_nodes[name] then - return 0 - end - if registered_nodes[name].liquidtype == "source" then - local node_testing = get_node(pos_testing) - if not registered_nodes[node_testing.name] then - return 0 - end - if registered_nodes[node_testing.name].liquidtype ~= "flowing" then - return 0 - else - return direction - end - elseif registered_nodes[name].liquidtype == "flowing" then - local node_testing = get_node(pos_testing) - local param2_testing = node_testing.param2 - if not registered_nodes[node_testing.name] then - return 0 - end - if registered_nodes[node_testing.name].liquidtype == "source" then - return -direction - elseif registered_nodes[node_testing.name].liquidtype == "flowing" then - if param2_testing < node.param2 then - if (node.param2 - param2_testing) > 6 then - return -direction - else - return direction - end - elseif param2_testing > node.param2 then - if (param2_testing - node.param2) > 6 then - return direction - else - return -direction - end - end - end - end - return 0 -end - -local function quick_flow(pos, node) - if not node_is_liquid(node) then - return {x = 0, y = 0, z = 0} - end - local x = quick_flow_logic(node,{x = pos.x-1, y = pos.y, z = pos.z},-1) + quick_flow_logic(node,{x = pos.x+1, y = pos.y, z = pos.z}, 1) - local z = quick_flow_logic(node,{x = pos.x, y = pos.y, z = pos.z-1},-1) + quick_flow_logic(node,{x = pos.x, y = pos.y, z = pos.z+1}, 1) - return to_unit_vector({x = x, y = 0, z = z}) -end - -flowlib.quick_flow = quick_flow - ---if not in water but touching, move centre to touching block ---x has higher precedence than z ---if pos changes with x, it affects z - -local function move_centre(pos, realpos, node, radius) - if is_touching(realpos.x, pos.x, radius) then - if is_liquid({x = pos.x-1, y = pos.y, z = pos.z}) then - node = get_node({x=pos.x-1, y = pos.y, z = pos.z}) - pos = {x = pos.x-1, y = pos.y, z = pos.z} - elseif is_liquid({x = pos.x+1, y = pos.y, z = pos.z}) then - node = get_node({x = pos.x+1, y = pos.y, z = pos.z}) - pos = {x = pos.x+1, y = pos.y, z = pos.z} - end - end - if is_touching(realpos.z, pos.z, radius) then - if is_liquid({x = pos.x, y = pos.y, z = pos.z - 1}) then - node = get_node({x = pos.x, y = pos.y, z = pos.z - 1}) - pos = {x = pos.x, y = pos.y, z = pos.z - 1} - elseif is_liquid({x = pos.x, y = pos.y, z = pos.z + 1}) then - node = get_node({x = pos.x, y = pos.y, z = pos.z + 1}) - pos = {x = pos.x, y = pos.y, z = pos.z + 1} - end - end - return pos, node -end - -flowlib.move_centre = move_centre diff --git a/mods/CORE/flowlib/mod.conf b/mods/CORE/flowlib/mod.conf deleted file mode 100644 index 7b3a325f3..000000000 --- a/mods/CORE/flowlib/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = flowlib -author = Qwertymine3 -description = Simple flow functions for use in Minetest mods by Qwertymine3 - diff --git a/mods/CORE/mcl_attached/init.lua b/mods/CORE/mcl_attached/init.lua deleted file mode 100644 index c4a7a3337..000000000 --- a/mods/CORE/mcl_attached/init.lua +++ /dev/null @@ -1,93 +0,0 @@ --- Overrides the builtin minetest.check_single_for_falling. --- We need to do this in order to handle nodes in mineclone specific groups --- "supported_node" and "attached_node_facedir". --- --- Nodes in group "supported_node" can be placed on any node that does not --- have the "airlike" drawtype. Carpets are an example of this type. - -local vector = vector - -local facedir_to_dir = minetest.facedir_to_dir -local get_item_group = minetest.get_item_group -local remove_node = minetest.remove_node -local get_node = minetest.get_node -local get_meta = minetest.get_meta -local registered_nodes = minetest.registered_nodes -local get_node_drops = minetest.get_node_drops -local add_item = minetest.add_item - --- drop_attached_node(p) --- --- This function is copied verbatim from minetest/builtin/game/falling.lua --- We need this to do the exact same dropping node handling in our override --- minetest.check_single_for_falling() function as in the builtin function. --- -local function drop_attached_node(p) - local n = get_node(p) - local drops = get_node_drops(n, "") - local def = registered_nodes[n.name] - if def and def.preserve_metadata then - local oldmeta = get_meta(p):to_table().fields - -- Copy pos and node because the callback can modify them. - local pos_copy = vector.new(p) - local node_copy = {name=n.name, param1=n.param1, param2=n.param2} - local drop_stacks = {} - for k, v in pairs(drops) do - drop_stacks[k] = ItemStack(v) - end - drops = drop_stacks - def.preserve_metadata(pos_copy, node_copy, oldmeta, drops) - end - if def and def.sounds and def.sounds.fall then - core.sound_play(def.sounds.fall, {pos = p}, true) - end - remove_node(p) - for _, item in pairs(drops) do - local pos = { - x = p.x + math.random()/2 - 0.25, - y = p.y + math.random()/2 - 0.25, - z = p.z + math.random()/2 - 0.25, - } - add_item(pos, item) - end -end - --- minetest.check_single_for_falling(pos) --- --- * causes an unsupported `group:falling_node` node to fall and causes an --- unattached `group:attached_node` or `group:attached_node_facedir` node --- or unsupported `group:supported_node` node to drop. --- * does not spread these updates to neighbours. --- --- Returns true if the node at has spawned a falling node or has been --- dropped as item(s). --- -local original_function = minetest.check_single_for_falling - -function minetest.check_single_for_falling(pos) - if original_function(pos) then - return true - end - - local node = get_node(pos) - if get_item_group(node.name, "attached_node_facedir") ~= 0 then - local dir = facedir_to_dir(node.param2) - if dir then - if get_item_group(get_node(vector.add(pos, dir)).name, "solid") == 0 then - drop_attached_node(pos) - return true - end - end - end - - if get_item_group(node.name, "supported_node") ~= 0 then - local def = registered_nodes[get_node(vector.offset(pos, 0, -1, 0)).name] - if def and def.drawtype == "airlike" then - drop_attached_node(pos) - return true - end - end - - return false -end - diff --git a/mods/CORE/mcl_attached/mod.conf b/mods/CORE/mcl_attached/mod.conf deleted file mode 100644 index 7ad1b4a4c..000000000 --- a/mods/CORE/mcl_attached/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_attached -author = Wuzzy -description = Adds additional ways for nodes to be attached. diff --git a/mods/CORE/mcl_autogroup/API.md b/mods/CORE/mcl_autogroup/API.md deleted file mode 100644 index 79b9770b5..000000000 --- a/mods/CORE/mcl_autogroup/API.md +++ /dev/null @@ -1,27 +0,0 @@ -# mcl_autogroup -This mod emulate digging times from mc. - -## mcl_autogroup.can_harvest(nodename, toolname) -Return true if can be dig with . -* nodename: string, valid nodename -* toolname: (optional) string, valid toolname - -## mcl_autogroup.get_groupcaps(toolname, efficiency) -This function is used to calculate diggroups for tools. -WARNING: This function can only be called after mod initialization. -* toolname: string, name of the tool being enchanted (like "mcl_tools:diamond_pickaxe") -* efficiency: (optional) integer, the efficiency level the tool is enchanted with (default 0) - -## mcl_autogroup.get_wear(toolname, diggroup) -Return the max wear of with -WARNING: This function can only be called after mod initialization. -* toolname: string, name of the tool used -* diggroup: string, the name of the diggroup the tool is used on - -## mcl_autogroup.register_diggroup(group, def) -* group: string, name of the group to register as a digging group -* def: (optional) table, table with information about the diggroup (defaults to {} if unspecified) - * level: (optional) string, if specified it is an array containing the names of the different digging levels the digging group supports - -## mcl_autogroup.registered_diggroups -List of registered diggroups, indexed by name. \ No newline at end of file diff --git a/mods/CORE/mcl_autogroup/init.lua b/mods/CORE/mcl_autogroup/init.lua deleted file mode 100644 index 16dd831c0..000000000 --- a/mods/CORE/mcl_autogroup/init.lua +++ /dev/null @@ -1,28 +0,0 @@ ---[[ -This is one part of a mod to replicate the digging times from Minecraft. This -part only exposes a function to register digging groups. The rest of the mod is -implemented and documented in the _mcl_autogroup. - -The mod is split up into two parts, mcl_autogroup and _mcl_autogroup. -mcl_autogroup contains the API functions used to register custom digging groups. -_mcl_autogroup contains most of the code. The leading underscore in the name -"_mcl_autogroup" is used to force Minetest to load that part of the mod as late -as possible. Minetest loads mods in reverse alphabetical order. ---]] -mcl_autogroup = {} -mcl_autogroup.registered_diggroups = {} - -assert(minetest.get_modpath("_mcl_autogroup"), "This mod requires the mod _mcl_autogroup to function") - --- Register a group as a digging group. --- --- Parameters: --- group - Name of the group to register as a digging group --- def - Table with information about the diggroup (defaults to {} if unspecified) --- --- Values in def: --- level - If specified it is an array containing the names of the different --- digging levels the digging group supports. -function mcl_autogroup.register_diggroup(group, def) - mcl_autogroup.registered_diggroups[group] = def or {} -end diff --git a/mods/CORE/mcl_autogroup/mod.conf b/mods/CORE/mcl_autogroup/mod.conf deleted file mode 100644 index 45818cd58..000000000 --- a/mods/CORE/mcl_autogroup/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_autogroup -author = ryvnf -description = MineClone 2 core mod which automatically adds groups to all items. Very important for digging times. diff --git a/mods/CORE/mcl_colors/API.md b/mods/CORE/mcl_colors/API.md deleted file mode 100644 index 71cad335b..000000000 --- a/mods/CORE/mcl_colors/API.md +++ /dev/null @@ -1,8 +0,0 @@ -# mcl_colors -Mod providing global table containing legacity minecraft colors to be used in mods. - -## mcl_colors.* -Colors by upper name, in hex value. - -## mcl_colors.background.* -Background colors by upper name, in hex value. diff --git a/mods/CORE/mcl_colors/init.lua b/mods/CORE/mcl_colors/init.lua deleted file mode 100644 index e88f91d9d..000000000 --- a/mods/CORE/mcl_colors/init.lua +++ /dev/null @@ -1,36 +0,0 @@ -mcl_colors = { - BLACK = "#000000", - DARK_BLUE = "#0000AA", - DARK_GREEN = "#00AA00", - DARK_AQUA = "#00AAAA", - DARK_RED = "#AA0000", - DARK_PURPLE = "#AA00AA", - GOLD = "#FFAA00", - GRAY = "#AAAAAA", - DARK_GRAY = "#555555", - BLUE = "#5555FF", - GREEN = "#55FF55", - AQUA = "#55FFFF", - RED = "#FF5555", - LIGHT_PURPLE = "#FF55FF", - YELLOW = "#FFFF55", - WHITE = "#FFFFFF", - background = { - BLACK = "#000000", - DARK_BLUE = "#00002A", - DARK_GREEN = "#002A00", - DARK_AQUA = "#002A2A", - DARK_RED = "#2A0000", - DARK_PURPLE = "#2A002A", - GOLD = "#2A2A00", - GRAY = "#2A2A2A", - DARK_GRAY = "#151515", - BLUE = "#15153F", - GREEN = "#153F15", - AQUA = "#153F3F", - RED = "#3F1515", - LIGHT_PURPLE = "#3F153F", - YELLOW = "#3F3F15", - WHITE = "#373501", - } -} diff --git a/mods/CORE/mcl_colors/mod.conf b/mods/CORE/mcl_colors/mod.conf deleted file mode 100644 index 549d94351..000000000 --- a/mods/CORE/mcl_colors/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_colors -author = Fleckenstein -description = The HTML sequences for the minecraft colors diff --git a/mods/CORE/mcl_damage/API.md b/mods/CORE/mcl_damage/API.md deleted file mode 100644 index 9ffdcb9f4..000000000 --- a/mods/CORE/mcl_damage/API.md +++ /dev/null @@ -1,15 +0,0 @@ -# mcl_damage - -This mod is intended to overall minetest's native damage system, to provide a better integration between features that deals with entities' health. - -WARNING: Not using it inside your mods may cause strange bugs (using the native damage system may cause conflicts with this system). - -## Callbacks - -To modify the amount of damage made by something: - -```lua ---obj: an ObjectRef -mcl_damage.register_modifier(function(obj, damage, reason) -end, 0) -``` \ No newline at end of file diff --git a/mods/CORE/mcl_damage/init.lua b/mods/CORE/mcl_damage/init.lua deleted file mode 100644 index 262b0cf55..000000000 --- a/mods/CORE/mcl_damage/init.lua +++ /dev/null @@ -1,169 +0,0 @@ -mcl_damage = { - modifiers = {}, - damage_callbacks = {}, - death_callbacks = {}, - types = { - in_fire = {is_fire = true}, - lightning_bolt = {is_lightning = true}, - on_fire = {is_fire = true, bypasses_armor = true}, - lava = {is_fire = true}, - hot_floor = {is_fire = true}, - in_wall = {bypasses_armor = true}, - drown = {bypasses_armor = true}, - starve = {bypasses_armor = true, bypasses_magic = true}, - cactus = {}, - fall = {bypasses_armor = true}, - fly_into_wall = {bypasses_armor = true}, -- unused - out_of_world = {bypasses_armor = true, bypasses_magic = true, bypasses_invulnerability = true, bypasses_totem = true}, - generic = {bypasses_armor = true}, - magic = {is_magic = true, bypasses_armor = true}, - dragon_breath = {is_magic = true, bypasses_armor = true}, -- this is only used for dragon fireball; dragon fireball does not actually deal impact damage tho, so this is unreachable - wither = {bypasses_armor = true}, -- unused - wither_skull = {is_magic = true, is_explosion = true}, -- this is non-MC but a workaround to get the proper death message - anvil = {}, - falling_node = {}, -- this is falling_block in MC - mob = {}, - player = {}, - arrow = {is_projectile = true}, - fireball = {is_projectile = true, is_fire = true}, - thorns = {is_magic = true}, - explosion = {is_explosion = true}, - cramming = {bypasses_armor = true}, -- unused - fireworks = {is_explosion = true}, -- unused - } -} - -function mcl_damage.register_modifier(func, priority) - table.insert(mcl_damage.modifiers, {func = func, priority = priority or 0}) -end - -function mcl_damage.register_on_damage(func) - table.insert(mcl_damage.damage_callbacks, func) -end - -function mcl_damage.register_on_death(func) - table.insert(mcl_damage.death_callbacks, func) -end - -function mcl_damage.run_modifiers(obj, damage, reason) - for _, modf in ipairs(mcl_damage.modifiers) do - damage = modf.func(obj, damage, reason) or damage - if damage == 0 then - return 0 - end - end - - return damage -end - -local function run_callbacks(funcs, ...) - for _, func in pairs(funcs) do - func(...) - end -end - -function mcl_damage.run_damage_callbacks(obj, damage, reason) - run_callbacks(mcl_damage.damage_callbacks, obj, damage, reason) -end - -function mcl_damage.run_death_callbacks(obj, reason) - run_callbacks(mcl_damage.death_callbacks, obj, reason) -end - -function mcl_damage.from_punch(mcl_reason, object) - mcl_reason.direct = object - local luaentity = mcl_reason.direct:get_luaentity() - if luaentity then - if luaentity._is_arrow then - mcl_reason.type = "arrow" - elseif luaentity._is_fireball then - mcl_reason.type = "fireball" - elseif luaentity.is_mob then - mcl_reason.type = "mob" - end - mcl_reason.source = mcl_reason.source or luaentity._source_object - else - mcl_reason.type = "player" - end -end - -function mcl_damage.finish_reason(mcl_reason) - mcl_reason.source = mcl_reason.source or mcl_reason.direct - mcl_reason.flags = mcl_damage.types[mcl_reason.type] -end - -function mcl_damage.from_mt(mt_reason) - if mt_reason._mcl_chached_reason then - return mt_reason._mcl_chached_reason - end - - local mcl_reason - - if mt_reason._mcl_reason then - mcl_reason = mt_reason._mcl_reason - else - mcl_reason = {type = "generic"} - - if mt_reason._mcl_type then - mcl_reason.type = mt_reason._mcl_type - elseif mt_reason.type == "fall" then - mcl_reason.type = "fall" - elseif mt_reason.type == "drown" then - mcl_reason.type = "drown" - elseif mt_reason.type == "punch" then - mcl_damage.from_punch(mcl_reason, mt_reason.object) - elseif mt_reason.type == "node_damage" and mt_reason.node then - if minetest.get_item_group(mt_reason.node, "fire") > 0 then - mcl_reason.type = "in_fire" - end - if minetest.get_item_group(mt_reason.node, "lava") > 0 then - mcl_reason.type = "lava" - end - end - - for key, value in pairs(mt_reason) do - if key:find("_mcl_") == 1 then - mcl_reason[key:sub(6, #key)] = value - end - end - end - - mcl_damage.finish_reason(mcl_reason) - mt_reason._mcl_cached_reason = mcl_reason - - return mcl_reason -end - -function mcl_damage.register_type(name, def) - mcl_damage.types[name] = def -end - -minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) - if hp_change < 0 then - if player:get_hp() <= 0 then - return 0 - end - hp_change = -mcl_damage.run_modifiers(player, -hp_change, mcl_damage.from_mt(mt_reason)) - end - return hp_change -end, true) - -minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) - if player:get_hp() > 0 then - mt_reason.approved = true - if hp_change < 0 then - mcl_damage.run_damage_callbacks(player, -hp_change, mcl_damage.from_mt(mt_reason)) - end - end -end, false) - -minetest.register_on_dieplayer(function(player, mt_reason) - if mt_reason.approved then - mcl_damage.run_death_callbacks(player, mcl_damage.from_mt(mt_reason)) - end -end) - -minetest.register_on_mods_loaded(function() - table.sort(mcl_damage.modifiers, function(a, b) return a.priority < b.priority end) -end) - diff --git a/mods/CORE/mcl_damage/mod.conf b/mods/CORE/mcl_damage/mod.conf deleted file mode 100644 index c7d96395e..000000000 --- a/mods/CORE/mcl_damage/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_damage -author = Fleckenstein -description = Minecraft-like damage reason system diff --git a/mods/CORE/mcl_explosions/API.md b/mods/CORE/mcl_explosions/API.md deleted file mode 100644 index cb0e9252d..000000000 --- a/mods/CORE/mcl_explosions/API.md +++ /dev/null @@ -1,15 +0,0 @@ -# mcl_explosions -This mod provide helper functions to create explosions. - -## mcl_explosions.explode(pos, strength, info, puncher) -* pos: position, initial position of the explosion -* strenght: number, radius of the explosion -* info: table, explosion informations: - * drop_chance: number, if specified becomes the drop chance of all nodes in the explosion (default: 1.0 / strength) - * max_blast_resistance: int, if specified the explosion will treat all non-indestructible nodes as having a blast resistance of no more than this value - * sound: bool, if true, the explosion will play a sound (default: true) - * particles: bool, if true, the explosion will create particles (default: true) - * fire: bool, if true, 1/3 nodes become fire (default: false) - * griefing: bool, if true, the explosion will destroy nodes (default: true) - * grief_protected: bool, if true, the explosion will also destroy nodes which have been protected (default: false) -* puncher: (optional) entity, will be used as source for damage done by the explosion \ No newline at end of file diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua deleted file mode 100644 index 0132d1669..000000000 --- a/mods/CORE/mcl_explosions/init.lua +++ /dev/null @@ -1,472 +0,0 @@ ---[[ -Explosion API mod for Minetest (adapted to MineClone 2) - -This mod is based on the Minetest explosion API mod, but has been changed -to have the same explosion mechanics as Minecraft and work with MineClone. -The computation-intensive parts of the mod has been optimized to allow for -larger explosions and faster world updating. - -This mod was created by Elias Astrom and is released -under the LGPLv2.1 license. ---]] - -mcl_explosions = {} - -local mod_fire = minetest.get_modpath("mcl_fire") ---local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire") - -local math = math -local vector = vector -local table = table - -local hash_node_position = minetest.hash_node_position -local get_objects_inside_radius = minetest.get_objects_inside_radius -local get_position_from_hash = minetest.get_position_from_hash -local get_node_drops = minetest.get_node_drops -local get_name_from_content_id = minetest.get_name_from_content_id -local get_voxel_manip = minetest.get_voxel_manip -local bulk_set_node = minetest.bulk_set_node -local check_for_falling = minetest.check_for_falling -local add_item = minetest.add_item -local pos_to_string = minetest.pos_to_string - --- Saved sphere explosion shapes for various radiuses -local sphere_shapes = {} - --- Saved node definitions in table using cid-keys for faster look-up. -local node_blastres = {} -local node_on_blast = {} -local node_walkable = {} - --- The step length for the rays (Minecraft uses 0.3) -local STEP_LENGTH = 0.3 - --- How many rays to compute entity exposure to explosion -local N_EXPOSURE_RAYS = 16 - --- Nodes having a blast resistance of this value or higher are treated as --- indestructible -local INDESTRUCT_BLASTRES = 1000000 - -minetest.register_on_mods_loaded(function() - -- Store blast resistance values by content ids to improve performance. - for name, def in pairs(minetest.registered_nodes) do - local id = minetest.get_content_id(name) - node_blastres[id] = def._mcl_blast_resistance or 0 - node_on_blast[id] = def.on_blast - node_walkable[id] = def.walkable - end -end) - --- Compute the rays which make up a sphere with radius. Returns a list of rays --- which can be used to trace explosions. This function is not efficient --- (especially for larger radiuses), so the generated rays for various radiuses --- should be cached and reused. --- --- Should be possible to improve by using a midpoint circle algorithm multiple --- times to create the sphere, currently uses more of a brute-force approach. -local function compute_sphere_rays(radius) - local rays = {} - local sphere = {} - - local function add_ray(pos) - sphere[hash_node_position(pos)] = pos - end - - for y = -radius, radius do - for z = -radius, radius do - for x = -radius, 0 do - local d = x * x + y * y + z * z - if d <= radius * radius then - add_ray(vector.new(x, y, z)) - add_ray(vector.new(-x, y, z)) - break - end - end - end - end - - for x = -radius, radius do - for z = -radius, radius do - for y = -radius, 0 do - local d = x * x + y * y + z * z - if d <= radius * radius then - add_ray(vector.new(x, y, z)) - add_ray(vector.new(x, -y, z)) - break - end - end - end - end - - for x = -radius, radius do - for y = -radius, radius do - for z = -radius, 0 do - local d = x * x + y * y + z * z - if d <= radius * radius then - add_ray(vector.new(x, y, z)) - add_ray(vector.new(x, y, -z)) - break - end - end - end - end - - for _, pos in pairs(sphere) do - rays[#rays + 1] = vector.normalize(pos) - end - - return rays -end - --- Add particles from explosion --- --- Parameters: --- pos - The position of the explosion --- radius - The radius of the explosion -local function add_particles(pos, radius) - minetest.add_particlespawner({ - amount = 64, - time = 0.125, - minpos = pos, - maxpos = pos, - minvel = {x = -radius, y = -radius, z = -radius}, - maxvel = {x = radius, y = radius, z = radius}, - minacc = vector.new(), - maxacc = vector.new(), - minexptime = 0.5, - maxexptime = 1.0, - minsize = radius * 0.5, - maxsize = radius * 1.0, - texture = "mcl_particles_smoke.png", - }) -end - --- Traces the rays of an explosion, and updates the environment. --- --- Parameters: --- pos - Where the rays in the explosion should start from --- strength - The strength of each ray --- raydirs - The directions for each ray --- radius - The maximum distance each ray will go --- info - Table containing information about explosion --- direct - direct source object of the damage (optional) --- source - indirect source object of the damage (optional) --- --- Values in info: --- drop_chance - The chance that destroyed nodes will drop their items --- fire - If true, 1/3 nodes become fire --- griefing - If true, the explosion will destroy nodes (default: true) --- max_blast_resistance - The explosion will treat all non-indestructible nodes --- as having a blast resistance of no more than this --- value --- grief_protected - If true, the explosion will also destroy nodes which have --- been protected --- --- Note that this function has been optimized, it contains code which has been --- inlined to avoid function calls and unnecessary table creation. This was --- measured to give a significant performance increase. -local function trace_explode(pos, strength, raydirs, radius, info, direct, source) - local vm = get_voxel_manip() - - local emin, emax = vm:read_from_map(vector.subtract(pos, radius), - vector.add(pos, radius)) - local emin_x = emin.x - local emin_y = emin.y - local emin_z = emin.z - - local ystride = (emax.x - emin_x + 1) - local zstride = ystride * (emax.y - emin_y + 1) - - --[[local area = VoxelArea:new { - MinEdge = emin, - MaxEdge = emax - }]] - local data = vm:get_data() - local destroy = {} - - local drop_chance = info.drop_chance - local fire = info.fire - local max_blast_resistance = info.max_blast_resistance - local grief_protected = info.grief_protected - - -- Trace rays for environment destruction - if info.griefing then - for i = 1, #raydirs do - local rpos_x = pos.x - local rpos_y = pos.y - local rpos_z = pos.z - local rdir_x = raydirs[i].x - local rdir_y = raydirs[i].y - local rdir_z = raydirs[i].z - local rstr = (0.7 + math.random() * 0.6) * strength - - for r = 0, math.ceil(radius * (1.0 / STEP_LENGTH)) do - local npos_x = math.floor(rpos_x + 0.5) - local npos_y = math.floor(rpos_y + 0.5) - local npos_z = math.floor(rpos_z + 0.5) - local npos = { x = npos_x, y = npos_y, z = npos_z } - local idx = (npos_z - emin_z) * zstride + (npos_y - emin_y) * ystride + - npos_x - emin_x + 1 - - local cid = data[idx] - local br = node_blastres[cid] or INDESTRUCT_BLASTRES - if br < INDESTRUCT_BLASTRES and br > max_blast_resistance then - br = max_blast_resistance - end - - local hash = hash_node_position(npos) - - rpos_x = rpos_x + STEP_LENGTH * rdir_x - rpos_y = rpos_y + STEP_LENGTH * rdir_y - rpos_z = rpos_z + STEP_LENGTH * rdir_z - - rstr = rstr - 0.75 * STEP_LENGTH - (br + 0.3) * STEP_LENGTH - - if rstr <= 0 then - break - end - - if cid ~= minetest.CONTENT_AIR then - if not minetest.is_protected(npos, "") or grief_protected then - destroy[hash] = idx - end - end - end - end - end - - -- Entities in radius of explosion - local punch_radius = 2 * strength - local objs = get_objects_inside_radius(pos, punch_radius) - - -- Trace rays for entity damage - for _, obj in pairs(objs) do - local ent = obj:get_luaentity() - - -- Ignore items to lower lag - if (obj:is_player() or (ent and ent.name ~= "__builtin.item")) and obj:get_hp() > 0 then - local opos = obj:get_pos() - local collisionbox = nil - - if obj:is_player() then - collisionbox = { -0.3, 0.0, -0.3, 0.3, 1.77, 0.3 } - elseif ent.name then - local def = minetest.registered_entities[ent.name] - collisionbox = def.collisionbox - end - - if collisionbox then - -- Create rays from random points in the collision box - local x1 = collisionbox[1] - local y1 = collisionbox[2] - local z1 = collisionbox[3] - local x2 = collisionbox[4] - local y2 = collisionbox[5] - local z2 = collisionbox[6] - local x_len = math.abs(x2 - x1) - local y_len = math.abs(y2 - y1) - local z_len = math.abs(z2 - z1) - - -- Move object position to the center of its bounding box - opos.x = opos.x + 0.5 * (x1 + x2) - opos.y = opos.y + 0.5 * (y1 + y2) - opos.z = opos.z + 0.5 * (z1 + z2) - - -- Count number of rays from collision box which are unobstructed - local count = N_EXPOSURE_RAYS - - for i = 1, N_EXPOSURE_RAYS do - local rpos_x = opos.x + math.random() * x_len - x_len / 2 - local rpos_y = opos.y + math.random() * y_len - y_len / 2 - local rpos_z = opos.z + math.random() * z_len - z_len / 2 - local rdir_x = pos.x - rpos_x - local rdir_y = pos.y - rpos_y - local rdir_z = pos.z - rpos_z - local rdir_len = math.hypot(rdir_x, math.hypot(rdir_y, rdir_z)) - rdir_x = rdir_x / rdir_len - rdir_y = rdir_y / rdir_len - rdir_z = rdir_z / rdir_len - - for i=0, rdir_len / STEP_LENGTH do - rpos_x = rpos_x + rdir_x * STEP_LENGTH - rpos_y = rpos_y + rdir_y * STEP_LENGTH - rpos_z = rpos_z + rdir_z * STEP_LENGTH - local npos_x = math.floor(rpos_x + 0.5) - local npos_y = math.floor(rpos_y + 0.5) - local npos_z = math.floor(rpos_z + 0.5) - local idx = (npos_z - emin_z) * zstride + (npos_y - emin_y) * ystride + - npos_x - emin_x + 1 - - - local cid = data[idx] - local walkable = node_walkable[cid] - - if walkable then - count = count - 1 - break - end - end - end - - -- Punch entity with damage depending on explosion exposure and - -- distance to explosion - local exposure = count / N_EXPOSURE_RAYS - local punch_vec = vector.subtract(opos, pos) - local punch_dir = vector.normalize(punch_vec) - local impact = (1 - vector.length(punch_vec) / punch_radius) * exposure - if impact < 0 then - impact = 0 - end - local damage = math.floor((impact * impact + impact) * 7 * strength + 1) - - local sleep_formspec_doesnt_close_mt53 = false - if obj:is_player() then - local name = obj:get_player_name() - if mcl_beds then - local meta = obj:get_meta() - if meta:get_string("mcl_beds:sleeping") == "true" then - minetest.close_formspec(name, "") -- ABSOLUTELY NECESSARY FOR MT5.3 -- TODO: REMOVE THIS IN THE FUTURE - sleep_formspec_doesnt_close_mt53 = true - end - end - end - - if sleep_formspec_doesnt_close_mt53 then - minetest.after(0.3, function() -- 0.2 is minimum delay for closing old formspec and open died formspec -- TODO: REMOVE THIS IN THE FUTURE - if not obj:is_player() then - return - end - - mcl_util.deal_damage(obj, damage, {type = "explosion", direct = direct, source = source}) - - obj:add_velocity(vector.multiply(punch_dir, impact * 20)) - end) - else - mcl_util.deal_damage(obj, damage, {type = "explosion", direct = direct, source = source}) - - if obj:is_player() or ent.tnt_knockback then - obj:add_velocity(vector.multiply(punch_dir, impact * 20)) - end - end - end - end - end - - local airs, fires = {}, {} - - -- Remove destroyed blocks and drop items - for hash, idx in pairs(destroy) do - local do_drop = math.random() <= drop_chance - local on_blast = node_on_blast[data[idx]] - local remove = true - - if do_drop or on_blast then - local npos = get_position_from_hash(hash) - if on_blast then - on_blast(npos, 1.0, do_drop) - remove = false - else - local name = get_name_from_content_id(data[idx]) - local drop = get_node_drops(name, "") - - for _, item in ipairs(drop) do - if type(item) ~= "string" then - item = item:get_name() .. item:get_count() - end - add_item(npos, item) - end - end - end - if remove then - if mod_fire and fire and math.random(1, 3) == 1 then - table.insert(fires, get_position_from_hash(hash)) - else - table.insert(airs, get_position_from_hash(hash)) - end - end - end - -- We use bulk_set_node instead of LVM because we want to have on_destruct and - -- on_construct being called - if #airs > 0 then - bulk_set_node(airs, {name="air"}) - end - if #fires > 0 then - bulk_set_node(fires, {name="mcl_fire:fire"}) - end - -- Update falling nodes - for a=1, #airs do - local p = airs[a] - check_for_falling({x=p.x, y=p.y+1, z=p.z}) - end - for f=1, #fires do - local p = fires[f] - check_for_falling({x=p.x, y=p.y+1, z=p.z}) - end - - -- Log explosion - minetest.log("action", "Explosion at "..pos_to_string(pos).." with strength "..strength.." and radius "..radius) -end - --- Create an explosion with strength at pos. --- --- Parameters: --- pos - The position where the explosion originates from --- strength - The blast strength of the explosion (a TNT explosion uses 4) --- info - Table containing information about explosion --- direct - direct source object of the damage (optional) --- source - indirect source object of the damage (optional) --- --- Values in info: --- drop_chance - If specified becomes the drop chance of all nodes in the --- explosion (default: 1.0 / strength) --- max_blast_resistance - If specified the explosion will treat all --- non-indestructible nodes as having a blast resistance --- of no more than this value --- sound - If true, the explosion will play a sound (default: true) --- particles - If true, the explosion will create particles (default: true) --- fire - If true, 1/3 nodes become fire (default: false) --- griefing - If true, the explosion will destroy nodes (default: true) --- grief_protected - If true, the explosion will also destroy nodes which have --- been protected (default: false) -function mcl_explosions.explode(pos, strength, info, direct, source) - if info == nil then - info = {} - end - - -- The maximum blast radius (in the air) - local radius = math.ceil(1.3 * strength / (0.3 * 0.75) * 0.3) - - if not sphere_shapes[radius] then - sphere_shapes[radius] = compute_sphere_rays(radius) - end - local shape = sphere_shapes[radius] - - -- Default values - if info.drop_chance == nil then info.drop_chance = 1 / strength end - if info.particles == nil then info.particles = true end - if info.sound == nil then info.sound = true end - if info.fire == nil then info.fire = false end - if info.griefing == nil then info.griefing = true end - if info.grief_protected == nil then info.grief_protected = false end - if info.max_blast_resistance == nil then - info.max_blast_resistance = INDESTRUCT_BLASTRES - end - - -- Dont do drops in creative mode - if minetest.is_creative_enabled("") then - info.drop_chance = 0 - end - - trace_explode(pos, strength, shape, radius, info, direct, source) - - if info.particles then - add_particles(pos, radius) - end - if info.sound then - minetest.sound_play("tnt_explode", { - pos = pos, gain = 1.0, - max_hear_distance = strength * 16 - }, true) - end -end diff --git a/mods/CORE/mcl_explosions/locale/mcl_explosions.pl.tr b/mods/CORE/mcl_explosions/locale/mcl_explosions.pl.tr deleted file mode 100644 index f7811d733..000000000 --- a/mods/CORE/mcl_explosions/locale/mcl_explosions.pl.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_explosions -@1 was caught in an explosion.=@1 została wysadzona. diff --git a/mods/CORE/mcl_explosions/locale/mcl_explosions.zh_TW.tr b/mods/CORE/mcl_explosions/locale/mcl_explosions.zh_TW.tr deleted file mode 100644 index 9cac9b412..000000000 --- a/mods/CORE/mcl_explosions/locale/mcl_explosions.zh_TW.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_explosions -@1 was caught in an explosion.=@1 被炸飛了 diff --git a/mods/CORE/mcl_explosions/mod.conf b/mods/CORE/mcl_explosions/mod.conf deleted file mode 100644 index 5c203e621..000000000 --- a/mods/CORE/mcl_explosions/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_explosions -author = ryvnf -description = A common API to create explosions. -depends = mcl_particles -optional_depends = mcl_fire diff --git a/mods/CORE/mcl_init/init.lua b/mods/CORE/mcl_init/init.lua deleted file mode 100644 index fec9c7ba9..000000000 --- a/mods/CORE/mcl_init/init.lua +++ /dev/null @@ -1,263 +0,0 @@ --- Some global variables (don't overwrite them!) -mcl_vars = {} - -mcl_vars.redstone_tick = 0.1 - ---- GUI / inventory menu settings -mcl_vars.gui_slots = "listcolors[#9990;#FFF7;#FFF0;#000;#FFF]" --- nonbg is added as formspec prepend in mcl_formspec_prepend -mcl_vars.gui_nonbg = mcl_vars.gui_slots .. - "style_type[image_button;border=false;bgimg=mcl_inventory_button9.png;bgimg_pressed=mcl_inventory_button9_pressed.png;bgimg_middle=2,2]".. - "style_type[button;border=false;bgimg=mcl_inventory_button9.png;bgimg_pressed=mcl_inventory_button9_pressed.png;bgimg_middle=2,2]".. - "style_type[field;textcolor=#323232]".. - "style_type[label;textcolor=#323232]".. - "style_type[textarea;textcolor=#323232]".. - "style_type[checkbox;textcolor=#323232]" - --- Background stuff must be manually added by mods (no formspec prepend) -mcl_vars.gui_bg_color = "bgcolor[#00000000]" -mcl_vars.gui_bg_img = "background9[1,1;1,1;mcl_base_textures_background9.png;true;7]" - --- Legacy -mcl_vars.inventory_header = "" - --- Tool wield size -mcl_vars.tool_wield_scale = { x = 1.8, y = 1.8, z = 1 } - --- Mapgen variables -local mg_name = minetest.get_mapgen_setting("mg_name") -local minecraft_height_limit = 256 -local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true" -local singlenode = mg_name == "singlenode" - --- Calculate mapgen_edge_min/mapgen_edge_max -mcl_vars.chunksize = math.max(1, tonumber(minetest.get_mapgen_setting("chunksize")) or 5) -mcl_vars.MAP_BLOCKSIZE = math.max(1, minetest.MAP_BLOCKSIZE or 16) -mcl_vars.mapgen_limit = math.max(1, tonumber(minetest.get_mapgen_setting("mapgen_limit")) or 31000) -mcl_vars.MAX_MAP_GENERATION_LIMIT = math.max(1, minetest.MAX_MAP_GENERATION_LIMIT or 31000) -local central_chunk_offset = -math.floor(mcl_vars.chunksize / 2) -mcl_vars.central_chunk_offset_in_nodes = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE -mcl_vars.chunk_size_in_nodes = mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE -local central_chunk_min_pos = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE -local central_chunk_max_pos = central_chunk_min_pos + mcl_vars.chunk_size_in_nodes - 1 -local ccfmin = central_chunk_min_pos - mcl_vars.MAP_BLOCKSIZE -- Fullminp/fullmaxp of central chunk, in nodes -local ccfmax = central_chunk_max_pos + mcl_vars.MAP_BLOCKSIZE -local mapgen_limit_b = math.floor(math.min(mcl_vars.mapgen_limit, mcl_vars.MAX_MAP_GENERATION_LIMIT) / mcl_vars.MAP_BLOCKSIZE) -local mapgen_limit_min = -mapgen_limit_b * mcl_vars.MAP_BLOCKSIZE -local mapgen_limit_max = (mapgen_limit_b + 1) * mcl_vars.MAP_BLOCKSIZE - 1 -local numcmin = math.max(math.floor((ccfmin - mapgen_limit_min) / mcl_vars.chunk_size_in_nodes), 0) -- Number of complete chunks from central chunk -local numcmax = math.max(math.floor((mapgen_limit_max - ccfmax) / mcl_vars.chunk_size_in_nodes), 0) -- fullminp/fullmaxp to effective mapgen limits. -mcl_vars.mapgen_edge_min = central_chunk_min_pos - numcmin * mcl_vars.chunk_size_in_nodes -mcl_vars.mapgen_edge_max = central_chunk_max_pos + numcmax * mcl_vars.chunk_size_in_nodes - -local function coordinate_to_block(x) - return math.floor(x / mcl_vars.MAP_BLOCKSIZE) -end - -local function coordinate_to_chunk(x) - return math.floor((coordinate_to_block(x) - central_chunk_offset) / mcl_vars.chunksize) -end - -function mcl_vars.pos_to_block(pos) - return { - x = coordinate_to_block(pos.x), - y = coordinate_to_block(pos.y), - z = coordinate_to_block(pos.z) - } -end - -function mcl_vars.pos_to_chunk(pos) - return { - x = coordinate_to_chunk(pos.x), - y = coordinate_to_chunk(pos.y), - z = coordinate_to_chunk(pos.z) - } -end - -local k_positive = math.ceil(mcl_vars.MAX_MAP_GENERATION_LIMIT / mcl_vars.chunk_size_in_nodes) -local k_positive_z = k_positive * 2 -local k_positive_y = k_positive_z * k_positive_z - -function mcl_vars.get_chunk_number(pos) -- unsigned int - local c = mcl_vars.pos_to_chunk(pos) - return - (c.y + k_positive) * k_positive_y + - (c.z + k_positive) * k_positive_z + - c.x + k_positive -end - -if not superflat and not singlenode then - -- Normal mode - --[[ Realm stacking (h is for height) - - Overworld (h>=256) - - Void (h>=1000) - - Realm Barrier (h=11), to allow escaping the End - - End (h>=256) - - Void (h>=1000) - - Nether (h=128) - - Void (h>=1000) - ]] - - -- Overworld - mcl_vars.mg_overworld_min = -62 - mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit - mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min - mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min + 4 - mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min + 10 - mcl_vars.mg_lava = true - mcl_vars.mg_bedrock_is_rough = true - -elseif singlenode then - mcl_vars.mg_overworld_min = -66 - mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit - mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min - mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min - mcl_vars.mg_lava = false - mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min - mcl_vars.mg_bedrock_is_rough = false -else - -- Classic superflat - local ground = minetest.get_mapgen_setting("mgflat_ground_level") - ground = tonumber(ground) - if not ground then - ground = 8 - end - mcl_vars.mg_overworld_min = ground - 3 - mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit - mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min - mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min - mcl_vars.mg_lava = false - mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min - mcl_vars.mg_bedrock_is_rough = false -end - -mcl_vars.mg_overworld_max = mcl_vars.mapgen_edge_max - --- The Nether (around Y = -29000) -mcl_vars.mg_nether_min = -29067 -- Carefully chosen to be at a mapchunk border -mcl_vars.mg_nether_max = mcl_vars.mg_nether_min + 128 -mcl_vars.mg_bedrock_nether_bottom_min = mcl_vars.mg_nether_min -mcl_vars.mg_bedrock_nether_top_max = mcl_vars.mg_nether_max -if not superflat then - mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min + 4 - mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max - 4 - mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 31 -else - -- Thin bedrock in classic superflat mapgen - mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min - mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max - mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 2 -end -if mg_name == "flat" then - if superflat then - mcl_vars.mg_flat_nether_floor = mcl_vars.mg_bedrock_nether_bottom_max + 4 - mcl_vars.mg_flat_nether_ceiling = mcl_vars.mg_bedrock_nether_bottom_max + 52 - else - mcl_vars.mg_flat_nether_floor = mcl_vars.mg_lava_nether_max + 4 - mcl_vars.mg_flat_nether_ceiling = mcl_vars.mg_lava_nether_max + 52 - end -end - --- The End (surface at ca. Y = -27000) -mcl_vars.mg_end_min = -27073 -- Carefully chosen to be at a mapchunk border -mcl_vars.mg_end_max_official = mcl_vars.mg_end_min + minecraft_height_limit -mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000 -mcl_vars.mg_end_platform_pos = { x = 100, y = mcl_vars.mg_end_min + 74, z = 0 } - --- Realm barrier used to safely separate the End from the void below the Overworld -mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max -mcl_vars.mg_realm_barrier_overworld_end_min = mcl_vars.mg_end_max - 11 - --- Use MineClone 2-style dungeons -mcl_vars.mg_dungeons = true - --- Set default stack sizes -minetest.nodedef_default.stack_max = 64 -minetest.craftitemdef_default.stack_max = 64 - --- Set random seed for all other mods (Remember to make sure no other mod calls this function) -math.randomseed(os.time()) - -local chunks = {} -- intervals of chunks generated -function mcl_vars.add_chunk(pos) - local n = mcl_vars.get_chunk_number(pos) -- unsigned int - local prev - for i, d in pairs(chunks) do - if n <= d[2] then -- we've found it - if (n == d[2]) or (n >= d[1]) then return end -- already here - if n == d[1]-1 then -- right before: - if prev and (prev[2] == n-1) then - prev[2] = d[2] - table.remove(chunks, i) - return - end - d[1] = n - return - end - if prev and (prev[2] == n-1) then --join to previous - prev[2] = n - return - end - table.insert(chunks, i, {n, n}) -- insert new interval before i - return - end - prev = d - end - chunks[#chunks+1] = {n, n} -end -function mcl_vars.is_generated(pos) - local n = mcl_vars.get_chunk_number(pos) -- unsigned int - for i, d in pairs(chunks) do - if n <= d[2] then - return (n >= d[1]) - end - end - return false -end - --- "Trivial" (actually NOT) function to just read the node and some stuff to not just return "ignore", like mt 5.4 does. --- p: Position, if it's wrong, {name="error"} node will return. --- force: optional (default: false) - Do the maximum to still read the node within us_timeout. --- us_timeout: optional (default: 244 = 0.000244 s = 1/80/80/80), set it at least to 3000000 to let mapgen to finish its job. --- --- returns node definition, eg. {name="air"}. Unfortunately still can return {name="ignore"}. -function mcl_vars.get_node(p, force, us_timeout) - -- check initial circumstances - if not p or not p.x or not p.y or not p.z then return {name="error"} end - - -- try common way - local node = minetest.get_node(p) - if node.name ~= "ignore" then - return node - end - - -- copy table to get sure it won't changed by other threads - local pos = {x=p.x,y=p.y,z=p.z} - - -- try LVM - minetest.get_voxel_manip():read_from_map(pos, pos) - node = minetest.get_node(pos) - if node.name ~= "ignore" or not force then - return node - end - - -- all ways failed - need to emerge (or forceload if generated) - local us_timeout = us_timeout or 244 - if mcl_vars.is_generated(pos) then - minetest.chat_send_all("IMPOSSIBLE! Please report this to MCL2 issue tracker!") - minetest.forceload_block(pos) - else - minetest.emerge_area(pos, pos) - end - - local t = minetest.get_us_time() - - node = minetest.get_node(pos) - - while (not node or node.name == "ignore") and (minetest.get_us_time() - t < us_timeout) do - node = minetest.get_node(pos) - end - - return node - -- it still can return "ignore", LOL, even if force = true, but only after time out -end diff --git a/mods/CORE/mcl_init/mod.conf b/mods/CORE/mcl_init/mod.conf deleted file mode 100644 index a0e810a2f..000000000 --- a/mods/CORE/mcl_init/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_init -author = Wuzzy -description = Initialization mod of MineClone 2. Defines some common shared variables and sets up initial default settings which have to be set at the beginning. diff --git a/mods/CORE/mcl_loot/init.lua b/mods/CORE/mcl_loot/init.lua deleted file mode 100644 index b90cd4428..000000000 --- a/mods/CORE/mcl_loot/init.lua +++ /dev/null @@ -1,159 +0,0 @@ -mcl_loot = {} - ---[[ -Select a number of itemstacks out of a pool of treasure definitions randomly. - -Parameters: -* loot_definitions: Probabilities and information about the loot to select. Syntax: - -{ - stacks_min = 1, -- Minimum number of item stacks to get. Default: 1 - stacks_max = 3, -- Maximum number of item stacks to get. Default: 1 - items = { -- Table of possible loot items. This function selects between stacks_min and stacks_max of these. - { - weight = 5, -- Likelihood of this item being selected (see below). Optional (default: 1) - - itemstack = ItemStack("example:item1"), -- Itemstack to select - -- OR - itemstring = "example:item1", -- Which item to select - amount_min = 1, -- Minimum size of itemstack. Must not be larger than 6553. Optional (default: 1) - amount_max = 10, -- Maximum size of item stack. Must not be larger than item definition's stack_max or 6553. Optional (default: 1) - wear_min = 1, -- Minimum wear value. Must be at least 1. Optional (default: no wear) - wear_max = 1, -- Maxiumum wear value. Must be at least 1. Optional (default: no wear) - }, - { -- more tables like above, one table per item stack } - } -} -* pr: PseudoRandom object used for the randomness - -How weight works: The probability of a single item stack being selected is weight/total_weight, with -total_weight being the sum of all weight values in the items table. If you leave out the weight for -all items, the likelihood of each item being selected is equal. - -Returns: Table of itemstrings -]] -function mcl_loot.get_loot(loot_definitions, pr) - local items = {} - - local total_weight = 0 - for i=1, #loot_definitions.items do - total_weight = total_weight + (loot_definitions.items[i].weight or 1) - end - - --local stacks_min = loot_definitions.stacks_min or 1 - --local stacks_max = loot_definitions.stacks_max or 1 - - local stacks = pr:next(loot_definitions.stacks_min, loot_definitions.stacks_max) - for s=1, stacks do - local r = pr:next(1, total_weight) - - local accumulated_weight = 0 - local item - for i=1, #loot_definitions.items do - accumulated_weight = accumulated_weight + (loot_definitions.items[i].weight or 1) - if accumulated_weight >= r then - item = loot_definitions.items[i] - break - end - end - if item then - local itemstring = item.itemstring - - if itemstring then - local stack = ItemStack(itemstring) - - if item.amount_min and item.amount_max then - stack:set_count(pr:next(item.amount_min, item.amount_max)) - end - - if item.wear_min and item.wear_max then - -- Sadly, PseudoRandom only allows very narrow ranges, so we set wear in steps of 10 - local wear_min = math.floor(item.wear_min / 10) - local wear_max = math.floor(item.wear_max / 10) - - stack:set_wear(pr:next(wear_min, wear_max) * 10) - end - - if item.func then - item.func(stack, pr) - end - - table.insert(items, stack) - else - minetest.log("error", "[mcl_loot] INTERNAL ERROR! Failed to select random loot item!") - end - end - end - - return items -end - ---[[ -Repeat mcl_loot.get_loot multiple times for various loot_definitions. -Useful for filling chests. - -* multi_loot_definitions: Table of loot_definitions (see mcl_loot.get_loot) -* pr: PseudoRandom object used for the randomness - -Returns: Table of itemstrings ]] -function mcl_loot.get_multi_loot(multi_loot_definitions, pr) - local items = {} - for m=1, #multi_loot_definitions do - local group = mcl_loot.get_loot(multi_loot_definitions[m], pr) - for g=1, #group do - table.insert(items, group[g]) - end - end - return items -end - ---[[ -Returns a table of length `max_slot` and all natural numbers between 1 and `max_slot` -in a random order. -]] -local function get_random_slots(max_slot, pr) - local slots = {} - for s=1, max_slot do - slots[s] = s - end - local slots_out = {} - while #slots > 0 do - local r = pr and pr:next(1, #slots) or math.random(1, #slots) - table.insert(slots_out, slots[r]) - table.remove(slots, r) - end - return slots_out -end - ---[[ -Puts items in an inventory list into random slots. -* inv: InvRef -* listname: Inventory list name -* items: table of items to add - -Items will be added from start of the table to end. -If the inventory already has occupied slots, or is -too small, placement of some items might fail. -]] -function mcl_loot.fill_inventory(inv, listname, items, pr) - local size = inv:get_size(listname) - local slots = get_random_slots(size, pr) - local leftovers = {} - -- 1st pass: Add items into random slots - for i=1, math.min(#items, size) do - local item = items[i] - local slot = slots[i] - local old_item = inv:get_stack(listname, slot) - local leftover = old_item:add_item(item) - inv:set_stack(listname, slot, old_item) - if not leftover:is_empty() then - table.insert(leftovers, item) - end - end - -- 2nd pass: If some items couldn't be added in first pass, - -- try again in a non-random fashion - for l=1, math.min(#leftovers, size) do - inv:add_item(listname, leftovers[l]) - end - -- If there are still items left, tough luck! -end diff --git a/mods/CORE/mcl_loot/mod.conf b/mods/CORE/mcl_loot/mod.conf deleted file mode 100644 index 82a41d0e5..000000000 --- a/mods/CORE/mcl_loot/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_loot -author = Wuzzy -description = API for filling a chest with random treasures. diff --git a/mods/CORE/mcl_particles/init.lua b/mods/CORE/mcl_particles/init.lua deleted file mode 100644 index 4854afd54..000000000 --- a/mods/CORE/mcl_particles/init.lua +++ /dev/null @@ -1,131 +0,0 @@ -local vector = vector -local table = table - -local hash_node_position = minetest.hash_node_position -local add_particlespawner = minetest.add_particlespawner -local delete_particlespawner = minetest.delete_particlespawner - -local ipairs = ipairs - -mcl_particles = {} - --- Table of particlespawner IDs on a per-node hash basis --- Keys: node position hashes --- Values: Tables of particlespawner IDs (each node pos can have an arbitrary number of particlespawners) -local particle_nodes = {} - --- Node particles can be disabled via setting -local node_particles_allowed = minetest.settings:get("mcl_node_particles") or "none" - -local levels = { - high = 3, - medium = 2, - low = 1, - none = 0, -} - -allowed_level = levels[node_particles_allowed] -if not allowed_level then - allowed_level = levels["none"] -end - - --- Add a particlespawner that is assigned to a given node position. --- * pos: Node positon. MUST use integer values! --- * particlespawner_definition: definition for minetest.add_particlespawner --- * level: detail level of particles. "high", "medium", "low" or "none". High detail levels are for --- CPU-demanding particles, like smoke of fire (which occurs frequently) --- NOTE: All particlespawners are automatically removed on shutdown. --- Returns particlespawner ID on succcess and nil on failure -function mcl_particles.add_node_particlespawner(pos, particlespawner_definition, level) - if allowed_level == 0 or levels[level] > allowed_level then - return - end - local poshash = hash_node_position(pos) - if not poshash then - return - end - local id = add_particlespawner(particlespawner_definition) - if id == -1 then - return - end - if not particle_nodes[poshash] then - particle_nodes[poshash] = {} - end - table.insert(particle_nodes[poshash], id) - return id -end - -local add_node_particlespawner = mcl_particles.add_node_particlespawner - --- Deletes all particlespawners that are assigned to a node position. --- If no particlespawners exist for this position, nothing happens. --- pos: Node positon. MUST use integer values! --- Returns true if particlespawner could be removed and false if not -function mcl_particles.delete_node_particlespawners(pos) - if allowed_level == 0 then - return false - end - local poshash = hash_node_position(pos) - local ids = particle_nodes[poshash] - if ids then - for i=1, #ids do - delete_particlespawner(ids[i]) - end - particle_nodes[poshash] = nil - return true - end - return false -end - --- 3 exptime variants because the animation is not tied to particle expiration time. --- 3 colorized variants to imitate minecraft's -local smoke_pdef_cached = {} - -function mcl_particles.spawn_smoke(pos, name, smoke_pdef_base) - local new_minpos = vector.add(pos, smoke_pdef_base.minrelpos) - local new_maxpos = vector.add(pos, smoke_pdef_base.maxrelpos) - - -- populate the cache - if smoke_pdef_cached[name] then - for i, smoke_pdef in ipairs(smoke_pdef_cached[name]) do - smoke_pdef.minpos = new_minpos - smoke_pdef.maxpos = new_maxpos - add_node_particlespawner(pos, smoke_pdef, "high") - end - -- cache already populated - else - smoke_pdef_cached[name] = {} - - local smoke_pdef = table.copy(smoke_pdef_base) - smoke_pdef.amount = smoke_pdef_base.amount / 9 - smoke_pdef.time = 0 - smoke_pdef.animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - -- length = 3 exptime variants - } - smoke_pdef.collisiondetection = true - smoke_pdef.minpos = new_minpos - smoke_pdef.maxpos = new_maxpos - - -- the last frame plays for 1/8 * N seconds, so we can take advantage of it - -- to have varying exptime for each variant. - local exptimes = { 0.175, 0.375, 1.0 } - local colorizes = { "199", "209", "243" } -- round(78%, 82%, 90% of 256) - 1 - - for _,exptime in ipairs(exptimes) do - for _,colorize in ipairs(colorizes) do - smoke_pdef.maxexptime = exptime * smoke_pdef_base.maxexptime - smoke_pdef.animation.length = exptime + 0.1 - -- minexptime must be set such that the last frame is actully rendered, - -- even if its very short. Larger exptime -> larger range - smoke_pdef.minexptime = math.min(exptime, (7.0/8.0 * (exptime + 0.1) + 0.1)) - smoke_pdef.texture = "mcl_particles_smoke_anim.png^[colorize:#000000:" ..colorize - add_node_particlespawner(pos, smoke_pdef, "high") - table.insert(smoke_pdef_cached[name], table.copy(smoke_pdef)) - end - end - end -end \ No newline at end of file diff --git a/mods/CORE/mcl_particles/mod.conf b/mods/CORE/mcl_particles/mod.conf deleted file mode 100644 index b8252cbc5..000000000 --- a/mods/CORE/mcl_particles/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_particles -author = Wuzzy -description = Contains particle images of MineClone 2. No code. diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_bonemeal.png b/mods/CORE/mcl_particles/textures/mcl_particles_bonemeal.png deleted file mode 100644 index 684df9865..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_bonemeal.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_bubble.png b/mods/CORE/mcl_particles/textures/mcl_particles_bubble.png deleted file mode 100644 index a29c95bbc..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_bubble.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_crit.png b/mods/CORE/mcl_particles/textures/mcl_particles_crit.png deleted file mode 100644 index 25d5615b2..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_crit.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_droplet_bottle.png b/mods/CORE/mcl_particles/textures/mcl_particles_droplet_bottle.png deleted file mode 100644 index ba2c9b116..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_droplet_bottle.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_effect.png b/mods/CORE/mcl_particles/textures/mcl_particles_effect.png deleted file mode 100644 index 259e03c5d..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_effect.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_flame.png b/mods/CORE/mcl_particles/textures/mcl_particles_flame.png deleted file mode 100644 index 92efed290..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_flame.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_instant_effect.png b/mods/CORE/mcl_particles/textures/mcl_particles_instant_effect.png deleted file mode 100644 index bae450282..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_instant_effect.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_lava.png b/mods/CORE/mcl_particles/textures/mcl_particles_lava.png deleted file mode 100644 index b4a8fd58f..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_lava.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_mob_death.png b/mods/CORE/mcl_particles/textures/mcl_particles_mob_death.png deleted file mode 100644 index 6dc9cdc69..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_mob_death.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_note.png b/mods/CORE/mcl_particles/textures/mcl_particles_note.png deleted file mode 100644 index 9fb2c923a..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_note.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_smoke.png b/mods/CORE/mcl_particles/textures/mcl_particles_smoke.png deleted file mode 100644 index 709cecf16..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_smoke.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_smoke_anim.png b/mods/CORE/mcl_particles/textures/mcl_particles_smoke_anim.png deleted file mode 100644 index 6c85a6feb..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_smoke_anim.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_sponge1.png b/mods/CORE/mcl_particles/textures/mcl_particles_sponge1.png deleted file mode 100644 index e8099a41a..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_sponge1.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_sponge2.png b/mods/CORE/mcl_particles/textures/mcl_particles_sponge2.png deleted file mode 100644 index 0004ce4db..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_sponge2.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_sponge3.png b/mods/CORE/mcl_particles/textures/mcl_particles_sponge3.png deleted file mode 100644 index 62ae83a86..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_sponge3.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_sponge4.png b/mods/CORE/mcl_particles/textures/mcl_particles_sponge4.png deleted file mode 100644 index 7ee00cbf5..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_sponge4.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_sponge5.png b/mods/CORE/mcl_particles/textures/mcl_particles_sponge5.png deleted file mode 100644 index 5278caff3..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_sponge5.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_teleport.png b/mods/CORE/mcl_particles/textures/mcl_particles_teleport.png deleted file mode 100644 index 4e1687d78..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_teleport.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_totem1.png b/mods/CORE/mcl_particles/textures/mcl_particles_totem1.png deleted file mode 100644 index 15fe082e1..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_totem1.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_totem2.png b/mods/CORE/mcl_particles/textures/mcl_particles_totem2.png deleted file mode 100644 index 2ab88983d..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_totem2.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_totem3.png b/mods/CORE/mcl_particles/textures/mcl_particles_totem3.png deleted file mode 100644 index 55d6f49d3..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_totem3.png and /dev/null differ diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_totem4.png b/mods/CORE/mcl_particles/textures/mcl_particles_totem4.png deleted file mode 100644 index d6e6502b7..000000000 Binary files a/mods/CORE/mcl_particles/textures/mcl_particles_totem4.png and /dev/null differ diff --git a/mods/CORE/mcl_sounds/README.txt b/mods/CORE/mcl_sounds/README.txt deleted file mode 100644 index 9fc2ba28f..000000000 --- a/mods/CORE/mcl_sounds/README.txt +++ /dev/null @@ -1,97 +0,0 @@ -Licenses of sounds ------------------ - -Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) -http://creativecommons.org/licenses/by-sa/4.0/ - -Creative Commons Attribution 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by/3.0/ - -Glass breaking sounds (CC BY 3.0): - 1: http://www.freesound.org/people/cmusounddesign/sounds/71947/ - 2: http://www.freesound.org/people/Tomlija/sounds/97669/ - 3: http://www.freesound.org/people/lsprice/sounds/88808/ - -default_tool_breaks.ogg by EdgardEdition (CC BY 3.0), http://www.freesound.org/people/EdgardEdition - -Mito551 (sounds) (CC BY-SA 3.0): - default_dig_choppy.ogg - default_dig_cracky.ogg - default_dig_crumbly.1.ogg - default_dig_crumbly.2.ogg - default_dig_oddly_breakable_by_hand.ogg - default_dug_node.1.ogg - default_dug_node.2.ogg - default_grass_footstep.1.ogg - default_grass_footstep.2.ogg - default_grass_footstep.3.ogg - default_gravel_footstep.1.ogg - default_gravel_footstep.2.ogg - default_gravel_footstep.3.ogg - default_gravel_footstep.4.ogg - default_grass_footstep.1.ogg - default_place_node.1.ogg - default_place_node.2.ogg - default_place_node.3.ogg - default_place_node_hard.1.ogg - default_place_node_hard.2.ogg - default_hard_footstep.1.ogg - default_hard_footstep.2.ogg - default_hard_footstep.3.ogg - default_sand_footstep.1.ogg - default_sand_footstep.2.ogg - default_wood_footstep.1.ogg - default_wood_footstep.2.ogg - default_dirt_footstep.1.ogg - default_dirt_footstep.2.ogg - default_glass_footstep.ogg - -Metal sounds: - default_dig_metal.ogg - yadronoff - CC-BY-3.0 - - https://www.freesound.org/people/yadronoff/sounds/320397/ - default_dug_metal.*.ogg - Iwan Gabovitch - qubodup - CC0 - - http://opengameart.org/users/qubodup - default_metal_footstep.*.ogg - Ottomaani138 - CC0 - - https://www.freesound.org/people/Ottomaani138/sounds/232692/ - default_place_node_metal.*.ogg - Ogrebane - CC0 - - http://opengameart.org/content/wood-and-metal-sound-effects-volume-2 - -AGFX (CC BY 3.0) -https://www.freesound.org/people/AGFX/packs/1253/ - default_water_footstep.1.ogg - default_water_footstep.2.ogg - default_water_footstep.3.ogg -(default_water_footstep.4.ogg is silent) - -blukotek (CC0 1.0) -https://www.freesound.org/people/blukotek/sounds/251660/ - default_dig_snappy.ogg - -sonictechtonic (CC BY 3.0) -https://www.freesound.org/people/sonictechtonic/sounds/241872/ - player_damage.ogg - -Voxelands project (CC BY-SA 3.0) - mcl_sounds_place_node_water.ogg - mcl_sounds_dug_water.ogg - -(Note: Artists from the Voxelands project include: sdzen, darkrose, sapier, - Tom Peter, Telaron, juskiddink) - -Michel Baradari (CC BY 3.0) - - default_place_node_lava.ogg - -Adam_N (CC0 1.0): - player_falling_damage.ogg - Source: - -Alecia Shepherd (CC BY-SA 4.0): - mcl_sounds_cloth.ogg - Source: SnowSong sound and music pack - -Unknown authors (WTFPL): - pedology_snow_soft_footstep.*.ogg diff --git a/mods/CORE/mcl_sounds/init.lua b/mods/CORE/mcl_sounds/init.lua deleted file mode 100644 index 13ca7bf72..000000000 --- a/mods/CORE/mcl_sounds/init.lua +++ /dev/null @@ -1,168 +0,0 @@ --- --- Sounds --- - -mcl_sounds = {} - -function mcl_sounds.node_sound_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="", gain=1.0} - table.dug = table.dug or - {name="default_dug_node", gain=0.25} - table.dig = table.dig or - {name="default_dig_oddly_breakable_by_hand", gain=1.0} - table.place = table.place or - {name="default_place_node_hard", gain=1.0} - return table -end - -function mcl_sounds.node_sound_stone_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_hard_footstep", gain=0.5} - table.dug = table.dug or - {name="default_hard_footstep", gain=1.0} - table.dig = table.dig or - {name="default_dig_cracky", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_metal_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_metal_footstep", gain=0.5} - table.dug = table.dug or - {name="default_dug_metal", gain=1.0} - table.dig = table.dig or - {name="default_dig_metal", gain=1.0} - table.place = table.place or - {name="default_place_node_metal", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_dirt_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_dirt_footstep", gain=1.0} - table.dug = table.dug or - {name="default_dirt_footstep", gain=1.5} - table.dig = table.dig or - {name="default_dig_crumbly", gain=1.0} - table.place = table.place or - {name="default_place_node", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_sand_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_sand_footstep", gain=0.5} - table.dug = table.dug or - {name="default_sand_footstep", gain=1.0} - table.dig = table.dig or - {name="default_dig_crumbly", gain=1.0} - table.place = table.place or - {name="default_place_node", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_snow_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="pedology_snow_soft_footstep", gain=0.5} - table.dug = table.dug or - {name="pedology_snow_soft_footstep", gain=1.0} - table.dig = table.dig or - {name="default_dig_crumbly", gain=1.0} - table.place = table.place or - {name="default_place_node", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_wood_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_wood_footstep", gain=0.5} - table.dug = table.dug or - {name="default_wood_footstep", gain=1.0} - table.dig = table.dig or - {name="default_dig_choppy", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_wool_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="mcl_sounds_cloth", gain=0.5} - table.dug = table.dug or - {name="mcl_sounds_cloth", gain=1.0} - table.dig = table.dig or - {name="mcl_sounds_cloth", gain=0.9} - table.place = table.dig or - {name="mcl_sounds_cloth", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_leaves_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_grass_footstep", gain=0.1325} - table.dug = table.dug or - {name="default_grass_footstep", gain=0.425} - table.dig = table.dig or - {name="default_dig_snappy", gain=0.4} - table.place = table.place or - {name="default_place_node", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_glass_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_glass_footstep", gain=0.5} - table.dug = table.dug or - {name="default_break_glass", gain=1.0} - table.dig = table.dig or - {name="default_dig_cracky", gain=1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_water_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_water_footstep", gain = 0.2} - table.place = table.place or - {name = "mcl_sounds_place_node_water", gain = 1.0} - table.dug = table.dug or - {name = "mcl_sounds_dug_water", gain = 1.0} - mcl_sounds.node_sound_defaults(table) - return table -end - -function mcl_sounds.node_sound_lava_defaults(table) - table = table or {} - -- TODO: Footstep - table.place = table.place or - {name = "default_place_node_lava", gain = 1.0} - table.dug = table.dug or - {name = "default_place_node_lava", gain = 1.0} - -- TODO: Different dug sound - mcl_sounds.node_sound_defaults(table) - return table -end - --- Player death sound -minetest.register_on_dieplayer(function(player) - -- TODO: Add separate death sound - minetest.sound_play({name="player_damage", gain = 1.0}, {pos=player:get_pos(), max_hear_distance=16}, true) -end) diff --git a/mods/CORE/mcl_sounds/mod.conf b/mods/CORE/mcl_sounds/mod.conf deleted file mode 100644 index 33bcafd9f..000000000 --- a/mods/CORE/mcl_sounds/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_sounds -author = Wuzzy -description = This mod contains the core sounds of MineClone 2 as well as helper function for mods to access them. diff --git a/mods/CORE/mcl_sounds/sounds/default_break_glass.1.ogg b/mods/CORE/mcl_sounds/sounds/default_break_glass.1.ogg deleted file mode 100644 index b1ccc5fab..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_break_glass.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_break_glass.2.ogg b/mods/CORE/mcl_sounds/sounds/default_break_glass.2.ogg deleted file mode 100644 index b6cc9e85e..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_break_glass.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_break_glass.3.ogg b/mods/CORE/mcl_sounds/sounds/default_break_glass.3.ogg deleted file mode 100644 index ae6a6bfc4..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_break_glass.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_cool_lava.1.ogg b/mods/CORE/mcl_sounds/sounds/default_cool_lava.1.ogg deleted file mode 100644 index 42506ddff..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_cool_lava.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_cool_lava.2.ogg b/mods/CORE/mcl_sounds/sounds/default_cool_lava.2.ogg deleted file mode 100644 index 2747ab81c..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_cool_lava.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_cool_lava.3.ogg b/mods/CORE/mcl_sounds/sounds/default_cool_lava.3.ogg deleted file mode 100644 index 8baeac32e..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_cool_lava.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dig_choppy.ogg b/mods/CORE/mcl_sounds/sounds/default_dig_choppy.ogg deleted file mode 100644 index e2ecd8416..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dig_choppy.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dig_cracky.ogg b/mods/CORE/mcl_sounds/sounds/default_dig_cracky.ogg deleted file mode 100644 index da1167916..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dig_cracky.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dig_crumbly.ogg b/mods/CORE/mcl_sounds/sounds/default_dig_crumbly.ogg deleted file mode 100644 index a0b2a1f9f..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dig_crumbly.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dig_metal.ogg b/mods/CORE/mcl_sounds/sounds/default_dig_metal.ogg deleted file mode 100644 index 0b585097a..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dig_metal.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dig_oddly_breakable_by_hand.ogg b/mods/CORE/mcl_sounds/sounds/default_dig_oddly_breakable_by_hand.ogg deleted file mode 100644 index ef4d7b155..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dig_oddly_breakable_by_hand.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dig_snappy.ogg b/mods/CORE/mcl_sounds/sounds/default_dig_snappy.ogg deleted file mode 100644 index 3686fcddb..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dig_snappy.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dirt_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_dirt_footstep.1.ogg deleted file mode 100644 index 84a197d2b..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dirt_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dirt_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_dirt_footstep.2.ogg deleted file mode 100644 index 2e23b8a2b..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dirt_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dug_metal.1.ogg b/mods/CORE/mcl_sounds/sounds/default_dug_metal.1.ogg deleted file mode 100644 index 5d6cb5b1e..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dug_metal.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dug_metal.2.ogg b/mods/CORE/mcl_sounds/sounds/default_dug_metal.2.ogg deleted file mode 100644 index 63567fc05..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dug_metal.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dug_node.1.ogg b/mods/CORE/mcl_sounds/sounds/default_dug_node.1.ogg deleted file mode 100644 index c04975d42..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dug_node.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_dug_node.2.ogg b/mods/CORE/mcl_sounds/sounds/default_dug_node.2.ogg deleted file mode 100644 index 9f209268f..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_dug_node.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_glass_footstep.ogg b/mods/CORE/mcl_sounds/sounds/default_glass_footstep.ogg deleted file mode 100644 index 191287a33..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_glass_footstep.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_grass_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_grass_footstep.1.ogg deleted file mode 100644 index 22d1ad6b8..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_grass_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_grass_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_grass_footstep.2.ogg deleted file mode 100644 index 4ccd8a0f3..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_grass_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_grass_footstep.3.ogg b/mods/CORE/mcl_sounds/sounds/default_grass_footstep.3.ogg deleted file mode 100644 index 20db84eda..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_grass_footstep.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.1.ogg deleted file mode 100644 index 8d260ce01..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.2.ogg deleted file mode 100644 index 2aba2c652..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.3.ogg b/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.3.ogg deleted file mode 100644 index 1bcd8a117..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.4.ogg b/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.4.ogg deleted file mode 100644 index 696c9ffd2..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_gravel_footstep.4.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_hard_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_hard_footstep.1.ogg deleted file mode 100644 index 1748bc56a..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_hard_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_hard_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_hard_footstep.2.ogg deleted file mode 100644 index fe39fd784..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_hard_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_hard_footstep.3.ogg b/mods/CORE/mcl_sounds/sounds/default_hard_footstep.3.ogg deleted file mode 100644 index 5030e0607..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_hard_footstep.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_metal_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_metal_footstep.1.ogg deleted file mode 100644 index 841286bdc..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_metal_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_metal_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_metal_footstep.2.ogg deleted file mode 100644 index aa61ed338..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_metal_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_metal_footstep.3.ogg b/mods/CORE/mcl_sounds/sounds/default_metal_footstep.3.ogg deleted file mode 100644 index 4cc1ca47a..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_metal_footstep.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node.1.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node.1.ogg deleted file mode 100644 index 46b9756de..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node.2.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node.2.ogg deleted file mode 100644 index d34c01a43..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node.3.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node.3.ogg deleted file mode 100644 index fc2936506..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node_hard.1.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node_hard.1.ogg deleted file mode 100644 index 9f97facad..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node_hard.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node_hard.2.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node_hard.2.ogg deleted file mode 100644 index 1d3b3de2c..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node_hard.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node_lava.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node_lava.ogg deleted file mode 100644 index 2ef7ff6a1..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node_lava.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node_metal.1.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node_metal.1.ogg deleted file mode 100644 index 5da085ea2..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node_metal.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_place_node_metal.2.ogg b/mods/CORE/mcl_sounds/sounds/default_place_node_metal.2.ogg deleted file mode 100644 index 5ee67fcf6..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_place_node_metal.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_sand_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_sand_footstep.1.ogg deleted file mode 100644 index 65b68c7e6..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_sand_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_sand_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_sand_footstep.2.ogg deleted file mode 100644 index 57f35f30a..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_sand_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_tool_breaks.ogg b/mods/CORE/mcl_sounds/sounds/default_tool_breaks.ogg deleted file mode 100644 index a68f7c905..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_tool_breaks.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_water_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_water_footstep.1.ogg deleted file mode 100644 index 63b9744ce..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_water_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_water_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_water_footstep.2.ogg deleted file mode 100644 index 8d79c1f4b..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_water_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_water_footstep.3.ogg b/mods/CORE/mcl_sounds/sounds/default_water_footstep.3.ogg deleted file mode 100644 index f8891506d..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_water_footstep.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_water_footstep.4.ogg b/mods/CORE/mcl_sounds/sounds/default_water_footstep.4.ogg deleted file mode 100644 index 6f1eab824..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_water_footstep.4.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_wood_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/default_wood_footstep.1.ogg deleted file mode 100644 index 34f63a17c..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_wood_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/default_wood_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/default_wood_footstep.2.ogg deleted file mode 100644 index 124fc297c..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/default_wood_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.1.ogg b/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.1.ogg deleted file mode 100644 index cc304a414..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.2.ogg b/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.2.ogg deleted file mode 100644 index 8a3c0963f..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.3.ogg b/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.3.ogg deleted file mode 100644 index 2f682c72b..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.4.ogg b/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.4.ogg deleted file mode 100644 index cc60b8f6e..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/mcl_sounds_cloth.4.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/mcl_sounds_dug_water.ogg b/mods/CORE/mcl_sounds/sounds/mcl_sounds_dug_water.ogg deleted file mode 100644 index 864458e3f..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/mcl_sounds_dug_water.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/mcl_sounds_place_node_water.ogg b/mods/CORE/mcl_sounds/sounds/mcl_sounds_place_node_water.ogg deleted file mode 100644 index 36483f921..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/mcl_sounds_place_node_water.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.1.ogg b/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.1.ogg deleted file mode 100644 index 3ab633a5d..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.1.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.2.ogg b/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.2.ogg deleted file mode 100644 index 647ea6ec4..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.2.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.3.ogg b/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.3.ogg deleted file mode 100644 index f4faadcd2..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.3.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.4.ogg b/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.4.ogg deleted file mode 100644 index 54168009a..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/pedology_snow_soft_footstep.4.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/player_damage.ogg b/mods/CORE/mcl_sounds/sounds/player_damage.ogg deleted file mode 100644 index 788808710..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/player_damage.ogg and /dev/null differ diff --git a/mods/CORE/mcl_sounds/sounds/player_falling_damage.ogg b/mods/CORE/mcl_sounds/sounds/player_falling_damage.ogg deleted file mode 100644 index 7446a88b2..000000000 Binary files a/mods/CORE/mcl_sounds/sounds/player_falling_damage.ogg and /dev/null differ diff --git a/mods/CORE/mcl_util/init.lua b/mods/CORE/mcl_util/init.lua deleted file mode 100644 index a179d53e6..000000000 --- a/mods/CORE/mcl_util/init.lua +++ /dev/null @@ -1,612 +0,0 @@ -mcl_util = {} - --- Updates all values in t using values from to*. -function table.update(t, ...) - for _, to in ipairs{...} do - for k,v in pairs(to) do - t[k] = v - end - end - return t -end - --- Updates nil values in t using values from to*. -function table.update_nil(t, ...) - for _, to in ipairs{...} do - for k,v in pairs(to) do - if t[k] == nil then - t[k] = v - end - end - end - return t -end - --- Based on minetest.rotate_and_place - ---[[ -Attempt to predict the desired orientation of the pillar-like node -defined by `itemstack`, and place it accordingly in one of 3 possible -orientations (X, Y or Z). - -Stacks are handled normally if the `infinitestacks` -field is false or omitted (else, the itemstack is not changed). -* `invert_wall`: if `true`, place wall-orientation on the ground and ground- - orientation on wall - -This function is a simplified version of minetest.rotate_and_place. -The Minetest function is seen as inappropriate because this includes mirror -images of possible orientations, causing problems with pillar shadings. -]] -function mcl_util.rotate_axis_and_place(itemstack, placer, pointed_thing, infinitestacks, invert_wall) - local unode = minetest.get_node_or_nil(pointed_thing.under) - if not unode then - return - end - local undef = minetest.registered_nodes[unode.name] - if undef and undef.on_rightclick then - undef.on_rightclick(pointed_thing.under, unode, placer, - itemstack, pointed_thing) - return - end - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - local wield_name = itemstack:get_name() - - local above = pointed_thing.above - local under = pointed_thing.under - local is_x = (above.x ~= under.x) - local is_y = (above.y ~= under.y) - local is_z = (above.z ~= under.z) - - local anode = minetest.get_node_or_nil(above) - if not anode then - return - end - local pos = pointed_thing.above - local node = anode - - if undef and undef.buildable_to then - pos = pointed_thing.under - node = unode - end - - if minetest.is_protected(pos, placer:get_player_name()) then - minetest.record_protection_violation(pos, placer:get_player_name()) - return - end - - local ndef = minetest.registered_nodes[node.name] - if not ndef or not ndef.buildable_to then - return - end - - local p2 - if is_y then - if invert_wall then - if fdir == 3 or fdir == 1 then - p2 = 12 - else - p2 = 6 - end - end - elseif is_x then - if invert_wall then - p2 = 0 - else - p2 = 12 - end - elseif is_z then - if invert_wall then - p2 = 0 - else - p2 = 6 - end - end - minetest.set_node(pos, {name = wield_name, param2 = p2}) - - if not infinitestacks then - itemstack:take_item() - return itemstack - end -end - --- Wrapper of above function for use as `on_place` callback (Recommended). --- Similar to minetest.rotate_node. -function mcl_util.rotate_axis(itemstack, placer, pointed_thing) - mcl_util.rotate_axis_and_place(itemstack, placer, pointed_thing, - minetest.is_creative_enabled(placer:get_player_name()), - placer:get_player_control().sneak) - return itemstack -end - --- Returns position of the neighbor of a double chest node --- or nil if node is invalid. --- This function assumes that the large chest is actually intact --- * pos: Position of the node to investigate --- * param2: param2 of that node --- * side: Which "half" the investigated node is. "left" or "right" -function mcl_util.get_double_container_neighbor_pos(pos, param2, side) - if side == "right" then - if param2 == 0 then - return {x=pos.x-1, y=pos.y, z=pos.z} - elseif param2 == 1 then - return {x=pos.x, y=pos.y, z=pos.z+1} - elseif param2 == 2 then - return {x=pos.x+1, y=pos.y, z=pos.z} - elseif param2 == 3 then - return {x=pos.x, y=pos.y, z=pos.z-1} - end - else - if param2 == 0 then - return {x=pos.x+1, y=pos.y, z=pos.z} - elseif param2 == 1 then - return {x=pos.x, y=pos.y, z=pos.z-1} - elseif param2 == 2 then - return {x=pos.x-1, y=pos.y, z=pos.z} - elseif param2 == 3 then - return {x=pos.x, y=pos.y, z=pos.z+1} - end - end -end - --- Iterates through all items in the given inventory and --- returns the slot of the first item which matches a condition. --- Returns nil if no item was found. ---- source_inventory: Inventory to take the item from ---- source_list: List name of the source inventory from which to take the item ---- destination_inventory: Put item into this inventory ---- destination_list: List name of the destination inventory to which to put the item into ---- condition: Function which takes an itemstack and returns true if it matches the desired item condition. ---- If set to nil, the slot of the first item stack will be taken unconditionally. --- dst_inventory and dst_list can also be nil if condition is nil. -function mcl_util.get_eligible_transfer_item_slot(src_inventory, src_list, dst_inventory, dst_list, condition) - local size = src_inventory:get_size(src_list) - local stack - for i=1, size do - stack = src_inventory:get_stack(src_list, i) - if not stack:is_empty() and (condition == nil or condition(stack, src_inventory, src_list, dst_inventory, dst_list)) then - return i - end - end - return nil -end - --- Returns true if itemstack is a shulker box -local function is_not_shulker_box(itemstack) - local g = minetest.get_item_group(itemstack:get_name(), "shulker_box") - return g == 0 or g == nil -end - --- Moves a single item from one inventory to another. ---- source_inventory: Inventory to take the item from ---- source_list: List name of the source inventory from which to take the item ---- source_stack_id: The inventory position ID of the source inventory to take the item from (-1 for first occupied slot) ---- destination_inventory: Put item into this inventory ---- destination_list: List name of the destination inventory to which to put the item into - --- Returns true on success and false on failure --- Possible failures: No item in source slot, destination inventory full -function mcl_util.move_item(source_inventory, source_list, source_stack_id, destination_inventory, destination_list) - if source_stack_id == -1 then - source_stack_id = mcl_util.get_first_occupied_inventory_slot(source_inventory, source_list) - if source_stack_id == nil then - return false - end - end - - if not source_inventory:is_empty(source_list) then - local stack = source_inventory:get_stack(source_list, source_stack_id) - if not stack:is_empty() then - local new_stack = ItemStack(stack) - new_stack:set_count(1) - if not destination_inventory:room_for_item(destination_list, new_stack) then - return false - end - stack:take_item() - source_inventory:set_stack(source_list, source_stack_id, stack) - destination_inventory:add_item(destination_list, new_stack) - return true - end - end - return false -end - --- Moves a single item from one container node into another. Performs a variety of high-level --- checks to prevent invalid transfers such as shulker boxes into shulker boxes ---- source_pos: Position ({x,y,z}) of the node to take the item from ---- destination_pos: Position ({x,y,z}) of the node to put the item into ---- source_list (optional): List name of the source inventory from which to take the item. Default is normally "main"; "dst" for furnace ---- source_stack_id (optional): The inventory position ID of the source inventory to take the item from (-1 for slot of the first valid item; -1 is default) ---- destination_list (optional): List name of the destination inventory. Default is normally "main"; "src" for furnace --- Returns true on success and false on failure. -function mcl_util.move_item_container(source_pos, destination_pos, source_list, source_stack_id, destination_list) - local dpos = table.copy(destination_pos) - local spos = table.copy(source_pos) - local snode = minetest.get_node(spos) - local dnode = minetest.get_node(dpos) - - local dctype = minetest.get_item_group(dnode.name, "container") - local sctype = minetest.get_item_group(snode.name, "container") - - -- Container type 7 does not allow any movement - if sctype == 7 then - return false - end - - -- Normalize double container by forcing to always use the left segment first - local function normalize_double_container(pos, node, ctype) - if ctype == 6 then - pos = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - if not pos then - return false - end - node = minetest.get_node(pos) - ctype = minetest.get_item_group(node.name, "container") - -- The left segment seems incorrect? We better bail out! - if ctype ~= 5 then - return false - end - end - return pos, node, ctype - end - - spos, snode, sctype = normalize_double_container(spos, snode, sctype) - dpos, dnode, dctype = normalize_double_container(dpos, dnode, dctype) - if not spos or not dpos then return false end - - local smeta = minetest.get_meta(spos) - local dmeta = minetest.get_meta(dpos) - - local sinv = smeta:get_inventory() - local dinv = dmeta:get_inventory() - - -- Default source lists - if not source_list then - -- Main inventory for most container types - if sctype == 2 or sctype == 3 or sctype == 5 or sctype == 6 or sctype == 7 then - source_list = "main" - -- Furnace: output - elseif sctype == 4 then - source_list = "dst" - -- Unknown source container type. Bail out - else - return false - end - end - - -- Automatically select stack slot ID if set to automatic - if not source_stack_id then - source_stack_id = -1 - end - if source_stack_id == -1 then - local cond = nil - -- Prevent shulker box inception - if dctype == 3 then - cond = is_not_shulker_box - end - source_stack_id = mcl_util.get_eligible_transfer_item_slot(sinv, source_list, dinv, dpos, cond) - if not source_stack_id then - -- Try again if source is a double container - if sctype == 5 then - spos = mcl_util.get_double_container_neighbor_pos(spos, snode.param2, "left") - smeta = minetest.get_meta(spos) - sinv = smeta:get_inventory() - - source_stack_id = mcl_util.get_eligible_transfer_item_slot(sinv, source_list, dinv, dpos, cond) - if not source_stack_id then - return false - end - else - return false - end - end - end - - -- Abort transfer if shulker box wants to go into shulker box - if dctype == 3 then - local stack = sinv:get_stack(source_list, source_stack_id) - if stack and minetest.get_item_group(stack:get_name(), "shulker_box") == 1 then - return false - end - end - -- Container type 7 does not allow any placement - if dctype == 7 then - return false - end - - -- If it's a container, put it into the container - if dctype ~= 0 then - -- Automatically select a destination list if omitted - if not destination_list then - -- Main inventory for most container types - if dctype == 2 or dctype == 3 or dctype == 5 or dctype == 6 or dctype == 7 then - destination_list = "main" - -- Furnace source slot - elseif dctype == 4 then - destination_list = "src" - end - end - if destination_list then - -- Move item - local ok = mcl_util.move_item(sinv, source_list, source_stack_id, dinv, destination_list) - - -- Try transfer to neighbor node if transfer failed and double container - if not ok and dctype == 5 then - dpos = mcl_util.get_double_container_neighbor_pos(dpos, dnode.param2, "left") - dmeta = minetest.get_meta(dpos) - dinv = dmeta:get_inventory() - - ok = mcl_util.move_item(sinv, source_list, source_stack_id, dinv, destination_list) - end - - -- Update furnace - if ok and dctype == 4 then - -- Start furnace's timer function, it will sort out whether furnace can burn or not. - minetest.get_node_timer(dpos):start(1.0) - end - - return ok - end - end - return false -end - --- Returns the ID of the first non-empty slot in the given inventory list --- or nil, if inventory is empty. -function mcl_util.get_first_occupied_inventory_slot(inventory, listname) - return mcl_util.get_eligible_transfer_item_slot(inventory, listname) -end - -local function drop_item_stack(pos, stack) - if not stack or stack:is_empty() then return end - local drop_offset = vector.new(math.random() - 0.5, 0, math.random() - 0.5) - minetest.add_item(vector.add(pos, drop_offset), stack) -end - -function mcl_util.drop_items_from_meta_container(listname) - return function(pos, oldnode, oldmetadata) - if oldmetadata and oldmetadata.inventory then - -- process in after_dig_node callback - local main = oldmetadata.inventory.main - if not main then return end - for _, stack in pairs(main) do - drop_item_stack(pos, stack) - end - else - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - for i = 1, inv:get_size("main") do - drop_item_stack(pos, inv:get_stack("main", i)) - end - meta:from_table() - end - end -end - --- Returns true if item (itemstring or ItemStack) can be used as a furnace fuel. --- Returns false otherwise -function mcl_util.is_fuel(item) - return minetest.get_craft_result({method="fuel", width=1, items={item}}).time ~= 0 -end - --- Returns a on_place function for plants --- * condition: function(pos, node, itemstack) --- * A function which is called by the on_place function to check if the node can be placed --- * Must return true, if placement is allowed, false otherwise. --- * If it returns a string, placement is allowed, but will place this itemstring as a node instead --- * pos, node: Position and node table of plant node --- * itemstack: Itemstack to place -function mcl_util.generate_on_place_plant_function(condition) - return function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local place_pos - local def_under = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] - local def_above = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name] - if not def_under or not def_above then - return itemstack - end - if def_under.buildable_to then - place_pos = pointed_thing.under - elseif def_above.buildable_to then - place_pos = pointed_thing.above - else - return itemstack - end - - -- Check placement rules - local result, param2 = condition(place_pos, node, itemstack) - if result == true then - local idef = itemstack:get_definition() - local new_itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing, param2) - - if success then - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=pointed_thing.above, gain=1}, true) - end - end - itemstack = new_itemstack - end - - return itemstack - end -end - --- adjust the y level of an object to the center of its collisionbox --- used to get the origin position of entity explosions -function mcl_util.get_object_center(obj) - local collisionbox = obj:get_properties().collisionbox - local pos = obj:get_pos() - local ymin = collisionbox[2] - local ymax = collisionbox[5] - pos.y = pos.y + (ymax - ymin) / 2.0 - return pos -end - -function mcl_util.get_color(colorstr) - local mc_color = mcl_colors[colorstr:upper()] - if mc_color then - colorstr = mc_color - elseif #colorstr ~= 7 or colorstr:sub(1, 1) ~= "#" then - return - end - local hex = tonumber(colorstr:sub(2, 7), 16) - if hex then - return colorstr, hex - end -end - -function mcl_util.call_on_rightclick(itemstack, player, pointed_thing) - -- Call on_rightclick if the pointed node defines it - if pointed_thing and pointed_thing.type == "node" then - local pos = pointed_thing.under - local node = minetest.get_node(pos) - if player and not player:get_player_control().sneak then - local nodedef = minetest.registered_nodes[node.name] - local on_rightclick = nodedef and nodedef.on_rightclick - if on_rightclick then - return on_rightclick(pos, node, player, itemstack, pointed_thing) or itemstack - end - end - end -end - -function mcl_util.calculate_durability(itemstack) - local unbreaking_level = mcl_enchanting.get_enchantment(itemstack, "unbreaking") - local armor_uses = minetest.get_item_group(itemstack:get_name(), "mcl_armor_uses") - - local uses - - if armor_uses > 0 then - uses = armor_uses - if unbreaking_level > 0 then - uses = uses / (0.6 + 0.4 / (unbreaking_level + 1)) - end - else - local def = itemstack:get_definition() - if def then - local fixed_uses = def._mcl_uses - if fixed_uses then - uses = fixed_uses - if unbreaking_level > 0 then - uses = uses * (unbreaking_level + 1) - end - end - end - - local _, groupcap = next(itemstack:get_tool_capabilities().groupcaps) - uses = uses or (groupcap or {}).uses - end - - return uses or 0 -end - -function mcl_util.use_item_durability(itemstack, n) - local uses = mcl_util.calculate_durability(itemstack) - itemstack:add_wear(65535 / uses * n) -end - -function mcl_util.deal_damage(target, damage, mcl_reason) - local luaentity = target:get_luaentity() - - if luaentity then - if luaentity.deal_damage then - luaentity:deal_damage(damage, mcl_reason or {type = "generic"}) - return - elseif luaentity.is_mob then - -- local puncher = mcl_reason and mcl_reason.direct or target - -- target:punch(puncher, 1.0, {full_punch_interval = 1.0, damage_groups = {fleshy = damage}}, vector.direction(puncher:get_pos(), target:get_pos()), damage) - if luaentity.health > 0 then - luaentity.health = luaentity.health - damage - end - return - end - end - - local hp = target:get_hp() - - if hp > 0 then - target:set_hp(hp - damage, {_mcl_reason = mcl_reason}) - end -end - -function mcl_util.get_hp(obj) - local luaentity = obj:get_luaentity() - - if luaentity and luaentity.is_mob then - return luaentity.health - else - return obj:get_hp() - end -end - -function mcl_util.get_inventory(object, create) - if object:is_player() then - return object:get_inventory() - else - local luaentity = object:get_luaentity() - local inventory = luaentity.inventory - - if create and not inventory and luaentity.create_inventory then - inventory = luaentity:create_inventory() - end - - return inventory - end -end - -function mcl_util.get_wielded_item(object) - if object:is_player() then - return object:get_wielded_item() - else - -- ToDo: implement getting wielditems from mobs as soon as mobs have wielditems - return ItemStack() - end -end - -function mcl_util.get_object_name(object) - if object:is_player() then - return object:get_player_name() - else - local luaentity = object:get_luaentity() - - if not luaentity then - return tostring(object) - end - - return luaentity.nametag and luaentity.nametag ~= "" and luaentity.nametag or luaentity.description or luaentity.name - end -end - -function mcl_util.replace_mob(obj, mob) - local rot = obj:get_yaw() - local pos = obj:get_pos() - obj:remove() - obj = minetest.add_entity(pos, mob) - obj:set_yaw(rot) - return obj -end - -function mcl_util.get_pointed_thing(player, liquid) - local pos = vector.offset(player:get_pos(), 0, player:get_properties().eye_height, 0) - local look_dir = vector.multiply(player:get_look_dir(), 5) - local pos2 = vector.add(pos, look_dir) - local ray = minetest.raycast(pos, pos2, false, liquid) - - if ray then - for pointed_thing in ray do - return pointed_thing - end - end -end diff --git a/mods/CORE/mcl_util/mod.conf b/mods/CORE/mcl_util/mod.conf deleted file mode 100644 index 82f9137e4..000000000 --- a/mods/CORE/mcl_util/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_util -author = Wuzzy -description = Helper functions for MineClone 2. -depends = mcl_init diff --git a/mods/CORE/mcl_worlds/API.md b/mods/CORE/mcl_worlds/API.md deleted file mode 100644 index 69508e924..000000000 --- a/mods/CORE/mcl_worlds/API.md +++ /dev/null @@ -1,81 +0,0 @@ -# mcl_worlds -This mod provides utility functions about positions and dimensions. - -## mcl_worlds.is_in_void(pos) -This function returns: - -* true, true: if pos is in deep void (deadly) -* true, false: if the pos is in void (non deadly) -* false, false: owerwise - -Params: - -* pos: position - -## mcl_worlds.y_to_layer(y) -This function is used to calculate the minetest y layer and dimension of the given minecraft layer. -Mainly used for ore generation. -Takes an Y coordinate as input and returns: - -* The corresponding Minecraft layer (can be nil if void) -* The corresponding Minecraft dimension ("overworld", "nether" or "end") or "void" if is in the void -If the Y coordinate is not located in any dimension, it will return: nil, "void" - -Params: - -* y: int - -## mcl_worlds.pos_to_dimension(pos) -This function return the Minecraft dimension of ("overworld", "nether" or "end") or "void" if is in the void. - -* pos: position - -## mcl_worlds.layer_to_y(layer, mc_dimension) -Takes a Minecraft layer and a “dimension” name and returns the corresponding Y coordinate for MineClone 2. -mc_dimension can be "overworld", "nether", "end" (default: "overworld"). - -* layer: int -* mc_dimension: string - -## mcl_worlds.has_weather(pos) -Returns true if can have weather, false owerwise. -Weather can be only in the overworld. - -* pos: position - -## mcl_worlds.has_dust(pos) -Returns true if can have nether dust, false owerwise. -Nether dust can be only in the nether. - -* pos: position - -## mcl_worlds.compass_works(pos) -Returns true if compasses are working at , false owerwise. -In mc, you cant use compass in the nether and the end. - -* pos: position - -## mcl_worlds.compass_works(pos) -Returns true if clock are working at , false owerwise. -In mc, you cant use clock in the nether and the end. - -* pos: position - -## mcl_worlds.register_on_dimension_change(function(player, dimension, last_dimension)) -Register a callback function func(player, dimension). -It will be called whenever a player changes between dimensions. -The void counts as dimension. - -* player: player, the player who changed of dimension -* dimension: string, The new dimension of the player ("overworld", "nether", "end", "void"). -* last_dimension: string, The dimension where the player was ("overworld", "nether", "end", "void"). - - -## mcl_worlds.registered_on_dimension_change -Table containing all function registered with mcl_worlds.register_on_dimension_change() - -## mcl_worlds.dimension_change(player, dimension) -Notify this mod of a dimension change of to - -* player: player, player who changed the dimension -* dimension: string, new dimension ("overworld", "nether", "end", "void") diff --git a/mods/CORE/mcl_worlds/init.lua b/mods/CORE/mcl_worlds/init.lua deleted file mode 100644 index 4f8914506..000000000 --- a/mods/CORE/mcl_worlds/init.lua +++ /dev/null @@ -1,174 +0,0 @@ -mcl_worlds = {} - -local get_connected_players = minetest.get_connected_players - --- For a given position, returns a 2-tuple: --- 1st return value: true if pos is in void --- 2nd return value: true if it is in the deadly part of the void -function mcl_worlds.is_in_void(pos) - local void = - not ((pos.y < mcl_vars.mg_overworld_max and pos.y > mcl_vars.mg_overworld_min) or - (pos.y < mcl_vars.mg_nether_max+128 and pos.y > mcl_vars.mg_nether_min) or - (pos.y < mcl_vars.mg_end_max and pos.y > mcl_vars.mg_end_min)) - - local void_deadly = false - local deadly_tolerance = 64 -- the player must be this many nodes “deep” into the void to be damaged - if void then - -- Overworld → Void → End → Void → Nether → Void - if pos.y < mcl_vars.mg_overworld_min and pos.y > mcl_vars.mg_end_max then - void_deadly = pos.y < mcl_vars.mg_overworld_min - deadly_tolerance - elseif pos.y < mcl_vars.mg_end_min and pos.y > mcl_vars.mg_nether_max+128 then - -- The void between End and Nether. Like usual, but here, the void - -- *above* the Nether also has a small tolerance area, so player - -- can fly above the Nether without getting hurt instantly. - void_deadly = (pos.y < mcl_vars.mg_end_min - deadly_tolerance) and (pos.y > mcl_vars.mg_nether_max+128 + deadly_tolerance) - elseif pos.y < mcl_vars.mg_nether_min then - void_deadly = pos.y < mcl_vars.mg_nether_min - deadly_tolerance - end - end - return void, void_deadly -end - --- Takes an Y coordinate as input and returns: --- 1) The corresponding Minecraft layer (can be nil if void) --- 2) The corresponding Minecraft dimension ("overworld", "nether" or "end") or "void" if it is in the void --- If the Y coordinate is not located in any dimension, it will return: --- nil, "void" -function mcl_worlds.y_to_layer(y) - if y >= mcl_vars.mg_overworld_min then - return y - mcl_vars.mg_overworld_min, "overworld" - elseif y >= mcl_vars.mg_nether_min and y <= mcl_vars.mg_nether_max+128 then - return y - mcl_vars.mg_nether_min, "nether" - elseif y >= mcl_vars.mg_end_min and y <= mcl_vars.mg_end_max then - return y - mcl_vars.mg_end_min, "end" - else - return nil, "void" - end -end - -local y_to_layer = mcl_worlds.y_to_layer - --- Takes a pos and returns the dimension it belongs to (same as above) -function mcl_worlds.pos_to_dimension(pos) - local _, dim = y_to_layer(pos.y) - return dim -end - -local pos_to_dimension = mcl_worlds.pos_to_dimension - --- Takes a Minecraft layer and a “dimension” name --- and returns the corresponding Y coordinate for --- MineClone 2. --- mc_dimension is one of "overworld", "nether", "end" (default: "overworld"). -function mcl_worlds.layer_to_y(layer, mc_dimension) - if mc_dimension == "overworld" or mc_dimension == nil then - return layer + mcl_vars.mg_overworld_min - elseif mc_dimension == "nether" then - return layer + mcl_vars.mg_nether_min - elseif mc_dimension == "end" then - return layer + mcl_vars.mg_end_min - end -end - --- Takes a position and returns true if this position can have weather -function mcl_worlds.has_weather(pos) - -- Weather in the Overworld and the high part of the void below - return pos.y <= mcl_vars.mg_overworld_max and pos.y >= mcl_vars.mg_overworld_min - 64 -end - --- Takes a position and returns true if this position can have Nether dust -function mcl_worlds.has_dust(pos) - -- Weather in the Overworld and the high part of the void below - return pos.y <= mcl_vars.mg_nether_max + 138 and pos.y >= mcl_vars.mg_nether_min - 10 -end - --- Takes a position (pos) and returns true if compasses are working here -function mcl_worlds.compass_works(pos) - -- It doesn't work in Nether and the End, but it works in the Overworld and in the high part of the void below - local _, dim = mcl_worlds.y_to_layer(pos.y) - if dim == "nether" or dim == "end" then - return false - elseif dim == "void" then - return pos.y <= mcl_vars.mg_overworld_max and pos.y >= mcl_vars.mg_overworld_min - 64 - else - return true - end -end - --- Takes a position (pos) and returns true if clocks are working here -mcl_worlds.clock_works = mcl_worlds.compass_works - ---------------- CALLBACKS ------------------ -mcl_worlds.registered_on_dimension_change = {} - --- Register a callback function func(player, dimension). --- It will be called whenever a player changes between dimensions. --- The void counts as dimension. --- * player: The player who changed the dimension --- * dimension: The new dimension of the player ("overworld", "nether", "end", "void"). -function mcl_worlds.register_on_dimension_change(func) - table.insert(mcl_worlds.registered_on_dimension_change, func) -end - --- Playername-indexed table containig the name of the last known dimension the --- player was in. -local last_dimension = {} - --- Notifies this mod about a dimension change of a player. --- * player: Player who changed the dimension --- * dimension: New dimension ("overworld", "nether", "end", "void") -function mcl_worlds.dimension_change(player, dimension) - local playername = player:get_player_name() - for i=1, #mcl_worlds.registered_on_dimension_change do - mcl_worlds.registered_on_dimension_change[i](player, dimension, last_dimension[playername]) - end - last_dimension[playername] = dimension -end - -local dimension_change = mcl_worlds.dimension_change - ------------------------ INTERNAL STUFF ---------------------- - --- Update the dimension callbacks every DIM_UPDATE seconds -local DIM_UPDATE = 1 -local dimtimer = 0 - -minetest.register_on_joinplayer(function(player) - last_dimension[player:get_player_name()] = pos_to_dimension(player:get_pos()) -end) - -minetest.register_globalstep(function(dtime) - -- regular updates based on iterval - dimtimer = dimtimer + dtime; - if dimtimer >= DIM_UPDATE then - local players = get_connected_players() - for p = 1, #players do - local dim = pos_to_dimension(players[p]:get_pos()) - local name = players[p]:get_player_name() - if dim ~= last_dimension[name] then - dimension_change(players[p], dim) - end - end - dimtimer = 0 - end -end) - -function mcl_worlds.get_cloud_parameters() - if minetest.get_mapgen_setting("mg_name") == "valleys" then - return { - height = 384, --valleys has a much higher average elevation thus often "normal" landscape ends up in the clouds - speed = {x=-2, z=0}, - thickness=5, - color="#FFF0FEF", - ambient = "#201060", - } - else - -- MC-style clouds: Layer 127, thickness 4, fly to the “West” - return { - height = mcl_worlds.layer_to_y(127), - speed = {x=-2, z=0}, - thickness = 4, - color = "#FFF0FEF", - } - end -end diff --git a/mods/CORE/mcl_worlds/mod.conf b/mods/CORE/mcl_worlds/mod.conf deleted file mode 100644 index 4b979b4fe..000000000 --- a/mods/CORE/mcl_worlds/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_worlds -author = Wuzzy -description = Utility functions for worlds and the “dimensions”. -depends = mcl_init - diff --git a/mods/CORE/modpack.conf b/mods/CORE/modpack.conf deleted file mode 100644 index 7cbf0f670..000000000 --- a/mods/CORE/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = CORE -description = Meta-modpack containing the core mods for MineClone 2 for core APIs, variables and definitions diff --git a/mods/CORE/tga_encoder/README.md b/mods/CORE/tga_encoder/README.md deleted file mode 100644 index 9b3293dda..000000000 --- a/mods/CORE/tga_encoder/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# tga_encoder -A TGA Encoder written in Lua without the use of external Libraries. - -May be used as a Minetest mod. diff --git a/mods/CORE/tga_encoder/init.lua b/mods/CORE/tga_encoder/init.lua deleted file mode 100644 index 24ec502e1..000000000 --- a/mods/CORE/tga_encoder/init.lua +++ /dev/null @@ -1,92 +0,0 @@ -tga_encoder = {} - -local image = setmetatable({}, { - __call = function(self, ...) - local t = setmetatable({}, {__index = self}) - t:constructor(...) - return t - end, -}) - -function image:constructor(pixels) - self.data = "" - self.pixels = pixels - self.width = #pixels[1] - self.height = #pixels - - self:encode() -end - -function image:encode_colormap_spec() - self.data = self.data - .. string.char(0, 0) -- first entry index - .. string.char(0, 0) -- number of entries - .. string.char(0) -- bits per pixel -end - -function image:encode_image_spec() - self.data = self.data - .. string.char(0, 0) -- X-origin - .. string.char(0, 0) -- Y-origin - .. string.char(self.width % 256, math.floor(self.width / 256)) -- width - .. string.char(self.height % 256, math.floor(self.height / 256)) -- height - .. string.char(24) -- pixel depth (RGB = 3 bytes = 24 bits) - .. string.char(0) -- image descriptor -end - -function image:encode_header() - self.data = self.data - .. string.char(0) -- image id - .. string.char(0) -- color map type - .. string.char(10) -- image type (RLE RGB = 10) - self:encode_colormap_spec() -- color map specification - self:encode_image_spec() -- image specification -end - -function image:encode_data() - local current_pixel = '' - local previous_pixel = '' - local count = 1 - local packets = {} - local rle_packet = '' - for _, row in ipairs(self.pixels) do - for _, pixel in ipairs(row) do - current_pixel = string.char(pixel[3], pixel[2], pixel[1]) - if current_pixel ~= previous_pixel or count == 128 then - packets[#packets +1] = rle_packet - count = 1 - previous_pixel = current_pixel - else - count = count + 1 - end - rle_packet = string.char(128 + count - 1) .. current_pixel - end - end - packets[#packets +1] = rle_packet - self.data = self.data .. table.concat(packets) -end - -function image:encode_footer() - self.data = self.data - .. string.char(0, 0, 0, 0) -- extension area offset - .. string.char(0, 0, 0, 0) -- developer area offset - .. "TRUEVISION-XFILE" - .. "." - .. string.char(0) -end - -function image:encode() - self:encode_header() -- header - -- no color map and image id data - self:encode_data() -- encode data - -- no extension or developer area - self:encode_footer() -- footer -end - -function image:save(filename) - local f = assert(io.open(filename, "wb")) - f:write(self.data) - f:close() -end - -tga_encoder.image = image diff --git a/mods/CORE/tga_encoder/mod.conf b/mods/CORE/tga_encoder/mod.conf deleted file mode 100644 index e4bfac898..000000000 --- a/mods/CORE/tga_encoder/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = tga_encoder -author = Fleckenstein -description = A TGA Encoder written in Lua without the use of external Libraries. diff --git a/mods/CORE/walkover/LICENSE b/mods/CORE/walkover/LICENSE deleted file mode 100644 index 8dada3eda..000000000 --- a/mods/CORE/walkover/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/mods/CORE/walkover/README.md b/mods/CORE/walkover/README.md deleted file mode 100644 index d3922ee7b..000000000 --- a/mods/CORE/walkover/README.md +++ /dev/null @@ -1,24 +0,0 @@ -Walkover --------- - -Some mode developers have shown an interest in having an `on_walk_over` event. This is useful for pressure-plates and the like. - -See this issue - https://github.com/minetest/minetest/issues/247 - -I have implemented a server-side version in Lua using globalstep which people might find useful. Of course this would better implemented via a client-based "on walk over", but it is sufficient for my needs now. - -Example Usage -------------- - - minetest.register_node("somemod:someblock", { - description = "Talking Block", - tiles = {"somemod_someblock.png"}, - on_walk_over = function(pos, node, player) - minetest.chat_send_player(player, "Hey! Watch it!") - end - }) - - -Credits -------- -Mod created by lordfingle, licensed under Apache License 2.0. diff --git a/mods/CORE/walkover/init.lua b/mods/CORE/walkover/init.lua deleted file mode 100644 index eb9de4218..000000000 --- a/mods/CORE/walkover/init.lua +++ /dev/null @@ -1,50 +0,0 @@ --- register extra flavours of a base nodedef - -local get_connected_players = minetest.get_connected_players -local get_node = minetest.get_node -local vector = vector -local ceil = math.ceil -local pairs = pairs - -walkover = {} - -local on_walk = {} -local registered_globals = {} - -walkover.registered_globals = registered_globals - -function walkover.register_global(func) - table.insert(registered_globals, func) -end - -minetest.register_on_mods_loaded(function() - for name,def in pairs(minetest.registered_nodes) do - if def.on_walk_over then - on_walk[name] = def.on_walk_over - end - end -end) - -local timer = 0 -minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer >= 0.3 then - for _, player in pairs(get_connected_players()) do - local ppos = player:get_pos() - ppos.y = ceil(ppos.y) - local npos = vector.add(ppos, vector.new(0, -1, 0)) - if npos then - local node = get_node(npos) - if node then - if on_walk[node.name] then - on_walk[node.name](npos, node, player) - end - for i = 1, #registered_globals do - registered_globals[i](npos, node, player) - end - end - end - end - timer = 0 - end -end) diff --git a/mods/CORE/walkover/mod.conf b/mods/CORE/walkover/mod.conf deleted file mode 100644 index 837d81365..000000000 --- a/mods/CORE/walkover/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = walkover -author = lordfingle -description = Some mode developers have shown an interest in having an `on_walk_over` event. This is useful for pressure-plates and the like. - diff --git a/mods/ENTITIES/mcl_boats/README.txt b/mods/ENTITIES/mcl_boats/README.txt deleted file mode 100644 index 0d56aa0e1..000000000 --- a/mods/ENTITIES/mcl_boats/README.txt +++ /dev/null @@ -1,23 +0,0 @@ -# mcl_boats -This mod adds drivable boats. - -# Credits -## Mesh -Boat mesh (`models/mcl_boats_boat.b3d`) created by 22i. -Source: https://github.com/22i/minecraft-voxel-blender-models - -License of boat model: -GNU GPLv3 - -## Textures -See the main MineClone 2 README.md file to learn more. - -## Code -Code based on Minetest Game, licensed under the MIT License (MIT). - -Authors include: -* PilzAdam (2012-2016) -* Various Minetest / Minetest Game developers and contributors (2012-2016) -* maikerumine (2017) -* Wuzzy (2017) -* Fleckenstein (2020-2021) diff --git a/mods/ENTITIES/mcl_boats/init.lua b/mods/ENTITIES/mcl_boats/init.lua deleted file mode 100644 index a44e7ea87..000000000 --- a/mods/ENTITIES/mcl_boats/init.lua +++ /dev/null @@ -1,484 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local boat_visual_size = {x = 1, y = 1, z = 1} -local paddling_speed = 22 -local boat_y_offset = 0.35 -local boat_y_offset_ground = boat_y_offset + 0.6 -local boat_side_offset = 1.001 -local boat_max_hp = 4 - -local function is_group(pos, group) - local nn = minetest.get_node(pos).name - return minetest.get_item_group(nn, group) ~= 0 -end - -local is_water = flowlib.is_water - -local function is_ice(pos) - return is_group(pos, "ice") -end - -local function get_sign(i) - if i == 0 then - return 0 - else - return i / math.abs(i) - end -end - -local function get_velocity(v, yaw, y) - local x = -math.sin(yaw) * v - local z = math.cos(yaw) * v - return {x = x, y = y, z = z} -end - -local function get_v(v) - return math.sqrt(v.x ^ 2 + v.z ^ 2) -end - -local function check_object(obj) - return obj and (obj:is_player() or obj:get_luaentity()) and obj -end - -local function get_visual_size(obj) - return obj:is_player() and {x = 1, y = 1, z = 1} or obj:get_luaentity()._old_visual_size or obj:get_properties().visual_size -end - -local function set_attach(boat) - boat._driver:set_attach(boat.object, "", - {x = 0, y = 0.42, z = -1}, {x = 0, y = 0, z = 0}) -end - -local function set_double_attach(boat) - boat._driver:set_attach(boat.object, "", - {x = 0, y = 0.42, z = 0.8}, {x = 0, y = 0, z = 0}) - boat._passenger:set_attach(boat.object, "", - {x = 0, y = 0.42, z = -2.2}, {x = 0, y = 0, z = 0}) -end - -local function attach_object(self, obj) - if self._driver then - if self._driver:is_player() then - self._passenger = obj - else - self._passenger = self._driver - self._driver = obj - end - set_double_attach(self) - else - self._driver = obj - set_attach(self) - end - - local visual_size = get_visual_size(obj) - local yaw = self.object:get_yaw() - obj:set_properties({visual_size = vector.divide(visual_size, boat_visual_size)}) - - if obj:is_player() then - local name = obj:get_player_name() - mcl_player.player_attached[name] = true - minetest.after(0.2, function(name) - local player = minetest.get_player_by_name(name) - if player then - mcl_player.player_set_animation(player, "sit" , 30) - end - end, name) - obj:set_look_horizontal(yaw) - mcl_title.set(obj, "actionbar", {text=S("Sneak to dismount"), color="white", stay=60}) - else - obj:get_luaentity()._old_visual_size = visual_size - end -end - -local function detach_object(obj, change_pos) - obj:set_detach() - obj:set_properties({visual_size = get_visual_size(obj)}) - if obj:is_player() then - mcl_player.player_attached[obj:get_player_name()] = false - mcl_player.player_set_animation(obj, "stand" , 30) - else - obj:get_luaentity()._old_visual_size = nil - end - if change_pos then - obj:set_pos(vector.add(obj:get_pos(), vector.new(0, 0.2, 0))) - end -end - --- --- Boat entity --- - -local boat = { - physical = true, - pointable = true, - -- Warning: Do not change the position of the collisionbox top surface, - -- lowering it causes the boat to fall through the world if underwater - collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, - selectionbox = {-0.7, -0.35, -0.7, 0.7, 0.3, 0.7}, - visual = "mesh", - mesh = "mcl_boats_boat.b3d", - textures = {"mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png"}, - visual_size = boat_visual_size, - hp_max = boat_max_hp, - damage_texture_modifier = "^[colorize:white:0", - - _driver = nil, -- Attached driver (player) or nil if none - _passenger = nil, - _v = 0, -- Speed - _last_v = 0, -- Temporary speed variable - _removed = false, -- If true, boat entity is considered removed (e.g. after punch) and should be ignored - _itemstring = "mcl_boats:boat", -- Itemstring of the boat item (implies boat type) - _animation = 0, -- 0: not animated; 1: paddling forwards; -1: paddling forwards - _regen_timer = 0, - _damage_anim = 0, -} - -minetest.register_on_respawnplayer(detach_object) - -function boat.on_rightclick(self, clicker) - if self._passenger or not clicker or clicker:get_attach() then - return - end - attach_object(self, clicker) -end - - -function boat.on_activate(self, staticdata, dtime_s) - self.object:set_armor_groups({fleshy = 100}) - local data = minetest.deserialize(staticdata) - if type(data) == "table" then - self._v = data.v - self._last_v = self._v - self._itemstring = data.itemstring - - while #data.textures < 5 do - table.insert(data.textures, data.textures[1]) - end - - self.object:set_properties({textures = data.textures}) - end -end - -function boat.get_staticdata(self) - return minetest.serialize({ - v = self._v, - itemstring = self._itemstring, - textures = self.object:get_properties().textures - }) -end - -function boat.on_death(self, killer) - mcl_burning.extinguish(self.object) - - if killer and killer:is_player() and minetest.is_creative_enabled(killer:get_player_name()) then - local inv = killer:get_inventory() - if not inv:contains_item("main", self._itemstring) then - inv:add_item("main", self._itemstring) - end - else - minetest.add_item(self.object:get_pos(), self._itemstring) - end - if self._driver then - detach_object(self._driver) - end - if self._passenger then - detach_object(self._passenger) - end - self._driver = nil - self._passenger = nil -end - -function boat.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) - if damage > 0 then - self._regen_timer = 0 - end -end - -function boat.on_step(self, dtime, moveresult) - mcl_burning.tick(self.object, dtime, self) - - self._v = get_v(self.object:get_velocity()) * get_sign(self._v) - local v_factor = 1 - local v_slowdown = 0.02 - local p = self.object:get_pos() - local on_water = true - local on_ice = false - local in_water = is_water({x=p.x, y=p.y-boat_y_offset+1, z=p.z}) - local waterp = {x=p.x, y=p.y-boat_y_offset - 0.1, z=p.z} - if not is_water(waterp) then - on_water = false - if not in_water and is_ice(waterp) then - on_ice = true - else - v_slowdown = 0.04 - v_factor = 0.5 - end - elseif in_water then - on_water = false - in_water = true - v_factor = 0.75 - v_slowdown = 0.05 - end - - local hp = self.object:get_hp() - local regen_timer = self._regen_timer + dtime - if hp >= boat_max_hp then - regen_timer = 0 - elseif regen_timer >= 0.5 then - hp = hp + 1 - self.object:set_hp(hp) - regen_timer = 0 - end - self._regen_timer = regen_timer - - if moveresult and moveresult.collides then - for _, collision in pairs(moveresult.collisions) do - local pos = collision.node_pos - if collision.type == "node" and minetest.get_item_group(minetest.get_node(pos).name, "dig_by_boat") > 0 then - minetest.dig_node(pos) - end - end - end - - local had_passenger = self._passenger - - self._driver = check_object(self._driver) - self._passenger = check_object(self._passenger) - - if self._passenger then - if not self._driver then - self._driver = self._passenger - self._passenger = nil - else - local ctrl = self._passenger:get_player_control() - if ctrl and ctrl.sneak then - detach_object(self._passenger, true) - self._passenger = nil - end - end - end - - if self._driver then - if had_passenger and not self._passenger then - set_attach(self) - end - local ctrl = self._driver:get_player_control() - if ctrl and ctrl.sneak then - detach_object(self._driver, true) - self._driver = nil - return - end - local yaw = self.object:get_yaw() - if ctrl and ctrl.up then - -- Forwards - self._v = self._v + 0.1 * v_factor - - -- Paddling animation - if self._animation ~= 1 then - self.object:set_animation({x=0, y=40}, paddling_speed, 0, true) - self._animation = 1 - end - elseif ctrl and ctrl.down then - -- Backwards - self._v = self._v - 0.1 * v_factor - - -- Paddling animation, reversed - if self._animation ~= -1 then - self.object:set_animation({x=0, y=40}, -paddling_speed, 0, true) - self._animation = -1 - end - else - -- Stop paddling animation if no control pressed - if self._animation ~= 0 then - self.object:set_animation({x=0, y=40}, 0, 0, true) - self._animation = 0 - end - end - if ctrl and ctrl.left then - if self._v < 0 then - self.object:set_yaw(yaw - (1 + dtime) * 0.03 * v_factor) - else - self.object:set_yaw(yaw + (1 + dtime) * 0.03 * v_factor) - end - elseif ctrl and ctrl.right then - if self._v < 0 then - self.object:set_yaw(yaw + (1 + dtime) * 0.03 * v_factor) - else - self.object:set_yaw(yaw - (1 + dtime) * 0.03 * v_factor) - end - end - else - -- Stop paddling without driver - if self._animation ~= 0 then - self.object:set_animation({x=0, y=40}, 0, 0, true) - self._animation = 0 - end - - for _, obj in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 1.3)) do - local entity = obj:get_luaentity() - if entity and entity.is_mob then - attach_object(self, obj) - break - end - end - end - local s = get_sign(self._v) - if not on_ice and not on_water and not in_water and math.abs(self._v) > 2.0 then - v_slowdown = math.min(math.abs(self._v) - 2.0, v_slowdown * 5) - elseif not on_ice and in_water and math.abs(self._v) > 1.5 then - v_slowdown = math.min(math.abs(self._v) - 1.5, v_slowdown * 5) - end - self._v = self._v - v_slowdown * s - if s ~= get_sign(self._v) then - self._v = 0 - end - - p.y = p.y - boat_y_offset - local new_velo - local new_acce - if not is_water(p) and not on_ice then - -- Not on water or inside water: Free fall - --local nodedef = minetest.registered_nodes[minetest.get_node(p).name] - new_acce = {x = 0, y = -9.8, z = 0} - new_velo = get_velocity(self._v, self.object:get_yaw(), - self.object:get_velocity().y) - else - p.y = p.y + 1 - local is_obsidian_boat = self.object:get_luaentity()._itemstring == "mcl_boats:boat_obsidian" - if is_water(p) or is_obsidian_boat then - -- Inside water: Slowly sink - local y = self.object:get_velocity().y - y = y - 0.01 - if y < -0.2 then - y = -0.2 - end - new_acce = {x = 0, y = 0, z = 0} - new_velo = get_velocity(self._v, self.object:get_yaw(), y) - else - -- On top of water - new_acce = {x = 0, y = 0, z = 0} - if math.abs(self.object:get_velocity().y) < 0 then - new_velo = get_velocity(self._v, self.object:get_yaw(), 0) - else - new_velo = get_velocity(self._v, self.object:get_yaw(), - self.object:get_velocity().y) - end - end - end - - -- Terminal velocity: 8 m/s per axis of travel - local terminal_velocity = on_ice and 57.1 or 8.0 - for _,axis in pairs({"z","y","x"}) do - if math.abs(new_velo[axis]) > terminal_velocity then - new_velo[axis] = terminal_velocity * get_sign(new_velo[axis]) - end - end - - local yaw = self.object:get_yaw() - local anim = (boat_max_hp - hp - regen_timer * 2) / boat_max_hp * math.pi / 4 - - self.object:set_rotation(vector.new(anim, yaw, anim)) - self.object:set_velocity(new_velo) - self.object:set_acceleration(new_acce) -end - --- Register one entity for all boat types -minetest.register_entity("mcl_boats:boat", boat) - -local boat_ids = { "boat", "boat_spruce", "boat_birch", "boat_jungle", "boat_acacia", "boat_dark_oak", "boat_obsidian" } -local names = { S("Oak Boat"), S("Spruce Boat"), S("Birch Boat"), S("Jungle Boat"), S("Acacia Boat"), S("Dark Oak Boat"), S("Obsidian Boat") } -local craftstuffs = {} -if minetest.get_modpath("mcl_core") then - craftstuffs = { "mcl_core:wood", "mcl_core:sprucewood", "mcl_core:birchwood", "mcl_core:junglewood", "mcl_core:acaciawood", "mcl_core:darkwood", "mcl_core:obsidian" } -end -local images = { "oak", "spruce", "birch", "jungle", "acacia", "dark_oak", "obsidian" } - -for b=1, #boat_ids do - local itemstring = "mcl_boats:"..boat_ids[b] - - local longdesc, usagehelp, tt_help, help, helpname - help = false - -- Only create one help entry for all boats - if b == 1 then - help = true - longdesc = S("Boats are used to travel on the surface of water.") - usagehelp = S("Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.") - helpname = S("Boat") - end - tt_help = S("Water vehicle") - - minetest.register_craftitem(itemstring, { - description = names[b], - _tt_help = tt_help, - _doc_items_create_entry = help, - _doc_items_entry_name = helpname, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - inventory_image = "mcl_boats_"..images[b].."_boat.png", - liquids_pointable = true, - groups = { boat = 1, transport = 1}, - stack_max = 1, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local pos = table.copy(pointed_thing.under) - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - - if math.abs(dir.x) > 0.9 or math.abs(dir.z) > 0.9 then - pos = vector.add(pos, vector.multiply(dir, boat_side_offset)) - elseif is_water(pos) then - pos = vector.add(pos, vector.multiply(dir, boat_y_offset)) - else - pos = vector.add(pos, vector.multiply(dir, boat_y_offset_ground)) - end - local boat = minetest.add_entity(pos, "mcl_boats:boat") - local texture = "mcl_boats_texture_"..images[b].."_boat.png" - boat:get_luaentity()._itemstring = itemstring - boat:set_properties({textures = { texture, texture, texture, texture, texture }}) - boat:set_yaw(placer:get_look_horizontal()) - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - local below = {x=droppos.x, y=droppos.y-1, z=droppos.z} - local belownode = minetest.get_node(below) - -- Place boat as entity on or in water - if minetest.get_item_group(dropnode.name, "water") ~= 0 or (dropnode.name == "air" and minetest.get_item_group(belownode.name, "water") ~= 0) then - minetest.add_entity(droppos, "mcl_boats:boat") - else - minetest.add_item(droppos, stack) - end - end, - }) - - local c = craftstuffs[b] - minetest.register_craft({ - output = itemstring, - recipe = { - {c, "", c}, - {c, c, c}, - }, - }) -end - -minetest.register_craft({ - type = "fuel", - recipe = "group:boat", - burntime = 20, -}) - -if minetest.get_modpath("doc_identifier") then - doc.sub.identifier.register_object("mcl_boats:boat", "craftitems", "mcl_boats:boat") -end diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.de.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.de.tr deleted file mode 100644 index c1864a871..000000000 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.de.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_boats -Acacia Boat=Akazienboot -Birch Boat=Birkenboot -Boat=Boot -Boats are used to travel on the surface of water.=Boote werden benutzt, um sich auf der Wasseroberfläche zu bewegen. -Dark Oak Boat=Schwarzeichenboot -Jungle Boat=Dschungelboot -Oak Boat=Eichenboot -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Rechtsklicken Sie auf eine Wasserquelle, um das Boot zu platzieren. Rechtsklicken Sie auf das Boot, um es zu betreten. Mit [Links] und [Rechts] lenken, mit [Vorwärts] und [Rückwärts] Geschwindigkeit regeln oder rückwärts fahren. Nutzen sie [Schleichen], um das Boot zu verlassen, schlagen Sie das Boot, um es als Gegenstand fallen zu lassen. -Spruce Boat=Fichtenboot -Water vehicle=Wasserfahrzeug -Sneak to dismount=Zum Aussteigen schleichen diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.es.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.es.tr deleted file mode 100644 index 644efdb6b..000000000 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_boats -Acacia Boat=Barca de acacia -Birch Boat=Barca de abedul -Boat=Barca -Boats are used to travel on the surface of water.=Las barcas se utilizan para viajar en la superficie del agua. -Dark Oak Boat=Barca de roble oscuro -Jungle Boat=Barca de la selva -Oak Boat=Barca de roble -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=Haga clic derecho en una fuente de agua para colocar el barco. Haga clic derecho en el barco para entrar. Utilice [Izquierda] y [Derecha] para dirigir, [Adelante] para acelerar y [Atrás] para reducir la velocidad o retroceder. Haga clic derecho en el barco nuevamente para dejarlo, golpee el barco para que se caiga como un artículo. -Spruce Boat=Barca de abeto diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.fr.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.fr.tr deleted file mode 100644 index 785d50146..000000000 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.fr.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_boats -Acacia Boat=Bateau en Acacia -Birch Boat=Bateau en Bouleau -Boat=Bateau -Boats are used to travel on the surface of water.=Les bateaux sont utilisés pour voyager à la surface de l'eau. -Dark Oak Boat=Bateau en Chêne Noir -Jungle Boat=Bateau en Acajou -Oak Boat=Bateau en Chêne -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Faites un clic droit sur une source d'eau pour placer le bateau. Faites un clic droit sur le bateau pour y entrer. Utilisez [Gauche] et [Droite] pour diriger, [Avant] pour accélérer et [Arrière] pour ralentir ou reculer. Utilisez [Sneak] pour le quitter, frappez le bateau pour le faire tomber en tant qu'objet. -Spruce Boat=Bateau en Sapin -Water vehicle=Véhicule aquatique -Sneak to dismount= \ No newline at end of file diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.pl.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.pl.tr deleted file mode 100644 index 17b5183bc..000000000 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.pl.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_boats -Acacia Boat=Akacjowa łódź -Birch Boat=Brzozowa łódź -Boat=Łódź -Boats are used to travel on the surface of water.=Łodzie są wykorzystywane do podróżowania po powierzchni wody. -Dark Oak Boat=Ciemno-dębowa łódź -Jungle Boat=Tropikalna łódź -Oak Boat=Dębowa łódź -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Kliknij prawym przyciskiem myszy na źródło wody by postawić łódź. Kliknij prawym przyciskiem myszy by w nią wsiąść. Użyj przycisków [Lewy] oraz [Prawy] by sterować, [Naprzód] by przyspieszyć i [W tył] by zwolnić lub się cofać. Kliknij [Skradanie] by z niej wyjść, uderz ją by wziąć ją jako przedmiot. -Spruce Boat=Świerkowa łódź -Water vehicle=Pojazd wodny -Sneak to dismount=Skradaj się by opuścić łódź diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.ru.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.ru.tr deleted file mode 100644 index 5bd6e4c4d..000000000 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_boats -Acacia Boat=Лодка из акации -Birch Boat=Берёзовая лодка -Boat=Лодка -Boats are used to travel on the surface of water.=С помощью лодки можно путешествовать по водной поверхности. -Dark Oak Boat=Лодка из тёмного дуба -Jungle Boat=Лодка из дерева джунглей -Oak Boat=Дубовая лодка -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=Правый клик по воде спустит лодку на воду. Правый клик по лодке разместит вас в ней. [Влево] и [Вправо] - рулить, [Вперед] - разгоняться, [Назад] - тормозить или плыть назад. Правый клик по лодке, когда вы в ней, позволит выйти из неё. Удар по лодке превратит её обратно в предмет. -Spruce Boat=Еловая лодка -Water vehicle=Водный транспорт diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.zh_TW.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.zh_TW.tr deleted file mode 100644 index c1c404f2a..000000000 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.zh_TW.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_boats -Acacia Boat=相思木船 -Birch Boat=白樺木船 -Boat=船 -Boats are used to travel on the surface of water.=船是用來在水上行走的交通工具。 -Dark Oak Boat=黑橡木船 -Jungle Boat=叢林木船 -Oak Boat=橡木船 -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=右鍵單擊水源以放置船。右鍵單擊船以搭乘它。使用[左]和[右]進行轉向,[向前]加快速度,[向後]減速或向後移動。再次右鍵單擊船以離開它,打擊船以使其掉落為物品。 -Spruce Boat=杉木船 -Water vehicle=水上交通工具 diff --git a/mods/ENTITIES/mcl_boats/locale/template.txt b/mods/ENTITIES/mcl_boats/locale/template.txt deleted file mode 100644 index ac52bc19f..000000000 --- a/mods/ENTITIES/mcl_boats/locale/template.txt +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_boats -Acacia Boat= -Birch Boat= -Boat= -Boats are used to travel on the surface of water.= -Dark Oak Boat= -Jungle Boat= -Oak Boat= -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.= -Spruce Boat= -Water vehicle= -Sneak to dismount= diff --git a/mods/ENTITIES/mcl_boats/mod.conf b/mods/ENTITIES/mcl_boats/mod.conf deleted file mode 100644 index 61463b6ec..000000000 --- a/mods/ENTITIES/mcl_boats/mod.conf +++ /dev/null @@ -1,7 +0,0 @@ -name = mcl_boats -author = PilzAdam -description = Adds drivable boats. -depends = mcl_player, flowlib, mcl_title -optional_depends = mcl_core, doc_identifier - - diff --git a/mods/ENTITIES/mcl_boats/models/mcl_boats_boat.b3d b/mods/ENTITIES/mcl_boats/models/mcl_boats_boat.b3d deleted file mode 100644 index 6c9c31469..000000000 Binary files a/mods/ENTITIES/mcl_boats/models/mcl_boats_boat.b3d and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_acacia_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_acacia_boat.png deleted file mode 100644 index 3ba009117..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_acacia_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_birch_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_birch_boat.png deleted file mode 100644 index ac0f3dc1b..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_birch_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_dark_oak_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_dark_oak_boat.png deleted file mode 100644 index 01ccb4198..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_dark_oak_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_jungle_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_jungle_boat.png deleted file mode 100644 index 4bcdb1751..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_jungle_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_oak_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_oak_boat.png deleted file mode 100644 index 371596f63..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_oak_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_obsidian_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_obsidian_boat.png deleted file mode 100644 index 6ae10c0c4..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_obsidian_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_spruce_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_spruce_boat.png deleted file mode 100644 index 5c40fc901..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_spruce_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_acacia_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_acacia_boat.png deleted file mode 100644 index 958f0a8b2..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_acacia_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_birch_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_birch_boat.png deleted file mode 100644 index eb0a5bf2c..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_birch_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_dark_oak_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_dark_oak_boat.png deleted file mode 100644 index 5e6f65888..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_dark_oak_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_jungle_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_jungle_boat.png deleted file mode 100644 index acae2e532..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_jungle_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_oak_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_oak_boat.png deleted file mode 100644 index d5aff737f..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_oak_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_obsidian_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_obsidian_boat.png deleted file mode 100644 index af3c24b30..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_obsidian_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_spruce_boat.png b/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_spruce_boat.png deleted file mode 100644 index f5d0d07b2..000000000 Binary files a/mods/ENTITIES/mcl_boats/textures/mcl_boats_texture_spruce_boat.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_burning/api.lua b/mods/ENTITIES/mcl_burning/api.lua deleted file mode 100644 index 1d07e96f0..000000000 --- a/mods/ENTITIES/mcl_burning/api.lua +++ /dev/null @@ -1,173 +0,0 @@ -function mcl_burning.get_storage(obj) - return obj:is_player() and mcl_burning.storage[obj] or obj:get_luaentity() -end - -function mcl_burning.is_burning(obj) - return mcl_burning.get_storage(obj).burn_time -end - -function mcl_burning.is_affected_by_rain(obj) - return mcl_weather.get_weather() == "rain" and mcl_weather.is_outdoor(obj:get_pos()) -end - -function mcl_burning.get_collisionbox(obj, smaller, storage) - local cache = storage.collisionbox_cache - if cache then - local box = cache[smaller and 2 or 1] - return box[1], box[2] - else - local box = obj:get_properties().collisionbox - local minp, maxp = vector.new(box[1], box[2], box[3]), vector.new(box[4], box[5], box[6]) - local s_vec = vector.new(0.1, 0.1, 0.1) - local s_minp = vector.add(minp, s_vec) - local s_maxp = vector.subtract(maxp, s_vec) - storage.collisionbox_cache = {{minp, maxp}, {s_minp, s_maxp}} - return minp, maxp - end -end - -local find_nodes_in_area = minetest.find_nodes_in_area - -function mcl_burning.get_touching_nodes(obj, nodenames, storage) - local pos = obj:get_pos() - local minp, maxp = mcl_burning.get_collisionbox(obj, true, storage) - local nodes = find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames) - return nodes -end - --- Manages the fire animation on a burning player's HUD --- --- Parameters: --- player - a valid player object; --- --- If the player already has a fire HUD, updates the burning animation. --- If the fire does not have a fire HUD, initializes the HUD. --- -function mcl_burning.update_hud(player) - local animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 - local hud_flame_animated = "mcl_burning_hud_flame_animated.png^[opacity:180^[verticalframe:" .. animation_frames .. ":" - - local storage = mcl_burning.get_storage(player) - if not storage.fire_hud_id then - storage.animation_frame = 1 - storage.fire_hud_id = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -100, y = -100}, - text = hud_flame_animated .. storage.animation_frame, - z_index = 1000, - }) - else - storage.animation_frame = storage.animation_frame + 1 - if storage.animation_frame > animation_frames - 1 then - storage.animation_frame = 0 - end - player:hud_change(storage.fire_hud_id, "text", hud_flame_animated .. storage.animation_frame) - end -end - --- Sets and object state as burning and adds a fire animation to the object. --- --- Parameters: --- obj - may be a player or a lua_entity; --- burn_time - sets the object's burn duration; --- --- If obj is a player, adds a fire animation to the HUD, if obj is a --- lua_entity, adds an animated fire entity to obj. --- The effective burn duration is modified by obj's armor protection. --- If obj was already burning, its burn duration is updated if the current --- duration is less than burn_time. --- If obj is dead, fireproof or a creative player, this function does nothing. --- -function mcl_burning.set_on_fire(obj, burn_time) - if obj:get_hp() < 0 then - return - end - - local luaentity = obj:get_luaentity() - if luaentity and luaentity.fire_resistant then - return - end - - if obj:is_player() and minetest.is_creative_enabled(obj:get_player_name()) then - burn_time = 0 - else - local max_fire_prot_lvl = 0 - local inv = mcl_util.get_inventory(obj) - local armor_list = inv and inv:get_list("armor") - - if armor_list then - for _, stack in pairs(armor_list) do - local fire_prot_lvl = mcl_enchanting.get_enchantment(stack, "fire_protection") - if fire_prot_lvl > max_fire_prot_lvl then - max_fire_prot_lvl = fire_prot_lvl - end - end - end - if max_fire_prot_lvl > 0 then - burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15) - end - end - - local storage = mcl_burning.get_storage(obj) - if storage.burn_time then - if burn_time > storage.burn_time then - storage.burn_time = burn_time - end - return - end - storage.burn_time = burn_time - storage.fire_damage_timer = 0 - - local minp, maxp = mcl_burning.get_collisionbox(obj, false, storage) - local size = vector.subtract(maxp, minp) - size = vector.multiply(size, vector.new(1.1, 1.2, 1.1)) - size = vector.divide(size, obj:get_properties().visual_size) - - local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire") - fire_entity:set_properties({visual_size = size}) - fire_entity:set_attach(obj, "", vector.new(0, size.y * 5, 0), vector.new(0, 0, 0)) - - if obj:is_player() then - mcl_burning.update_hud(obj) - end -end - -function mcl_burning.extinguish(obj) - if not obj:get_pos() then return end - if mcl_burning.is_burning(obj) then - local storage = mcl_burning.get_storage(obj) - if obj:is_player() then - if storage.fire_hud_id then - obj:hud_remove(storage.fire_hud_id) - end - mcl_burning.storage[obj] = {} - else - storage.burn_time = nil - storage.fire_damage_timer = nil - end - end -end - -function mcl_burning.tick(obj, dtime, storage) - if storage.burn_time then - storage.burn_time = storage.burn_time - dtime - - if storage.burn_time <= 0 or mcl_burning.is_affected_by_rain(obj) or #mcl_burning.get_touching_nodes(obj, "group:puts_out_fire", storage) > 0 then - mcl_burning.extinguish(obj) - return true - else - storage.fire_damage_timer = storage.fire_damage_timer + dtime - - if storage.fire_damage_timer >= 1 then - storage.fire_damage_timer = 0 - - local luaentity = obj:get_luaentity() - - if not luaentity or not luaentity.fire_damage_resistant then - mcl_util.deal_damage(obj, 1, {type = "on_fire"}) - end - end - end - end -end diff --git a/mods/ENTITIES/mcl_burning/init.lua b/mods/ENTITIES/mcl_burning/init.lua deleted file mode 100644 index 039d295b7..000000000 --- a/mods/ENTITIES/mcl_burning/init.lua +++ /dev/null @@ -1,131 +0,0 @@ -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -mcl_burning = { - -- the storage table holds a list of objects (players,luaentities) and tables - -- associated with these objects. These tables have the following attributes: - -- burn_time: - -- Remaining time that object will burn. - -- fire_damage_timer: - -- Timer for dealing damage every second while burning. - -- fire_hud_id: - -- HUD id of the flames animation on a burning player's HUD. - -- animation_frame: - -- The HUD's current animation frame, used by update_hud(). - -- collisionbox_cache: - -- Used by mcl_burning.get_collisionbox() to avoid recalculations. - storage = {} -} - -dofile(modpath .. "/api.lua") - -local pairs = pairs -local get_connected_players = minetest.get_connected_players -local get_item_group = minetest.get_item_group - -minetest.register_globalstep(function(dtime) - for _, player in pairs(get_connected_players()) do - local storage = mcl_burning.storage[player] - if not mcl_burning.tick(player, dtime, storage) and not mcl_burning.is_affected_by_rain(player) then - local nodes = mcl_burning.get_touching_nodes(player, {"group:puts_out_fire", "group:set_on_fire"}, storage) - local burn_time = 0 - - for _, pos in pairs(nodes) do - local node = minetest.get_node(pos) - if get_item_group(node.name, "puts_out_fire") > 0 then - burn_time = 0 - break - end - - local value = get_item_group(node.name, "set_on_fire") - if value > burn_time then - burn_time = value - end - end - - if burn_time > 0 then - mcl_burning.set_on_fire(player, burn_time) - end - end - end -end) - -minetest.register_on_respawnplayer(function(player) - mcl_burning.extinguish(player) -end) - -minetest.register_on_joinplayer(function(player) - local storage = {} - local burn_data = player:get_meta():get_string("mcl_burning:data") - if burn_data ~= "" then - storage = minetest.deserialize(burn_data) or storage - end - mcl_burning.storage[player] = storage - if storage.burn_time and storage.burn_time > 0 then - mcl_burning.update_hud(player) - end -end) - -local function on_leaveplayer(player) - local storage = mcl_burning.storage[player] - if not storage then - -- For some unexplained reasons, mcl_burning.storage can be `nil` here. - -- Logging this exception to assist in finding the cause of this. - minetest.log("warning", "on_leaveplayer: missing mcl_burning.storage " - .. "for player " .. player:get_player_name()) - storage = {} - end - storage.fire_hud_id = nil - player:get_meta():set_string("mcl_burning:data", minetest.serialize(storage)) - mcl_burning.storage[player] = nil -end - -minetest.register_on_leaveplayer(function(player) - on_leaveplayer(player) -end) - -minetest.register_on_shutdown(function() - for _,player in ipairs(minetest.get_connected_players()) do - on_leaveplayer(player) - end -end) - -local animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 - -minetest.register_entity("mcl_burning:fire", { - initial_properties = { - physical = false, - collisionbox = {0, 0, 0, 0, 0, 0}, - visual = "upright_sprite", - textures = { - "mcl_burning_entity_flame_animated.png", - "mcl_burning_entity_flame_animated.png" - }, - spritediv = {x = 1, y = animation_frames}, - pointable = false, - glow = -1, - backface_culling = false, - }, - _mcl_animation_timer = 0, - on_activate = function(self) - self.object:set_sprite({x = 0, y = 0}, animation_frames, 1.0 / animation_frames) - end, - on_step = function(self, dtime) - local parent = self.object:get_attach() - if not parent then - self.object:remove() - return - end - local storage = mcl_burning.get_storage(parent) - if not storage or not storage.burn_time then - self.object:remove() - return - end - if parent:is_player() then - self._mcl_animation_timer = self._mcl_animation_timer + dtime - if self._mcl_animation_timer >= 0.1 then - self._mcl_animation_timer = 0 - mcl_burning.update_hud(parent) - end - end - end, -}) diff --git a/mods/ENTITIES/mcl_burning/mod.conf b/mods/ENTITIES/mcl_burning/mod.conf deleted file mode 100644 index c64959cbb..000000000 --- a/mods/ENTITIES/mcl_burning/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_burning -description = Burning Objects for MineClone2 -author = Fleckenstein diff --git a/mods/ENTITIES/mcl_dripping/init.lua b/mods/ENTITIES/mcl_dripping/init.lua deleted file mode 100644 index 57ba7ecfe..000000000 --- a/mods/ENTITIES/mcl_dripping/init.lua +++ /dev/null @@ -1,66 +0,0 @@ --- Dripping Water Mod --- by kddekadenz - -local math = math - --- License of code, textures & sounds: CC0 - -local function register_drop(liquid, glow, sound, nodes) - minetest.register_entity("mcl_dripping:drop_" .. liquid, { - hp_max = 1, - physical = true, - collide_with_objects = false, - collisionbox = {-0.01, 0.01, -0.01, 0.01, 0.01, 0.01}, - glow = glow, - pointable = false, - visual = "sprite", - visual_size = {x = 0.1, y = 0.1}, - textures = {""}, - spritediv = {x = 1, y = 1}, - initial_sprite_basepos = {x = 0, y = 0}, - static_save = false, - _dropped = false, - on_activate = function(self) - self.object:set_properties({ - textures = {"[combine:2x2:" .. -math.random(1, 16) .. "," .. -math.random(1, 16) .. "=default_" .. liquid .. "_source_animated.png"} - }) - end, - on_step = function(self, dtime) - local k = math.random(1, 222) - local ownpos = self.object:get_pos() - if k == 1 then - self.object:set_acceleration(vector.new(0, -5, 0)) - end - if minetest.get_node(vector.offset(ownpos, 0, 0.5, 0)).name == "air" then - self.object:set_acceleration(vector.new(0, -5, 0)) - end - if minetest.get_node(vector.offset(ownpos, 0, -0.1, 0)).name ~= "air" then - local ent = self.object:get_luaentity() - if not ent._dropped then - ent._dropped = true - minetest.sound_play({name = "drippingwater_" .. sound .. "drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) - end - if k < 3 then - self.object:remove() - end - end - end, - }) - minetest.register_abm({ - label = "Create drops", - nodenames = nodes, - neighbors = {"group:" .. liquid}, - interval = 2, - chance = 22, - action = function(pos) - if minetest.get_item_group(minetest.get_node(vector.offset(pos, 0, 1, 0)).name, liquid) ~= 0 - and minetest.get_node(vector.offset(pos, 0, -1, 0)).name == "air" then - local x, z = math.random(-45, 45) / 100, math.random(-45, 45) / 100 - minetest.add_entity(vector.offset(pos, x, -0.520, z), "mcl_dripping:drop_" .. liquid) - end - end, - }) -end - -register_drop("water", 1, "", {"group:opaque", "group:leaves"}) -register_drop("lava", math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3), "lava", {"group:opaque"}) \ No newline at end of file diff --git a/mods/ENTITIES/mcl_dripping/mod.conf b/mods/ENTITIES/mcl_dripping/mod.conf deleted file mode 100644 index 921d5e59f..000000000 --- a/mods/ENTITIES/mcl_dripping/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_dripping -author = kddekadenz -description = Drops are generated rarely under solid nodes -depends = mcl_core diff --git a/mods/ENTITIES/mcl_dripping/readme.txt b/mods/ENTITIES/mcl_dripping/readme.txt deleted file mode 100644 index afe35608e..000000000 --- a/mods/ENTITIES/mcl_dripping/readme.txt +++ /dev/null @@ -1,29 +0,0 @@ -Dripping Mod -by kddekadenz - -modified for MineClone 2 by Wuzzy and NO11 - - -Installing instructions: - - 1. Copy the mcl_dripping mod folder into games/gamemode/mods - - 2. Start game and enjoy :) - - -Manual: - --> drops are generated rarely under solid nodes --> they will stay some time at the generated block and than they fall down --> when they collide with the ground, a sound is played and they are destroyed - - -License: - -code & sounds: CC0 - - -Changelog: - -16.04.2012 - first release -28.04.2012 - drops are now 3D; added lava drops; fixed generating of drops (not at edges now) diff --git a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.1.ogg b/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.1.ogg deleted file mode 100644 index fcf63c742..000000000 Binary files a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.2.ogg b/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.2.ogg deleted file mode 100644 index e1954bbf7..000000000 Binary files a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.3.ogg b/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.3.ogg deleted file mode 100644 index 74ddd45be..000000000 Binary files a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_drip.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.1.ogg b/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.1.ogg deleted file mode 100644 index 46447f93d..000000000 Binary files a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.2.ogg b/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.2.ogg deleted file mode 100644 index b8e9deafd..000000000 Binary files a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.3.ogg b/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.3.ogg deleted file mode 100644 index 9cb150240..000000000 Binary files a/mods/ENTITIES/mcl_dripping/sounds/drippingwater_lavadrip.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_falling_nodes/init.lua b/mods/ENTITIES/mcl_falling_nodes/init.lua deleted file mode 100644 index d527603de..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/init.lua +++ /dev/null @@ -1,255 +0,0 @@ -local function get_falling_depth(self) - if not self._startpos then - -- Fallback - self._startpos = self.object:get_pos() - end - return self._startpos.y - vector.round(self.object:get_pos()).y -end - -local function deal_falling_damage(self, dtime) - if minetest.get_item_group(self.node.name, "falling_node_damage") == 0 then - return - end - -- Cause damage to any entity it hits. - -- Algorithm based on MC anvils. - local pos = self.object:get_pos() - if not self._startpos then - -- Fallback - self._startpos = pos - end - self._hit = self._hit or {} - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do - local entity = obj:get_luaentity() - if entity and entity.name == "__builtin:item" then - obj:remove() - elseif mcl_util.get_hp(obj) > 0 and not self._hit[obj] then - self._hit[obj] = true - local way = self._startpos.y - pos.y - local damage = (way - 1) * 2 - damage = math.min(40, math.max(0, damage)) - if damage >= 1 then - -- Reduce damage if wearing a helmet - local inv = mcl_util.get_inventory(obj) - if inv then - local helmet = inv:get_stack("armor", 2) - if minetest.get_item_group(helmet:get_name(), "combat_armor") > 0 then - damage = damage / 4 * 3 - mcl_util.use_item_durability(helmet, 1) - inv:set_stack("armor", 2, helmet) - end - end - local dmg_type - if minetest.get_item_group(self.node.name, "anvil") ~= 0 then - dmg_type = "anvil" - else - dmg_type = "falling_node" - end - mcl_util.deal_damage(obj, damage, {type = dmg_type}) - end - end - end -end - -minetest.register_entity(":__builtin:falling_node", { - initial_properties = { - visual = "wielditem", - visual_size = {x = 0.667, y = 0.667}, - textures = {}, - physical = true, - is_visible = false, - collide_with_objects = false, - collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, - }, - node = {}, - meta = {}, - set_node = function(self, node, meta) - local def = minetest.registered_nodes[node.name] - -- Change falling node if definition tells us to - if def and def._mcl_falling_node_alternative then - node.name = def._mcl_falling_node_alternative - end - local glow - self.node = node - self.meta = meta or {} - -- Set correct entity yaw - if def and node.param2 ~= 0 then - if (def.paramtype2 == "facedir" or def.paramtype2 == "colorfacedir") then - self.object:set_yaw(minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2))) - elseif (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted") then - self.object:set_yaw(minetest.dir_to_yaw(minetest.wallmounted_to_dir(node.param2))) - end - if def.light_source then - glow = def.light_source - end - end - self.object:set_properties({ - is_visible = true, - textures = {node.name}, - glow = glow, - }) - end, - get_staticdata = function(self) - local meta = self.meta - -- Workaround: Save inventory seperately from metadata. - -- Because Minetest crashes when a node with inventory gets deactivated - -- (GitHub issue #7020). - -- FIXME: Remove the _inv workaround when it is no longer needed - local inv - if meta then - inv = meta.inv - meta.inventory = nil - end - local ds = { - node = self.node, - meta = self.meta, - _inv = inv, - _startpos = self._startpos, - _hit_players = self._hit_players, - } - return minetest.serialize(ds) - end, - on_activate = function(self, staticdata) - self.object:set_armor_groups({immortal = 1}) - - local ds = minetest.deserialize(staticdata) - if ds then - self._startpos = ds._startpos - self._hit_players = ds._hit_players - if ds.node then - local meta = ds.meta - meta.inventory = ds._inv - self:set_node(ds.node, meta) - else - self:set_node(ds) - end - elseif staticdata ~= "" then - self:set_node({name = staticdata}) - end - if not self._startpos then - self._startpos = self.object:get_pos() - end - self._startpos = vector.round(self._startpos) - end, - on_step = function(self, dtime) - -- Set gravity - local acceleration = self.object:get_acceleration() - if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then - self.object:set_acceleration({x = 0, y = -10, z = 0}) - end - -- Turn to actual node when colliding with ground, or continue to move - local pos = self.object:get_pos() - - -- Portal check - local np = {x = pos.x, y = pos.y + 0.3, z = pos.z} - local n2 = minetest.get_node(np) - if n2.name == "mcl_portals:portal_end" then - -- TODO: Teleport falling node. - self.object:remove() - return - end - - -- Position of bottom center point - local bcp = {x = pos.x, y = pos.y - 0.7, z = pos.z} - -- Avoid bugs caused by an unloaded node below - local bcn = minetest.get_node_or_nil(bcp) - local bcd = bcn and minetest.registered_nodes[bcn.name] - - -- TODO: At this point, we did 2 get_nodes in 1 tick. - -- Figure out how to improve that (if it is a problem). - - if bcn and (not bcd or bcd.walkable or - (minetest.get_item_group(self.node.name, "float") ~= 0 and - bcd.liquidtype ~= "none")) then - if bcd and bcd.leveled and - bcn.name == self.node.name then - local addlevel = self.node.level - if not addlevel or addlevel <= 0 then - addlevel = bcd.leveled - end - if minetest.add_node_level(bcp, addlevel) == 0 then - if minetest.registered_nodes[self.node.name]._mcl_after_falling then - minetest.registered_nodes[self.node.name]._mcl_after_falling(bcp, get_falling_depth(self)) - end - deal_falling_damage(self, dtime) - self.object:remove() - return - end - elseif bcd and bcd.buildable_to and - (minetest.get_item_group(self.node.name, "float") == 0 or - bcd.liquidtype == "none") then - minetest.remove_node(bcp) - return - end - local nd = minetest.registered_nodes[n2.name] - --if n2.name == "mcl_portals:portal_end" then - -- TODO: Teleport falling node. - if (nd and nd.buildable_to == true) or minetest.get_item_group(self.node.name, "crush_after_fall") ~= 0 then - -- Replace destination node if it's buildable to - minetest.remove_node(np) - -- Run script hook - for _, callback in pairs(minetest.registered_on_dignodes) do - callback(np, n2) - end - local def = minetest.registered_nodes[self.node.name] - if def then - minetest.add_node(np, self.node) - if def._mcl_after_falling then - def._mcl_after_falling(np, get_falling_depth(self)) - end - if self.meta then - local meta = minetest.get_meta(np) - meta:from_table(self.meta) - end - if def.sounds and def.sounds.place and def.sounds.place.name then - minetest.sound_play(def.sounds.place, {pos = np}, true) - end - end - else - -- Drop the *falling node* as an item if the destination node is NOT buildable to - local drops = minetest.get_node_drops(self.node.name, "") - for _, dropped_item in pairs(drops) do - minetest.add_item(np, dropped_item) - end - end - deal_falling_damage(self, dtime) - self.object:remove() - minetest.check_for_falling(np) - return - end - local vel = self.object:get_velocity() - -- Fix position if entity does not move - if vector.equals(vel, {x = 0, y = 0, z = 0}) then - local npos = vector.round(self.object:get_pos()) - local npos2 = table.copy(npos) - npos2.y = npos2.y - 2 - local lownode = minetest.get_node(npos2) - -- Special check required for fences and walls, because of their overhigh collision box. - if minetest.get_item_group(lownode.name, "fence") == 1 or minetest.get_item_group(lownode.name, "wall") == 1 then - -- Instantly stop the node if it is above a fence/wall. This is needed - -- because the falling node collides early with a fence/wall node. - -- Hacky, because the falling node will teleport a short distance, instead - -- of smoothly fall on the fence post. - local npos3 = table.copy(npos) - npos3.y = npos3.y - 1 - minetest.add_node(npos3, self.node) - local def = minetest.registered_nodes[self.node.name] - if def then - if def._mcl_after_falling then - def._mcl_after_falling(npos3, get_falling_depth(self)) - end - if def.sounds and def.sounds.place and def.sounds.place.name then - minetest.sound_play(def.sounds.place, {pos = np}, true) - end - end - deal_falling_damage(self, dtime) - self.object:remove() - minetest.check_for_falling(npos3) - return - else - -- Normal position fix (expected case) - self.object:set_pos(npos) - end - end - deal_falling_damage(self, dtime) - end -}) diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.pl.tr b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.pl.tr deleted file mode 100644 index 9be9cf7c6..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.pl.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_falling_nodes -@1 was smashed by a falling anvil.=@1 została zmiażdżona przez spadające kowadło. -@1 was smashed by a falling block.=@1 została zmiażdżona przez spadający blok. diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.zh_TW.tr b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.zh_TW.tr deleted file mode 100644 index 2772fb357..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.zh_TW.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_falling_nodes -@1 was smashed by a falling anvil.=@1 被鐵砧壓扁了。 -@1 was smashed by a falling block.=@1 被掉下來的方塊壓扁了。 diff --git a/mods/ENTITIES/mcl_falling_nodes/mod.conf b/mods/ENTITIES/mcl_falling_nodes/mod.conf deleted file mode 100644 index 068987194..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_falling_nodes -author = Wuzzy -description = Falling node entities, Minecraft-style diff --git a/mods/ENTITIES/mcl_item_entity/README.txt b/mods/ENTITIES/mcl_item_entity/README.txt deleted file mode 100644 index 41e9e6e57..000000000 --- a/mods/ENTITIES/mcl_item_entity/README.txt +++ /dev/null @@ -1,28 +0,0 @@ -===ITEM_DROP MOD for MINETEST-C55=== -by PilzAdam - -Introduction: -This mod adds Minecraft like drop/pick up of items to Minetest. - -This mod has been forked from item_drop in the VoxBox game. - -License: -Sourcecode: WTFPL (see below) -Sound: WTFPL (see below) - -See also: -http://minetest.net/ - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua deleted file mode 100644 index c0fbf4b15..000000000 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ /dev/null @@ -1,833 +0,0 @@ ---these are lua locals, used for higher performance -local minetest, math, vector, ipairs, pairs = minetest, math, vector, ipairs, pairs - ---this is used for the player pool in the sound buffer -local pool = {} - -local tick = false - -minetest.register_on_joinplayer(function(player) - local name - name = player:get_player_name() - pool[name] = 0 -end) - -minetest.register_on_leaveplayer(function(player) - local name - name = player:get_player_name() - pool[name] = nil -end) - - -local has_awards = minetest.get_modpath("awards") - -local mcl_item_entity = {} - ---basic settings -local item_drop_settings = {} --settings table -item_drop_settings.dug_buffer = 0.65 -- the warm up period before a dug item can be collected -item_drop_settings.age = 1.0 --how old a dropped item (_insta_collect==false) has to be before collecting -item_drop_settings.radius_magnet = 2.0 --radius of item magnet. MUST BE LARGER THAN radius_collect! -item_drop_settings.xp_radius_magnet = 7.25 --radius of xp magnet. MUST BE LARGER THAN radius_collect! -item_drop_settings.radius_collect = 0.2 --radius of collection -item_drop_settings.player_collect_height = 0.8 --added to their pos y value -item_drop_settings.collection_safety = false --do this to prevent items from flying away on laggy servers -item_drop_settings.random_item_velocity = true --this sets random item velocity if velocity is 0 -item_drop_settings.drop_single_item = false --if true, the drop control drops 1 item instead of the entire stack, and sneak+drop drops the stack --- drop_single_item is disabled by default because it is annoying to throw away items from the intentory screen - -item_drop_settings.magnet_time = 0.75 -- how many seconds an item follows the player before giving up - -local function get_gravity() - return tonumber(minetest.settings:get("movement_gravity")) or 9.81 -end - -local registered_pickup_achievement = {} - ---TODO: remove limitation of 1 award per itemname -function mcl_item_entity.register_pickup_achievement(itemname, award) - if not has_awards then - minetest.log("warning", "[mcl_item_entity] Trying to register pickup achievement ["..award.."] for ["..itemname.."] while awards missing") - elseif registered_pickup_achievement[itemname] then - minetest.log("error", "[mcl_item_entity] Trying to register already existing pickup achievement ["..award.."] for ["..itemname.."]") - else - registered_pickup_achievement[itemname] = award - end -end - -mcl_item_entity.register_pickup_achievement("tree", "mcl:mineWood") -mcl_item_entity.register_pickup_achievement("mcl_mobitems:blaze_rod", "mcl:blazeRod") -mcl_item_entity.register_pickup_achievement("mcl_mobitems:leather", "mcl:killCow") -mcl_item_entity.register_pickup_achievement("mcl_core:diamond", "mcl:diamonds") - -local function check_pickup_achievements(object, player) - if has_awards then - local itemname = ItemStack(object:get_luaentity().itemstring):get_name() - local playername = player:get_player_name() - for name,award in pairs(registered_pickup_achievement) do - if itemname == name or minetest.get_item_group(itemname, name) ~= 0 then - awards.unlock(playername, award) - end - end - end -end - -local function enable_physics(object, luaentity, ignore_check) - if luaentity.physical_state == false or ignore_check == true then - luaentity.physical_state = true - object:set_properties({ - physical = true - }) - object:set_acceleration({x=0,y=-get_gravity(),z=0}) - end -end - -local function disable_physics(object, luaentity, ignore_check, reset_movement) - if luaentity.physical_state == true or ignore_check == true then - luaentity.physical_state = false - object:set_properties({ - physical = false - }) - if reset_movement ~= false then - object:set_velocity({x=0,y=0,z=0}) - object:set_acceleration({x=0,y=0,z=0}) - end - end -end - - -minetest.register_globalstep(function(dtime) - tick = not tick - - for _,player in pairs(minetest.get_connected_players()) do - if player:get_hp() > 0 or not minetest.settings:get_bool("enable_damage") then - - local name = player:get_player_name() - - local pos = player:get_pos() - - if tick == true and pool[name] > 0 then - minetest.sound_play("item_drop_pickup", { - pos = pos, - gain = 0.3, - max_hear_distance = 16, - pitch = math.random(70,110)/100 - }) - if pool[name] > 6 then - pool[name] = 6 - else - pool[name] = pool[name] - 1 - end - end - - - - local inv = player:get_inventory() - local checkpos = {x=pos.x,y=pos.y + item_drop_settings.player_collect_height,z=pos.z} - - --magnet and collection - for _,object in pairs(minetest.get_objects_inside_radius(checkpos, item_drop_settings.xp_radius_magnet)) do - if not object:is_player() and vector.distance(checkpos, object:get_pos()) < item_drop_settings.radius_magnet and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" and object:get_luaentity()._magnet_timer and (object:get_luaentity()._insta_collect or (object:get_luaentity().age > item_drop_settings.age)) then - - if object:get_luaentity()._magnet_timer >= 0 and object:get_luaentity()._magnet_timer < item_drop_settings.magnet_time and inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then - - -- Collection - if not object:get_luaentity()._removed then - -- Ignore if itemstring is not set yet - if object:get_luaentity().itemstring ~= "" then - inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) - - check_pickup_achievements(object, player) - - -- Destroy entity - -- This just prevents this section to be run again because object:remove() doesn't remove the item immediately. - object:get_luaentity().target = checkpos - object:get_luaentity()._removed = true - - object:set_velocity({x=0,y=0,z=0}) - object:set_acceleration({x=0,y=0,z=0}) - - object:move_to(checkpos) - - pool[name] = pool[name] + 1 - - minetest.after(0.25, function() - --safety check - if object and object:get_luaentity() then - object:remove() - end - end) - end - end - end - - elseif not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "mcl_experience:orb" then - local entity = object:get_luaentity() - entity.collector = player:get_player_name() - entity.collected = true - - end - end - - end - end -end) - --- Stupid workaround to get drops from a drop table: --- Create a temporary table in minetest.registered_nodes that contains the proper drops, --- because unfortunately minetest.get_node_drops needs the drop table to be inside a registered node definition --- (very ugly) - -local tmp_id = 0 - -local function get_drops(drop, toolname, param2, paramtype2) - tmp_id = tmp_id + 1 - local tmp_node_name = "mcl_item_entity:" .. tmp_id - minetest.registered_nodes[tmp_node_name] = { - name = tmp_node_name, - drop = drop, - paramtype2 = paramtype2 - } - local drops = minetest.get_node_drops({name = tmp_node_name, param2 = param2}, toolname) - minetest.registered_nodes[tmp_node_name] = nil - return drops -end - -local function discrete_uniform_distribution(drops, min_count, max_count, cap) - local new_drops = table.copy(drops) - for i, item in ipairs(drops) do - local new_item = ItemStack(item) - local multiplier = math.random(min_count, max_count) - if cap then - multiplier = math.min(cap, multiplier) - end - new_item:set_count(multiplier * new_item:get_count()) - new_drops[i] = new_item - end - return new_drops -end - -local function get_fortune_drops(fortune_drops, fortune_level) - local drop - local i = fortune_level - repeat - drop = fortune_drops[i] - i = i - 1 - until drop or i < 1 - return drop or {} -end - -local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops", true) - -function minetest.handle_node_drops(pos, drops, digger) - -- NOTE: This function override allows digger to be nil. - -- This means there is no digger. This is a special case which allows this function to be called - -- by hand. Creative Mode is intentionally ignored in this case. - - if (digger and digger:is_player() and minetest.is_creative_enabled(digger:get_player_name())) or doTileDrops == false then - return - end - - -- Check if node will yield its useful drop by the digger's tool - local dug_node = minetest.get_node(pos) - local tooldef - local tool - if digger then - tool = digger:get_wielded_item() - tooldef = minetest.registered_tools[tool:get_name()] - - if not mcl_autogroup.can_harvest(dug_node.name, tool:get_name()) then - return - end - end - - local diggroups = tooldef and tooldef._mcl_diggroups - local shearsy_level = diggroups and diggroups.shearsy and diggroups.shearsy.level - - --[[ Special node drops when dug by shears by reading _mcl_shears_drop or with a silk touch tool reading _mcl_silk_touch_drop - from the node definition. - Definition of _mcl_shears_drop / _mcl_silk_touch_drop: - * true: Drop itself when dug by shears / silk touch tool - * table: Drop every itemstring in this table when dug by shears _mcl_silk_touch_drop - ]] - - local enchantments = tool and mcl_enchanting.get_enchantments(tool, "silk_touch") - - local silk_touch_drop = false - local nodedef = minetest.registered_nodes[dug_node.name] - if not nodedef then return end - - if shearsy_level and shearsy_level > 0 and nodedef._mcl_shears_drop then - if nodedef._mcl_shears_drop == true then - drops = { dug_node.name } - else - drops = nodedef._mcl_shears_drop - end - elseif tool and enchantments.silk_touch and nodedef._mcl_silk_touch_drop then - silk_touch_drop = true - if nodedef._mcl_silk_touch_drop == true then - drops = { dug_node.name } - else - drops = nodedef._mcl_silk_touch_drop - end - end - - if tool and nodedef._mcl_fortune_drop and enchantments.fortune then - local fortune_level = enchantments.fortune - local fortune_drop = nodedef._mcl_fortune_drop - if fortune_drop.discrete_uniform_distribution then - local min_count = fortune_drop.min_count - local max_count = fortune_drop.max_count + fortune_level * (fortune_drop.factor or 1) - local chance = fortune_drop.chance or fortune_drop.get_chance and fortune_drop.get_chance(fortune_level) - if not chance or math.random() < chance then - drops = discrete_uniform_distribution(fortune_drop.multiply and drops or fortune_drop.items, min_count, max_count, fortune_drop.cap) - elseif fortune_drop.override then - drops = {} - end - else - -- Fixed Behavior - local drop = get_fortune_drops(fortune_drop, fortune_level) - drops = get_drops(drop, tool:get_name(), dug_node.param2, nodedef.paramtype2) - end - end - - if digger and mcl_experience.throw_xp and not silk_touch_drop then - local experience_amount = minetest.get_item_group(dug_node.name,"xp") - if experience_amount > 0 then - mcl_experience.throw_xp(pos, experience_amount) - end - end - - for _,item in ipairs(drops) do - local count - if type(item) == "string" then - count = ItemStack(item):get_count() - else - count = item:get_count() - end - local drop_item = ItemStack(item) - drop_item:set_count(1) - for i=1,count do - local dpos = table.copy(pos) - -- Apply offset for plantlike_rooted nodes because of their special shape - if nodedef and nodedef.drawtype == "plantlike_rooted" and nodedef.walkable then - dpos.y = dpos.y + 1 - end - -- Spawn item and apply random speed - local obj = minetest.add_item(dpos, drop_item) - if obj then - local x = math.random(1, 5) - if math.random(1,2) == 1 then - x = -x - end - local z = math.random(1, 5) - if math.random(1,2) == 1 then - z = -z - end - obj:set_velocity({x=1/x, y=obj:get_velocity().y, z=1/z}) - - obj:get_luaentity().age = item_drop_settings.dug_buffer - - obj:get_luaentity()._insta_collect = false - end - end - end -end - --- Drop single items by default -function minetest.item_drop(itemstack, dropper, pos) - if dropper and dropper:is_player() then - local v = dropper:get_look_dir() - local p = {x=pos.x, y=pos.y+1.2, z=pos.z} - local cs = itemstack:get_count() - if dropper:get_player_control().sneak then - cs = 1 - end - local item = itemstack:take_item(cs) - local obj = minetest.add_item(p, item) - if obj then - v.x = v.x*4 - v.y = v.y*4 + 2 - v.z = v.z*4 - obj:set_velocity(v) - -- Force collection delay - obj:get_luaentity()._insta_collect = false - return itemstack - end - end -end - ---modify builtin:item - -local time_to_live = tonumber(minetest.settings:get("item_entity_ttl")) -if not time_to_live then - time_to_live = 300 -end - -local function cxcz(o, cw, one, zero) - if cw < 0 then - table.insert(o, { [one]=1, y=0, [zero]=0 }) - table.insert(o, { [one]=-1, y=0, [zero]=0 }) - else - table.insert(o, { [one]=-1, y=0, [zero]=0 }) - table.insert(o, { [one]=1, y=0, [zero]=0 }) - end - return o -end - -minetest.register_entity(":__builtin:item", { - initial_properties = { - hp_max = 1, - physical = true, - collide_with_objects = false, - collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3}, - pointable = false, - visual = "wielditem", - visual_size = {x = 0.4, y = 0.4}, - textures = {""}, - spritediv = {x = 1, y = 1}, - initial_sprite_basepos = {x = 0, y = 0}, - is_visible = false, - infotext = "", - }, - - -- Itemstring of dropped item. The empty string is used when the item is not yet initialized yet. - -- The itemstring MUST be set immediately to a non-empty string after creating the entity. - -- The hand is NOT permitted as dropped item. ;-) - -- Item entities will be deleted if they still have an empty itemstring on their first on_step tick. - itemstring = "", - - -- If true, item will fall - physical_state = true, - - -- If item entity is currently flowing in water - _flowing = false, - - -- Number of seconds this item entity has existed so far - age = 0, - - -- How old it has become in the collection animation - collection_age = 0, - - set_item = function(self, itemstring) - self.itemstring = itemstring - if self.itemstring == "" then - -- item not yet known - return - end - local stack = ItemStack(itemstring) - if minetest.get_item_group(stack:get_name(), "compass") > 0 then - if string.find(stack:get_name(), "_lodestone") then - stack:set_name("mcl_compass:18_lodestone") - else - stack:set_name("mcl_compass:18") - end - itemstring = stack:to_string() - self.itemstring = itemstring - end - if minetest.get_item_group(stack:get_name(), "clock") > 0 then - self.is_clock = true - end - local count = stack:get_count() - local max_count = stack:get_stack_max() - if count > max_count then - count = max_count - self.itemstring = stack:get_name().." "..max_count - end - local itemtable = stack:to_table() - local itemname = nil - local description = "" - if itemtable then - itemname = stack:to_table().name - end - local glow - local def = minetest.registered_items[itemname] - if def then - description = def.description - glow = def.light_source - end - local s = 0.2 + 0.1 * (count / max_count) - local wield_scale = (def and def.wield_scale and def.wield_scale.x) or 1 - local c = s - s = s / wield_scale - local prop = { - is_visible = true, - visual = "wielditem", - textures = {itemname}, - visual_size = {x = s, y = s}, - collisionbox = {-c, -c, -c, c, c, c}, - automatic_rotate = math.pi * 0.5, - infotext = description, - glow = glow, - } - self.object:set_properties(prop) - if item_drop_settings.random_item_velocity == true then - minetest.after(0, function(self) - if not self or not self.object or not self.object:get_luaentity() then - return - end - local vel = self.object:get_velocity() - if vel and vel.x == 0 and vel.z == 0 then - local x = math.random(1, 5) - if math.random(1,2) == 1 then - x = -x - end - local z = math.random(1, 5) - if math.random(1,2) == 1 then - z = -z - end - local y = math.random(2,4) - self.object:set_velocity({x=1/x, y=y, z=1/z}) - end - end, self) - end - - end, - - get_staticdata = function(self) - local data = minetest.serialize({ - itemstring = self.itemstring, - always_collect = self.always_collect, - age = self.age, - _insta_collect = self._insta_collect, - _flowing = self._flowing, - _removed = self._removed, - }) - -- sfan5 guessed that the biggest serializable item - -- entity would have a size of 65530 bytes. This has - -- been experimentally verified to be still too large. - -- - -- anon5 has calculated that the biggest serializable - -- item entity has a size of exactly 65487 bytes: - -- - -- 1. serializeString16 can handle max. 65535 bytes. - -- 2. The following engine metadata is always saved: - -- • 1 byte (version) - -- • 2 byte (length prefix) - -- • 14 byte “__builtin:item” - -- • 4 byte (length prefix) - -- • 2 byte (health) - -- • 3 × 4 byte = 12 byte (position) - -- • 4 byte (yaw) - -- • 1 byte (version 2) - -- • 2 × 4 byte = 8 byte (pitch and roll) - -- 3. This leaves 65487 bytes for the serialization. - if #data > 65487 then -- would crash the engine - local stack = ItemStack(self.itemstring) - stack:get_meta():from_table(nil) - self.itemstring = stack:to_string() - minetest.log( - "warning", - "Overlong item entity metadata removed: “" .. - self.itemstring .. - "” had serialized length of " .. - #data - ) - return self:get_staticdata() - end - return data - end, - - on_activate = function(self, staticdata, dtime_s) - if string.sub(staticdata, 1, string.len("return")) == "return" then - local data = minetest.deserialize(staticdata) - if data and type(data) == "table" then - self.itemstring = data.itemstring - self.always_collect = data.always_collect - if data.age then - self.age = data.age + dtime_s - else - self.age = dtime_s - end - --remember collection data - -- If true, can collect item without delay - self._insta_collect = data._insta_collect - self._flowing = data._flowing - self._removed = data._removed - end - else - self.itemstring = staticdata - end - if self._removed then - self._removed = true - self.object:remove() - return - end - if self._insta_collect == nil then - -- Intentionally default, since delayed collection is rare - self._insta_collect = true - end - if self._flowing == nil then - self._flowing = false - end - self._magnet_timer = 0 - self._magnet_active = false - -- How long ago the last possible collector was detected. nil = none in this session - self._collector_timer = nil - -- Used to apply additional force - self._force = nil - self._forcestart = nil - self._forcetimer = 0 - - self.object:set_armor_groups({immortal = 1}) - self.object:set_velocity({x = 0, y = 2, z = 0}) - self.object:set_acceleration({x = 0, y = -get_gravity(), z = 0}) - self:set_item(self.itemstring) - end, - - try_merge_with = function(self, own_stack, object, entity) - if self.age == entity.age or entity._removed then - -- Can not merge with itself and remove entity - return false - end - - local stack = ItemStack(entity.itemstring) - local name = stack:get_name() - if own_stack:get_name() ~= name or - own_stack:get_meta() ~= stack:get_meta() or - own_stack:get_wear() ~= stack:get_wear() or - own_stack:get_free_space() == 0 then - -- Can not merge different or full stack - return false - end - - local count = own_stack:get_count() - local total_count = stack:get_count() + count - local max_count = stack:get_stack_max() - - if total_count > max_count then - return false - end - -- Merge the remote stack into this one - - local pos = object:get_pos() - pos.y = pos.y + ((total_count - count) / max_count) * 0.15 - self.object:move_to(pos) - - self.age = 0 -- Handle as new entity - own_stack:set_count(total_count) - self:set_item(own_stack:to_string()) - - entity._removed = true - object:remove() - return true - end, - - on_step = function(self, dtime, moveresult) - if self._removed then - self.object:set_properties({ - physical = false - }) - self.object:set_velocity({x=0,y=0,z=0}) - self.object:set_acceleration({x=0,y=0,z=0}) - return - end - self.age = self.age + dtime - if self._collector_timer then - self._collector_timer = self._collector_timer + dtime - end - if time_to_live > 0 and self.age > time_to_live then - self._removed = true - self.object:remove() - return - end - -- Delete corrupted item entities. The itemstring MUST be non-empty on its first step, - -- otherwise there might have some data corruption. - if self.itemstring == "" then - minetest.log("warning", "Item entity with empty itemstring found at "..minetest.pos_to_string(self.object:get_pos()).. "! Deleting it now.") - self._removed = true - self.object:remove() - return - end - - local p = self.object:get_pos() - local node = minetest.get_node_or_nil(p) - local in_unloaded = (node == nil) - - if self.is_clock then - self.object:set_properties({ - textures = {"mcl_clock:clock_" .. (mcl_worlds.clock_works(p) and mcl_clock.old_time or mcl_clock.random_frame)} - }) - end - - -- If no collector was found for a long enough time, declare the magnet as disabled - if self._magnet_active and (self._collector_timer == nil or (self._collector_timer > item_drop_settings.magnet_time)) then - self._magnet_active = false - enable_physics(self.object, self) - return - end - if in_unloaded then - -- Don't infinetly fall into unloaded map - disable_physics(self.object, self) - return - end - - -- Destroy item in lava, fire or special nodes - local nn = node.name - local def = minetest.registered_nodes[nn] - local lg = minetest.get_item_group(nn, "lava") - local fg = minetest.get_item_group(nn, "fire") - local dg = minetest.get_item_group(nn, "destroys_items") - if (def and (lg ~= 0 or fg ~= 0 or dg == 1)) then - --Wait 2 seconds to allow mob drops to be cooked, & picked up instead of instantly destroyed. - if self.age > 2 then - if dg ~= 2 then - minetest.sound_play("builtin_item_lava", {pos = self.object:get_pos(), gain = 0.5}) - end - self._removed = true - self.object:remove() - return - end - end - - -- Destroy item when it collides with a cactus - if moveresult and moveresult.collides then - for _, collision in pairs(moveresult.collisions) do - local pos = collision.node_pos - if collision.type == "node" and minetest.get_node(pos).name == "mcl_core:cactus" then - self._removed = true - self.object:remove() - return - end - end - end - - -- Push item out when stuck inside solid opaque node - if def and def.walkable and def.groups and def.groups.opaque == 1 then - local shootdir - local cx = (p.x % 1) - 0.5 - local cz = (p.z % 1) - 0.5 - local order = {} - - -- First prepare the order in which the 4 sides are to be checked. - -- 1st: closest - -- 2nd: other direction - -- 3rd and 4th: other axis - if math.abs(cx) < math.abs(cz) then - order = cxcz(order, cx, "x", "z") - order = cxcz(order, cz, "z", "x") - else - order = cxcz(order, cz, "z", "x") - order = cxcz(order, cx, "x", "z") - end - - -- Check which one of the 4 sides is free - for o=1, #order do - local nn = minetest.get_node(vector.add(p, order[o])).name - local def = minetest.registered_nodes[nn] - if def and def.walkable == false and nn ~= "ignore" then - shootdir = order[o] - break - end - end - -- If none of the 4 sides is free, shoot upwards - if shootdir == nil then - shootdir = { x=0, y=1, z=0 } - local nn = minetest.get_node(vector.add(p, shootdir)).name - if nn == "ignore" then - -- Do not push into ignore - return - end - end - - -- Set new item moving speed accordingly - local newv = vector.multiply(shootdir, 3) - self.object:set_acceleration({x = 0, y = 0, z = 0}) - self.object:set_velocity(newv) - - disable_physics(self.object, self, false, false) - - if shootdir.y == 0 then - self._force = newv - p.x = math.floor(p.x) - p.y = math.floor(p.y) - p.z = math.floor(p.z) - self._forcestart = p - self._forcetimer = 1 - end - return - end - - -- This code is run after the entity got a push from above “push away” code. - -- It is responsible for making sure the entity is entirely outside the solid node - -- (with its full collision box), not just its center. - if self._forcetimer > 0 then - local cbox = self.object:get_properties().collisionbox - local ok = false - if self._force.x > 0 and (p.x > (self._forcestart.x + 0.5 + (cbox[4] - cbox[1])/2)) then ok = true - elseif self._force.x < 0 and (p.x < (self._forcestart.x + 0.5 - (cbox[4] - cbox[1])/2)) then ok = true - elseif self._force.z > 0 and (p.z > (self._forcestart.z + 0.5 + (cbox[6] - cbox[3])/2)) then ok = true - elseif self._force.z < 0 and (p.z < (self._forcestart.z + 0.5 - (cbox[6] - cbox[3])/2)) then ok = true end - -- Item was successfully forced out. No more pushing - if ok then - self._forcetimer = -1 - self._force = nil - enable_physics(self.object, self) - else - self._forcetimer = self._forcetimer - dtime - end - return - elseif self._force then - self._force = nil - enable_physics(self.object, self) - return - end - - -- Move item around on flowing liquids; add 'source' check to allow items to continue flowing a bit in the source block of flowing water. - if def and def.liquidtype == "flowing" or def.liquidtype == "source" then - - --[[ Get flowing direction (function call from flowlib), if there's a liquid. - NOTE: According to Qwertymine, flowlib.quickflow is only reliable for liquids with a flowing distance of 7. - Luckily, this is exactly what we need if we only care about water, which has this flowing distance. ]] - local vec = flowlib.quick_flow(p, node) - -- Just to make sure we don't manipulate the speed for no reason - if vec.x ~= 0 or vec.y ~= 0 or vec.z ~= 0 then - -- Minecraft Wiki: Flowing speed is "about 1.39 meters per second" - local f = 1.2 - -- Set new item moving speed into the direciton of the liquid - local newv = vector.multiply(vec, f) - -- Swap to acceleration instead of a static speed to better mimic MC mechanics. - self.object:set_acceleration({x = newv.x, y = -0.22, z = newv.z}) - - self.physical_state = true - self._flowing = true - self.object:set_properties({ - physical = true - }) - return - end - elseif self._flowing == true then - -- Disable flowing physics if not on/in flowing liquid - self._flowing = false - enable_physics(self.object, self, true) - return - end - - -- If node is not registered or node is walkably solid and resting on nodebox - local nn = minetest.get_node({x=p.x, y=p.y-0.5, z=p.z}).name - local v = self.object:get_velocity() - - if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and not minetest.registered_nodes[nn].groups.slippery and v.y == 0 then - if self.physical_state then - local own_stack = ItemStack(self.object:get_luaentity().itemstring) - -- Merge with close entities of the same item - for _, object in pairs(minetest.get_objects_inside_radius(p, 0.8)) do - local obj = object:get_luaentity() - if obj and obj.name == "__builtin:item" - and obj.physical_state == false then - if self:try_merge_with(own_stack, object, obj) then - return - end - end - end - disable_physics(self.object, self) - end - else - if self._magnet_active == false then - enable_physics(self.object, self) - end - end - end, - - -- Note: on_punch intentionally left out. The player should *not* be able to collect items by punching -}) diff --git a/mods/ENTITIES/mcl_item_entity/mod.conf b/mods/ENTITIES/mcl_item_entity/mod.conf deleted file mode 100644 index acd9f00f3..000000000 --- a/mods/ENTITIES/mcl_item_entity/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_item_entity -author = PilzAdam -description = Dropped items will be attracted to the player like a magnet. -depends = flowlib, mcl_enchanting diff --git a/mods/ENTITIES/mcl_item_entity/sounds/Attributes.txt b/mods/ENTITIES/mcl_item_entity/sounds/Attributes.txt deleted file mode 100644 index 781759352..000000000 --- a/mods/ENTITIES/mcl_item_entity/sounds/Attributes.txt +++ /dev/null @@ -1 +0,0 @@ - Item_Drop_Pickup - https://freesound.org/people/benniknop/sounds/317848/ (License: CC0) diff --git a/mods/ENTITIES/mcl_item_entity/sounds/builtin_item_lava.ogg b/mods/ENTITIES/mcl_item_entity/sounds/builtin_item_lava.ogg deleted file mode 100644 index 5c293fe9b..000000000 Binary files a/mods/ENTITIES/mcl_item_entity/sounds/builtin_item_lava.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.ogg b/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.ogg deleted file mode 100644 index e7f5df094..000000000 Binary files a/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/README.txt b/mods/ENTITIES/mcl_minecarts/README.txt deleted file mode 100644 index 112cbd308..000000000 --- a/mods/ENTITIES/mcl_minecarts/README.txt +++ /dev/null @@ -1,21 +0,0 @@ -mcl_minecarts -============= -Based on the mod "boost_carts" by Krock. -Target: Run smoothly and do not use too much CPU. - -License of source code: ------------------------ -MIT License - -Copyright (C) 2012-2016 PilzAdam -Copyright (C) 2014-2016 SmallJoker -Copyright (C) 2012-2016 Various Minetest developers and contributors - -Authors/licenses of media files: ------------------------ - -Minecart model: - 22i (GPLv3) - -Texture files (CC BY-SA 3.0): - XSSheep diff --git a/mods/ENTITIES/mcl_minecarts/functions.lua b/mods/ENTITIES/mcl_minecarts/functions.lua deleted file mode 100644 index 2f0dfe0ae..000000000 --- a/mods/ENTITIES/mcl_minecarts/functions.lua +++ /dev/null @@ -1,137 +0,0 @@ -local vector = vector - -function mcl_minecarts:get_sign(z) - if z == 0 then - return 0 - else - return z / math.abs(z) - end -end - -function mcl_minecarts:velocity_to_dir(v) - if math.abs(v.x) > math.abs(v.z) then - return {x=mcl_minecarts:get_sign(v.x), y=mcl_minecarts:get_sign(v.y), z=0} - else - return {x=0, y=mcl_minecarts:get_sign(v.y), z=mcl_minecarts:get_sign(v.z)} - end -end - -function mcl_minecarts:is_rail(pos, railtype) - local node = minetest.get_node(pos).name - if node == "ignore" then - local vm = minetest.get_voxel_manip() - local emin, emax = vm:read_from_map(pos, pos) - local area = VoxelArea:new{ - MinEdge = emin, - MaxEdge = emax, - } - local data = vm:get_data() - local vi = area:indexp(pos) - node = minetest.get_name_from_content_id(data[vi]) - end - if minetest.get_item_group(node, "rail") == 0 then - return false - end - if not railtype then - return true - end - return minetest.get_item_group(node, "connect_to_raillike") == railtype -end - -function mcl_minecarts:check_front_up_down(pos, dir_, check_down, railtype) - local dir = vector.new(dir_) - -- Front - dir.y = 0 - local cur = vector.add(pos, dir) - if mcl_minecarts:is_rail(cur, railtype) then - return dir - end - -- Up - if check_down then - dir.y = 1 - cur = vector.add(pos, dir) - if mcl_minecarts:is_rail(cur, railtype) then - return dir - end - end - -- Down - dir.y = -1 - cur = vector.add(pos, dir) - if mcl_minecarts:is_rail(cur, railtype) then - return dir - end - return nil -end - -function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) - local pos = vector.round(pos_) - local cur - local left_check, right_check = true, true - - -- Check left and right - local left = {x=0, y=0, z=0} - local right = {x=0, y=0, z=0} - if dir.z ~= 0 and dir.x == 0 then - left.x = -dir.z - right.x = dir.z - elseif dir.x ~= 0 and dir.z == 0 then - left.z = dir.x - right.z = -dir.x - end - - if ctrl then - if old_switch == 1 then - left_check = false - elseif old_switch == 2 then - right_check = false - end - if ctrl.left and left_check then - cur = mcl_minecarts:check_front_up_down(pos, left, false, railtype) - if cur then - return cur, 1 - end - left_check = false - end - if ctrl.right and right_check then - cur = mcl_minecarts:check_front_up_down(pos, right, false, railtype) - if cur then - return cur, 2 - end - right_check = true - end - end - - -- Normal - cur = mcl_minecarts:check_front_up_down(pos, dir, true, railtype) - if cur then - return cur - end - - -- Left, if not already checked - if left_check then - cur = mcl_minecarts:check_front_up_down(pos, left, false, railtype) - if cur then - return cur - end - end - - -- Right, if not already checked - if right_check then - cur = mcl_minecarts:check_front_up_down(pos, right, false, railtype) - if cur then - return cur - end - end - -- Backwards - if not old_switch then - cur = mcl_minecarts:check_front_up_down(pos, { - x = -dir.x, - y = dir.y, - z = -dir.z - }, true, railtype) - if cur then - return cur - end - end - return {x=0, y=0, z=0} -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_minecarts/init.lua b/mods/ENTITIES/mcl_minecarts/init.lua deleted file mode 100644 index d894f9722..000000000 --- a/mods/ENTITIES/mcl_minecarts/init.lua +++ /dev/null @@ -1,864 +0,0 @@ -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) - -local has_mcl_wip = minetest.get_modpath("mcl_wip") - -mcl_minecarts = {} -mcl_minecarts.modpath = minetest.get_modpath(modname) -mcl_minecarts.speed_max = 10 -mcl_minecarts.check_float_time = 15 - -dofile(mcl_minecarts.modpath.."/functions.lua") -dofile(mcl_minecarts.modpath.."/rails.lua") - -local function detach_driver(self) - if not self._driver then - return - end - mcl_player.player_attached[self._driver] = nil - local player = minetest.get_player_by_name(self._driver) - self._driver = nil - self._start_pos = nil - if player then - player:set_detach() - player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) - mcl_player.player_set_animation(player, "stand" , 30) - end -end - -local function activate_tnt_minecart(self, timer) - if self._boomtimer then - return - end - self.object:set_armor_groups({immortal=1}) - if timer then - self._boomtimer = timer - else - self._boomtimer = tnt.BOOMTIMER - end - self.object:set_properties({textures = { - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_minecarts_minecart.png", - }}) - self._blinktimer = tnt.BLINKTIMER - minetest.sound_play("tnt_ignite", {pos = self.object:get_pos(), gain = 1.0, max_hear_distance = 15}, true) -end - -local activate_normal_minecart = detach_driver - --- Table for item-to-entity mapping. Keys: itemstring, Values: Corresponding entity ID -local entity_mapping = {} - -local function register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail) - local cart = { - physical = false, - collisionbox = {-10/16., -0.5, -10/16, 10/16, 0.25, 10/16}, - visual = "mesh", - mesh = mesh, - visual_size = {x=1, y=1}, - textures = textures, - - on_rightclick = on_rightclick, - - _driver = nil, -- player who sits in and controls the minecart (only for minecart!) - _punched = false, -- used to re-send _velocity and position - _velocity = {x=0, y=0, z=0}, -- only used on punch - _start_pos = nil, -- Used to calculate distance for “On A Rail” achievement - _last_float_check = nil, -- timestamp of last time the cart was checked to be still on a rail - _fueltime = nil, -- how many seconds worth of fuel is left. Only used by minecart with furnace - _boomtimer = nil, -- how many seconds are left before exploding - _blinktimer = nil, -- how many seconds are left before TNT blinking - _blink = false, -- is TNT blink texture active? - _old_dir = {x=0, y=0, z=0}, - _old_pos = nil, - _old_vel = {x=0, y=0, z=0}, - _old_switch = 0, - _railtype = nil, - } - - function cart:on_activate(staticdata, dtime_s) - -- Initialize - local data = minetest.deserialize(staticdata) - if type(data) == "table" then - self._railtype = data._railtype - end - self.object:set_armor_groups({immortal=1}) - - -- Activate cart if on activator rail - if self.on_activate_by_rail then - local pos = self.object:get_pos() - local node = minetest.get_node(vector.floor(pos)) - if node.name == "mcl_minecarts:activator_rail_on" then - self:on_activate_by_rail() - end - end - end - - function cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) - local pos = self.object:get_pos() - if not self._railtype then - local node = minetest.get_node(vector.floor(pos)).name - self._railtype = minetest.get_item_group(node, "connect_to_raillike") - end - - if not puncher or not puncher:is_player() then - local cart_dir = mcl_minecarts:get_rail_direction(pos, {x=1, y=0, z=0}, nil, nil, self._railtype) - if vector.equals(cart_dir, {x=0, y=0, z=0}) then - return - end - self._velocity = vector.multiply(cart_dir, 3) - self._old_pos = nil - self._punched = true - return - end - - -- Punch+sneak: Pick up minecart (unless TNT was ignited) - if puncher:get_player_control().sneak and not self._boomtimer then - if self._driver then - if self._old_pos then - self.object:set_pos(self._old_pos) - end - detach_driver(self) - end - - -- Disable detector rail - local rou_pos = vector.round(pos) - local node = minetest.get_node(rou_pos) - if node.name == "mcl_minecarts:detector_rail_on" then - local newnode = {name="mcl_minecarts:detector_rail", param2 = node.param2} - minetest.swap_node(rou_pos, newnode) - mesecon.receptor_off(rou_pos) - end - - -- Drop items and remove cart entity - if not minetest.is_creative_enabled(puncher:get_player_name()) then - for d=1, #drop do - minetest.add_item(self.object:get_pos(), drop[d]) - end - elseif puncher and puncher:is_player() then - local inv = puncher:get_inventory() - for d=1, #drop do - if not inv:contains_item("main", drop[d]) then - inv:add_item("main", drop[d]) - end - end - end - - self.object:remove() - return - end - - local vel = self.object:get_velocity() - if puncher:get_player_name() == self._driver then - if math.abs(vel.x + vel.z) > 7 then - return - end - end - - local punch_dir = mcl_minecarts:velocity_to_dir(puncher:get_look_dir()) - punch_dir.y = 0 - local cart_dir = mcl_minecarts:get_rail_direction(pos, punch_dir, nil, nil, self._railtype) - if vector.equals(cart_dir, {x=0, y=0, z=0}) then - return - end - - time_from_last_punch = math.min(time_from_last_punch, tool_capabilities.full_punch_interval) - local f = 3 * (time_from_last_punch / tool_capabilities.full_punch_interval) - - self._velocity = vector.multiply(cart_dir, f) - self._old_pos = nil - self._punched = true - end - - cart.on_activate_by_rail = on_activate_by_rail - - function cart:on_step(dtime) - local ctrl, player = nil, nil - if self._driver then - player = minetest.get_player_by_name(self._driver) - if player then - ctrl = player:get_player_control() - -- player detach - if ctrl.sneak then - detach_driver(self) - return - end - end - end - - local vel = self.object:get_velocity() - local update = {} - if self._last_float_check == nil then - self._last_float_check = 0 - else - self._last_float_check = self._last_float_check + dtime - end - - local pos, rou_pos, node = self.object:get_pos() - local r = 0.6 - for _, node_pos in pairs({{r, 0}, {0, r}, {-r, 0}, {0, -r}}) do - if minetest.get_node(vector.offset(pos, node_pos[1], 0, node_pos[2])).name == "mcl_core:cactus" then - detach_driver(self) - for d = 1, #drop do - minetest.add_item(pos, drop[d]) - end - self.object:remove() - return - end - end - - -- Drop minecart if it isn't on a rail anymore - if self._last_float_check >= mcl_minecarts.check_float_time then - pos = self.object:get_pos() - rou_pos = vector.round(pos) - node = minetest.get_node(rou_pos) - local g = minetest.get_item_group(node.name, "connect_to_raillike") - if g ~= self._railtype and self._railtype then - -- Detach driver - if player then - if self._old_pos then - self.object:set_pos(self._old_pos) - end - mcl_player.player_attached[self._driver] = nil - player:set_detach() - player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) - end - - -- Explode if already ignited - if self._boomtimer then - self.object:remove() - mcl_explosions.explode(pos, 4, { drop_chance = 1.0 }) - return - end - - -- Drop items and remove cart entity - local pname = "" - if player then - pname = player:get_player_name() - end - if not minetest.is_creative_enabled(pname) then - for d=1, #drop do - minetest.add_item(self.object:get_pos(), drop[d]) - end - end - - self.object:remove() - return - end - self._last_float_check = 0 - end - - -- Update furnace stuff - if self._fueltime and self._fueltime > 0 then - self._fueltime = self._fueltime - dtime - if self._fueltime <= 0 then - self.object:set_properties({textures = - { - "default_furnace_top.png", - "default_furnace_top.png", - "default_furnace_front.png", - "default_furnace_side.png", - "default_furnace_side.png", - "default_furnace_side.png", - "mcl_minecarts_minecart.png", - }}) - self._fueltime = 0 - end - end - local has_fuel = self._fueltime and self._fueltime > 0 - - -- Update TNT stuff - if self._boomtimer then - -- Explode - self._boomtimer = self._boomtimer - dtime - local pos = self.object:get_pos() - if self._boomtimer <= 0 then - self.object:remove() - mcl_explosions.explode(pos, 4, { drop_chance = 1.0 }) - return - else - tnt.smoke_step(pos) - end - end - if self._blinktimer then - self._blinktimer = self._blinktimer - dtime - if self._blinktimer <= 0 then - self._blink = not self._blink - if self._blink then - self.object:set_properties({textures = - { - "default_tnt_top.png", - "default_tnt_bottom.png", - "default_tnt_side.png", - "default_tnt_side.png", - "default_tnt_side.png", - "default_tnt_side.png", - "mcl_minecarts_minecart.png", - }}) - else - self.object:set_properties({textures = - { - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_tnt_blink.png", - "mcl_minecarts_minecart.png", - }}) - end - self._blinktimer = tnt.BLINKTIMER - end - end - - if self._punched then - vel = vector.add(vel, self._velocity) - self.object:set_velocity(vel) - self._old_dir.y = 0 - elseif vector.equals(vel, {x=0, y=0, z=0}) and (not has_fuel) then - return - end - - local dir, last_switch = nil, nil - if not pos then - pos = self.object:get_pos() - end - if self._old_pos and not self._punched then - local flo_pos = vector.floor(pos) - local flo_old = vector.floor(self._old_pos) - if vector.equals(flo_pos, flo_old) and (not has_fuel) then - return - -- Prevent querying the same node over and over again - end - - if not rou_pos then - rou_pos = vector.round(pos) - end - local rou_old = vector.round(self._old_pos) - if not node then - node = minetest.get_node(rou_pos) - end - local node_old = minetest.get_node(rou_old) - - -- Update detector rails - if node.name == "mcl_minecarts:detector_rail" then - local newnode = {name="mcl_minecarts:detector_rail_on", param2 = node.param2} - minetest.swap_node(rou_pos, newnode) - mesecon.receptor_on(rou_pos) - end - if node_old.name == "mcl_minecarts:detector_rail_on" then - local newnode = {name="mcl_minecarts:detector_rail", param2 = node_old.param2} - minetest.swap_node(rou_old, newnode) - mesecon.receptor_off(rou_old) - end - -- Activate minecart if on activator rail - if node_old.name == "mcl_minecarts:activator_rail_on" and self.on_activate_by_rail then - self:on_activate_by_rail() - end - end - - -- Stop cart if velocity vector flips - if self._old_vel and self._old_vel.y == 0 and - (self._old_vel.x * vel.x < 0 or self._old_vel.z * vel.z < 0) then - self._old_vel = {x = 0, y = 0, z = 0} - self._old_pos = pos - self.object:set_velocity(vector.new()) - self.object:set_acceleration(vector.new()) - return - end - self._old_vel = vector.new(vel) - - if self._old_pos then - local diff = vector.subtract(self._old_pos, pos) - for _,v in ipairs({"x","y","z"}) do - if math.abs(diff[v]) > 1.1 then - local expected_pos = vector.add(self._old_pos, self._old_dir) - dir, last_switch = mcl_minecarts:get_rail_direction(pos, self._old_dir, ctrl, self._old_switch, self._railtype) - if vector.equals(dir, {x=0, y=0, z=0}) then - dir = false - pos = vector.new(expected_pos) - update.pos = true - end - break - end - end - end - - if vel.y == 0 then - for _,v in ipairs({"x", "z"}) do - if vel[v] ~= 0 and math.abs(vel[v]) < 0.9 then - vel[v] = 0 - update.vel = true - end - end - end - - local cart_dir = mcl_minecarts:velocity_to_dir(vel) - local max_vel = mcl_minecarts.speed_max - if not dir then - dir, last_switch = mcl_minecarts:get_rail_direction(pos, cart_dir, ctrl, self._old_switch, self._railtype) - end - - local new_acc = {x=0, y=0, z=0} - if vector.equals(dir, {x=0, y=0, z=0}) and not has_fuel then - vel = {x=0, y=0, z=0} - update.vel = true - else - -- If the direction changed - if dir.x ~= 0 and self._old_dir.z ~= 0 then - vel.x = dir.x * math.abs(vel.z) - vel.z = 0 - pos.z = math.floor(pos.z + 0.5) - update.pos = true - end - if dir.z ~= 0 and self._old_dir.x ~= 0 then - vel.z = dir.z * math.abs(vel.x) - vel.x = 0 - pos.x = math.floor(pos.x + 0.5) - update.pos = true - end - -- Up, down? - if dir.y ~= self._old_dir.y then - vel.y = dir.y * math.abs(vel.x + vel.z) - pos = vector.round(pos) - update.pos = true - end - - -- Slow down or speed up - local acc = dir.y * -1.8 - local friction = 0.4 - local ndef = minetest.registered_nodes[minetest.get_node(pos).name] - local speed_mod = ndef and ndef._rail_acceleration - - acc = acc - friction - - if has_fuel then - acc = acc + 0.6 - end - - if speed_mod and speed_mod ~= 0 then - acc = acc + speed_mod + friction - end - - new_acc = vector.multiply(dir, acc) - end - - self.object:set_acceleration(new_acc) - self._old_pos = vector.new(pos) - self._old_dir = vector.new(dir) - self._old_switch = last_switch - - -- Limits - for _,v in ipairs({"x","y","z"}) do - if math.abs(vel[v]) > max_vel then - vel[v] = mcl_minecarts:get_sign(vel[v]) * max_vel - new_acc[v] = 0 - update.vel = true - end - end - - -- Give achievement when player reached a distance of 1000 nodes from the start position - if self._driver and (vector.distance(self._start_pos, pos) >= 1000) then - awards.unlock(self._driver, "mcl:onARail") - end - - - if update.pos or self._punched then - local yaw = 0 - if dir.x < 0 then - yaw = 0.5 - elseif dir.x > 0 then - yaw = 1.5 - elseif dir.z < 0 then - yaw = 1 - end - self.object:set_yaw(yaw * math.pi) - end - - if self._punched then - self._punched = false - end - - if not (update.vel or update.pos) then - return - end - - - local anim = {x=0, y=0} - if dir.y == -1 then - anim = {x=1, y=1} - elseif dir.y == 1 then - anim = {x=2, y=2} - end - self.object:set_animation(anim, 1, 0) - - self.object:set_velocity(vel) - if update.pos then - self.object:set_pos(pos) - end - end - - function cart:get_staticdata() - return minetest.serialize({_railtype = self._railtype}) - end - - minetest.register_entity(entity_id, cart) -end - --- Place a minecart at pointed_thing -function mcl_minecarts.place_minecart(itemstack, pointed_thing, placer) - if not pointed_thing.type == "node" then - return - end - - local railpos, node - if mcl_minecarts:is_rail(pointed_thing.under) then - railpos = pointed_thing.under - node = minetest.get_node(pointed_thing.under) - elseif mcl_minecarts:is_rail(pointed_thing.above) then - railpos = pointed_thing.above - node = minetest.get_node(pointed_thing.above) - else - return - end - - -- Activate detector rail - if node.name == "mcl_minecarts:detector_rail" then - local newnode = {name="mcl_minecarts:detector_rail_on", param2 = node.param2} - minetest.swap_node(railpos, newnode) - mesecon.receptor_on(railpos) - end - - local entity_id = entity_mapping[itemstack:get_name()] - local cart = minetest.add_entity(railpos, entity_id) - local railtype = minetest.get_item_group(node.name, "connect_to_raillike") - local le = cart:get_luaentity() - if le then - le._railtype = railtype - end - local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype) - cart:set_yaw(minetest.dir_to_yaw(cart_dir)) - - local pname = "" - if placer then - pname = placer:get_player_name() - end - if not minetest.is_creative_enabled(pname) then - itemstack:take_item() - end - return itemstack -end - - -local function register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative) - entity_mapping[itemstring] = entity_id - - local groups = { minecart = 1, transport = 1 } - if creative == false then - groups.not_in_creative_inventory = 1 - end - local def = { - stack_max = 1, - on_place = function(itemstack, placer, pointed_thing) - if not pointed_thing.type == "node" then - return - end - - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - return mcl_minecarts.place_minecart(itemstack, pointed_thing, placer) - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Place minecart as entity on rail. If there's no rail, just drop it. - local placed - if minetest.get_item_group(dropnode.name, "rail") ~= 0 then - -- FIXME: This places minecarts even if the spot is already occupied - local pointed_thing = { under = droppos, above = { x=droppos.x, y=droppos.y+1, z=droppos.z } } - placed = mcl_minecarts.place_minecart(stack, pointed_thing) - end - if placed == nil then - -- Drop item - minetest.add_item(droppos, stack) - end - end, - groups = groups, - } - def.description = description - def._tt_help = tt_help - def._doc_items_longdesc = longdesc - def._doc_items_usagehelp = usagehelp - def.inventory_image = icon - def.wield_image = icon - minetest.register_craftitem(itemstring, def) -end - ---[[ -Register a minecart -* itemstring: Itemstring of minecart item -* entity_id: ID of minecart entity -* description: Item name / description -* longdesc: Long help text -* usagehelp: Usage help text -* mesh: Minecart mesh -* textures: Minecart textures table -* icon: Item icon -* drop: Dropped items after destroying minecart -* on_rightclick: Called after rightclick -* on_activate_by_rail: Called when above activator rail -* creative: If false, don't show in Creative Inventory -]] -local function register_minecart(itemstring, entity_id, description, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative) - register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail) - register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative) - if minetest.get_modpath("doc_identifier") then - doc.sub.identifier.register_object(entity_id, "craftitems", itemstring) - end -end - --- Minecart -register_minecart( - "mcl_minecarts:minecart", - "mcl_minecarts:minecart", - S("Minecart"), - S("Vehicle for fast travel on rails"), - S("Minecarts can be used for a quick transportion on rails.") .. "\n" .. - S("Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type."), - S("You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.") .. "\n" .. - S("To obtain the minecart, punch it while holding down the sneak key.") .. "\n" .. - S("If it moves over a powered activator rail, you'll get ejected."), - "mcl_minecarts_minecart.b3d", - {"mcl_minecarts_minecart.png"}, - "mcl_minecarts_minecart_normal.png", - {"mcl_minecarts:minecart"}, - function(self, clicker) - local name = clicker:get_player_name() - if not clicker or not clicker:is_player() then - return - end - local player_name = clicker:get_player_name() - if self._driver and player_name == self._driver then - detach_driver(self) - elseif not self._driver then - self._driver = player_name - self._start_pos = self.object:get_pos() - mcl_player.player_attached[player_name] = true - clicker:set_attach(self.object, "", {x=0, y=-1.75, z=-2}, {x=0, y=0, z=0}) - mcl_player.player_attached[name] = true - minetest.after(0.2, function(name) - local player = minetest.get_player_by_name(name) - if player then - mcl_player.player_set_animation(player, "sit" , 30) - player:set_eye_offset({x=0, y=-5.5, z=0},{x=0, y=-4, z=0}) - mcl_title.set(clicker, "actionbar", {text=S("Sneak to dismount"), color="white", stay=60}) - end - end, name) - end - end, activate_normal_minecart -) - --- Minecart with Chest -register_minecart( - "mcl_minecarts:chest_minecart", - "mcl_minecarts:chest_minecart", - S("Minecart with Chest"), - nil, nil, nil, - "mcl_minecarts_minecart_chest.b3d", - { "mcl_chests_normal.png", "mcl_minecarts_minecart.png" }, - "mcl_minecarts_minecart_chest.png", - {"mcl_minecarts:minecart", "mcl_chests:chest"}, - nil, nil, false) - --- Minecart with Furnace -register_minecart( - "mcl_minecarts:furnace_minecart", - "mcl_minecarts:furnace_minecart", - S("Minecart with Furnace"), - nil, - S("A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel."), - S("Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.") .. "\n" .. - S("To obtain the minecart and furnace, punch them while holding down the sneak key."), - - "mcl_minecarts_minecart_block.b3d", - { - "default_furnace_top.png", - "default_furnace_top.png", - "default_furnace_front.png", - "default_furnace_side.png", - "default_furnace_side.png", - "default_furnace_side.png", - "mcl_minecarts_minecart.png", - }, - "mcl_minecarts_minecart_furnace.png", - {"mcl_minecarts:minecart", "mcl_furnaces:furnace"}, - -- Feed furnace with coal - function(self, clicker) - if not clicker or not clicker:is_player() then - return - end - if not self._fueltime then - self._fueltime = 0 - end - local held = clicker:get_wielded_item() - if minetest.get_item_group(held:get_name(), "coal") == 1 then - self._fueltime = self._fueltime + 180 - - if not minetest.is_creative_enabled(clicker:get_player_name()) then - held:take_item() - local index = clicker:get_wield_index() - local inv = clicker:get_inventory() - inv:set_stack("main", index, held) - end - self.object:set_properties({textures = - { - "default_furnace_top.png", - "default_furnace_top.png", - "default_furnace_front_active.png", - "default_furnace_side.png", - "default_furnace_side.png", - "default_furnace_side.png", - "mcl_minecarts_minecart.png", - }}) - end - end, nil, false -) - --- Minecart with Command Block -register_minecart( - "mcl_minecarts:command_block_minecart", - "mcl_minecarts:command_block_minecart", - S("Minecart with Command Block"), - nil, nil, nil, - "mcl_minecarts_minecart_block.b3d", - { - "jeija_commandblock_off.png^[verticalframe:2:0", - "jeija_commandblock_off.png^[verticalframe:2:0", - "jeija_commandblock_off.png^[verticalframe:2:0", - "jeija_commandblock_off.png^[verticalframe:2:0", - "jeija_commandblock_off.png^[verticalframe:2:0", - "jeija_commandblock_off.png^[verticalframe:2:0", - "mcl_minecarts_minecart.png", - }, - "mcl_minecarts_minecart_command_block.png", - {"mcl_minecarts:minecart"}, - nil, nil, false -) - --- Minecart with Hopper -register_minecart( - "mcl_minecarts:hopper_minecart", - "mcl_minecarts:hopper_minecart", - S("Minecart with Hopper"), - nil, nil, nil, - "mcl_minecarts_minecart_hopper.b3d", - { - "mcl_hoppers_hopper_inside.png", - "mcl_minecarts_minecart.png", - "mcl_hoppers_hopper_outside.png", - "mcl_hoppers_hopper_top.png", - }, - "mcl_minecarts_minecart_hopper.png", - {"mcl_minecarts:minecart", "mcl_hoppers:hopper"}, - nil, nil, false -) - --- Minecart with TNT -register_minecart( - "mcl_minecarts:tnt_minecart", - "mcl_minecarts:tnt_minecart", - S("Minecart with TNT"), - S("Vehicle for fast travel on rails").."\n"..S("Can be ignited by tools or powered activator rail"), - S("A minecart with TNT is an explosive vehicle that travels on rail."), - S("Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.") .. "\n" .. - S("To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited."), - "mcl_minecarts_minecart_block.b3d", - { - "default_tnt_top.png", - "default_tnt_bottom.png", - "default_tnt_side.png", - "default_tnt_side.png", - "default_tnt_side.png", - "default_tnt_side.png", - "mcl_minecarts_minecart.png", - }, - "mcl_minecarts_minecart_tnt.png", - {"mcl_minecarts:minecart", "mcl_tnt:tnt"}, - -- Ingite - function(self, clicker) - if not clicker or not clicker:is_player() then - return - end - if self._boomtimer then - return - end - local held = clicker:get_wielded_item() - if held:get_name() == "mcl_fire:flint_and_steel" then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - held:add_wear(65535/65) -- 65 uses - local index = clicker:get_wield_index() - local inv = clicker:get_inventory() - inv:set_stack("main", index, held) - end - activate_tnt_minecart(self) - end - end, activate_tnt_minecart) - - -minetest.register_craft({ - output = "mcl_minecarts:minecart", - recipe = { - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - }, -}) - -minetest.register_craft({ - output = "mcl_minecarts:tnt_minecart", - recipe = { - {"mcl_tnt:tnt"}, - {"mcl_minecarts:minecart"}, - }, -}) - --- TODO: Re-enable crafting of special minecarts when they have been implemented ---[[minetest.register_craft({ - output = "mcl_minecarts:furnace_minecart", - recipe = { - {"mcl_furnaces:furnace"}, - {"mcl_minecarts:minecart"}, - }, -}) - -minetest.register_craft({ - output = "mcl_minecarts:hopper_minecart", - recipe = { - {"mcl_hoppers:hopper"}, - {"mcl_minecarts:minecart"}, - }, -}) - -minetest.register_craft({ - output = "mcl_minecarts:chest_minecart", - recipe = { - {"mcl_chests:chest"}, - {"mcl_minecarts:minecart"}, - }, -})]] - - -if has_mcl_wip then - mcl_wip.register_wip_item("mcl_minecarts:chest_minecart") - mcl_wip.register_wip_item("mcl_minecarts:furnace_minecart") - mcl_wip.register_wip_item("mcl_minecarts:command_block_minecart") - mcl_wip.register_wip_item("mcl_minecarts:hopper_minecart") -end diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.de.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.de.tr deleted file mode 100644 index 1d270ee6c..000000000 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.de.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_minecarts -Minecart=Lore -Minecarts can be used for a quick transportion on rails.=Loren können für eine schnelle Fahrt auf Schienen benutzt werden. -Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Loren fahren nur auf Schienen und bleiben immer auf der Strecke. An einer Einmündung ohne einem Weg nach vorne fahren sie nach links. Die Geschwindigkeit hängt vom Schienentyp ab. -You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Sie können die Lore auf Schienen platzieren. Rechtsklicken, um einzusteigen. -To obtain the minecart, punch it while holding down the sneak key.=Um die Lore aufzusammeln, schlagen Sie sie, während Sie die Schleichen-Taste gedrückt halten. -A minecart with TNT is an explosive vehicle that travels on rail.=Eine Lore mit TNT ist ein explosives Fahrzeug, das auf Schienen fährt. -Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Auf Schienen platzieren. Zuschlagen zum Bewegen. Das TNT wird mit einem Feuerzeug angezündet, oder, wenn die Lore sich auf einer bestromten Aktivierungsschiene befindet. -To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Um die Lore und das TNT zu erhalten, schlagen Sie sie, während Sie die Schleichtaste drücken. Das ist nicht möglich, wenn das TNT bereits gezündet wurde. -A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Eine Lore mit Ofen ist ein Fahrzeug, das auf Rädern fährt. Sie kann mit Brennstoff angetrieben werden. -Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Auf Schienen platzieren. Wird Kohle eingefügt, wird der Ofen für eine lange Zeit brennen und die Lore wird fähig sein, sich selbst anzutreiben. Zuschlagen, um die Bewegung einzuläuten. -To obtain the minecart and furnace, punch them while holding down the sneak key.=Um die Lore und den Ofen zu erhalten, schlagen Sie zu, während Sie die Schleichtaste drücken. -Minecart with Chest=Lore mit Truhe -Minecart with Furnace=Lore mit Ofen -Minecart with Command Block=Lore mit Befehlsblock -Minecart with Hopper=Lore mit Trichter -Minecart with TNT=Lore mit TNT -Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Bauen Sie sie auf den Boden, um Ihr Schienennetzwerk zu errichten, die Schienen werden sich automatisch verbinden und sich nach Bedarf in Kurven, Einmündungen, Kreuzungen und Steigungen verwandeln. -Rail=Schiene -Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Normale Schienen werden Loren aufgrund von Reibung leicht verlangsamen. -Powered Rail=Antriebsschiene -Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Antriebsschienen können Loren beschleunigen und abbremsen. -Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Ohne Redstone-Energie wird die Schiene Loren abbremsen. Mit Redstone-Energie wird sie sie beschleunigen. -Activator Rail=Aktivierungsschiene -Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Aktivierungsschienen werden benutzt, um besondere Loren zu aktivieren. -To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Wenn diese Schiene mit Redstone-Energie versorgt wird, werden alle Loren, die sie passieren, aktiviert. -Detector Rail=Sensorschiene -Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Eine Sensorschiene kann eine Lore erkennen und versorgt Redstone-Mechanismen. -To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Um eine Lore zu erkennen und die Redstone-Energie zu aktivieren, verbinden Sie die Schiene mit Redstonestaub oder Redstone-Mechanismen und schicken Sie eine beliebige Lore über die Schiene. -Track for minecarts=Strecke für Loren -Speed up when powered, slow down when not powered=Beschleunigt, wenn bestromt, sonst verlangsamt es -Activates minecarts when powered=Aktiviert Loren, wenn bestromt -Emits redstone power when a minecart is detected=Gibt ein Redstonesignal aus, wenn eine Lore erfasst wird -Vehicle for fast travel on rails=Fahrzeug zum schnellen Transport auf Schienen -Can be ignited by tools or powered activator rail=Kann mit Werkzeugen oder bestromten Aktivierungsschienen angezündet werden -Sneak to dismount=Zum Aussteigen schleichen diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.es.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.es.tr deleted file mode 100644 index 06ee2ca6a..000000000 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.es.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_minecarts -Minecart=Vagoneta -Minecarts can be used for a quick transportion on rails.=Las vagonetas se pueden usar para transportarse rápido en los rieles. -Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Las vagonetas solo viajan en rieles y siempre siguen las pistas. En un cruce en T sin camino recto, giran a la izquierda. La velocidad se ve afectada por el tipo de riel. -You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Puedes colocar el vagoneta en los rieles. Haga clic derecho para insertarlo. Golpea para que se mueva. -To obtain the minecart, punch it while holding down the sneak key.=Para obtener el vagoneta, golpéalo mientras mantienes presionada la tecla. -Minecart with Chest=Vagoneta con cofre -Minecart with Furnace=Vagoneta con horno -Minecart with Command Block=Vagoneta con bloque de comandos -Minecart with Hopper=Vagoneta con tolva -Minecart with TNT=Vagoneta con dinamita -Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Colóquelos en el suelo para construir su ferrocarril, los rieles se conectarán automáticamente entre sí y se convertirán en curvas, uniones en T, cruces y pendientes según sea necesario. -Rail=Raíl -Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Los rieles normales ralentizan ligeramente las vagonetas debido a la fricción. -Powered Rail=Raíl propulsor -Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Los railes propulsores pueden acelerar y frenar las vagonetas. -Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Sin energía de redstone, el riel frenará las vagonetas. Para hacer que este riel acelere las vagonetas, aliméntalo con redstone. -Activator Rail=Raíl activador -Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Los railes activador se utilizan para activar una vagoneta especial. -To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Para hacer que este riel active las vagonetas, enciéndelo con energía de redstone y envía una vagoneta sobre este pedazo de riel. -Detector Rail=Raíl detector -Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Un raíl detector puede detectar una vagoneta sobre él y alimenta los mecanismos de redstone. -To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Para detectar una vagoneta y proporcionar energía de redstone, conéctelo a los senderos de redstone o mecanismos de redstone y envíe cualquier vagoneta sobre el riel. diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.fr.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.fr.tr deleted file mode 100644 index 67ed5eb1b..000000000 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.fr.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_minecarts -Minecart=Wagonnet -Minecarts can be used for a quick transportion on rails.=Les wagonnets peuvent être utilisés pour un transport rapide sur rails. -Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Les wagonnets roulent uniquement sur des rails et suivent toujours les pistes. À un carrefour en T sans voie directe, ils tournent à gauche. La vitesse dépend du type de rail. -You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Vous pouvez placer le wagonnet sur des rails. Faites un clic droit dessus pour entrer dedans. Frappez-le pour le faire bouger. -To obtain the minecart, punch it while holding down the sneak key.=Pour obtenir la wagonnet, frappez-le tout en maintenant la touche furtive enfoncée. -A minecart with TNT is an explosive vehicle that travels on rail.=Un wagonnet avec de la TNT est un véhicule explosif qui se déplace sur rail. -Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Placez-le sur des rails. Frappez-le pour le déplacer. Le TNT est allumé avec un briquet ou lorsque le minecart est sur un rail d'activation alimenté. -To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Pour obtenir la wagonnet et la TNT, frappez-les tout en maintenant la touche furtive enfoncée. Vous ne pouvez pas faire cela si le TNT a été allumé. -A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Une wagonnet avec un four est un véhicule qui se déplace sur rails. Il peut se propulser avec du carburant. -Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Placez-le sur des rails. Si vous lui donnez du charbon, le four commencera à brûler pendant longtemps et le wagonnet pourra se déplacer. Frappez-le pour le faire bouger. -To obtain the minecart and furnace, punch them while holding down the sneak key.=Pour obtenir le wagonnet et le four, frappez-les tout en maintenant la touche furtive enfoncée. -Minecart with Chest=Wagonnet avec Coffre -Minecart with Furnace=Wagonnet avec Four -Minecart with Command Block=Wagonnet avec Bloc de Commande -Minecart with Hopper=Wagonnet avec Entonoir -Minecart with TNT=Wagonnet avec TNT -Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Placez-les sur le sol pour construire votre chemin de fer, les rails se connecteront automatiquement les uns aux autres et se transformeront en courbes, en jonctions en T, en traversées et en pentes au besoin. -Rail=Rail -Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Les rails ralentissent légèrement les wagonnets en raison de la friction. -Powered Rail=Rail allimenté -Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Les rails motorisés sont capables d'accélérer et de freiner les wagonnets. -Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Sans énergie de redstone, le rail freinera les wagonnets. Pour que ce rail accélère les minecarts, alimentez-le avec une source d'énergie redstone. -Activator Rail=Rail d'activation -Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Des rails activateurs sont utilisés pour activer des wagonnets spéciaux. -To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Pour activer ce rail, activez les wagonnets, alimentez-le avec de l'énergie redstone et envoyez un wagonnet sur ce morceau de rail. -Detector Rail=Rail de détection -Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Un rail de détection est capable de détecter un wagonnet au-dessus et alimente les mécanismes de redstone. -To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Pour détecter un wagonnet et fournir une alimentation redstone, connectez-le aux câble redstone ou aux mécanismes redstone et envoyez n'importe quel wagonnet sur le rail. -Track for minecarts=Piste pour wagonnets -Speed up when powered, slow down when not powered=Accélérez lorsqu'il est alimenté, ralentissez lorsqu'il n'est pas alimenté -Activates minecarts when powered=Active les wagonnets lorsqu'il est alimenté -Emits redstone power when a minecart is detected=Émet de l'énergie redstone lorsqu'un wagonnet est détecté -Vehicle for fast travel on rails=Véhicule pour voyager rapidement sur rails -Can be ignited by tools or powered activator rail=Peut être allumé par des outils ou un rail d'activation motorisé -Sneak to dismount= \ No newline at end of file diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.pl.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.pl.tr deleted file mode 100644 index b36ec5eb1..000000000 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.pl.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_minecarts -Minecart=Wagonik -Minecarts can be used for a quick transportion on rails.=Wagoniki mogą być użyte do szybkiego transportu po torach. -Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Wagoniki mogą jeździć tylko po torach i zawsze podążają za wytyczoną ścieżką. W przypadku skrzyżowań typu T, gdzie nie ma prostej ścieżki, skręcają w lew. Ich szybkość zależy od typu torów. -You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Możesz postawić wagonik na torach. Kliknij prawym przyciskiem myszy aby do niego wejść. Uderz go by zaczął się poruszać. -To obtain the minecart, punch it while holding down the sneak key.=Aby odzyskać wagonik uderz go podczas skradania. -A minecart with TNT is an explosive vehicle that travels on rail.=Wagonik z TNT jest wybuchowym pojazdem podróżującym po torach. -Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Postaw go na torach. Uderz by zaczął się poruszać. TNT zapala się krzesiwem lub gdy wagonik jest na zasilonych torach aktywacyjnych. -To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Aby odzyskać wagonik z TNT uderz go podczas skradania. Nie możesz tego zrobić gdy TNT jest zapalone. -A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Wagonik z piecem jest pojazdem podróżującym na torach. Napędza on samego siebie za pomocą paliwa. -Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Postaw go na torach. Jeśli dasz mu nieco węgla piec zacznie palić przez długi czas, a wagonik będzie się sam poruszał. Uderz go by zaczął się poruszać. -To obtain the minecart and furnace, punch them while holding down the sneak key.=Aby odzyskać wagonik z piecem uderz go podczas skradania. -Minecart with Chest=Wagonik ze skrzynią -Minecart with Furnace=Wagonik z piecem -Minecart with Command Block=Wagonik z blokiem poleceń -Minecart with Hopper=Wagonik z lejem -Minecart with TNT=Wagonik z TNT -Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Postaw je na ziemi by zbudować ścieżkę z torów. Tory automatycznie połączą się ze sobą i zamienią się w zakręty, skrzyżowania typu T, skrzyżowania i równie w zależności od potrzeb. -Rail=Tor -Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zwyczajne tory nieco spowalniają wagoniki ze względu na tarcie. -Powered Rail=Zasilane tory -Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zasilane tory mogą przyspieszać lub spowalniać wagoniki. -Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Bez zasilania czerwienitem tory będą spowalniać wagoniki. Aby sprawić by je przyspieszały zasil je czerwienitem. -Activator Rail=Tory aktywacyjne -Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory aktywacyjne są wykorzystywane do aktywacji specjalnych wagoników. -To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Aby ten tor aktywował wagonik, zasil go czerwienitem i spraw by wagonik po nim przejechał. -Detector Rail=Tory z czujnikiem -Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory z czujnikiem są w stanie wykryć kiedy wagonik po nich przejeżdża i wysłać sygnał do czerwienitowych mechanizmów. -To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Aby wykryć wagonik i dostarczyć zasilanie czerwienitem podłącz go czerwienitem to mechanizmu i spraw by wagonik po nim przejechał. -Track for minecarts=Tor dla wagoników -Speed up when powered, slow down when not powered=Przyspiesza gdy zasilane, spowalnia gdy nie -Activates minecarts when powered=Aktywuje wagoniki gdy zasilane -Emits redstone power when a minecart is detected=Emituje zasilanie czerwienitem gdy wagonik jest wykryty -Vehicle for fast travel on rails=Pojazd do szybkiej podróży na torach -Can be ignited by tools or powered activator rail=Może być zapalony przez narzędzia, lub zasilane tor aktywacyjne -Sneak to dismount=Zacznij się skradać by zejść diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.ru.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.ru.tr deleted file mode 100644 index 6189bac84..000000000 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.ru.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_minecarts -Minecart=Вагонетка -Minecarts can be used for a quick transportion on rails.=Вагонетки нужны, чтобы быстро перемещаться по рельсам. -Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Вагонетки едут строго по проложенному железнодорожному пути. На Т-образной развилке они поворачивают налево. Скорость зависит от типа рельсов. -You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Вы ставите вагонетку на рельсы. Правым кликом садитесь в неё. Стукаете, чтобы начать движение. -To obtain the minecart, punch it while holding down the sneak key.=Чтобы взять вагонетку, стукните её, удерживая клавишу [Красться]. -A minecart with TNT is an explosive vehicle that travels on rail.=Вагон тротила это подрывной железнодорожный транспорт. -Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Поместите его на рельсы. Стукните, чтобы он поехал. Тротил воспламеняется, если его поджечь огнивом, либо при попадании на подключенный рельсовый активатор. -To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Чтобы взять вагон тротила, стукните его, удерживая клавишу [Красться]. Если тротил воспламенён, сделать это нельзя. -A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Вагон с печью - это железнодорожный транспорт. Он может двигаться за счёт топлива. -Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Поставьте его на рельсы. Если добавить немного угля, то печь зажжётся на продолжительное время и вагон сможет ехать. Стукните вагон для начала движения. -To obtain the minecart and furnace, punch them while holding down the sneak key.=Чтобы взять вагон с печью, стукните его, удерживая клавишу [Красться]. -Minecart with Chest=Вагон с сундуком -Minecart with Furnace=Вагон с печью -Minecart with Command Block=Вагон с командным блоком -Minecart with Hopper=Вагон с бункером -Minecart with TNT=Вагон тротила -Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Поместите на землю, чтобы сделать железную дорогу, рельсы автоматически соединятся между собой и будут превращаться в плавный повороты, T-образные развилки, перекрёстки и уклоны там, где это потребуется. -Rail=Рельсы -Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Рельсы используются для строительства железной дороги. Обычные рельсы немного замедляют движение вагонеток из-за трения. -Powered Rail=Подключаемые рельсы -Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Рельсы используются для строительства железной дороги. Подключённые рельсы могут разгонять и тормозить вагонетки. -Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Без энергии редстоуна рельсы будут тормозить вагонетки. -Activator Rail=Рельсовый активатор -Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Рельсы используются для строительства железной дороги. Рельсовый активатор активирует особые вагонетки. -To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Чтобы этот блок рельсов активировал вагонетку, подключите его к энергии редстоуна и направьте вагонетку через него. -Detector Rail=Рельсовый детектор -Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Рельсы используются для строительства железной дороги. Рельсовый детектор может обнаруживать вагонетку у себя наверху и подключать механизмы редстоуна. -To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Чтобы обнаруживать вагонетку и подавать энергию редстоуна, подключите его к дорожке редстоуна или механизму редстоуна, после чего направьте любую вагонетку через него. -Track for minecarts=Железная дорога -Speed up when powered, slow down when not powered=Разгоняет, если подключён, тормозит, если не подключён -Activates minecarts when powered=Активирует особые вагонетки, если подключён -Emits redstone power when a minecart is detected=Испускает энергию редстоуна при обнаружении вагонетки -Vehicle for fast travel on rails=Быстрый железнодорожный транспорт -Can be ignited by tools or powered activator rail=Можно воспламенить с помощью инструмента или подключенного рельсового активатора -Sneak to dismount=Нажмите [Красться] для высадки diff --git a/mods/ENTITIES/mcl_minecarts/locale/template.txt b/mods/ENTITIES/mcl_minecarts/locale/template.txt deleted file mode 100644 index dff98587c..000000000 --- a/mods/ENTITIES/mcl_minecarts/locale/template.txt +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_minecarts -Minecart= -Minecarts can be used for a quick transportion on rails.= -Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.= -You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.= -To obtain the minecart, punch it while holding down the sneak key.= -A minecart with TNT is an explosive vehicle that travels on rail.= -Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.= -To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.= -A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.= -Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.= -To obtain the minecart and furnace, punch them while holding down the sneak key.= -Minecart with Chest= -Minecart with Furnace= -Minecart with Command Block= -Minecart with Hopper= -Minecart with TNT= -Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.= -Rail= -Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.= -Powered Rail= -Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.= -Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.= -Activator Rail= -Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.= -To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.= -Detector Rail= -Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.= -To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.= -Track for minecarts= -Speed up when powered, slow down when not powered= -Activates minecarts when powered= -Emits redstone power when a minecart is detected= -Vehicle for fast travel on rails= -Can be ignited by tools or powered activator rail= -Sneak to dismount= diff --git a/mods/ENTITIES/mcl_minecarts/mod.conf b/mods/ENTITIES/mcl_minecarts/mod.conf deleted file mode 100644 index 3b8ae5551..000000000 --- a/mods/ENTITIES/mcl_minecarts/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mcl_minecarts -author = Krock -description = Minecarts are vehicles to move players quickly on rails. -depends = mcl_title, mcl_explosions, mcl_core, mcl_sounds, mcl_player, mcl_achievements, mcl_chests, mcl_furnaces, mesecons_commandblock, mcl_hoppers, mcl_tnt, mesecons -optional_depends = doc_identifier, mcl_wip - diff --git a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart.b3d b/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart.b3d deleted file mode 100644 index 692e606d2..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart.b3d and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_block.b3d b/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_block.b3d deleted file mode 100644 index 211446bd4..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_block.b3d and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_chest.b3d b/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_chest.b3d deleted file mode 100644 index 5ede1c648..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_chest.b3d and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_hopper.b3d b/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_hopper.b3d deleted file mode 100644 index b6441f061..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_hopper.b3d and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/rails.lua b/mods/ENTITIES/mcl_minecarts/rails.lua deleted file mode 100644 index 91282f253..000000000 --- a/mods/ENTITIES/mcl_minecarts/rails.lua +++ /dev/null @@ -1,249 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Template rail function -local function register_rail(itemstring, tiles, def_extras, creative) - local groups = {handy=1,pickaxey=1, attached_node=1,rail=1,connect_to_raillike=minetest.raillike_group("rail"),dig_by_water=1,destroy_by_lava_flow=1, transport=1} - if creative == false then - groups.not_in_creative_inventory = 1 - end - local ndef = { - drawtype = "raillike", - tiles = tiles, - is_ground_content = false, - inventory_image = tiles[1], - wield_image = tiles[1], - paramtype = "light", - walkable = false, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - stack_max = 64, - groups = groups, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 3.5, - _mcl_hardness = 0.7, - after_destruct = function(pos) - -- Scan for minecarts in this pos and force them to execute their "floating" check. - -- Normally, this will make them drop. - local objs = minetest.get_objects_inside_radius(pos, 1) - for o=1, #objs do - local le = objs[o]:get_luaentity() - if le then - -- All entities in this mod are minecarts, so this works - if string.sub(le.name, 1, 14) == "mcl_minecarts:" then - le._last_float_check = mcl_minecarts.check_float_time - end - end - end - end, - } - if def_extras then - for k,v in pairs(def_extras) do - ndef[k] = v - end - end - minetest.register_node(itemstring, ndef) -end - --- Redstone rules -local rail_rules_long = -{{x=-1, y= 0, z= 0, spread=true}, - {x= 1, y= 0, z= 0, spread=true}, - {x= 0, y=-1, z= 0, spread=true}, - {x= 0, y= 1, z= 0, spread=true}, - {x= 0, y= 0, z=-1, spread=true}, - {x= 0, y= 0, z= 1, spread=true}, - - {x= 1, y= 1, z= 0}, - {x= 1, y=-1, z= 0}, - {x=-1, y= 1, z= 0}, - {x=-1, y=-1, z= 0}, - {x= 0, y= 1, z= 1}, - {x= 0, y=-1, z= 1}, - {x= 0, y= 1, z=-1}, - {x= 0, y=-1, z=-1}} - -local rail_rules_short = mesecon.rules.pplate - -local railuse = S("Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.") - --- Normal rail -register_rail("mcl_minecarts:rail", - {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, - { - description = S("Rail"), - _tt_help = S("Track for minecarts"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction."), - _doc_items_usagehelp = railuse, - } -) - --- Powered rail (off = brake mode) -register_rail("mcl_minecarts:golden_rail", - {"mcl_minecarts_rail_golden.png", "mcl_minecarts_rail_golden_curved.png", "mcl_minecarts_rail_golden_t_junction.png", "mcl_minecarts_rail_golden_crossing.png"}, - { - description = S("Powered Rail"), - _tt_help = S("Track for minecarts").."\n"..S("Speed up when powered, slow down when not powered"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts."), - _doc_items_usagehelp = railuse .. "\n" .. S("Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power."), - _rail_acceleration = -3, - mesecons = { - conductor = { - state = mesecon.state.off, - offstate = "mcl_minecarts:golden_rail", - onstate = "mcl_minecarts:golden_rail_on", - rules = rail_rules_long, - }, - }, - } -) - --- Powered rail (on = acceleration mode) -register_rail("mcl_minecarts:golden_rail_on", - {"mcl_minecarts_rail_golden_powered.png", "mcl_minecarts_rail_golden_curved_powered.png", "mcl_minecarts_rail_golden_t_junction_powered.png", "mcl_minecarts_rail_golden_crossing_powered.png"}, - { - _doc_items_create_entry = false, - _rail_acceleration = 4, - mesecons = { - conductor = { - state = mesecon.state.on, - offstate = "mcl_minecarts:golden_rail", - onstate = "mcl_minecarts:golden_rail_on", - rules = rail_rules_long, - }, - }, - drop = "mcl_minecarts:golden_rail", - }, - false -) - --- Activator rail (off) -register_rail("mcl_minecarts:activator_rail", - {"mcl_minecarts_rail_activator.png", "mcl_minecarts_rail_activator_curved.png", "mcl_minecarts_rail_activator_t_junction.png", "mcl_minecarts_rail_activator_crossing.png"}, - { - description = S("Activator Rail"), - _tt_help = S("Track for minecarts").."\n"..S("Activates minecarts when powered"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts."), - _doc_items_usagehelp = railuse .. "\n" .. S("To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail."), - mesecons = { - conductor = { - state = mesecon.state.off, - offstate = "mcl_minecarts:activator_rail", - onstate = "mcl_minecarts:activator_rail_on", - rules = rail_rules_long, - - }, - }, - } -) - --- Activator rail (on) -register_rail("mcl_minecarts:activator_rail_on", - {"mcl_minecarts_rail_activator_powered.png", "mcl_minecarts_rail_activator_curved_powered.png", "mcl_minecarts_rail_activator_t_junction_powered.png", "mcl_minecarts_rail_activator_crossing_powered.png"}, - { - _doc_items_create_entry = false, - mesecons = { - conductor = { - state = mesecon.state.on, - offstate = "mcl_minecarts:activator_rail", - onstate = "mcl_minecarts:activator_rail_on", - rules = rail_rules_long, - }, - effector = { - -- Activate minecarts - action_on = function(pos, node) - local pos2 = { x = pos.x, y =pos.y + 1, z = pos.z } - local objs = minetest.get_objects_inside_radius(pos2, 1) - for _, o in pairs(objs) do - local l = o:get_luaentity() - if l and string.sub(l.name, 1, 14) == "mcl_minecarts:" and l.on_activate_by_rail then - l:on_activate_by_rail() - end - end - end, - }, - - }, - drop = "mcl_minecarts:activator_rail", - }, - false -) - --- Detector rail (off) -register_rail("mcl_minecarts:detector_rail", - {"mcl_minecarts_rail_detector.png", "mcl_minecarts_rail_detector_curved.png", "mcl_minecarts_rail_detector_t_junction.png", "mcl_minecarts_rail_detector_crossing.png"}, - { - description = S("Detector Rail"), - _tt_help = S("Track for minecarts").."\n"..S("Emits redstone power when a minecart is detected"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms."), - _doc_items_usagehelp = railuse .. "\n" .. S("To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail."), - mesecons = { - receptor = { - state = mesecon.state.off, - rules = rail_rules_short, - }, - }, - } -) - --- Detector rail (on) -register_rail("mcl_minecarts:detector_rail_on", - {"mcl_minecarts_rail_detector_powered.png", "mcl_minecarts_rail_detector_curved_powered.png", "mcl_minecarts_rail_detector_t_junction_powered.png", "mcl_minecarts_rail_detector_crossing_powered.png"}, - { - _doc_items_create_entry = false, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = rail_rules_short, - }, - }, - drop = "mcl_minecarts:detector_rail", - }, - false -) - - --- Crafting -minetest.register_craft({ - output = "mcl_minecarts:rail 16", - recipe = { - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - } -}) - -minetest.register_craft({ - output = "mcl_minecarts:golden_rail 6", - recipe = { - {"mcl_core:gold_ingot", "", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mcl_core:stick", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mesecons:redstone", "mcl_core:gold_ingot"}, - } -}) - -minetest.register_craft({ - output = "mcl_minecarts:activator_rail 6", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mesecons_torch:mesecon_torch_on", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, - } -}) - -minetest.register_craft({ - output = "mcl_minecarts:detector_rail 6", - recipe = { - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mesecons_pressureplates:pressure_plate_stone_off", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mesecons:redstone", "mcl_core:iron_ingot"}, - } -}) - - --- Aliases -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_minecarts:golden_rail", "nodes", "mcl_minecarts:golden_rail_on") -end - diff --git a/mods/ENTITIES/mcl_minecarts/textures/default_rail.png b/mods/ENTITIES/mcl_minecarts/textures/default_rail.png deleted file mode 100644 index 4f25f6b49..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/default_rail.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/default_rail_crossing.png b/mods/ENTITIES/mcl_minecarts/textures/default_rail_crossing.png deleted file mode 100644 index 409f14b82..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/default_rail_crossing.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/default_rail_curved.png b/mods/ENTITIES/mcl_minecarts/textures/default_rail_curved.png deleted file mode 100644 index 163323072..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/default_rail_curved.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/default_rail_t_junction.png b/mods/ENTITIES/mcl_minecarts/textures/default_rail_t_junction.png deleted file mode 100644 index f25c510f5..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/default_rail_t_junction.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart.png deleted file mode 100644 index 9750048b3..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_chest.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_chest.png deleted file mode 100644 index 451d80920..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_chest.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_command_block.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_command_block.png deleted file mode 100644 index 3b8d3d562..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_command_block.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_furnace.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_furnace.png deleted file mode 100644 index 7beaaa1c7..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_furnace.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_hopper.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_hopper.png deleted file mode 100644 index f16a007f7..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_hopper.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_normal.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_normal.png deleted file mode 100644 index c9a4c356a..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_normal.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_tnt.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_tnt.png deleted file mode 100644 index 246d36328..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_tnt.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator.png deleted file mode 100644 index 15f2cdba6..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_crossing.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_crossing.png deleted file mode 100644 index 9e3f67088..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_crossing.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_crossing_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_crossing_powered.png deleted file mode 100644 index 464338011..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_crossing_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_curved.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_curved.png deleted file mode 100644 index d734c31ec..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_curved.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_curved_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_curved_powered.png deleted file mode 100644 index 3988b928b..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_curved_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_powered.png deleted file mode 100644 index ad072f425..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_t_junction.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_t_junction.png deleted file mode 100644 index fd07b4204..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_t_junction.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_t_junction_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_t_junction_powered.png deleted file mode 100644 index 370364817..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_activator_t_junction_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector.png deleted file mode 100644 index 4595df3a4..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_crossing.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_crossing.png deleted file mode 100644 index 52674486d..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_crossing.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_crossing_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_crossing_powered.png deleted file mode 100644 index 08b20a814..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_crossing_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_curved.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_curved.png deleted file mode 100644 index b5dabcc01..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_curved.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_curved_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_curved_powered.png deleted file mode 100644 index 2a9cc6029..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_curved_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_powered.png deleted file mode 100644 index 289064f6d..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_t_junction.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_t_junction.png deleted file mode 100644 index 5b9da2502..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_t_junction.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_t_junction_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_t_junction_powered.png deleted file mode 100644 index 7638413ca..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_detector_t_junction_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden.png deleted file mode 100644 index 87a0b7bd5..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing.png deleted file mode 100644 index df8f6bfbe..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing_powered.png deleted file mode 100644 index 81526029d..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved.png deleted file mode 100644 index d557a358a..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved_powered.png deleted file mode 100644 index ff1b917e2..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_powered.png deleted file mode 100644 index c118032ef..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction.png deleted file mode 100644 index 042f3d1be..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction_powered.png deleted file mode 100644 index 6a4af0209..000000000 Binary files a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction_powered.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua deleted file mode 100644 index 933634cce..000000000 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ /dev/null @@ -1,4496 +0,0 @@ - --- API for Mobs Redo: MineClone 2 Edition (MRM) - -mcl_mobs = {} - -local MAX_MOB_NAME_LENGTH = 30 -local HORNY_TIME = 30 -local HORNY_AGAIN_TIME = 300 -local CHILD_GROW_TIME = 60*20 -local DEATH_DELAY = 0.5 -local DEFAULT_FALL_SPEED = -10 -local FLOP_HEIGHT = 5.0 -local FLOP_HOR_SPEED = 1.5 -local ENTITY_CRAMMING_MAX = 24 -local CRAMMING_DAMAGE = 3 - -local MOB_CAP = {} -MOB_CAP.hostile = 70 -MOB_CAP.passive = 10 -MOB_CAP.ambient = 15 -MOB_CAP.water = 15 - --- Localize -local S = minetest.get_translator("mcl_mobs") - --- Invisibility mod check -mcl_mobs.invis = {} - --- localize math functions -local pi = math.pi -local sin = math.sin -local cos = math.cos -local abs = math.abs -local min = math.min -local max = math.max -local atann = math.atan -local random = math.random -local floor = math.floor - -local atan = function(x) - if not x or x ~= x then - return 0 - else - return atann(x) - end -end - - --- Load settings -local damage_enabled = minetest.settings:get_bool("enable_damage") -local disable_blood = minetest.settings:get_bool("mobs_disable_blood") -local mobs_drop_items = minetest.settings:get_bool("mobs_drop_items") ~= false -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false -local spawn_protected = minetest.settings:get_bool("mobs_spawn_protected") ~= false -local remove_far = true -local difficulty = tonumber(minetest.settings:get("mob_difficulty")) or 1.0 -local show_health = false -local max_per_block = tonumber(minetest.settings:get("max_objects_per_block") or 64) -local mobs_spawn_chance = tonumber(minetest.settings:get("mobs_spawn_chance") or 2.5) - --- Shows helpful debug info above each mob -local mobs_debug = minetest.settings:get_bool("mobs_debug", false) - --- Peaceful mode message so players will know there are no monsters -if minetest.settings:get_bool("only_peaceful_mobs", false) then - minetest.register_on_joinplayer(function(player) - minetest.chat_send_player(player:get_player_name(), - S("Peaceful mode active! No monsters will spawn.")) - end) -end - --- pathfinding settings -local enable_pathfinding = true -local stuck_timeout = 3 -- how long before mob gets stuck in place and starts searching -local stuck_path_timeout = 10 -- how long will mob follow path before giving up - --- default nodes -local node_ice = "mcl_core:ice" -local node_snowblock = "mcl_core:snowblock" -local node_snow = "mcl_core:snow" -mcl_mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "mcl_core:dirt" - -minetest.register_chatcommand("clearmobs",{ - privs={maphack=true}, - params = "||", - description=S("Removes all spawned mobs except nametagged and tamed ones. all removes all mobs, nametagged only nametagged ones and with the range paramter all mobs in a distance of the current player are removed."), - func=function(n,param) - local p = minetest.get_player_by_name(n) - local num=tonumber(param) - for _,o in pairs(minetest.luaentities) do - if o.is_mob then - if param == "all" or - ( param == "nametagged" and o.nametag ) or - ( param == "" and not o.nametag and not o.tamed ) or - ( num and num > 0 and vector.distance(p:get_pos(),o.object:get_pos()) <= num ) then - o.object:remove() - end - end - end -end}) - -----For Water Flowing: -local enable_physics = function(object, luaentity, ignore_check) - if luaentity.physical_state == false or ignore_check == true then - luaentity.physical_state = true - object:set_properties({ - physical = true - }) - object:set_velocity({x=0,y=0,z=0}) - object:set_acceleration({x=0,y=-9.81,z=0}) - end -end - -local disable_physics = function(object, luaentity, ignore_check, reset_movement) - if luaentity.physical_state == true or ignore_check == true then - luaentity.physical_state = false - object:set_properties({ - physical = false - }) - if reset_movement ~= false then - object:set_velocity({x=0,y=0,z=0}) - object:set_acceleration({x=0,y=0,z=0}) - end - end -end - - --- play sound -local mob_sound = function(self, soundname, is_opinion, fixed_pitch) - - local soundinfo - if self.sounds_child and self.child then - soundinfo = self.sounds_child - elseif self.sounds then - soundinfo = self.sounds - end - if not soundinfo then - return - end - local sound = soundinfo[soundname] - if sound then - if is_opinion and self.opinion_sound_cooloff > 0 then - return - end - local pitch - if not fixed_pitch then - local base_pitch = soundinfo.base_pitch - if not base_pitch then - base_pitch = 1 - end - if self.child and (not self.sounds_child) then - -- Children have higher pitch - pitch = base_pitch * 1.5 - else - pitch = base_pitch - end - -- randomize the pitch a bit - pitch = pitch + math.random(-10, 10) * 0.005 - end - minetest.sound_play(sound, { - object = self.object, - gain = 1.0, - max_hear_distance = self.sounds.distance, - pitch = pitch, - }, true) - self.opinion_sound_cooloff = 1 - end -end - --- Return true if object is in view_range -local function object_in_range(self, object) - if not object then - return false - end - local factor - -- Apply view range reduction for special player armor - if object:is_player() then - local factors = mcl_armor.player_view_range_factors[object] - factor = factors and factors[self.name] - end - -- Distance check - local dist - if factor and factor == 0 then - return false - elseif factor then - dist = self.view_range * factor - else - dist = self.view_range - end - - local p1, p2 = self.object:get_pos(), object:get_pos() - return p1 and p2 and (vector.distance(p1, p2) <= dist) -end - --- attack player/mob -local do_attack = function(self, player) - - if self.state == "attack" or self.state == "die" then - return - end - - self.attack = player - self.state = "attack" - - -- TODO: Implement war_cry sound without being annoying - --if random(0, 100) < 90 then - --mob_sound(self, "war_cry", true) - --end -end - - --- collision function borrowed amended from jordan4ibanez open_ai mod -local collision = function(self) - - local pos = self.object:get_pos() - local vel = self.object:get_velocity() - local x = 0 - local z = 0 - local width = -self.collisionbox[1] + self.collisionbox[4] + 0.5 - - for _,object in pairs(minetest.get_objects_inside_radius(pos, width)) do - - local ent = object:get_luaentity() - if object:is_player() or (ent and ent.is_mob and object ~= self.object) then - - local pos2 = object:get_pos() - local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z} - local force = (width + 0.5) - vector.distance( - {x = pos.x, y = 0, z = pos.z}, - {x = pos2.x, y = 0, z = pos2.z}) - - x = x + (vec.x * force) - z = z + (vec.z * force) - end - end - - return({x,z}) -end - --- move mob in facing direction -local set_velocity = function(self, v) - - local c_x, c_y = 0, 0 - - -- can mob be pushed, if so calculate direction - if self.pushable then - c_x, c_y = unpack(collision(self)) - end - - -- halt mob if it has been ordered to stay - if self.order == "stand" then - self.object:set_velocity({x = 0, y = 0, z = 0}) - return - end - - local yaw = (self.object:get_yaw() or 0) + self.rotate - - self.object:set_velocity({ - x = (sin(yaw) * -v) + c_x, - y = self.object:get_velocity().y, - z = (cos(yaw) * v) + c_y, - }) -end - - - --- calculate mob velocity -local get_velocity = function(self) - - local v = self.object:get_velocity() - if v then - return (v.x * v.x + v.z * v.z) ^ 0.5 - end - - return 0 -end - -local function update_roll(self) - local is_Fleckenstein = self.nametag == "Fleckenstein" - local was_Fleckenstein = false - - local rot = self.object:get_rotation() - rot.z = is_Fleckenstein and pi or 0 - self.object:set_rotation(rot) - - local cbox = table.copy(self.collisionbox) - local acbox = self.object:get_properties().collisionbox - - if math.abs(cbox[2] - acbox[2]) > 0.1 then - was_Fleckenstein = true - end - - if is_Fleckenstein ~= was_Fleckenstein then - local pos = self.object:get_pos() - pos.y = pos.y + (acbox[2] + acbox[5]) - self.object:set_pos(pos) - end - - if is_Fleckenstein then - cbox[2], cbox[5] = -cbox[5], -cbox[2] - end - - self.object:set_properties({collisionbox = cbox}) -end - --- set and return valid yaw -local set_yaw = function(self, yaw, delay, dtime) - - if not yaw or yaw ~= yaw then - yaw = 0 - end - - delay = delay or 0 - - if delay == 0 then - if self.shaking and dtime then - yaw = yaw + (math.random() * 2 - 1) * 5 * dtime - end - self.object:set_yaw(yaw) - update_roll(self) - return yaw - end - - self.target_yaw = yaw - self.delay = delay - - return self.target_yaw -end - --- global function to set mob yaw -function mcl_mobs:yaw(self, yaw, delay, dtime) - set_yaw(self, yaw, delay, dtime) -end - -local add_texture_mod = function(self, mod) - local full_mod = "" - local already_added = false - for i=1, #self.texture_mods do - if mod == self.texture_mods[i] then - already_added = true - end - full_mod = full_mod .. self.texture_mods[i] - end - if not already_added then - full_mod = full_mod .. mod - table.insert(self.texture_mods, mod) - end - self.object:set_texture_mod(full_mod) -end -local remove_texture_mod = function(self, mod) - local full_mod = "" - local remove = {} - for i=1, #self.texture_mods do - if self.texture_mods[i] ~= mod then - full_mod = full_mod .. self.texture_mods[i] - else - table.insert(remove, i) - end - end - for i=#remove, 1 do - table.remove(self.texture_mods, remove[i]) - end - self.object:set_texture_mod(full_mod) -end - --- are we flying in what we are suppose to? (taikedz) -local flight_check = function(self) - - local nod = self.standing_in - local def = minetest.registered_nodes[nod] - - if not def then return false end -- nil check - - local fly_in - if type(self.fly_in) == "string" then - fly_in = { self.fly_in } - elseif type(self.fly_in) == "table" then - fly_in = self.fly_in - else - return false - end - - for _,checknode in pairs(fly_in) do - if nod == checknode then - return true - elseif checknode == "__airlike" or def.walkable == false and - (def.liquidtype == "none" or minetest.get_item_group(nod, "fake_liquid") == 1) then - return true - end - end - - return false -end - --- set defined animation -local set_animation = function(self, anim, fixed_frame) - if not self.animation or not anim then - return - end - if self.state == "die" and anim ~= "die" and anim ~= "stand" then - return - end - - if flight_check(self) and self.fly and anim == "walk" then anim = "fly" end - - self.animation.current = self.animation.current or "" - - if (anim == self.animation.current - or not self.animation[anim .. "_start"] - or not self.animation[anim .. "_end"]) and self.state ~= "die" then - return - end - - self.animation.current = anim - - local a_start = self.animation[anim .. "_start"] - local a_end - if fixed_frame then - a_end = a_start - else - a_end = self.animation[anim .. "_end"] - end - - self.object:set_animation({ - x = a_start, - y = a_end}, - self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, - 0, self.animation[anim .. "_loop"] ~= false) -end - - --- above function exported for mount.lua -function mcl_mobs:set_animation(self, anim) - set_animation(self, anim) -end - --- Returns true is node can deal damage to self -local is_node_dangerous = function(self, nodename) - local nn = nodename - if self.lava_damage > 0 then - if minetest.get_item_group(nn, "lava") ~= 0 then - return true - end - end - if self.fire_damage > 0 then - if minetest.get_item_group(nn, "fire") ~= 0 then - return true - end - end - if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].damage_per_second and minetest.registered_nodes[nn].damage_per_second > 0 then - return true - end - return false -end - - --- Returns true if node is a water hazard -local is_node_waterhazard = function(self, nodename) - local nn = nodename - if self.water_damage > 0 then - if minetest.get_item_group(nn, "water") ~= 0 then - return true - end - end - if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].drowning and minetest.registered_nodes[nn].drowning > 0 then - if self.breath_max ~= -1 then - -- check if the mob is water-breathing _and_ the block is water; only return true if neither is the case - -- this will prevent water-breathing mobs to classify water or e.g. sand below them as dangerous - if not self.breathes_in_water and minetest.get_item_group(nn, "water") ~= 0 then - return true - end - end - end - return false -end - - --- check line of sight (BrunoMine) -local line_of_sight = function(self, pos1, pos2, stepsize) - - stepsize = stepsize or 1 - - local s, pos = minetest.line_of_sight(pos1, pos2, stepsize) - - -- normal walking and flying mobs can see you through air - if s == true then - return true - end - - -- New pos1 to be analyzed - local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z} - - local r, pos = minetest.line_of_sight(npos1, pos2, stepsize) - - -- Checks the return - if r == true then return true end - - -- Nodename found - local nn = minetest.get_node(pos).name - - -- Target Distance (td) to travel - local td = vector.distance(pos1, pos2) - - -- Actual Distance (ad) traveled - local ad = 0 - - -- It continues to advance in the line of sight in search of a real - -- obstruction which counts as 'normal' nodebox. - while minetest.registered_nodes[nn] - and minetest.registered_nodes[nn].walkable == false do - - -- Check if you can still move forward - if td < ad + stepsize then - return true -- Reached the target - end - - -- Moves the analyzed pos - local d = vector.distance(pos1, pos2) - - npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x - npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y - npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z - - -- NaN checks - if d == 0 - or npos1.x ~= npos1.x - or npos1.y ~= npos1.y - or npos1.z ~= npos1.z then - return false - end - - ad = ad + stepsize - - -- scan again - r, pos = minetest.line_of_sight(npos1, pos2, stepsize) - - if r == true then return true end - - -- New Nodename found - nn = minetest.get_node(pos).name - - end - - return false -end - --- custom particle effects -local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow, go_down) - - radius = radius or 2 - min_size = min_size or 0.5 - max_size = max_size or 1 - gravity = gravity or -10 - glow = glow or 0 - go_down = go_down or false - - local ym - if go_down then - ym = 0 - else - ym = -radius - end - - minetest.add_particlespawner({ - amount = amount, - time = 0.25, - minpos = pos, - maxpos = pos, - minvel = {x = -radius, y = ym, z = -radius}, - maxvel = {x = radius, y = radius, z = radius}, - minacc = {x = 0, y = gravity, z = 0}, - maxacc = {x = 0, y = gravity, z = 0}, - minexptime = 0.1, - maxexptime = 1, - minsize = min_size, - maxsize = max_size, - texture = texture, - glow = glow, - }) -end - -local damage_effect = function(self, damage) - -- damage particles - if (not disable_blood) and damage > 0 then - - local amount_large = math.floor(damage / 2) - local amount_small = damage % 2 - - local pos = self.object:get_pos() - - pos.y = pos.y + (self.collisionbox[5] - self.collisionbox[2]) * .5 - - local texture = "mobs_blood.png" - -- full heart damage (one particle for each 2 HP damage) - if amount_large > 0 then - effect(pos, amount_large, texture, 2, 2, 1.75, 0, nil, true) - end - -- half heart damage (one additional particle if damage is an odd number) - if amount_small > 0 then - -- TODO: Use "half heart" - effect(pos, amount_small, texture, 1, 1, 1.75, 0, nil, true) - end - end -end - -mcl_mobs.death_effect = function(pos, yaw, collisionbox, rotate) - local min, max - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - else - min = { x = -0.5, y = 0, z = -0.5 } - max = { x = 0.5, y = 0.5, z = 0.5 } - end - if rotate then - min = vector.rotate(min, {x=0, y=yaw, z=pi/2}) - max = vector.rotate(max, {x=0, y=yaw, z=pi/2}) - min, max = vector.sort(min, max) - min = vector.multiply(min, 0.5) - max = vector.multiply(max, 0.5) - end - - minetest.add_particlespawner({ - amount = 50, - time = 0.001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector.new(-5,-5,-5), - maxvel = vector.new(5,5,5), - minexptime = 1.1, - maxexptime = 1.5, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_mob_death.png^[colorize:#000000:255", - }) - - minetest.sound_play("mcl_mobs_mob_poof", { - pos = pos, - gain = 1.0, - max_hear_distance = 8, - }, true) -end - -local update_tag = function(self) - local tag - if mobs_debug then - tag = "nametag = '"..tostring(self.nametag).."'\n".. - "state = '"..tostring(self.state).."'\n".. - "order = '"..tostring(self.order).."'\n".. - "attack = "..tostring(self.attack).."\n".. - "health = "..tostring(self.health).."\n".. - "breath = "..tostring(self.breath).."\n".. - "gotten = "..tostring(self.gotten).."\n".. - "tamed = "..tostring(self.tamed).."\n".. - "horny = "..tostring(self.horny).."\n".. - "hornytimer = "..tostring(self.hornytimer).."\n".. - "runaway_timer = "..tostring(self.runaway_timer).."\n".. - "following = "..tostring(self.following) - else - tag = self.nametag - end - self.object:set_properties({ - nametag = tag, - }) - - update_roll(self) -end - --- drop items -local item_drop = function(self, cooked, looting_level) - - -- no drops if disabled by setting - if not mobs_drop_items then return end - - looting_level = looting_level or 0 - - -- no drops for child mobs (except monster) - if (self.child and self.type ~= "monster") then - return - end - - local obj, item, num - local pos = self.object:get_pos() - - self.drops = self.drops or {} -- nil check - - for n = 1, #self.drops do - local dropdef = self.drops[n] - local chance = 1 / dropdef.chance - local looting_type = dropdef.looting - - if looting_level > 0 then - local chance_function = dropdef.looting_chance_function - if chance_function then - chance = chance_function(looting_level) - elseif looting_type == "rare" then - chance = chance + (dropdef.looting_factor or 0.01) * looting_level - end - end - - local num = 0 - local do_common_looting = (looting_level > 0 and looting_type == "common") - if random() < chance then - num = random(dropdef.min or 1, dropdef.max or 1) - elseif not dropdef.looting_ignore_chance then - do_common_looting = false - end - - if do_common_looting then - num = num + math.floor(math.random(0, looting_level) + 0.5) - end - - if num > 0 then - item = dropdef.name - - -- cook items when true - if cooked then - - local output = minetest.get_craft_result({ - method = "cooking", width = 1, items = {item}}) - - if output and output.item and not output.item:is_empty() then - item = output.item:get_name() - end - end - - -- add item if it exists - for x = 1, num do - obj = minetest.add_item(pos, ItemStack(item .. " " .. 1)) - end - - if obj and obj:get_luaentity() then - - obj:set_velocity({ - x = random(-10, 10) / 9, - y = 6, - z = random(-10, 10) / 9, - }) - elseif obj then - obj:remove() -- item does not exist - end - end - end - - self.drops = {} -end - - --- check if mob is dead or only hurt -local check_for_death = function(self, cause, cmi_cause) - - if self.state == "die" then - return true - end - - -- has health actually changed? - if self.health == self.old_health and self.health > 0 then - return false - end - - local damaged = self.health < self.old_health - self.old_health = self.health - - -- still got some health? - if self.health > 0 then - - -- make sure health isn't higher than max - if self.health > self.hp_max then - self.health = self.hp_max - end - - -- play damage sound if health was reduced and make mob flash red. - if damaged then - add_texture_mod(self, "^[colorize:red:130") - minetest.after(.2, function(self) - if self and self.object then - remove_texture_mod(self, "^[colorize:red:130") - end - end, self) - mob_sound(self, "damage") - end - - -- backup nametag so we can show health stats - if not self.nametag2 then - self.nametag2 = self.nametag or "" - end - - if show_health - and (cmi_cause and cmi_cause.type == "punch") then - - self.htimer = 2 - self.nametag = "♥ " .. self.health .. " / " .. self.hp_max - - update_tag(self) - end - - return false - end - - mob_sound(self, "death") - - local function death_handle(self) - -- dropped cooked item if mob died in fire or lava - if cause == "lava" or cause == "fire" then - item_drop(self, true, 0) - else - local wielditem = ItemStack() - if cause == "hit" then - local puncher = cmi_cause.puncher - if puncher then - wielditem = puncher:get_wielded_item() - end - end - local cooked = mcl_burning.is_burning(self.object) or mcl_enchanting.has_enchantment(wielditem, "fire_aspect") - local looting = mcl_enchanting.get_enchantment(wielditem, "looting") - item_drop(self, cooked, looting) - - if ((not self.child) or self.type ~= "animal") and (minetest.get_us_time() - self.xp_timestamp <= 5000000) then - mcl_experience.throw_xp(self.object:get_pos(), math.random(self.xp_min, self.xp_max)) - end - end - end - - -- execute custom death function - if self.on_die then - - local pos = self.object:get_pos() - local on_die_exit = self.on_die(self, pos, cmi_cause) - if on_die_exit ~= true then - death_handle(self) - end - - if on_die_exit == true then - self.state = "die" - mcl_burning.extinguish(self.object) - self.object:remove() - return true - end - end - - local collisionbox - if self.collisionbox then - collisionbox = table.copy(self.collisionbox) - end - - self.state = "die" - self.attack = nil - self.v_start = false - self.fall_speed = DEFAULT_FALL_SPEED - self.timer = 0 - self.blinktimer = 0 - remove_texture_mod(self, "^[colorize:#FF000040") - remove_texture_mod(self, "^[brighten") - self.passive = true - - self.object:set_properties({ - pointable = false, - collide_with_objects = false, - }) - - set_velocity(self, 0) - local acc = self.object:get_acceleration() - acc.x, acc.y, acc.z = 0, DEFAULT_FALL_SPEED, 0 - self.object:set_acceleration(acc) - - local length - -- default death function and die animation (if defined) - if self.instant_death then - length = 0 - elseif self.animation - and self.animation.die_start - and self.animation.die_end then - - local frames = self.animation.die_end - self.animation.die_start - local speed = self.animation.die_speed or 15 - length = max(frames / speed, 0) + DEATH_DELAY - set_animation(self, "die") - else - local rot = self.object:get_rotation() - rot.z = pi/2 - self.object:set_rotation(rot) - length = 1 + DEATH_DELAY - set_animation(self, "stand", true) - end - - - -- Remove body after a few seconds and drop stuff - local kill = function(self) - if not self.object:get_luaentity() then - return - end - - death_handle(self) - local dpos = self.object:get_pos() - local cbox = self.collisionbox - local yaw = self.object:get_rotation().y - mcl_burning.extinguish(self.object) - self.object:remove() - mcl_mobs.death_effect(dpos, yaw, cbox, not self.instant_death) - end - if length <= 0 then - kill(self) - else - minetest.after(length, kill, self) - end - - return true -end - - --- check if within physical map limits (-30911 to 30927) -local within_limits, wmin, wmax = nil, -30913, 30928 -within_limits = function(pos, radius) - if mcl_vars then - if mcl_vars.mapgen_edge_min and mcl_vars.mapgen_edge_max then - wmin, wmax = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max - within_limits = function(pos, radius) - return pos - and (pos.x - radius) > wmin and (pos.x + radius) < wmax - and (pos.y - radius) > wmin and (pos.y + radius) < wmax - and (pos.z - radius) > wmin and (pos.z + radius) < wmax - end - end - end - return pos - and (pos.x - radius) > wmin and (pos.x + radius) < wmax - and (pos.y - radius) > wmin and (pos.y + radius) < wmax - and (pos.z - radius) > wmin and (pos.z + radius) < wmax -end - - --- is mob facing a cliff or danger -local is_at_cliff_or_danger = function(self) - - if self.fear_height == 0 then -- 0 for no falling protection! - return false - end - - if not self.object:get_luaentity() then - return false - end - local yaw = self.object:get_yaw() - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:get_pos() - local ypos = pos.y + self.collisionbox[2] -- just above floor - - local free_fall, blocker = minetest.line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z}) - if free_fall then - return true - else - local bnode = minetest.get_node(blocker) - local danger = is_node_dangerous(self, bnode.name) - if danger then - return true - else - local def = minetest.registered_nodes[bnode.name] - if def and def.walkable then - return false - end - end - end - - return false -end - - --- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water -local is_at_water_danger = function(self) - - - if not self.object:get_luaentity() then - return false - end - local yaw = self.object:get_yaw() - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:get_pos() - local ypos = pos.y + self.collisionbox[2] -- just above floor - - local free_fall, blocker = minetest.line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - 3, z = pos.z + dir_z}) - if free_fall then - return true - else - local bnode = minetest.get_node(blocker) - local waterdanger = is_node_waterhazard(self, bnode.name) - if - waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then - return false - elseif waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) == false then - return true - else - local def = minetest.registered_nodes[bnode.name] - if def and def.walkable then - return false - end - end - end - - return false -end - - --- get node but use fallback for nil or unknown -local node_ok = function(pos, fallback) - - fallback = fallback or mcl_mobs.fallback_node - - local node = minetest.get_node_or_nil(pos) - - if node and minetest.registered_nodes[node.name] then - return node - end - - return minetest.registered_nodes[fallback] -end - -local function get_light(pos, tod) - if minetest.get_node_or_nil(pos) then - local lightfunc = minetest.get_natural_light or minetest.get_node_light - return lightfunc(pos, tod) - else - return 0 - end -end - --- environmental damage (water, lava, fire, light etc.) -local do_env_damage = function(self) - - -- feed/tame text timer (so mob 'full' messages dont spam chat) - if self.htimer > 0 then - self.htimer = self.htimer - 1 - end - - -- reset nametag after showing health stats - if self.htimer < 1 and self.nametag2 then - - self.nametag = self.nametag2 - self.nametag2 = nil - - update_tag(self) - end - - local pos = self.object:get_pos() - - self.time_of_day = minetest.get_timeofday() - - -- remove mob if beyond map limits - if not within_limits(pos, 0) then - mcl_burning.extinguish(self.object) - self.object:remove() - return true - end - - - -- Deal light damage to mob, returns true if mob died - local deal_light_damage = function(self, pos, damage) - if not ((mcl_weather.rain.raining or mcl_weather.state == "snow") and mcl_weather.is_outdoor(pos)) then - self.health = self.health - damage - - effect(pos, 5, "mcl_particles_smoke.png") - - if check_for_death(self, "light", {type = "light"}) then - return true - end - end - end - - -- Use get_node_light for Minetest version 5.3 where get_natural_light - -- does not exist yet. - local sunlight = get_light(pos, self.time_of_day) - - -- bright light harms mob - if self.light_damage ~= 0 and (sunlight or 0) > 12 then - if deal_light_damage(self, pos, self.light_damage) then - return true - end - end - local _, dim = mcl_worlds.y_to_layer(pos.y) - if (self.sunlight_damage ~= 0 or self.ignited_by_sunlight) and (sunlight or 0) >= minetest.LIGHT_MAX and dim == "overworld" then - if self.ignited_by_sunlight then - mcl_burning.set_on_fire(self.object, 10) - else - deal_light_damage(self, pos, self.sunlight_damage) - return true - end - end - - local y_level = self.collisionbox[2] - - if self.child then - y_level = self.collisionbox[2] * 0.5 - end - - -- what is mob standing in? - pos.y = pos.y + y_level + 0.25 -- foot level - local pos2 = {x=pos.x, y=pos.y-1, z=pos.z} - self.standing_in = node_ok(pos, "air").name - self.standing_on = node_ok(pos2, "air").name - - -- don't fall when on ignore, just stand still - if self.standing_in == "ignore" then - self.object:set_velocity({x = 0, y = 0, z = 0}) - end - - local nodef = minetest.registered_nodes[self.standing_in] - - -- rain - if self.rain_damage > 0 then - if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then - - self.health = self.health - self.rain_damage - - if check_for_death(self, "rain", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - end - - pos.y = pos.y + 1 -- for particle effect position - - -- water damage - if self.water_damage > 0 - and nodef.groups.water then - - if self.water_damage ~= 0 then - - self.health = self.health - self.water_damage - - effect(pos, 5, "mcl_particles_smoke.png", nil, nil, 1, nil) - - if check_for_death(self, "water", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- lava damage - elseif self.lava_damage > 0 - and (nodef.groups.lava) then - - if self.lava_damage ~= 0 then - - self.health = self.health - self.lava_damage - - effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - - if check_for_death(self, "lava", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- fire damage - elseif self.fire_damage > 0 - and (nodef.groups.fire) then - - if self.fire_damage ~= 0 then - - self.health = self.health - self.fire_damage - - effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - - if check_for_death(self, "fire", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- damage_per_second node check - elseif nodef.damage_per_second ~= 0 and not nodef.groups.lava and not nodef.groups.fire then - - self.health = self.health - nodef.damage_per_second - - effect(pos, 5, "mcl_particles_smoke.png") - - if check_for_death(self, "dps", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- Drowning damage - if self.breath_max ~= -1 then - local drowning = false - if self.breathes_in_water then - if minetest.get_item_group(self.standing_in, "water") == 0 then - drowning = true - end - elseif nodef.drowning > 0 then - drowning = true - end - if drowning then - - self.breath = math.max(0, self.breath - 1) - - effect(pos, 2, "bubble.png", nil, nil, 1, nil) - if self.breath <= 0 then - local dmg - if nodef.drowning > 0 then - dmg = nodef.drowning - else - dmg = 4 - end - damage_effect(self, dmg) - self.health = self.health - dmg - end - if check_for_death(self, "drowning", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - else - self.breath = math.min(self.breath_max, self.breath + 1) - end - end - - --- suffocation inside solid node - -- FIXME: Redundant with mcl_playerplus - if (self.suffocation == true) - and (nodef.walkable == nil or nodef.walkable == true) - and (nodef.collision_box == nil or nodef.collision_box.type == "regular") - and (nodef.node_box == nil or nodef.node_box.type == "regular") - and (nodef.groups.disable_suffocation ~= 1) - and (nodef.groups.opaque == 1) then - - -- Short grace period before starting to take suffocation damage. - -- This is different from players, who take damage instantly. - -- This has been done because mobs might briefly be inside solid nodes - -- when e.g. climbing up stairs. - -- This is a bit hacky because it assumes that do_env_damage - -- is called roughly every second only. - self.suffocation_timer = self.suffocation_timer + 1 - if self.suffocation_timer >= 3 then - -- 2 damage per second - -- TODO: Deal this damage once every 1/2 second - self.health = self.health - 2 - - if check_for_death(self, "suffocation", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - else - self.suffocation_timer = 0 - end - - return check_for_death(self, "", {type = "unknown"}) -end - - --- jump if facing a solid node (not fences or gates) -local do_jump = function(self) - - if not self.jump - or self.jump_height == 0 - or self.fly - or (self.child and self.type ~= "monster") - or self.order == "stand" then - return false - end - - self.facing_fence = false - - -- something stopping us while moving? - if self.state ~= "stand" - and get_velocity(self) > 0.5 - and self.object:get_velocity().y ~= 0 then - return false - end - - local pos = self.object:get_pos() - local yaw = self.object:get_yaw() - - -- what is mob standing on? - pos.y = pos.y + self.collisionbox[2] - 0.2 - - local nod = node_ok(pos) - - if minetest.registered_nodes[nod.name].walkable == false then - return false - end - - -- where is front - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - - -- what is in front of mob? - nod = node_ok({ - x = pos.x + dir_x, - y = pos.y + 0.5, - z = pos.z + dir_z - }) - - -- this is used to detect if there's a block on top of the block in front of the mob. - -- If there is, there is no point in jumping as we won't manage. - local nodTop = node_ok({ - x = pos.x + dir_x, - y = pos.y + 1.5, - z = pos.z + dir_z - }, "air") - - -- we don't attempt to jump if there's a stack of blocks blocking - if minetest.registered_nodes[nodTop.name].walkable == true then - return false - end - - -- thin blocks that do not need to be jumped - if nod.name == node_snow then - return false - end - - local ndef = minetest.registered_nodes[nod.name] - if self.walk_chance == 0 or ndef and ndef.walkable then - - if minetest.get_item_group(nod.name, "fence") == 0 - and minetest.get_item_group(nod.name, "fence_gate") == 0 - and minetest.get_item_group(nod.name, "wall") == 0 then - - local v = self.object:get_velocity() - - v.y = self.jump_height - - set_animation(self, "jump") -- only when defined - - self.object:set_velocity(v) - - -- when in air move forward - minetest.after(0.3, function(self, v) - if (not self.object) or (not self.object:get_luaentity()) or (self.state == "die") then - return - end - self.object:set_acceleration({ - x = v.x * 2, - y = -10, - z = v.z * 2, - }) - end, self, v) - - if self.jump_sound_cooloff <= 0 then - mob_sound(self, "jump") - self.jump_sound_cooloff = 0.5 - end - else - self.facing_fence = true - end - - -- if we jumped against a block/wall 4 times then turn - if self.object:get_velocity().x ~= 0 - and self.object:get_velocity().z ~= 0 then - - self.jump_count = (self.jump_count or 0) + 1 - - if self.jump_count == 4 then - - local yaw = self.object:get_yaw() or 0 - - yaw = set_yaw(self, yaw + 1.35, 8) - - self.jump_count = 0 - end - end - - return true - end - - return false -end - - --- blast damage to entities nearby -local entity_physics = function(pos, radius) - - radius = radius * 2 - - local objs = minetest.get_objects_inside_radius(pos, radius) - local obj_pos, dist - - for n = 1, #objs do - - obj_pos = objs[n]:get_pos() - - dist = vector.distance(pos, obj_pos) - if dist < 1 then dist = 1 end - - local damage = floor((4 / dist) * radius) - local ent = objs[n]:get_luaentity() - - -- punches work on entities AND players - objs[n]:punch(objs[n], 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, pos) - end -end - - --- should mob follow what I'm holding ? -local follow_holding = function(self, clicker) - if self.nofollow then return false end - - if mcl_mobs.invis[clicker:get_player_name()] then - return false - end - - local item = clicker:get_wielded_item() - local t = type(self.follow) - - -- single item - if t == "string" - and item:get_name() == self.follow then - return true - - -- multiple items - elseif t == "table" then - - for no = 1, #self.follow do - - if self.follow[no] == item:get_name() then - return true - end - end - end - - return false -end - - --- find two animals of same type and breed if nearby and horny -local breed = function(self) - - -- child takes a long time before growing into adult - if self.child == true then - - -- When a child, hornytimer is used to count age until adulthood - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer >= CHILD_GROW_TIME then - - self.child = false - self.hornytimer = 0 - - self.object:set_properties({ - textures = self.base_texture, - mesh = self.base_mesh, - visual_size = self.base_size, - collisionbox = self.base_colbox, - selectionbox = self.base_selbox, - }) - - -- custom function when child grows up - if self.on_grown then - self.on_grown(self) - else - -- jump when fully grown so as not to fall into ground - self.object:set_velocity({ - x = 0, - y = self.jump_height, - z = 0 - }) - end - end - - return - end - - -- horny animal can mate for HORNY_TIME seconds, - -- afterwards horny animal cannot mate again for HORNY_AGAIN_TIME seconds - if self.horny == true - and self.hornytimer < HORNY_TIME + HORNY_AGAIN_TIME then - - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer >= HORNY_TIME + HORNY_AGAIN_TIME then - self.hornytimer = 0 - self.horny = false - end - end - - -- find another same animal who is also horny and mate if nearby - if self.horny == true - and self.hornytimer <= HORNY_TIME then - - local pos = self.object:get_pos() - - effect({x = pos.x, y = pos.y + 1, z = pos.z}, 8, "heart.png", 3, 4, 1, 0.1) - - local objs = minetest.get_objects_inside_radius(pos, 3) - local num = 0 - local ent = nil - - for n = 1, #objs do - - ent = objs[n]:get_luaentity() - - -- check for same animal with different colour - local canmate = false - - if ent then - - if ent.name == self.name then - canmate = true - else - local entname = string.split(ent.name,":") - local selfname = string.split(self.name,":") - - if entname[1] == selfname[1] then - entname = string.split(entname[2],"_") - selfname = string.split(selfname[2],"_") - - if entname[1] == selfname[1] then - canmate = true - end - end - end - end - - if ent - and canmate == true - and ent.horny == true - and ent.hornytimer <= HORNY_TIME then - num = num + 1 - end - - -- found your mate? then have a baby - if num > 1 then - - self.hornytimer = HORNY_TIME + 1 - ent.hornytimer = HORNY_TIME + 1 - - -- spawn baby - minetest.after(5, function(parent1, parent2, pos) - if not parent1.object:get_luaentity() then - return - end - if not parent2.object:get_luaentity() then - return - end - - mcl_experience.throw_xp(pos, math.random(1, 7)) - - -- custom breed function - if parent1.on_breed then - -- when false, skip going any further - if parent1.on_breed(parent1, parent2) == false then - return - end - end - - local child = mcl_mobs:spawn_child(pos, parent1.name) - - local ent_c = child:get_luaentity() - - - -- Use texture of one of the parents - local p = math.random(1, 2) - if p == 1 then - ent_c.base_texture = parent1.base_texture - else - ent_c.base_texture = parent2.base_texture - end - child:set_properties({ - textures = ent_c.base_texture - }) - - -- tamed and owned by parents' owner - ent_c.tamed = true - ent_c.owner = parent1.owner - end, self, ent, pos) - - num = 0 - - break - end - end - end -end - - --- find and replace what mob is looking for (grass, wheat etc.) -local replace = function(self, pos) - - if not self.replace_rate - or not self.replace_what - or self.child == true - or self.object:get_velocity().y ~= 0 - or random(1, self.replace_rate) > 1 then - return - end - - local what, with, y_offset - - if type(self.replace_what[1]) == "table" then - - local num = random(#self.replace_what) - - what = self.replace_what[num][1] or "" - with = self.replace_what[num][2] or "" - y_offset = self.replace_what[num][3] or 0 - else - what = self.replace_what - with = self.replace_with or "" - y_offset = self.replace_offset or 0 - end - - pos.y = pos.y + y_offset - - local node = minetest.get_node(pos) - if node.name == what then - - local oldnode = {name = what, param2 = node.param2} - local newnode = {name = with, param2 = node.param2} - local on_replace_return - - if self.on_replace then - on_replace_return = self.on_replace(self, pos, oldnode, newnode) - end - - if on_replace_return ~= false then - - if mobs_griefing then - minetest.set_node(pos, newnode) - end - - end - end -end - - --- check if daytime and also if mob is docile during daylight hours -local day_docile = function(self) - - if self.docile_by_day == false then - - return false - - elseif self.docile_by_day == true - and self.time_of_day > 0.2 - and self.time_of_day < 0.8 then - - return true - end -end - - -local los_switcher = false -local height_switcher = false - --- path finding and smart mob routine by rnd, line_of_sight and other edits by Elkien3 -local smart_mobs = function(self, s, p, dist, dtime) - - local s1 = self.path.lastpos - - local target_pos = self.attack:get_pos() - - -- is it becoming stuck? - if abs(s1.x - s.x) + abs(s1.z - s.z) < .5 then - self.path.stuck_timer = self.path.stuck_timer + dtime - else - self.path.stuck_timer = 0 - end - - self.path.lastpos = {x = s.x, y = s.y, z = s.z} - - local use_pathfind = false - local has_lineofsight = minetest.line_of_sight( - {x = s.x, y = (s.y) + .5, z = s.z}, - {x = target_pos.x, y = (target_pos.y) + 1.5, z = target_pos.z}, .2) - - -- im stuck, search for path - if not has_lineofsight then - - if los_switcher == true then - use_pathfind = true - los_switcher = false - end -- cannot see target! - else - if los_switcher == false then - - los_switcher = true - use_pathfind = false - - minetest.after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end -- can see target! - end - - if (self.path.stuck_timer > stuck_timeout and not self.path.following) then - - use_pathfind = true - self.path.stuck_timer = 0 - - minetest.after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end - - if (self.path.stuck_timer > stuck_path_timeout and self.path.following) then - - use_pathfind = true - self.path.stuck_timer = 0 - - minetest.after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end - - if math.abs(vector.subtract(s,target_pos).y) > self.stepheight then - - if height_switcher then - use_pathfind = true - height_switcher = false - end - else - if not height_switcher then - use_pathfind = false - height_switcher = true - end - end - - if use_pathfind then - -- lets try find a path, first take care of positions - -- since pathfinder is very sensitive - local sheight = self.collisionbox[5] - self.collisionbox[2] - - -- round position to center of node to avoid stuck in walls - -- also adjust height for player models! - s.x = floor(s.x + 0.5) - s.z = floor(s.z + 0.5) - - local ssight, sground = minetest.line_of_sight(s, { - x = s.x, y = s.y - 4, z = s.z}, 1) - - -- determine node above ground - if not ssight then - s.y = sground.y + 1 - end - - local p1 = self.attack:get_pos() - - p1.x = floor(p1.x + 0.5) - p1.y = floor(p1.y + 0.5) - p1.z = floor(p1.z + 0.5) - - local dropheight = 12 - if self.fear_height ~= 0 then dropheight = self.fear_height end - local jumpheight = 0 - if self.jump and self.jump_height >= 4 then - jumpheight = math.min(math.ceil(self.jump_height / 4), 4) - elseif self.stepheight > 0.5 then - jumpheight = 1 - end - self.path.way = minetest.find_path(s, p1, 16, jumpheight, dropheight, "A*_noprefetch") - - self.state = "" - do_attack(self, self.attack) - - -- no path found, try something else - if not self.path.way then - - self.path.following = false - - -- lets make way by digging/building if not accessible - if self.pathfinding == 2 and mobs_griefing then - - -- is player higher than mob? - if s.y < p1.y then - - -- build upwards - if not minetest.is_protected(s, "") then - - local ndef1 = minetest.registered_nodes[self.standing_in] - - if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then - - minetest.set_node(s, {name = mcl_mobs.fallback_node}) - end - end - - local sheight = math.ceil(self.collisionbox[5]) + 1 - - -- assume mob is 2 blocks high so it digs above its head - s.y = s.y + sheight - - -- remove one block above to make room to jump - if not minetest.is_protected(s, "") then - - local node1 = node_ok(s, "air").name - local ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.set_node(s, {name = "air"}) - minetest.add_item(s, ItemStack(node1)) - - end - end - - s.y = s.y - sheight - self.object:set_pos({x = s.x, y = s.y + 2, z = s.z}) - - else -- dig 2 blocks to make door toward player direction - - local yaw1 = self.object:get_yaw() + pi / 2 - local p1 = { - x = s.x + cos(yaw1), - y = s.y, - z = s.z + sin(yaw1) - } - - if not minetest.is_protected(p1, "") then - - local node1 = node_ok(p1, "air").name - local ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - - p1.y = p1.y + 1 - node1 = node_ok(p1, "air").name - ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - - end - end - end - - -- will try again in 2 seconds - self.path.stuck_timer = stuck_timeout - 2 - elseif s.y < p1.y and (not self.fly) then - do_jump(self) --add jump to pathfinding - self.path.following = true - -- Yay, I found path! - -- TODO: Implement war_cry sound without being annoying - --mob_sound(self, "war_cry", true) - else - set_velocity(self, self.walk_velocity) - - -- follow path now that it has it - self.path.following = true - end - end -end - - --- specific attacks -local specific_attack = function(list, what) - - -- no list so attack default (player, animals etc.) - if list == nil then - return true - end - - -- found entity on list to attack? - for no = 1, #list do - - if list[no] == what then - return true - end - end - - return false -end - --- monster find someone to attack -local monster_attack = function(self) - - if self.type ~= "monster" - or not damage_enabled - or minetest.is_creative_enabled("") - or self.passive - or self.state == "attack" - or day_docile(self) then - return - end - - local s = self.object:get_pos() - local p, sp, dist - local player, obj, min_player - local type, name = "", "" - local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - if objs[n]:is_player() then - - if mcl_mobs.invis[ objs[n]:get_player_name() ] or (not object_in_range(self, objs[n])) then - type = "" - else - player = objs[n] - type = "player" - name = "player" - end - else - obj = objs[n]:get_luaentity() - - if obj then - player = obj.object - type = obj.type - name = obj.name or "" - end - end - - -- find specific mob to attack, failing that attack player/npc/animal - if specific_attack(self.specific_attack, name) - and (type == "player" or type == "npc" - or (type == "animal" and self.attack_animals == true)) then - - p = player:get_pos() - sp = s - - dist = vector.distance(p, s) - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - - -- choose closest player to attack - if dist < min_dist - and line_of_sight(self, sp, p, 2) == true then - min_dist = dist - min_player = player - end - end - end - - -- attack player - if min_player then - do_attack(self, min_player) - end -end - - --- npc, find closest monster to attack -local npc_attack = function(self) - - if self.type ~= "npc" - or not self.attacks_monsters - or self.state == "attack" then - return - end - - local p, sp, obj, min_player - local s = self.object:get_pos() - local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - obj = objs[n]:get_luaentity() - - if obj and obj.type == "monster" then - - p = obj.object:get_pos() - sp = s - - local dist = vector.distance(p, s) - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - if dist < min_dist - and line_of_sight(self, sp, p, 2) == true then - min_dist = dist - min_player = obj.object - end - end - end - - if min_player then - do_attack(self, min_player) - end -end - - --- specific runaway -local specific_runaway = function(list, what) - - -- no list so do not run - if list == nil then - return false - end - - -- found entity on list to attack? - for no = 1, #list do - - if list[no] == what then - return true - end - end - - return false -end - - --- find someone to runaway from -local runaway_from = function(self) - - if not self.runaway_from and self.state ~= "flop" then - return - end - - local s = self.object:get_pos() - local p, sp, dist - local player, obj, min_player - local type, name = "", "" - local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - if objs[n]:is_player() then - - if mcl_mobs.invis[ objs[n]:get_player_name() ] - or self.owner == objs[n]:get_player_name() - or (not object_in_range(self, objs[n])) then - type = "" - else - player = objs[n] - type = "player" - name = "player" - end - else - obj = objs[n]:get_luaentity() - - if obj then - player = obj.object - type = obj.type - name = obj.name or "" - end - end - - -- find specific mob to runaway from - if name ~= "" and name ~= self.name - and specific_runaway(self.runaway_from, name) then - - p = player:get_pos() - sp = s - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - dist = vector.distance(p, s) - - - -- choose closest player/mpb to runaway from - if dist < min_dist - and line_of_sight(self, sp, p, 2) == true then - min_dist = dist - min_player = player - end - end - end - - if min_player then - - local lp = player:get_pos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - - local yaw = (atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate - - if lp.x > s.x then - yaw = yaw + pi - end - - yaw = set_yaw(self, yaw, 4) - self.state = "runaway" - self.runaway_timer = 3 - self.following = nil - end -end - - --- follow player if owner or holding item, if fish outta water then flop -local follow_flop = function(self) - - -- find player to follow - if (self.follow ~= "" - or self.order == "follow") - and not self.following - and self.state ~= "attack" - and self.order ~= "sit" - and self.state ~= "runaway" then - - local s = self.object:get_pos() - local players = minetest.get_connected_players() - - for n = 1, #players do - - if (object_in_range(self, players[n])) - and not mcl_mobs.invis[ players[n]:get_player_name() ] then - - self.following = players[n] - - break - end - end - end - - if self.type == "npc" - and self.order == "follow" - and self.state ~= "attack" - and self.order ~= "sit" - and self.owner ~= "" then - - -- npc stop following player if not owner - if self.following - and self.owner - and self.owner ~= self.following:get_player_name() then - self.following = nil - end - else - -- stop following player if not holding specific item, - -- mob is horny, fleeing or attacking - if self.following - and self.following:is_player() - and (follow_holding(self, self.following) == false or - self.horny or self.state == "runaway") then - self.following = nil - end - - end - - -- follow that thing - if self.following then - - local s = self.object:get_pos() - local p - - if self.following:is_player() then - - p = self.following:get_pos() - - elseif self.following.object then - - p = self.following.object:get_pos() - end - - if p then - - local dist = vector.distance(p, s) - - -- dont follow if out of range - if (not object_in_range(self, self.following)) then - self.following = nil - else - local vec = { - x = p.x - s.x, - z = p.z - s.z - } - - local yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - set_yaw(self, yaw, 2.35) - - -- anyone but standing npc's can move along - if dist > 3 - and self.order ~= "stand" then - - set_velocity(self, self.follow_velocity) - - if self.walk_chance ~= 0 then - set_animation(self, "run") - end - else - set_velocity(self, 0) - set_animation(self, "stand") - end - - return - end - end - end - - -- swimmers flop when out of their element, and swim again when back in - if self.fly then - local s = self.object:get_pos() - if not flight_check(self, s) then - - self.state = "flop" - self.object:set_acceleration({x = 0, y = DEFAULT_FALL_SPEED, z = 0}) - - local sdef = minetest.registered_nodes[self.standing_on] - -- Flop on ground - if sdef and sdef.walkable then - mob_sound(self, "flop") - self.object:set_velocity({ - x = math.random(-FLOP_HOR_SPEED, FLOP_HOR_SPEED), - y = FLOP_HEIGHT, - z = math.random(-FLOP_HOR_SPEED, FLOP_HOR_SPEED), - }) - end - - set_animation(self, "stand", true) - - return - elseif self.state == "flop" then - self.state = "stand" - self.object:set_acceleration({x = 0, y = 0, z = 0}) - set_velocity(self, 0) - end - end -end - - --- dogshoot attack switch and counter function -local dogswitch = function(self, dtime) - - -- switch mode not activated - if not self.dogshoot_switch - or not dtime then - return 0 - end - - self.dogshoot_count = self.dogshoot_count + dtime - - if (self.dogshoot_switch == 1 - and self.dogshoot_count > self.dogshoot_count_max) - or (self.dogshoot_switch == 2 - and self.dogshoot_count > self.dogshoot_count2_max) then - - self.dogshoot_count = 0 - - if self.dogshoot_switch == 1 then - self.dogshoot_switch = 2 - else - self.dogshoot_switch = 1 - end - end - - return self.dogshoot_switch -end - -local function go_to_pos(entity,b) - if not entity then return end - local s=entity.object:get_pos() - if vector.distance(b,s) < 1 then - --set_velocity(entity,0) - return true - end - local v = { x = b.x - s.x, z = b.z - s.z } - local yaw = (math.atan(v.z / v.x) + math.pi / 2) - entity.rotate - if b.x > s.x then yaw = yaw + math.pi end - entity.object:set_yaw(yaw) - set_velocity(entity,entity.follow_velocity) - mcl_mobs:set_animation(entity, "walk") -end - -local function check_doors(self) - local p = self.object:get_pos() - local t = minetest.get_timeofday() - local dd = minetest.find_nodes_in_area(vector.offset(p,-1,-1,-1),vector.offset(p,1,1,1),{"group:door"}) - for _,d in pairs(dd) do - local n = minetest.get_node(d) - if n.name:find("_b_") then - local def = minetest.registered_nodes[n.name] - local closed = n.name:find("_b_1") - if t < 0.3 or t > 0.8 then - if not closed then def.on_rightclick(d,n,self) end - else - if closed then def.on_rightclick(d,n,self) end - end - - end - end -end - --- execute current state (stand, walk, run, attacks) --- returns true if mob has died -local do_states = function(self, dtime) - if self.can_open_doors then check_doors(self) end - - local yaw = self.object:get_yaw() or 0 - - if self.state == "stand" then - if random(1, 4) == 1 then - - local s = self.object:get_pos() - local objs = minetest.get_objects_inside_radius(s, 3) - - for n = 1, #objs do - - if objs[n]:is_player() then - lp = objs[n]:get_pos() - break - end - end - - -- look at any players nearby, otherwise turn randomly - if self.look_at_players then - - local vec = { - x = lp.x - s.x, - z = lp.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if lp.x > s.x then yaw = yaw + pi end - else - yaw = yaw + random(-0.5, 0.5) - end - - yaw = set_yaw(self, yaw, 8) - end - - set_velocity(self, 0) - set_animation(self, "stand") - - -- npc's ordered to stand stay standing - if self.type ~= "npc" - or self.order ~= "stand" then - - if self.walk_chance ~= 0 - and self.facing_fence ~= true - and random(1, 100) <= self.walk_chance - and is_at_cliff_or_danger(self) == false then - - set_velocity(self, self.walk_velocity) - self.state = "walk" - set_animation(self, "walk") - end - end - - elseif self.state == "gowp" then - local p = self.object:get_pos() - if not p or not self._target then return end - if vector.distance(p,self._target) < 2 or ( self.waypoints and #self.waypoints == 0 ) then - self.waypoints = nil - self._target = nil - self.current_target = nil - self.state = "walk" - if self.callback_arrived then return self.callback_arrived(self) end - return true - end - if self.waypoints and ( not self.current_target or vector.distance(p,self.current_target) < 1.5 ) then - self.current_target = table.remove(self.waypoints, 1) - --minetest.log("nextwp:".. tostring(self.current_target) ) - elseif self.current_target then - go_to_pos(self,self.current_target) - end - - if self.current_target and not minetest.line_of_sight(self.object:get_pos(),self.current_target) then - self.waypoints=minetest.find_path(p,self._target,150,1,4) - self.current_target = nil - return - end - if not self.current_target then - --minetest.log("no path") - self.state = "walk" - end - - elseif self.state == "walk" then - local s = self.object:get_pos() - local lp = nil - - -- is there something I need to avoid? - if (self.water_damage > 0 - and self.lava_damage > 0) - or self.breath_max ~= -1 then - - lp = minetest.find_node_near(s, 1, {"group:water", "group:lava"}) - - elseif self.water_damage > 0 then - - lp = minetest.find_node_near(s, 1, {"group:water"}) - - elseif self.lava_damage > 0 then - - lp = minetest.find_node_near(s, 1, {"group:lava"}) - - elseif self.fire_damage > 0 then - - lp = minetest.find_node_near(s, 1, {"group:fire"}) - - end - - local is_in_danger = false - if lp then - -- If mob in or on dangerous block, look for land - if (is_node_dangerous(self, self.standing_in) or - is_node_dangerous(self, self.standing_on)) or (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) and (not self.fly) then - is_in_danger = true - - -- If mob in or on dangerous block, look for land - if is_in_danger then - -- Better way to find shore - copied from upstream - lp = minetest.find_nodes_in_area_under_air( - {x = s.x - 5, y = s.y - 0.5, z = s.z - 5}, - {x = s.x + 5, y = s.y + 1, z = s.z + 5}, - {"group:solid"}) - - lp = #lp > 0 and lp[random(#lp)] - - -- did we find land? - if lp then - - local vec = { - x = lp.x - s.x, - z = lp.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - - if lp.x > s.x then yaw = yaw + pi end - - -- look towards land and move in that direction - yaw = set_yaw(self, yaw, 6) - set_velocity(self, self.walk_velocity) - - end - end - - -- A danger is near but mob is not inside - else - - -- Randomly turn - if random(1, 100) <= 30 then - yaw = yaw + random(-0.5, 0.5) - yaw = set_yaw(self, yaw, 8) - end - end - - yaw = set_yaw(self, yaw, 8) - - -- otherwise randomly turn - elseif random(1, 100) <= 30 then - - yaw = yaw + random(-0.5, 0.5) - yaw = set_yaw(self, yaw, 8) - end - - -- stand for great fall or danger or fence in front - local cliff_or_danger = false - if is_in_danger then - cliff_or_danger = is_at_cliff_or_danger(self) - end - if self.facing_fence == true - or cliff_or_danger - or random(1, 100) <= 30 then - - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - local yaw = self.object:get_yaw() or 0 - yaw = set_yaw(self, yaw + 0.78, 8) - else - - set_velocity(self, self.walk_velocity) - - if flight_check(self) - and self.animation - and self.animation.fly_start - and self.animation.fly_end then - set_animation(self, "fly") - else - set_animation(self, "walk") - end - end - - -- runaway when punched - elseif self.state == "runaway" then - - self.runaway_timer = self.runaway_timer + 1 - - -- stop after 5 seconds or when at cliff - if self.runaway_timer > 5 - or is_at_cliff_or_danger(self) then - self.runaway_timer = 0 - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - local yaw = self.object:get_yaw() or 0 - yaw = set_yaw(self, yaw + 0.78, 8) - else - set_velocity(self, self.run_velocity) - set_animation(self, "run") - end - - -- attack routines (explode, dogfight, shoot, dogshoot) - elseif self.state == "attack" then - - local s = self.object:get_pos() - local p = self.attack:get_pos() or s - - -- stop attacking if player invisible or out of range - if not self.attack - or not self.attack:get_pos() - or not object_in_range(self, self.attack) - or self.attack:get_hp() <= 0 - or (self.attack:is_player() and mcl_mobs.invis[ self.attack:get_player_name() ]) then - - self.state = "stand" - set_velocity(self, 0) - set_animation(self, "stand") - self.attack = nil - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - self.path.way = nil - - return - end - - -- calculate distance from mob and enemy - local dist = vector.distance(p, s) - - if self.attack_type == "explode" then - - local vec = { - x = p.x - s.x, - z = p.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - yaw = set_yaw(self, yaw, 0, dtime) - - local node_break_radius = self.explosion_radius or 1 - local entity_damage_radius = self.explosion_damage_radius - or (node_break_radius * 2) - - -- start timer when in reach and line of sight - if not self.v_start - and dist <= self.reach - and line_of_sight(self, s, p, 2) then - - self.v_start = true - self.timer = 0 - self.blinktimer = 0 - mob_sound(self, "fuse", nil, false) - - -- stop timer if out of reach or direct line of sight - elseif self.allow_fuse_reset - and self.v_start - and (dist >= self.explosiontimer_reset_radius - or not line_of_sight(self, s, p, 2)) then - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - self.blinkstatus = false - remove_texture_mod(self, "^[brighten") - end - - -- walk right up to player unless the timer is active - if self.v_start and (self.stop_to_explode or dist < self.reach) then - set_velocity(self, 0) - else - set_velocity(self, self.run_velocity) - end - - if self.animation and self.animation.run_start then - set_animation(self, "run") - else - set_animation(self, "walk") - end - - if self.v_start then - - self.timer = self.timer + dtime - self.blinktimer = (self.blinktimer or 0) + dtime - - if self.blinktimer > 0.2 then - - self.blinktimer = 0 - - if self.blinkstatus then - remove_texture_mod(self, "^[brighten") - else - add_texture_mod(self, "^[brighten") - end - - self.blinkstatus = not self.blinkstatus - end - - if self.timer > self.explosion_timer then - - local pos = self.object:get_pos() - - if mobs_griefing and not minetest.is_protected(pos, "") then - mcl_explosions.explode(mcl_util.get_object_center(self.object), self.explosion_strength, { drop_chance = 1.0 }, self.object) - else - minetest.sound_play(self.sounds.explode, { - pos = pos, - gain = 1.0, - max_hear_distance = self.sounds.distance or 32 - }, true) - - entity_physics(pos, entity_damage_radius) - effect(pos, 32, "mcl_particles_smoke.png", nil, nil, node_break_radius, 1, 0) - end - mcl_burning.extinguish(self.object) - self.object:remove() - - return true - end - end - - elseif self.attack_type == "dogfight" - or (self.attack_type == "dogshoot" and dogswitch(self, dtime) == 2) - or (self.attack_type == "dogshoot" and dist <= self.reach and dogswitch(self) == 0) then - - if self.fly - and dist > self.reach then - - local p1 = s - local me_y = floor(p1.y) - local p2 = p - local p_y = floor(p2.y + 1) - local v = self.object:get_velocity() - - if flight_check(self, s) then - - if me_y < p_y then - - self.object:set_velocity({ - x = v.x, - y = 1 * self.walk_velocity, - z = v.z - }) - - elseif me_y > p_y then - - self.object:set_velocity({ - x = v.x, - y = -1 * self.walk_velocity, - z = v.z - }) - end - else - if me_y < p_y then - - self.object:set_velocity({ - x = v.x, - y = 0.01, - z = v.z - }) - - elseif me_y > p_y then - - self.object:set_velocity({ - x = v.x, - y = -0.01, - z = v.z - }) - end - end - - end - - -- rnd: new movement direction - if self.path.following - and self.path.way - and self.attack_type ~= "dogshoot" then - - -- no paths longer than 50 - if #self.path.way > 50 - or dist < self.reach then - self.path.following = false - return - end - - local p1 = self.path.way[1] - - if not p1 then - self.path.following = false - return - end - - if abs(p1.x-s.x) + abs(p1.z - s.z) < 0.6 then - -- reached waypoint, remove it from queue - table.remove(self.path.way, 1) - end - - -- set new temporary target - p = {x = p1.x, y = p1.y, z = p1.z} - end - - local vec = { - x = p.x - s.x, - z = p.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - yaw = set_yaw(self, yaw, 0, dtime) - - -- move towards enemy if beyond mob reach - if dist > self.reach then - - -- path finding by rnd - if self.pathfinding -- only if mob has pathfinding enabled - and enable_pathfinding then - - smart_mobs(self, s, p, dist, dtime) - end - - if is_at_cliff_or_danger(self) then - - set_velocity(self, 0) - set_animation(self, "stand") - local yaw = self.object:get_yaw() or 0 - yaw = set_yaw(self, yaw + 0.78, 8) - else - - if self.path.stuck then - set_velocity(self, self.walk_velocity) - else - set_velocity(self, self.run_velocity) - end - - if self.animation and self.animation.run_start then - set_animation(self, "run") - else - set_animation(self, "walk") - end - end - - else -- rnd: if inside reach range - - self.path.stuck = false - self.path.stuck_timer = 0 - self.path.following = false -- not stuck anymore - - set_velocity(self, 0) - - if not self.custom_attack then - - if self.timer > 1 then - - self.timer = 0 - - if self.double_melee_attack - and random(1, 2) == 1 then - set_animation(self, "punch2") - else - set_animation(self, "punch") - end - - local p2 = p - local s2 = s - - p2.y = p2.y + .5 - s2.y = s2.y + .5 - - if line_of_sight(self, p2, s2) == true then - - -- play attack sound - mob_sound(self, "attack") - - -- punch player (or what player is attached to) - local attached = self.attack:get_attach() - if attached then - self.attack = attached - end - self.attack:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self.damage} - }, nil) - end - end - else -- call custom attack every second - if self.custom_attack - and self.timer > 1 then - - self.timer = 0 - - self.custom_attack(self, p) - end - end - end - - elseif self.attack_type == "shoot" - or (self.attack_type == "dogshoot" and dogswitch(self, dtime) == 1) - or (self.attack_type == "dogshoot" and dist > self.reach and dogswitch(self) == 0) then - - p.y = p.y - .5 - s.y = s.y + .5 - - local dist = vector.distance(p, s) - local vec = { - x = p.x - s.x, - y = p.y - s.y, - z = p.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - yaw = set_yaw(self, yaw, 0, dtime) - - set_velocity(self, 0) - - local p = self.object:get_pos() - p.y = p.y + (self.collisionbox[2] + self.collisionbox[5]) / 2 - - if self.shoot_interval - and self.timer > self.shoot_interval - and not minetest.raycast(p, self.attack:get_pos(), false, false):next() - and random(1, 100) <= 60 then - - self.timer = 0 - set_animation(self, "shoot") - - -- play shoot attack sound - mob_sound(self, "shoot_attack") - - -- Shoot arrow - if minetest.registered_entities[self.arrow] then - - local arrow, ent - local v = 1 - if not self.shoot_arrow then - self.firing = true - minetest.after(1, function() - self.firing = false - end) - arrow = minetest.add_entity(p, self.arrow) - ent = arrow:get_luaentity() - if ent.velocity then - v = ent.velocity - end - ent.switch = 1 - ent.owner_id = tostring(self.object) -- add unique owner id to arrow - - -- important for mcl_shields - ent._shooter = self.object - ent._saved_shooter_pos = self.object:get_pos() - end - - local amount = (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z) ^ 0.5 - -- offset makes shoot aim accurate - vec.y = vec.y + self.shoot_offset - vec.x = vec.x * (v / amount) - vec.y = vec.y * (v / amount) - vec.z = vec.z * (v / amount) - if self.shoot_arrow then - vec = vector.normalize(vec) - self:shoot_arrow(p, vec) - else - arrow:set_velocity(vec) - end - end - end - end - end -end - -local plane_adjacents = { - vector.new(1,0,0), - vector.new(-1,0,0), - vector.new(0,0,1), - vector.new(0,0,-1), -} - -function mcl_mobs:gopath(self,target,callback_arrived) - local p = self.object:get_pos() - local t = vector.offset(target,0,1,0) - local wp = minetest.find_path(p,t,150,1,4) - if not wp then - local d = minetest.find_node_near(target,16,{"group:door"}) - if d then - for _,v in pairs(plane_adjacents) do - local pos = vector.add(d,v) - local n = minetest.get_node(pos) - if n.name == "air" then - wp = minetest.find_path(p,pos,150,1,4) - if wp then break end - end - end - end - end - if wp and #wp > 0 then - self._target = t - self.callback_arrived = callback_arrived - self.waypoints = wp - self.state = "gowp" - return true - else - --minetest.log("no path found") - end -end - -local function player_near(pos) - for _,o in pairs(minetest.get_objects_inside_radius(pos,2)) do - if o:is_player() then return true end - end -end - -local function check_item_pickup(self) - if self.pick_up and #self.pick_up > 0 then - local p = self.object:get_pos() - for _,o in pairs(minetest.get_objects_inside_radius(p,2)) do - local l=o:get_luaentity() - if l and l.name == "__builtin:item" then - for k,v in pairs(self.pick_up) do - if not player_near(p) and self.on_pick_up and l.itemstring:find(v) then - if self.on_pick_up(self,l) == nil then o:remove() end - end - end - end - end - end -end - -local function damage_mob(self,reason,damage) - if not self.health then return end - damage = floor(damage) - if damage > 0 then - self.health = self.health - damage - - effect(pos, 5, "mcl_particles_smoke.png", 1, 2, 2, nil) - - if check_for_death(self, reason, {type = reason}) then - return true - end - end -end - -local function check_entity_cramming(self) - local p = self.object:get_pos() - local oo = minetest.get_objects_inside_radius(p,1) - local mobs = {} - for _,o in pairs(oo) do - local l = o:get_luaentity() - if l and l.is_mob and l.health > 0 then table.insert(mobs,l) end - end - local clear = #mobs < ENTITY_CRAMMING_MAX - local ncram = {} - for _,l in pairs(mobs) do - if l then - if clear then - l.cram = nil - elseif l.cram == nil and not self.child then - table.insert(ncram,l) - elseif l.cram then - damage_mob(l,"cramming",CRAMMING_DAMAGE) - end - end - end - for i,l in pairs(ncram) do - if i > ENTITY_CRAMMING_MAX then - l.cram = true - else - l.cram = nil - end - end -end - --- falling and fall damage --- returns true if mob died -local falling = function(self, pos) - - if self.fly and self.state ~= "die" then - return - end - - if mcl_portals ~= nil then - if mcl_portals.nether_portal_cooloff(self.object) then - return false -- mob has teleported through Nether portal - it's 99% not falling - end - end - - -- floating in water (or falling) - local v = self.object:get_velocity() - - if v.y > 0 then - - -- apply gravity when moving up - self.object:set_acceleration({ - x = 0, - y = -10, - z = 0 - }) - - elseif v.y <= 0 and v.y > self.fall_speed then - - -- fall downwards at set speed - self.object:set_acceleration({ - x = 0, - y = self.fall_speed, - z = 0 - }) - else - -- stop accelerating once max fall speed hit - self.object:set_acceleration({x = 0, y = 0, z = 0}) - end - - if minetest.registered_nodes[node_ok(pos).name].groups.lava then - - if self.floats_on_lava == 1 then - - self.object:set_acceleration({ - x = 0, - y = -self.fall_speed / (max(1, v.y) ^ 2), - z = 0 - }) - end - end - - -- in water then float up - if minetest.registered_nodes[node_ok(pos).name].groups.water then - - if self.floats == 1 then - - self.object:set_acceleration({ - x = 0, - y = -self.fall_speed / (max(1, v.y) ^ 2), - z = 0 - }) - end - else - - -- fall damage onto solid ground - if self.fall_damage == 1 - and self.object:get_velocity().y == 0 then - - local d = (self.old_y or 0) - self.object:get_pos().y - - if d > 5 then - - local add = minetest.get_item_group(self.standing_on, "fall_damage_add_percent") - local damage = d - 5 - if add ~= 0 then - damage = damage + damage * (add/100) - end - damage_mob(self,"fall",damage) - end - - self.old_y = self.object:get_pos().y - end - end -end - -local teleport = function(self, target) - if self.do_teleport then - if self.do_teleport(self, target) == false then - return - end - end -end - - --- deal damage and effects when mob punched -local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) - - -- custom punch function - if self.do_punch then - - -- when false skip going any further - if self.do_punch(self, hitter, tflp, tool_capabilities, dir) == false then - return - end - end - - -- error checking when mod profiling is enabled - if not tool_capabilities then - minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled") - return - end - - local is_player = hitter:is_player() - - if is_player then - -- is mob protected? - if self.protected and minetest.is_protected(self.object:get_pos(), hitter:get_player_name()) then - return - end - - -- set/update 'drop xp' timestamp if hitted by player - self.xp_timestamp = minetest.get_us_time() - end - - - -- punch interval - local weapon = hitter:get_wielded_item() - local punch_interval = 1.4 - - -- exhaust attacker - if is_player then - mcl_hunger.exhaust(hitter:get_player_name(), mcl_hunger.EXHAUST_ATTACK) - end - - -- calculate mob damage - local damage = 0 - local armor = self.object:get_armor_groups() or {} - local tmp - - -- quick error check incase it ends up 0 (serialize.h check test) - if tflp == 0 then - tflp = 0.2 - end - - - for group,_ in pairs( (tool_capabilities.damage_groups or {}) ) do - - tmp = tflp / (tool_capabilities.full_punch_interval or 1.4) - - if tmp < 0 then - tmp = 0.0 - elseif tmp > 1 then - tmp = 1.0 - end - - damage = damage + (tool_capabilities.damage_groups[group] or 0) - * tmp * ((armor[group] or 0) / 100.0) - end - - if weapon then - local fire_aspect_level = mcl_enchanting.get_enchantment(weapon, "fire_aspect") - if fire_aspect_level > 0 then - mcl_burning.set_on_fire(self.object, fire_aspect_level * 4) - end - end - - -- check for tool immunity or special damage - for n = 1, #self.immune_to do - - if self.immune_to[n][1] == weapon:get_name() then - - damage = self.immune_to[n][2] or 0 - break - end - end - - -- healing - if damage <= -1 then - self.health = self.health - floor(damage) - return - end - - if tool_capabilities then - punch_interval = tool_capabilities.full_punch_interval or 1.4 - end - - -- add weapon wear manually - -- Required because we have custom health handling ("health" property) - if minetest.is_creative_enabled("") ~= true - and tool_capabilities then - if tool_capabilities.punch_attack_uses then - -- Without this delay, the wear does not work. Quite hacky ... - minetest.after(0, function(name) - local player = minetest.get_player_by_name(name) - if not player then return end - local weapon = hitter:get_wielded_item(player) - local def = weapon:get_definition() - if def.tool_capabilities and def.tool_capabilities.punch_attack_uses then - local wear = floor(65535/tool_capabilities.punch_attack_uses) - weapon:add_wear(wear) - hitter:set_wielded_item(weapon) - end - end, hitter:get_player_name()) - end - end - - local die = false - - -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. - if damage >= 0.1 then - - -- weapon sounds - if weapon:get_definition().sounds ~= nil then - - local s = random(0, #weapon:get_definition().sounds) - - minetest.sound_play(weapon:get_definition().sounds[s], { - object = self.object, --hitter, - max_hear_distance = 8 - }, true) - else - minetest.sound_play("default_punch", { - object = self.object, - max_hear_distance = 5 - }, true) - end - - damage_effect(self, damage) - - -- do damage - self.health = self.health - damage - - -- skip future functions if dead, except alerting others - if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then - die = true - end - - -- knock back effect (only on full punch) - if not die - and self.knock_back - and tflp >= punch_interval then - - local v = self.object:get_velocity() - local r = 1.4 - min(punch_interval, 1.4) - local kb = r * 2.0 - local up = 2 - - -- if already in air then dont go up anymore when hit - if v.y ~= 0 - or self.fly then - up = 0 - end - - -- direction error check - dir = dir or {x = 0, y = 0, z = 0} - - -- check if tool already has specific knockback value - if tool_capabilities.damage_groups["knockback"] then - kb = tool_capabilities.damage_groups["knockback"] - else - kb = kb * 1.5 - end - - - local luaentity - if hitter then - luaentity = hitter:get_luaentity() - end - if hitter and is_player then - local wielditem = hitter:get_wielded_item() - kb = kb + 3 * mcl_enchanting.get_enchantment(wielditem, "knockback") - elseif luaentity and luaentity._knockback then - kb = kb + luaentity._knockback - end - - self.object:set_velocity({ - x = dir.x * kb, - y = dir.y * kb + up * 2, - z = dir.z * kb - }) - - self.pause_timer = 0.25 - end - end -- END if damage - - -- if skittish then run away - if not die and self.runaway == true and self.state ~= "flop" then - - local lp = hitter:get_pos() - local s = self.object:get_pos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - - local yaw = (atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate - - if lp.x > s.x then - yaw = yaw + pi - end - - yaw = set_yaw(self, yaw, 6) - self.state = "runaway" - self.runaway_timer = 0 - self.following = nil - end - - local name = hitter:get_player_name() or "" - - -- attack puncher and call other mobs for help - if self.passive == false - and self.state ~= "flop" - and (self.child == false or self.type == "monster") - and hitter:get_player_name() ~= self.owner - and not mcl_mobs.invis[ name ] then - - if not die then - -- attack whoever punched mob - self.state = "" - do_attack(self, hitter) - end - - -- alert others to the attack - local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range) - local obj = nil - - for n = 1, #objs do - - obj = objs[n]:get_luaentity() - - if obj then - - -- only alert members of same mob or friends - if obj.group_attack - and obj.state ~= "attack" - and obj.owner ~= name then - if obj.name == self.name then - do_attack(obj, hitter) - elseif type(obj.group_attack) == "table" then - for i=1, #obj.group_attack do - if obj.name == obj.group_attack[i] then - do_attack(obj, hitter) - break - end - end - end - end - - -- have owned mobs attack player threat - if obj.owner == name and obj.owner_loyal then - do_attack(obj, self.object) - end - end - end - end -end - -local mob_detach_child = function(self, child) - - if self.driver == child then - self.driver = nil - end - -end - --- get entity staticdata -local mob_staticdata = function(self) - ---[[ - -- remove mob when out of range unless tamed - if remove_far - and self.can_despawn - and self.remove_ok - and ((not self.nametag) or (self.nametag == "")) - and self.lifetimer <= 20 then - - minetest.log("action", "Mob "..name.." despawns in mob_staticdata at "..minetest.pos_to_string(self.object.get_pos(), 1)) - mcl_burning.extinguish(self.object) - self.object:remove() - - return ""-- nil - end ---]] - self.remove_ok = true - self.attack = nil - self.following = nil - self.state = "stand" - - local tmp = {} - - for _,stat in pairs(self) do - - local t = type(stat) - - if t ~= "function" - and t ~= "nil" - and t ~= "userdata" - and _ ~= "_cmi_components" then - tmp[_] = self[_] - end - end - - return minetest.serialize(tmp) -end - - --- activate mob and reload settings -local mob_activate = function(self, staticdata, def, dtime) - - -- remove monsters in peaceful mode - if self.type == "monster" - and minetest.settings:get_bool("only_peaceful_mobs", false) then - mcl_burning.extinguish(self.object) - self.object:remove() - - return - end - - -- load entity variables - local tmp = minetest.deserialize(staticdata) - - if tmp then - for _,stat in pairs(tmp) do - self[_] = stat - end - end - - -- select random texture, set model and size - if not self.base_texture then - - -- compatiblity with old simple mobs textures - if type(def.textures[1]) == "string" then - def.textures = {def.textures} - end - - self.base_texture = def.textures[random(1, #def.textures)] - self.base_mesh = def.mesh - self.base_size = self.visual_size - self.base_colbox = self.collisionbox - self.base_selbox = self.selectionbox - end - - -- for current mobs that dont have this set - if not self.base_selbox then - self.base_selbox = self.selectionbox or self.base_colbox - end - - -- set texture, model and size - local textures = self.base_texture - local mesh = self.base_mesh - local vis_size = self.base_size - local colbox = self.base_colbox - local selbox = self.base_selbox - - -- specific texture if gotten - if self.gotten == true - and def.gotten_texture then - textures = def.gotten_texture - end - - -- specific mesh if gotten - if self.gotten == true - and def.gotten_mesh then - mesh = def.gotten_mesh - end - - -- set child objects to half size - if self.child == true then - - vis_size = { - x = self.base_size.x * .5, - y = self.base_size.y * .5, - } - - if def.child_texture then - textures = def.child_texture[1] - end - - colbox = { - self.base_colbox[1] * .5, - self.base_colbox[2] * .5, - self.base_colbox[3] * .5, - self.base_colbox[4] * .5, - self.base_colbox[5] * .5, - self.base_colbox[6] * .5 - } - selbox = { - self.base_selbox[1] * .5, - self.base_selbox[2] * .5, - self.base_selbox[3] * .5, - self.base_selbox[4] * .5, - self.base_selbox[5] * .5, - self.base_selbox[6] * .5 - } - end - - if self.health == 0 then - self.health = random (self.hp_min, self.hp_max) - end - if self.breath == nil then - self.breath = self.breath_max - end - - -- pathfinding init - self.path = {} - self.path.way = {} -- path to follow, table of positions - self.path.lastpos = {x = 0, y = 0, z = 0} - self.path.stuck = false - self.path.following = false -- currently following path? - self.path.stuck_timer = 0 -- if stuck for too long search for path - - -- Armor groups - -- immortal=1 because we use custom health - -- handling (using "health" property) - local armor - if type(self.armor) == "table" then - armor = table.copy(self.armor) - armor.immortal = 1 - else - armor = {immortal=1, fleshy = self.armor} - end - self.object:set_armor_groups(armor) - self.old_y = self.object:get_pos().y - self.old_health = self.health - self.sounds.distance = self.sounds.distance or 10 - self.textures = textures - self.mesh = mesh - self.collisionbox = colbox - self.selectionbox = selbox - self.visual_size = vis_size - self.standing_in = "ignore" - self.standing_on = "ignore" - self.jump_sound_cooloff = 0 -- used to prevent jump sound from being played too often in short time - self.opinion_sound_cooloff = 0 -- used to prevent sound spam of particular sound types - - self.texture_mods = {} - self.object:set_texture_mod("") - - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - self.blinkstatus = false - - -- check existing nametag - if not self.nametag then - self.nametag = def.nametag - end - - -- set anything changed above - self.object:set_properties(self) - set_yaw(self, (random(0, 360) - 180) / 180 * pi, 6) - update_tag(self) - set_animation(self, "stand") - - -- run on_spawn function if found - if self.on_spawn and not self.on_spawn_run then - if self.on_spawn(self) then - self.on_spawn_run = true -- if true, set flag to run once only - end - end - - -- run after_activate - if def.after_activate then - def.after_activate(self, staticdata, def, dtime) - end -end - - --- main mob function -local mob_step = function(self, dtime) - check_item_pickup(self) - if not self.fire_resistant then - mcl_burning.tick(self.object, dtime, self) - end - - local pos = self.object:get_pos() - local yaw = 0 - - if mobs_debug then - update_tag(self) - end - - if self.state == "die" then - return - end - - if self.jump_sound_cooloff > 0 then - self.jump_sound_cooloff = self.jump_sound_cooloff - dtime - end - if self.opinion_sound_cooloff > 0 then - self.opinion_sound_cooloff = self.opinion_sound_cooloff - dtime - end - if falling(self, pos) then - -- Return if mob died after falling - return - end - - -- smooth rotation by ThomasMonroe314 - - if self.delay and self.delay > 0 then - - local yaw = self.object:get_yaw() or 0 - - if self.delay == 1 then - yaw = self.target_yaw - else - local dif = abs(yaw - self.target_yaw) - - if yaw > self.target_yaw then - - if dif > pi then - dif = 2 * pi - dif -- need to add - yaw = yaw + dif / self.delay - else - yaw = yaw - dif / self.delay -- need to subtract - end - - elseif yaw < self.target_yaw then - - if dif > pi then - dif = 2 * pi - dif - yaw = yaw - dif / self.delay -- need to subtract - else - yaw = yaw + dif / self.delay -- need to add - end - end - - if yaw > (pi * 2) then yaw = yaw - (pi * 2) end - if yaw < 0 then yaw = yaw + (pi * 2) end - end - - self.delay = self.delay - 1 - if self.shaking then - yaw = yaw + (math.random() * 2 - 1) * 5 * dtime - end - self.object:set_yaw(yaw) - update_roll(self) - end - - -- end rotation - - -- run custom function (defined in mob lua file) - if self.do_custom then - - -- when false skip going any further - if self.do_custom(self, dtime) == false then - return - end - end - - -- knockback timer - if self.pause_timer > 0 then - - self.pause_timer = self.pause_timer - dtime - - return - end - - -- attack timer - self.timer = self.timer + dtime - - if self.state ~= "attack" and self.state ~= "gowp" then - if self.timer < 1 then - return - end - - self.timer = 0 - end - - -- never go over 100 - if self.timer > 100 then - self.timer = 1 - end - - -- mob plays random sound at times - if random(1, 70) == 1 then - mob_sound(self, "random", true) - end - - -- environmental damage timer (every 1 second) - self.env_damage_timer = self.env_damage_timer + dtime - - if (self.state == "attack" and self.env_damage_timer > 1) - or self.state ~= "attack" then - check_entity_cramming(self) - self.env_damage_timer = 0 - - -- check for environmental damage (water, fire, lava etc.) - if do_env_damage(self) then - return - end - - -- node replace check (cow eats grass etc.) - replace(self, pos) - end - - monster_attack(self) - - npc_attack(self) - - breed(self) - - if do_states(self, dtime) then - return - end - - if not self.object:get_luaentity() then - return false - end - - do_jump(self) - - runaway_from(self) - - if is_at_water_danger(self) and self.state ~= "attack" then - if random(1, 10) <= 6 then - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - yaw = yaw + random(-0.5, 0.5) - yaw = set_yaw(self, yaw, 8) - end - end - - -- Add water flowing for mobs from mcl_item_entity - local p, node, nn, def - p = self.object:get_pos() - node = minetest.get_node_or_nil(p) - if node then - nn = node.name - def = minetest.registered_nodes[nn] - end - - -- Move item around on flowing liquids - if def and def.liquidtype == "flowing" then - - --[[ Get flowing direction (function call from flowlib), if there's a liquid. - NOTE: According to Qwertymine, flowlib.quickflow is only reliable for liquids with a flowing distance of 7. - Luckily, this is exactly what we need if we only care about water, which has this flowing distance. ]] - local vec = flowlib.quick_flow(p, node) - -- Just to make sure we don't manipulate the speed for no reason - if vec.x ~= 0 or vec.y ~= 0 or vec.z ~= 0 then - -- Minecraft Wiki: Flowing speed is "about 1.39 meters per second" - local f = 1.39 - -- Set new item moving speed into the direciton of the liquid - local newv = vector.multiply(vec, f) - self.object:set_acceleration({x = 0, y = 0, z = 0}) - self.object:set_velocity({x = newv.x, y = -0.22, z = newv.z}) - - self.physical_state = true - self._flowing = true - self.object:set_properties({ - physical = true - }) - return - end - elseif self._flowing == true then - -- Disable flowing physics if not on/in flowing liquid - self._flowing = false - enable_physics(self.object, self, true) - return - end - - --Mob following code. - follow_flop(self) - - if is_at_cliff_or_danger(self) then - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - local yaw = self.object:get_yaw() or 0 - yaw = set_yaw(self, yaw + 0.78, 8) - end - - -- Despawning: when lifetimer expires, remove mob - if remove_far - and self.can_despawn == true - and ((not self.nametag) or (self.nametag == "")) - and self.state ~= "attack" - and self.following == nil then - - self.lifetimer = self.lifetimer - dtime - if self.despawn_immediately or self.lifetimer <= 0 then - minetest.log("action", "Mob "..self.name.." despawns in mob_step at "..minetest.pos_to_string(pos, 1)) - mcl_burning.extinguish(self.object) - self.object:remove() - elseif self.lifetimer <= 10 then - if math.random(10) < 4 then - self.despawn_immediately = true - else - self.lifetimer = 20 - end - end - end -end - - --- default function when mobs are blown up with TNT -local do_tnt = function(obj, damage) - - obj.object:punch(obj.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, nil) - - return false, true, {} -end - - -mcl_mobs.spawning_mobs = {} - --- Code to execute before custom on_rightclick handling -local on_rightclick_prefix = function(self, clicker) - local item = clicker:get_wielded_item() - - -- Name mob with nametag - if not self.ignores_nametag and item:get_name() == "mcl_mobs:nametag" then - - local tag = item:get_meta():get_string("name") - if tag ~= "" then - if string.len(tag) > MAX_MOB_NAME_LENGTH then - tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH) - end - self.nametag = tag - - update_tag(self) - - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - return true - end - - end - return false -end - -local create_mob_on_rightclick = function(on_rightclick) - return function(self, clicker) - local stop = on_rightclick_prefix(self, clicker) - if (not stop) and (on_rightclick) then - on_rightclick(self, clicker) - end - end -end - --- register mob entity -function mcl_mobs:register_mob(name, def) - - mcl_mobs.spawning_mobs[name] = true - -local can_despawn -if def.can_despawn ~= nil then - can_despawn = def.can_despawn -elseif def.spawn_class == "passive" then - can_despawn = false -else - can_despawn = true -end - -local function scale_difficulty(value, default, min, special) - if (not value) or (value == default) or (value == special) then - return default - else - return max(min, value * difficulty) - end -end - -local collisionbox = def.collisionbox or {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25} --- Workaround for : --- Increase upper Y limit to avoid mobs glitching through solid nodes. --- FIXME: Remove workaround if it's no longer needed. -if collisionbox[5] < 0.79 then - collisionbox[5] = 0.79 -end - -minetest.register_entity(name, { - - use_texture_alpha = def.use_texture_alpha, - stepheight = def.stepheight or 0.6, - name = name, - description = def.description, - type = def.type, - attack_type = def.attack_type, - fly = def.fly, - fly_in = def.fly_in or {"air", "__airlike"}, - owner = def.owner or "", - order = def.order or "", - on_die = def.on_die, - spawn_small_alternative = def.spawn_small_alternative, - do_custom = def.do_custom, - jump_height = def.jump_height or 4, -- was 6 - rotate = math.rad(def.rotate or 0), -- 0=front, 90=side, 180=back, 270=side2 - lifetimer = def.lifetimer or 57.73, - hp_min = scale_difficulty(def.hp_min, 5, 1), - hp_max = scale_difficulty(def.hp_max, 10, 1), - xp_min = def.xp_min or 0, - xp_max = def.xp_max or 0, - xp_timestamp = 0, - breath_max = def.breath_max or 15, - breathes_in_water = def.breathes_in_water or false, - physical = true, - collisionbox = collisionbox, - selectionbox = def.selectionbox or def.collisionbox, - visual = def.visual, - visual_size = def.visual_size or {x = 1, y = 1}, - mesh = def.mesh, - makes_footstep_sound = def.makes_footstep_sound or false, - view_range = def.view_range or 16, - walk_velocity = def.walk_velocity or 1, - run_velocity = def.run_velocity or 2, - damage = scale_difficulty(def.damage, 0, 0), - light_damage = def.light_damage or 0, - sunlight_damage = def.sunlight_damage or 0, - water_damage = def.water_damage or 0, - lava_damage = def.lava_damage or 8, - fire_damage = def.fire_damage or 1, - suffocation = def.suffocation or true, - fall_damage = def.fall_damage or 1, - fall_speed = def.fall_speed or DEFAULT_FALL_SPEED, -- must be lower than -2 - drops = def.drops or {}, - armor = def.armor or 100, - on_rightclick = create_mob_on_rightclick(def.on_rightclick), - arrow = def.arrow, - shoot_interval = def.shoot_interval, - sounds = def.sounds or {}, - animation = def.animation, - follow = def.follow, - nofollow = def.nofollow, - can_open_doors = def.can_open_doors, - jump = def.jump ~= false, - walk_chance = def.walk_chance or 50, - attacks_monsters = def.attacks_monsters or false, - group_attack = def.group_attack or false, - passive = def.passive or false, - knock_back = def.knock_back ~= false, - shoot_offset = def.shoot_offset or 0, - floats = def.floats or 1, -- floats in water by default - floats_on_lava = def.floats_on_lava or 0, - replace_rate = def.replace_rate, - replace_what = def.replace_what, - replace_with = def.replace_with, - replace_offset = def.replace_offset or 0, - on_replace = def.on_replace, - timer = 0, - env_damage_timer = 0, - tamed = false, - pause_timer = 0, - horny = false, - hornytimer = 0, - gotten = false, - health = 0, - reach = def.reach or 3, - htimer = 0, - texture_list = def.textures, - child_texture = def.child_texture, - docile_by_day = def.docile_by_day or false, - time_of_day = 0.5, - fear_height = def.fear_height or 0, - runaway = def.runaway, - runaway_timer = 0, - pathfinding = def.pathfinding, - immune_to = def.immune_to or {}, - explosion_radius = def.explosion_radius, -- LEGACY - explosion_damage_radius = def.explosion_damage_radius, -- LEGACY - explosiontimer_reset_radius = def.explosiontimer_reset_radius, - explosion_timer = def.explosion_timer or 3, - allow_fuse_reset = def.allow_fuse_reset ~= false, - stop_to_explode = def.stop_to_explode ~= false, - custom_attack = def.custom_attack, - double_melee_attack = def.double_melee_attack, - dogshoot_switch = def.dogshoot_switch, - dogshoot_count = 0, - dogshoot_count_max = def.dogshoot_count_max or 5, - dogshoot_count2_max = def.dogshoot_count2_max or (def.dogshoot_count_max or 5), - attack_animals = def.attack_animals or false, - specific_attack = def.specific_attack, - runaway_from = def.runaway_from, - owner_loyal = def.owner_loyal, - facing_fence = false, - is_mob = true, - pushable = def.pushable or true, - - - -- MCL2 extensions - teleport = teleport, - do_teleport = def.do_teleport, - spawn_class = def.spawn_class, - ignores_nametag = def.ignores_nametag or false, - rain_damage = def.rain_damage or 0, - glow = def.glow, - can_despawn = can_despawn, - child = def.child or false, - texture_mods = {}, - shoot_arrow = def.shoot_arrow, - sounds_child = def.sounds_child, - pick_up = def.pick_up, - explosion_strength = def.explosion_strength, - suffocation_timer = 0, - follow_velocity = def.follow_velocity or 2.4, - instant_death = def.instant_death or false, - fire_resistant = def.fire_resistant or false, - fire_damage_resistant = def.fire_damage_resistant or false, - ignited_by_sunlight = def.ignited_by_sunlight or false, - -- End of MCL2 extensions - - on_spawn = def.on_spawn, - - on_blast = def.on_blast or do_tnt, - - on_step = mob_step, - - do_punch = def.do_punch, - - on_punch = mob_punch, - - on_breed = def.on_breed, - - on_grown = def.on_grown, - - on_pick_up = def.on_pick_up, - - on_detach_child = mob_detach_child, - - on_activate = function(self, staticdata, dtime) - --this is a temporary hack so mobs stop - --glitching and acting really weird with the - --default built in engine collision detection - self.is_mob = true - self.object:set_properties({ - collide_with_objects = false, - }) - return mob_activate(self, staticdata, def, dtime) - end, - - get_staticdata = function(self) - return mob_staticdata(self) - end, - - harmed_by_heal = def.harmed_by_heal, - -}) - -if minetest.get_modpath("doc_identifier") ~= nil then - doc.sub.identifier.register_object(name, "basics", "mobs") -end - -end -- END mcl_mobs:register_mob function - - --- register arrow for shoot attack -function mcl_mobs:register_arrow(name, def) - - if not name or not def then return end -- errorcheck - - minetest.register_entity(name, { - - physical = false, - visual = def.visual, - visual_size = def.visual_size, - textures = def.textures, - velocity = def.velocity, - hit_player = def.hit_player, - hit_node = def.hit_node, - hit_mob = def.hit_mob, - hit_object = def.hit_object, - drop = def.drop or false, -- drops arrow as registered item when true - collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows - timer = 0, - switch = 0, - owner_id = def.owner_id, - rotate = def.rotate, - on_punch = function(self) - local vel = self.object:get_velocity() - self.object:set_velocity({x=vel.x * -1, y=vel.y * -1, z=vel.z * -1}) - end, - collisionbox = def.collisionbox or {0, 0, 0, 0, 0, 0}, - automatic_face_movement_dir = def.rotate - and (def.rotate - (pi / 180)) or false, - - on_activate = def.on_activate, - - on_step = def.on_step or function(self, dtime) - - self.timer = self.timer + 1 - - local pos = self.object:get_pos() - - if self.switch == 0 - or self.timer > 150 - or not within_limits(pos, 0) then - mcl_burning.extinguish(self.object) - self.object:remove(); - - return - end - - -- does arrow have a tail (fireball) - if def.tail - and def.tail == 1 - and def.tail_texture then - - minetest.add_particle({ - pos = pos, - velocity = {x = 0, y = 0, z = 0}, - acceleration = {x = 0, y = 0, z = 0}, - expirationtime = def.expire or 0.25, - collisiondetection = false, - texture = def.tail_texture, - size = def.tail_size or 5, - glow = def.glow or 0, - }) - end - - if self.hit_node then - - local node = node_ok(pos).name - - if minetest.registered_nodes[node].walkable then - - self.hit_node(self, pos, node) - - if self.drop == true then - - pos.y = pos.y + 1 - - self.lastpos = (self.lastpos or pos) - - minetest.add_item(self.lastpos, self.object:get_luaentity().name) - end - - self.object:remove(); - - return - end - end - - if self.hit_player or self.hit_mob or self.hit_object then - - for _,player in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do - - if self.hit_player - and player:is_player() then - - self.hit_player(self, player) - self.object:remove(); - return - end - - local entity = player:get_luaentity() - - if entity - and self.hit_mob - and entity.is_mob == true - and tostring(player) ~= self.owner_id - and entity.name ~= self.object:get_luaentity().name then - self.hit_mob(self, player) - self.object:remove(); - return - end - - if entity - and self.hit_object - and (not entity.is_mob) - and tostring(player) ~= self.owner_id - and entity.name ~= self.object:get_luaentity().name then - self.hit_object(self, player) - self.object:remove(); - return - end - end - end - - self.lastpos = pos - end - }) -end - - --- no damage to nodes explosion -function mcl_mobs:safe_boom(self, pos, strength) - minetest.sound_play(self.sounds and self.sounds.explode or "tnt_explode", { - pos = pos, - gain = 1.0, - max_hear_distance = self.sounds and self.sounds.distance or 32 - }, true) - local radius = strength - entity_physics(pos, radius) - effect(pos, 32, "mcl_particles_smoke.png", radius * 3, radius * 5, radius, 1, 0) -end - - --- make explosion with protection and tnt mod check -function mcl_mobs:boom(self, pos, strength, fire) - if mobs_griefing and not minetest.is_protected(pos, "") then - mcl_explosions.explode(pos, strength, { drop_chance = 1.0, fire = fire }, self.object) - else - mcl_mobs:safe_boom(self, pos, strength) - end - - -- delete the object after it punched the player to avoid nil entities in e.g. mcl_shields!! - self.object:remove() -end - - --- Register spawn eggs - --- Note: This also introduces the “spawn_egg” group: --- * spawn_egg=1: Spawn egg (generic mob, no metadata) --- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata) -function mcl_mobs:register_egg(mob, desc, background, addegg, no_creative) - - local grp = {spawn_egg = 1} - - -- do NOT add this egg to creative inventory (e.g. dungeon master) - if no_creative == true then - grp.not_in_creative_inventory = 1 - end - - local invimg = background - - if addegg == 1 then - invimg = "mobs_chicken_egg.png^(" .. invimg .. - "^[mask:mobs_chicken_egg_overlay.png)" - end - - -- register old stackable mob egg - minetest.register_craftitem(mob, { - - description = desc, - inventory_image = invimg, - groups = grp, - - _doc_items_longdesc = S("This allows you to place a single mob."), - _doc_items_usagehelp = S("Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns."), - - on_place = function(itemstack, placer, pointed_thing) - - local pos = pointed_thing.above - - -- am I clicking on something with existing on_rightclick function? - local under = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[under.name] - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, under, placer, itemstack) - end - - if pos - and within_limits(pos, 0) - and not minetest.is_protected(pos, placer:get_player_name()) then - - local name = placer:get_player_name() - local privs = minetest.get_player_privs(name) - if under.name == "mcl_mobspawners:spawner" then - if minetest.is_protected(pointed_thing.under, name) then - minetest.record_protection_violation(pointed_thing.under, name) - return itemstack - end - if not privs.maphack then - minetest.chat_send_player(name, S("You need the “maphack” privilege to change the mob spawner.")) - return itemstack - end - mcl_mobspawners.setup_spawner(pointed_thing.under, itemstack:get_name()) - if not minetest.is_creative_enabled(name) then - itemstack:take_item() - end - return itemstack - end - - if not minetest.registered_entities[mob] then - return itemstack - end - - if minetest.settings:get_bool("only_peaceful_mobs", false) - and minetest.registered_entities[mob].type == "monster" then - minetest.chat_send_player(name, S("Only peaceful mobs allowed!")) - return itemstack - end - - pos.y = pos.y - 0.5 - - local mob = minetest.add_entity(pos, mob) - minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) - local ent = mob:get_luaentity() - - -- don't set owner if monster or sneak pressed - if ent.type ~= "monster" - and not placer:get_player_control().sneak then - ent.owner = placer:get_player_name() - ent.tamed = true - end - - -- set nametag - local nametag = itemstack:get_meta():get_string("name") - if nametag ~= "" then - if string.len(nametag) > MAX_MOB_NAME_LENGTH then - nametag = string.sub(nametag, 1, MAX_MOB_NAME_LENGTH) - end - ent.nametag = nametag - update_tag(ent) - end - - -- if not in creative then take item - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - end - - return itemstack - end, - }) - -end - - --- No-op in MCL2 (capturing mobs is not possible). --- Provided for compability with Mobs Redo -function mcl_mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith) - return false -end - - --- No-op in MCL2 (protecting mobs is not possible). -function mcl_mobs:protect(self, clicker) - return false -end - - --- feeding, taming and breeding (thanks blert2112) -function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame) - if not self.follow then - return false - end - - -- can eat/tame with item in hand - if self.nofollow or follow_holding(self, clicker) then - - -- if not in creative then take item - if not minetest.is_creative_enabled(clicker:get_player_name()) then - - local item = clicker:get_wielded_item() - - item:take_item() - - clicker:set_wielded_item(item) - end - - mob_sound(self, "eat", nil, true) - - -- increase health - self.health = self.health + 4 - - if self.health >= self.hp_max then - - self.health = self.hp_max - - if self.htimer < 1 then - self.htimer = 5 - end - end - - self.object:set_hp(self.health) - - update_tag(self) - - -- make children grow quicker - if self.child == true then - - -- deduct 10% of the time to adulthood - self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) - - return true - end - - -- feed and tame - self.food = (self.food or 0) + 1 - if self.food >= feed_count then - - self.food = 0 - - if breed and self.hornytimer == 0 then - self.horny = true - end - - if tame then - - self.tamed = true - - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - end - end - - -- make sound when fed so many times - mob_sound(self, "random", true) - end - - return true - end - - return false -end - --- Spawn a child -function mcl_mobs:spawn_child(pos, mob_type) - local child = minetest.add_entity(pos, mob_type) - if not child then - return - end - - local ent = child:get_luaentity() - effect(pos, 15, "mcl_particles_smoke.png", 1, 2, 2, 15, 5) - - ent.child = true - - local textures - -- using specific child texture (if found) - if ent.child_texture then - textures = ent.child_texture[1] - end - - -- and resize to half height - child:set_properties({ - textures = textures, - visual_size = { - x = ent.base_size.x * .5, - y = ent.base_size.y * .5, - }, - collisionbox = { - ent.base_colbox[1] * .5, - ent.base_colbox[2] * .5, - ent.base_colbox[3] * .5, - ent.base_colbox[4] * .5, - ent.base_colbox[5] * .5, - ent.base_colbox[6] * .5, - }, - selectionbox = { - ent.base_selbox[1] * .5, - ent.base_selbox[2] * .5, - ent.base_selbox[3] * .5, - ent.base_selbox[4] * .5, - ent.base_selbox[5] * .5, - ent.base_selbox[6] * .5, - }, - }) - - return child -end - - --- compatibility function for old entities to new modpack entities -function mcl_mobs:alias_mob(old_name, new_name) - - -- spawn egg - minetest.register_alias(old_name, new_name) - - -- entity - minetest.register_entity(":" .. old_name, { - - physical = false, - - on_step = function(self) - - if minetest.registered_entities[new_name] then - minetest.add_entity(self.object:get_pos(), new_name) - end - - self.object:remove() - end - }) - -end - - -local timer = 0 -minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < 1 then return end - for _, player in pairs(minetest.get_connected_players()) do - local pos = player:get_pos() - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 47)) do - local lua = obj:get_luaentity() - if lua and lua.is_mob then - lua.lifetimer = math.max(20, lua.lifetimer) - lua.despawn_immediately = false - end - end - end - timer = 0 -end) diff --git a/mods/ENTITIES/mcl_mobs/api.txt b/mods/ENTITIES/mcl_mobs/api.txt deleted file mode 100644 index b9b6613b6..000000000 --- a/mods/ENTITIES/mcl_mobs/api.txt +++ /dev/null @@ -1,796 +0,0 @@ - -Mobs Redo: MineClone 2 Edition -API documentation -============================== - -Welcome to the world of mobs in Minetest and hopefully an easy guide to defining -your own mobs and having them appear in your worlds. - - -Registering Mobs ----------------- - -To register a mob and have it ready for use requires the following function: - - mobs:register_mob(name, definition) - -The 'name' of a mob usually starts with the mod name it's running from followed -by it's own name e.g. - - "mobs_monster:sand_monster" or "mymod:totally_awesome_beast" - -... and the 'definition' is a table which holds all of the settings and -functions needed for the mob to work properly which contains the following: - - 'nametag' contains the name which is shown above mob. - 'type' holds the type of mob that inhabits your world e.g. - "animal" usually docile and walking around. - "monster" attacks player or npc on sight. - "npc" walk around and will defend themselves if hit first, they - kill monsters. - 'hp_min' the minimum health value the mob can spawn with. - 'hp_max' the maximum health value the mob can spawn with. - 'breath_max' The maximum breath value the mob can spawn with and can have. - If -1 (default), mob does not take drowning damage. - 'breathes_in_water' If true, mob loses breath when not in water. Otherwise, - mob loses breath when inside a node with `drowning` attribute - set (default: false). - 'armor' entity armor groups (see lua_api.txt). If table, a list of - armor groups like for entities. If number, set value of - 'fleshy' armor group only. - Note: The 'immortal=1' armor group will automatically be added - since this mod handles health and damage manually. - Default: 100 (mob will take full dmg from 'fleshy' hits) - 'passive' when true allows animals to defend themselves when hit, - otherwise they amble onwards. - 'walk_velocity' is the speed that your mob can walk around. - 'run_velocity'is the speed your mob can run with, usually when attacking. - 'walk_chance' has a 0-100 chance value your mob will walk from standing, - set to 0 for jumping mobs only. - 'jump' when true allows your mob to jump updwards. - 'jump_height' holds the height your mob can jump, 0 to disable jumping. - 'stepheight' height of a block that your mob can easily walk up onto, - defaults to 0.6. - 'fly' when true allows your mob to fly around instead of walking. - 'fly_in' holds the node name or a table of node names in which the - mob flies (or swims) around in. The special name - '__airlike' stands for all nodes with 'walkable=false' - that are not liquids - 'runaway' if true causes animals to turn and run away when hit. - 'view_range' how many nodes in distance the mob can see a player. - 'damage' how many health points the mob does to a player or another - mob when melee attacking. - 'knock_back' when true has mobs falling backwards when hit, the greater - the damage the more they move back. - 'fear_height' is how high a cliff or edge has to be before the mob stops - walking, 0 to turn off height fear. - 'fall_speed' has the maximum speed the mob can fall at, default is -10. - 'fall_damage' when true causes falling to inflict damage. - 'water_damage'holds the damage per second infliced to mobs when standing in - water (default: 0). - 'lava_damage' holds the damage per second inflicted to mobs when standing - in lava (default: 8). - 'fire_damage' holds the damage per second inflicted to mobs when standing - in fire (default: 1). - 'light_damage'holds the damage per second inflicted to mobs when it's too - bright (above 13 light). - 'suffocation' when true causes mobs to suffocate inside solid blocks (2 damage per second). - 'floats' when set to 1 mob will float in water, 0 has them sink. - 'follow' mobs follow player when holding any of the items which appear - on this table, the same items can be fed to a mob to tame or - breed e.g. {"farming:wheat", "default:apple"} - - 'reach' is how far the mob can attack player when standing - nearby, default is 3 nodes. - 'docile_by_day' when true has mobs wandering around during daylight - hours and only attacking player at night or when - provoked. - 'attacks_monsters' when true has npc's attacking monsters or not. - 'attack_animals' when true will have monsters attacking animals. - 'owner_loyal' when true will have tamed mobs attack anything player - punches when nearby. - 'group_attack' when true has same mob type grouping together to attack - offender. - [MCL2 extension:] When a table, this is a list of - mob types that will get alerted as well (besides same mob type) - 'attack_type' tells the api what a mob does when attacking the player - or another mob: - 'dogfight' is a melee attack when player is within mob reach. - 'shoot' has mob shoot pre-defined arrows at player when inside - view_range. - 'dogshoot' has melee attack when inside reach and shoot attack - when inside view_range. - 'explode' causes mob to stop and explode when inside reach. - 'explosion_radius' the radius of explosion node destruction, - defaults to 1 - 'explosion_damage_radius' the radius of explosion entity & player damage, - defaults to explosion_radius * 2 - 'explosion_timer' number of seconds before mob explodes while its target - is still inside reach or explosion_damage_radius, - defaults to 3. - 'explosiontimer_reset_radius' The distance you must travel before the timer will be reset. - 'allow_fuse_reset' Allow 'explode' attack_type to reset fuse and resume - chasing if target leaves the blast radius or line of - sight. Defaults to true. - 'stop_to_explode' When set to true (default), mob must stop and wait for - explosion_timer in order to explode. If false, mob will - continue chasing. - 'arrow' holds the pre-defined arrow object to shoot when - attacking. - 'dogshoot_switch' allows switching between attack types by using timers - (1 for shoot, 2 for dogfight) - 'dogshoot_count_max'contains how many seconds before switching from - dogfight to shoot. - 'dogshoot_count2_max' contains how many seconds before switching from shoot - to dogfight. - 'shoot_interval' has the number of seconds between shots. - 'shoot_offset' holds the y position added as to where the - arrow/fireball appears on mob. - 'specific_attack' has a table of entity names that mob can also attack - e.g. {"player", "mobs_animal:chicken"}. - 'runaway_from' contains a table with mob names to run away from, add - "player" to list to runaway from player also. - 'pathfinding' set to 1 for mobs to use pathfinder feature to locate - player, set to 2 so they can build/break also (only - works with dogfight attack and when 'mobs_griefing' - in minetest.conf is not false). - 'immune_to' is a table that holds specific damage when being hit by - certain items e.g. - {"default:sword_wood",0} -- causes no damage. - {"default:gold_lump", -10} -- heals by 10 health points. - {"default:coal_block", 20} -- 20 damage when hit on head with coal blocks. - - 'makes_footstep_sound' when true you can hear mobs walking. - 'sounds' this is a table with sounds of the mob - 'distance' maximum distance sounds can be heard, default is 10. - 'base_pitch' base pitch to use adult mobs, default is 1.0 (MCL2 extension) - 'random' played randomly from time to time. - also played for overfeeding animal. - 'eat' played when mob eats something - 'war_cry' what you hear when mob starts to attack player. (currently disabled) - 'attack' what you hear when being attacked. - 'shoot_attack' sound played when mob shoots. - 'damage' sound heard when mob is hurt. - 'death' played when mob is killed. - 'jump' played when mob jumps. There's a built-in cooloff timer to avoid sound spam - 'flop' played when mob flops (like a stranded fish) - 'fuse' sound played when mob explode timer starts. - 'explode' sound played when mob explodes. - - Note: For all sounds except fuse and explode, the pitch is slightly randomized from the base pitch - The pitch of children is 50% higher. - - 'drops' table of items that are dropped when mob is killed, fields are: - 'name' name of item to drop. - 'chance' chance of drop, 1 for always, 2 for 1-in-2 chance etc. - 'min' minimum number of items dropped. - 'max' maximum number of items dropped. - - 'visual' holds the look of the mob you wish to create: - 'cube' looks like a normal node - 'sprite' sprite which looks same from all angles. - 'upright_sprite' flat model standing upright. - 'wielditem' how it looks when player holds it in hand. - 'mesh' uses separate object file to define mob. - 'visual_size' has the size of the mob, defaults to {x = 1, y = 1} - 'collisionbox' has the box in which mob can be interacted with the - world e.g. {-0.5, -0.5, -0.5, 0.5, 0.8, 0.5}. - NOTE: Due to a workaround, the upper Y coordinate will be forced - to a minimum value of 0.79. - 'selectionbox' has the box in which player can interact with mob - 'textures' holds a table list of textures to be used for mob, or you - could use multiple lists inside another table for random - selection e.g. { {"texture1.png"}, {"texture2.png"} } - 'child_texture' holds the texture table for when baby mobs are used. - 'gotten_texture' holds the texture table for when self.gotten value is - true, used for milking cows or shearing sheep. - 'mesh' holds the name of the external object used for mob model - e.g. "mobs_cow.b3d" - 'gotten_mesh" holds the name of the external object used for when - self.gotten is true for mobs. - 'rotate' custom model rotation, 0 = front, 90 = side, 180 = back, - 270 = other side. - 'double_melee_attack' when true has the api choose between 'punch' and - 'punch2' animations. - - 'animation' holds a table containing animation names and settings for use with mesh models: - { - 'stand_start'start frame for when mob stands still. - 'stand_end' end frame of stand animation. - 'stand_speed'speed of animation in frames per second. - 'walk_start' when mob is walking around. - 'walk_end' - 'walk_speed' - 'run_start' when a mob runs or attacks. - 'run_end' - 'run_speed' - 'fly_start' when a mob is flying. - 'fly_end' - 'fly_speed' - 'punch_start'when a mob melee attacks. - 'punch_end' - 'punch_speed' - 'punch2_start' alternative melee attack animation. - 'punch2_end' - 'punch2_speed' - 'shoot_start'shooting animation. - 'shoot_end' - 'shoot_speed' - 'die_start' death animation - 'die_end' - 'die_speed' - 'die_loop' when set to false stops the animation looping. - } - - Using '_loop = false' setting will stop any of the above animations from - looping. - - 'speed_normal' is used for animation speed for compatibility with some - older mobs. - 'pushable' Allows players, & other mobs to push the mob. - - - - MineClone 2 extensions: - - 'spawn_class' Classification of mod for the spawning algorithm: - "hostile", "passive", "ambient" or "water" - 'ignores_nametag' if true, mob cannot be named by nametag - 'rain_damage' damage per second if mob is standing in rain (default: 0) - 'sunlight_damage' holds the damage per second inflicted to mobs when they - are in direct sunlight - 'spawn_small_alternative' name of a smaller mob to use as replacement if - spawning fails due to space requirements - 'glow' same as in entity definition - 'child' if true, spawn mob as child - 'shoot_arrow(self, pos, dir)' function that is called when mob wants to shoot an arrow. - You can spawn your own arrow here. pos is mob position, - dir is mob's aiming direction - 'sounds_child' same as sounds, but for childs. If not defined, childs will use same - sound as adults but with higher pitch - 'follow_velocity' The speed at which a mob moves toward the player when they're holding the appropriate follow item. - 'instant_death' If true, mob dies instantly (no death animation or delay) (default: false) - 'xp_min' the minimum XP it drops on death (default: 0) - 'xp_max' the maximum XP it drops on death (default: 0) - 'fire_resistant' If true, the mob can't burn - 'fire_damage_resistant' If true the mob will not take damage when burning - 'ignited_by_sunlight' If true the mod will burn at daytime. (Takes sunlight_damage per second) - 'nofollow' Do not follow players when they wield the "follow" item. For mobs (like villagers) - that are bred in a different way. - 'pick_up' table of itemstrings the mob will pick up (e.g. for breeding) - 'on_pick_up' function that will be called on item pickup - return true to not pickup the item - - mobs:gopath(self,target,callback_arrived) pathfind a way to target and run callback on arrival - - - -Node Replacement ----------------- - -Mobs can look around for specific nodes as they walk and replace them to mimic -eating. - - 'replace_what' group of items to replace e.g. - {"farming:wheat_8", "farming:carrot_8"} - or you can use the specific options of what, with and - y offset by using this instead: - { - {"group:grass", "air", 0}, - {"default:dirt_with_grass", "default:dirt", -1} - } - 'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg" - 'replace_rate' how random should the replace rate be (typically 10) - 'replace_offset' +/- value to check specific node to replace - - 'on_replace(self, pos, oldnode, newnode)' - is called when mob is about to replace a node. Also called - when not actually replacing due to mobs_griefing setting being false. - 'self' ObjectRef of mob - 'pos' Position of node to replace - 'oldnode' Current node - 'newnode' What the node will become after replacing - - If false is returned, the mob will not replace the node. - - By default, replacing sets self.gotten to true and resets the object - properties. - - -Custom Definition Functions ---------------------------- - -Along with the above mob registry settings we can also use custom functions to -enhance mob functionality and have them do many interesting things: - - 'on_die' a function that is called when the mob is killed; the - parameters are (self, pos). Return true to skip the builtin - death animation and death effects - 'on_rightclick'its same as in minetest.register_entity() - 'on_blast' is called when an explosion happens near mob when using TNT - functions, parameters are (object, damage) and returns - (do_damage, do_knockback, drops) - 'on_spawn' is a custom function that runs on mob spawn with 'self' as - variable, return true at end of function to run only once. - 'after_activate' is a custom function that runs once mob has been activated - with these paramaters (self, staticdata, def, dtime) - 'on_breed' called when two similar mobs breed, paramaters are - (parent1, parent2) objects, return false to stop child from - being resized and owner/tamed flags and child textures being - applied.Function itself must spawn new child mob. - 'on_grown' is called when a child mob has grown up, only paramater is - (self). - 'do_punch' called when mob is punched with paramaters (self, hitter, - time_from_last_punch, tool_capabilities, direction), return - false to stop punch damage and knockback from taking place. - 'custom_attack'when set this function is called instead of the normal mob - melee attack, parameters are (self, to_attack). - 'on_die' a function that is called when mob is killed (self, pos) - 'do_custom' a custom function that is called every tick while mob is - active and which has access to all of the self.* variables - e.g. (self.health for health or self.standing_in for node - status), return with 'false' to skip remainder of mob API. - - -Internal Variables ------------------- - -The mob api also has some preset variables and functions that it will remember -for each mob. - - 'self.health' contains current health of mob (cannot exceed - self.hp_max) - 'self.breath' contains current breath of mob, if mob takes drowning - damage at all (cannot exceed self.breath_max). Breath - decreases by 1 each second while in a node with drowning - damage and increases by 1 each second otherwise. - 'self.texture_list'contains list of all mob textures - 'self.child_texture' contains mob child texture when growing up - 'self.base_texture'contains current skin texture which was randomly - selected from textures list - 'self.gotten' this is used to track whether some special item has been - gotten from the mob, for example, wool from sheep. - Initialized as false, and the mob must set this value - manually. - 'self.horny' when animal fed enough it is set to true and animal can - breed with same animal - 'self.hornytimer' background timer that controls breeding functions and - mob childhood timings - 'self.child' used for when breeding animals have child, will use - child_texture and be half size - 'self.owner' string used to set owner of npc mobs, typically used for - dogs - 'self.order' set to "follow" or "stand" so that npc will follow owner - or stand it's ground - 'self.state' Current mob state. - "stand": no movement (except turning around) - "walk": walk or move around aimlessly - "attack": chase and attack enemy - "runaway": flee from target - "flop": bounce around aimlessly - (for swimming mobs that have stranded) - "die": during death - 'self.nametag' contains the name of the mob which it can show above - - -Spawning Mobs in World ----------------------- - -mobs:register_spawn(name, nodes, max_light, min_light, chance, - active_object_count, max_height, day_toggle) - -mobs:spawn_specfic(name, nodes, neighbors, min_light, max_light, interval, - chance, active_object_count, min_height, max_height, day_toggle, on_spawn) - -These functions register a spawn algorithm for the mob. Without this function -the call the mobs won't spawn. - - 'name' is the name of the animal/monster - 'nodes' is a list of nodenames on that the animal/monster can - spawn on top of - 'neighbors' is a list of nodenames on that the animal/monster will - spawn beside (default is {"air"} for - mobs:register_spawn) - 'max_light' is the maximum of light - 'min_light' is the minimum of light - 'interval' is same as in register_abm() (default is 30 for - mobs:register_spawn) - 'chance' is same as in register_abm() - 'active_object_count' number of this type of mob to spawn at one time inside - map area - 'min_height' is the minimum height the mob can spawn - 'max_height' is the maximum height the mob can spawn - 'day_toggle' true for day spawning, false for night or nil for - anytime - 'on_spawn' is a custom function which runs after mob has spawned - and gives self and pos values. - -A simpler way to handle mob spawns has been added with the mobs:spawn(def) -command which uses above names to make settings clearer: - - mobs:spawn({name = "mobs_monster:tree_monster", - nodes = {"group:leaves"}, - max_light = 7, - }) - - -For each mob that spawns with this function is a field in mobs.spawning_mobs. -It tells if the mob should spawn or not.Default is true.So other mods can -only use the API of this mod by disabling the spawning of the default mobs in -this mod. - - -mobs:spawn_abm_check(pos, node, name) - -This global function can be changed to contain additional checks for mobs to -spawn e.g. mobs that spawn only in specific areas and the like.By returning -true the mob will not spawn. - - 'pos' holds the position of the spawning mob - 'node' contains the node the mob is spawning on top of - 'name' is the name of the animal/monster - - -MineClone 2 extensions ----------------------- - -mobs:spawn_child(pos, mob_type) - -This function spawns a mob as a child. The parameter mob_type is the -entitystring of the new mob. -This function returns the mob on success and nil otherwise. - -mobs:death_effect(pos, collisionbox) - -Create death particles at pos with the given collisionbox. - - -Making Arrows -------------- - -mobs:register_arrow(name, definition) - -This function registers a arrow for mobs with the attack type shoot. - - 'name' is the name of the arrow - 'definition' is a table with the following values: - 'visual' same is in minetest.register_entity() - 'visual_size'same is in minetest.register_entity() - 'textures' same is in minetest.register_entity() - 'velocity' the velocity of the arrow - 'drop' if set to true any arrows hitting a node will drop as item - 'hit_player' a function that is called when the arrow hits a player; - this function should hurt the player, the parameters are - (self, player) - 'hit_mob' a function that is called when the arrow hits a mob; - this function should hurt the mob, the parameters are - (self, mob) - 'hit_object' a function that is called when the arrow hits an object - that is neither a player nor a mob. this function should - hurt the object, the parameters are (self, object) - 'hit_node' a function that is called when the arrow hits a node, the - parameters are (self, pos, node) - 'tail' when set to 1 adds a trail or tail to mob arrows - 'tail_texture' texture string used for above effect - 'tail_size' has size for above texture (defaults to between 5 and 10) - 'expire' contains float value for how long tail appears for - (defaults to 0.25) - 'glow' has value for how brightly tail glows 1 to 10 (default is - 0 for no glow) - 'rotate' integer value in degrees to rotate arrow - 'on_step' is a custom function when arrow is active, nil for - default. - - -Spawn Eggs ----------- - -mobs:register_egg(name, description, background, addegg, no_creative) - -This function registers a spawn egg which can be used by admin to properly spawn in a mob. - - 'name' this is the name of your new mob to spawn e.g. "mob:sheep" - 'description' the name of the new egg you are creating e.g. "Spawn Sheep" - 'background'the texture displayed for the egg in inventory - 'addegg' would you like an egg image in front of your texture (1 = yes, - 0 = no) - 'no_creative' when set to true this stops spawn egg appearing in creative - mode for destructive mobs like Dungeon Masters. - - -Explosion Function ------------------- - -mobs:boom(self, pos, radius) - 'self' mob entity - 'pos' centre position of explosion - 'radius' radius of explosion (typically set to 3) - -This function generates an explosion which removes nodes in a specific radius -and damages any entity caught inside the blast radius.Protection will limit -node destruction but not entity damage. - - -mobs:capture_mob ----------------- - -mobs:capture_mob(...) - -Does nothing and returns false. - -This function is provided for compability with Mobs Redo for an attempt to -capture a mob. -Mobs cannot be captured in MineClone 2. - -In Mobs Redo, this is generally called inside the on_rightclick section of the mob -api code, it provides a chance of capturing the mob. See Mobs Redo documentation -of parameters. - -Feeding and Taming/Breeding ---------------------------- - -mobs:feed_tame(self, clicker, feed_count, breed, tame) - -This function allows the mob to be fed the item inside self.follow be it apple, -wheat or whatever a set number of times and be tamed or bred as a result. -Will return true when mob is fed with item it likes. - - 'self' mob information - 'clicker' player information - 'feed_count' number of times mob must be fed to tame or breed - 'breed' true or false stating if mob can be bred and a child created - afterwards - 'tame' true or false stating if mob can be tamed so player can pick - them up - - -Protecting Mobs ---------------- - -mobs:protect(self, clicker) - -This function can be used to right-click any tamed mob with mobs:protector item, -this will protect the mob from harm inside of a protected area from other -players.Will return true when mob right-clicked with mobs:protector item. - - 'self' mob information - 'clicker' player information - - -Riding Mobs ------------ - -Mobs can now be ridden by players and the following shows its functions and -usage: - - -mobs:attach(self, player) - -This function attaches a player to the mob so it can be ridden. - - 'self' mob information - 'player' player information - - -mobs:detach(player, offset) - -This function will detach the player currently riding a mob to an offset -position. - - 'player' player information - 'offset' position table containing offset values - - -mobs:drive(self, move_animation, stand_animation, can_fly, dtime) - -This function allows an attached player to move the mob around and animate it at -same time. - - 'self' mob information - 'move_animation'string containing movement animation e.g. "walk" - 'stand_animation' string containing standing animation e.g. "stand" - 'can_fly' if true then jump and sneak controls will allow mob to fly - up and down - 'dtime' tick time used inside drive function - - -mobs:fly(self, dtime, speed, can_shoot, arrow_entity, move_animation, stand_animation) - -This function allows an attached player to fly the mob around using directional -controls. - - 'self' mob information - 'dtime' tick time used inside fly function - 'speed' speed of flight - 'can_shoot' true if mob can fire arrow (sneak and left mouse button - fires) - 'arrow_entity' name of arrow entity used for firing - 'move_animation'string containing name of pre-defined animation e.g. "walk" - or "fly" etc. - 'stand_animation' string containing name of pre-defined animation e.g. - "stand" or "blink" etc. - -Note: animation names above are from the pre-defined animation lists inside mob -registry without extensions. - - -mobs:set_animation(self, name) - -This function sets the current animation for mob, defaulting to "stand" if not -found. - - 'self' mob information - 'name' name of animation - - -Certain variables need to be set before using the above functions: - - 'self.v2' toggle switch used to define below values for the - first time - 'self.max_speed_forward' max speed mob can move forward - 'self.max_speed_reverse' max speed mob can move backwards - 'self.accel' acceleration speed - 'self.terrain_type' integer containing terrain mob can walk on - (1 = water, 2 or 3 = land) - 'self.driver_attach_at'position offset for attaching player to mob - 'self.driver_eye_offset' position offset for attached player view - 'self.driver_scale' sets driver scale for mobs larger than {x=1, y=1} - - -External Settings for "minetest.conf" ------------------------------------- - - 'enable_damage' if true monsters will attack players (default is true) - 'only_peaceful_mobs' if true only animals will spawn in game (default is - false) - 'mobs_disable_blood' if false, damage effects appear when mob is hit (default - is false) - 'mobs_spawn_protected' if set to false then mobs will not spawn in protected - areas (default is true) - 'mob_difficulty' sets difficulty level (health and hit damage - multiplied by this number), defaults to 1.0. - 'mob_spawn_chance' multiplies chance of all mobs spawning and can be set - to 0.5 to have mobs spawn more or 2.0 to spawn less. - e.g.1 in 7000 * 0.5 = 1 in 3500 so better odds of - spawning. - 'mobs_spawn' if false then mobs no longer spawn without spawner or - spawn egg. - 'mobs_drop_items' when false mobs no longer drop items when they die. - 'mobs_griefing' when false mobs cannot break blocks when using either - pathfinding level 2, replace functions or mobs:boom - function. - -Players can override the spawn chance for each mob registered by adding a line -to their minetest.conf file with a new value, the lower the value the more each -mob will spawn e.g. - -mobs_animal:sheep_chance 11000 -mobs_monster:sand_monster_chance 100 - - -Rideable Horse Example Mob --------------------------- - -mobs:register_mob("mob_horse:horse", { - type = "animal", - visual = "mesh", - visual_size = {x = 1.20, y = 1.20}, - mesh = "mobs_horse.x", - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4}, - animation = { - speed_normal = 15, - speed_run = 30, - stand_start = 25, - stand_end = 75, - walk_start = 75, - walk_end = 100, - run_start = 75, - run_end = 100, - }, - textures = { - {"mobs_horse.png"}, - {"mobs_horsepeg.png"}, - {"mobs_horseara.png"} - }, - fear_height = 3, - runaway = true, - fly = false, - walk_chance = 60, - view_range = 5, - follow = {"farming:wheat"}, - passive = true, - hp_min = 12, - hp_max = 16, - armor = 200, - lava_damage = 5, - fall_damage = 5, - water_damage = 1, - makes_footstep_sound = true, - drops = { - {name = "mobs:meat_raw", chance = 1, min = 2, max = 3} - }, - sounds = { - random = "horse_neigh.ogg", - damage = "horse_whinney.ogg", - }, - - do_custom = function(self, dtime) - - -- set needed values if not already present - if not self.v2 then - self.v2 = 0 - self.max_speed_forward = 6 - self.max_speed_reverse = 2 - self.accel = 6 - self.terrain_type = 3 - self.driver_attach_at = {x = 0, y = 20, z = -2} - self.driver_eye_offset = {x = 0, y = 3, z = 0} - self.driver_scale = {x = 1, y = 1} - end - - -- if driver present allow control of horse - if self.driver then - - mobs.drive(self, "walk", "stand", false, dtime) - - return false -- skip rest of mob functions - end - - return true - end, - - on_die = function(self, pos) - - -- drop saddle when horse is killed while riding - -- also detach from horse properly - if self.driver then - minetest.add_item(pos, "mobs:saddle") - mobs.detach(self.driver, {x = 1, y = 0, z = 1}) - end - - end, - - on_rightclick = function(self, clicker) - - -- make sure player is clicking - if not clicker or not clicker:is_player() then - return - end - - -- feed, tame or heal horse - if mobs:feed_tame(self, clicker, 10, true, true) then - return - end - - -- make sure tamed horse is being clicked by owner only - if self.tamed and self.owner == clicker:get_player_name() then - - local inv = clicker:get_inventory() - - -- detatch player already riding horse - if self.driver and clicker == self.driver then - - mobs.detach(clicker, {x = 1, y = 0, z = 1}) - - -- add saddle back to inventory - if inv:room_for_item("main", "mobs:saddle") then - inv:add_item("main", "mobs:saddle") - else - minetest.add_item(clicker.get_pos(), "mobs:saddle") - end - - -- attach player to horse - elseif not self.driver - and clicker:get_wielded_item():get_name() == "mobs:saddle" then - - self.object:set_properties({stepheight = 1.1}) - mobs.attach(self, clicker) - - -- take saddle from inventory - inv:remove_item("main", "mobs:saddle") - end - end - - -- used to capture horse with magic lasso - mobs:capture_mob(self, clicker, 0, 0, 80, false, nil) - end -}) diff --git a/mods/ENTITIES/mcl_mobs/crafts.lua b/mods/ENTITIES/mcl_mobs/crafts.lua deleted file mode 100644 index e8a5b60fc..000000000 --- a/mods/ENTITIES/mcl_mobs/crafts.lua +++ /dev/null @@ -1,16 +0,0 @@ - -local S = minetest.get_translator("mcl_mobs") - --- name tag -minetest.register_craftitem("mcl_mobs:nametag", { - description = S("Name Tag"), - _tt_help = S("Give names to mobs").."\n"..S("Set name at anvil"), - _doc_items_longdesc = S("A name tag is an item to name a mob."), - _doc_items_usagehelp = S("Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag."), - inventory_image = "mobs_nametag.png", - wield_image = "mobs_nametag.png", - stack_max = 64, - groups = { tool=1 }, -}) - -minetest.register_alias("mobs:nametag", "mcl_mobs:nametag") diff --git a/mods/ENTITIES/mcl_mobs/init.lua b/mods/ENTITIES/mcl_mobs/init.lua deleted file mode 100644 index 69246b470..000000000 --- a/mods/ENTITIES/mcl_mobs/init.lua +++ /dev/null @@ -1,14 +0,0 @@ - -local path = minetest.get_modpath(minetest.get_current_modname()) - --- Mob API -dofile(path .. "/api.lua") - --- Spawning Algorithm -dofile(path .. "/spawning.lua") - --- Rideable Mobs -dofile(path .. "/mount.lua") - --- Mob Items -dofile(path .. "/crafts.lua") \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/license.txt b/mods/ENTITIES/mcl_mobs/license.txt deleted file mode 100644 index fec6f6aa5..000000000 --- a/mods/ENTITIES/mcl_mobs/license.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 TenPlus1 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.de.tr b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.de.tr deleted file mode 100644 index 3b1a310bf..000000000 --- a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_mobs -Peaceful mode active! No monsters will spawn.=Friedlicher Modus aktiv! Es werden keine Monster auftauchen. -This allows you to place a single mob.=Damit kann man einen Mob platzieren. -Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Platzieren Sie dies einfach dort, wo der Mob auftauchen soll. Tiere werden zahm erscheinen, außer, wenn Sie beim Platzieren die Schlichtaste drücken. Platzieren Sie dies auf einem Mobspawner, um den Mob im Mobspawner zu wechseln. -You need the “maphack” privilege to change the mob spawner.=Sie brauchen das „maphack“-Privileg, um den Mobspawner ändern zu können. -Name Tag=Namensschild -A name tag is an item to name a mob.=Ein Namensschild ist ein Gegenstand, um einen Mob zu benennen. -Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Bevor Sie ein Namensschild benutzen können, müssen Sie ihn an einem Amboss benennen. Dann können können Sie das Namensschild benutztn, um einen Mob zu benennen. Das wird das Namensschild verbrauchen. -Only peaceful mobs allowed!=Nur friedliche Mobs erlaubt! -Give names to mobs=Benennt Mobs -Set name at anvil=Namen am Amboss setzen diff --git a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.es.tr b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.es.tr deleted file mode 100644 index ef067141f..000000000 --- a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.es.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_mobs -Peaceful mode active! No monsters will spawn.=¡Modo pacífico activo! No aparecerán monstruos. -This allows you to place a single mob.=Esto le permite colocar un solo animal. -Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Simplemente colóquelo donde desea que aparezcan los animales. Los animales aparecerán domesticados, a menos que mantenga presionada la tecla de sigilo mientras coloca. Si coloca esto en un engendrador de animales, cambia el animal que genera. -You need the “maphack” privilege to change the mob spawner.=Necesita el privilegio "maphack" para cambiar el generador de animales. -Name Tag=Etiqueta -A name tag is an item to name a mob.=Una etiqueta es un elemento para nombrar una animal. -Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Antes de usar la etiqueta, debe establecer un nombre en un yunque. Luego puede usar la etiqueta para nombrar un animal. Esto usa la etiqueta. -Only peaceful mobs allowed!=¡Solo se permiten animales pacíficos! diff --git a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.fr.tr b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.fr.tr deleted file mode 100644 index 96ac6a817..000000000 --- a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_mobs -Peaceful mode active! No monsters will spawn.=Mode paisible actif! Aucun monstre n'apparaîtra. -This allows you to place a single mob.=Cela vous permet de placer un seul mob. -Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Placez-le là où vous voulez que le mob apparaisse. Les animaux apparaîtront apprivoisés, sauf si vous maintenez la touche furtive enfoncée pendant le placement. Si vous le placez sur un générateur de mob, vous changez le mob qu'il génère. -You need the “maphack” privilege to change the mob spawner.=Vous avez besoin du privilège "maphack" pour changer le générateur de mob. -Name Tag=Étiquette de nom -A name tag is an item to name a mob.=Une étiquette de nom est un élément pour nommer un mob. -Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Avant d'utiliser l'étiquette de nom, vous devez définir un nom sur une enclume. Ensuite, vous pouvez utiliser l'étiquette de nom pour nommer un mob. Cela utilise l'étiquette de nom. -Only peaceful mobs allowed!=Seuls les mobs pacifiques sont autorisées! -Give names to mobs=Donne des noms aux mobs -Set name at anvil=Définir le nom sur l'enclume diff --git a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.ru.tr b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.ru.tr deleted file mode 100644 index 3fb2eb2f1..000000000 --- a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_mobs -Peaceful mode active! No monsters will spawn.=Мирный режим включён! Монстры не будут появляться. -This allows you to place a single mob.=Позволяет вам разместить одного моба. -Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Просто поместите это туда, где хотите, чтобы появился моб. Животные будут появляться уже прирученные, если это не нужно, удерживайте клавишу [Красться] при размещении. Если поместить это на спаунер, появляющийся из него моб будет изменён. -You need the “maphack” privilege to change the mob spawner.=Вам нужно обладать привилегией “maphack”, чтобы изменить спаунер моба. -Name Tag=Именная бирка -A name tag is an item to name a mob.=Именная бирка это предмет, чтобы дать мобу имя. -Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Прежде чем использовать именную бирку, нужно задать имя на наковальне. Тогда вы сможете использовать бирку, чтобы дать имя мобу. -Only peaceful mobs allowed!=Разрешены только мирные мобы! -Give names to mobs=Даёт имена мобам -Set name at anvil=Задайте имя при помощи наковальни diff --git a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.zh_TW.tr b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.zh_TW.tr deleted file mode 100644 index 90d24fd21..000000000 --- a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.zh_TW.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_mobs -Peaceful mode active! No monsters will spawn.=和平模式已啓用!不會生成怪物。 -This allows you to place a single mob.=允許你放置一個生物。 -Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=把它放在你希望生物出現的地方。除非你在放置的時候按住潛行鍵,否則動物會被馴服地產生。如果你把它放在一個生怪磚上,你就會改變它所產的生物。 -You need the “maphack” privilege to change the mob spawner.=你要「maphack」權限來修改生怪磚。 -Name Tag=命名牌 -A name tag is an item to name a mob.=命名牌是一個用於命名生物的物品 -Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=在使用名字標籤之前,你需要在一個鐵砧上設置一個名字。然後你就可以用名字標籤來給生物命名。這會消耗命名牌。 -Only peaceful mobs allowed!=只允許和平生物! -Give names to mobs=替生物命名 -Set name at anvil=在鐵砧上設置名字 diff --git a/mods/ENTITIES/mcl_mobs/locale/template.txt b/mods/ENTITIES/mcl_mobs/locale/template.txt deleted file mode 100644 index e24974a41..000000000 --- a/mods/ENTITIES/mcl_mobs/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_mobs -Peaceful mode active! No monsters will spawn.= -This allows you to place a single mob.= -Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.= -You need the “maphack” privilege to change the mob spawner.= -Name Tag= -A name tag is an item to name a mob.= -Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.= -Only peaceful mobs allowed!= -Give names to mobs= -Set name at anvil= diff --git a/mods/ENTITIES/mcl_mobs/lucky_block.lua b/mods/ENTITIES/mcl_mobs/lucky_block.lua deleted file mode 100644 index ea90de74a..000000000 --- a/mods/ENTITIES/mcl_mobs/lucky_block.lua +++ /dev/null @@ -1,8 +0,0 @@ - -if minetest.get_modpath("lucky_block") then - - lucky_block:add_blocks({ - {"dro", {"mcl_mobs:nametag"}, 1}, - {"lig"}, - }) -end diff --git a/mods/ENTITIES/mcl_mobs/mod.conf b/mods/ENTITIES/mcl_mobs/mod.conf deleted file mode 100644 index 0d622f6a9..000000000 --- a/mods/ENTITIES/mcl_mobs/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_mobs -author = PilzAdam -description = Adds a mob API for mods to add animals or monsters, etc. -depends = mcl_particles -optional_depends = mcl_weather, mcl_explosions, mcl_hunger, mcl_worlds, invisibility, lucky_block, cmi, doc_identifier, mcl_armor, mcl_portals, mcl_experience diff --git a/mods/ENTITIES/mcl_mobs/mount.lua b/mods/ENTITIES/mcl_mobs/mount.lua deleted file mode 100644 index 3944613a5..000000000 --- a/mods/ENTITIES/mcl_mobs/mount.lua +++ /dev/null @@ -1,448 +0,0 @@ - --- lib_mount by Blert2112 (edited by TenPlus1) - -local enable_crash = false -local crash_threshold = 6.5 -- ignored if enable_crash=false - ------------------------------------------------------------------------------- - --- --- Helper functions --- - -local node_ok = function(pos, fallback) - - fallback = fallback or mcl_mobs.fallback_node - - local node = minetest.get_node_or_nil(pos) - - if node and minetest.registered_nodes[node.name] then - return node - end - - return {name = fallback} -end - - -local function node_is(pos) - - local node = node_ok(pos) - - if node.name == "air" then - return "air" - end - - if minetest.get_item_group(node.name, "lava") ~= 0 then - return "lava" - end - - if minetest.get_item_group(node.name, "liquid") ~= 0 then - return "liquid" - end - - if minetest.registered_nodes[node.name].walkable == true then - return "walkable" - end - - return "other" -end - - -local function get_sign(i) - - i = i or 0 - - if i == 0 then - return 0 - else - return i / math.abs(i) - end -end - - -local function get_velocity(v, yaw, y) - - local x = -math.sin(yaw) * v - local z = math.cos(yaw) * v - - return {x = x, y = y, z = z} -end - - -local function get_v(v) - return math.sqrt(v.x * v.x + v.z * v.z) -end - - -local function force_detach(player) - - local attached_to = player:get_attach() - - if not attached_to then - return - end - - local entity = attached_to:get_luaentity() - - if entity.driver - and entity.driver == player then - - entity.driver = nil - end - - player:set_detach() - mcl_player.player_attached[player:get_player_name()] = false - player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) - mcl_player.player_set_animation(player, "stand" , 30) - player:set_properties({visual_size = {x = 1, y = 1} }) - -end - -------------------------------------------------------------------------------- - - -minetest.register_on_leaveplayer(function(player) - force_detach(player) -end) - -minetest.register_on_shutdown(function() - local players = minetest.get_connected_players() - for i = 1, #players do - force_detach(players[i]) - end -end) - -minetest.register_on_dieplayer(function(player) - force_detach(player) - return true -end) - -------------------------------------------------------------------------------- - -function mcl_mobs.attach(entity, player) - - local attach_at, eye_offset - - entity.player_rotation = entity.player_rotation or {x = 0, y = 0, z = 0} - entity.driver_attach_at = entity.driver_attach_at or {x = 0, y = 0, z = 0} - entity.driver_eye_offset = entity.driver_eye_offset or {x = 0, y = 0, z = 0} - entity.driver_scale = entity.driver_scale or {x = 1, y = 1} - - local rot_view = 0 - - if entity.player_rotation.y == 90 then - rot_view = math.pi/2 - end - - attach_at = entity.driver_attach_at - eye_offset = entity.driver_eye_offset - entity.driver = player - - force_detach(player) - - player:set_attach(entity.object, "", attach_at, entity.player_rotation) - mcl_player.player_attached[player:get_player_name()] = true - player:set_eye_offset(eye_offset, {x = 0, y = 0, z = 0}) - - player:set_properties({ - visual_size = { - x = entity.driver_scale.x, - y = entity.driver_scale.y - } - }) - - minetest.after(0.2, function(name) - local player = minetest.get_player_by_name(name) - if player then - mcl_player.player_set_animation(player, "sit_mount" , 30) - end - end, player:get_player_name()) - - player:set_look_horizontal(entity.object:get_yaw() - rot_view) -end - - -function mcl_mobs.detach(player, offset) - - force_detach(player) - - mcl_player.player_set_animation(player, "stand" , 30) - - --local pos = player:get_pos() - - --pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z} - - player:add_velocity(vector.new(math.random(-6,6),math.random(5,8),math.random(-6,6))) --throw the rider off - - --[[ - minetest.after(0.1, function(name, pos) - local player = minetest.get_player_by_name(name) - if player then - player:set_pos(pos) - end - end, player:get_player_name(), pos) - ]]-- -end - - -function mcl_mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) - - local rot_view = 0 - - if entity.player_rotation.y == 90 then - rot_view = math.pi/2 - end - - local acce_y = 0 - local velo = entity.object:get_velocity() - - entity.v = get_v(velo) * get_sign(entity.v) - - -- process controls - if entity.driver then - - local ctrl = entity.driver:get_player_control() - - -- move forwards - if ctrl.up then - - entity.v = entity.v + entity.accel / 10 - - -- move backwards - elseif ctrl.down then - - if entity.max_speed_reverse == 0 and entity.v == 0 then - return - end - - entity.v = entity.v - entity.accel / 10 - end - - -- fix mob rotation - entity.object:set_yaw(entity.driver:get_look_horizontal() - entity.rotate) - - if can_fly then - - -- fly up - if ctrl.jump then - velo.y = velo.y + 1 - if velo.y > entity.accel then velo.y = entity.accel end - - elseif velo.y > 0 then - velo.y = velo.y - 0.1 - if velo.y < 0 then velo.y = 0 end - end - - -- fly down - if ctrl.sneak then - velo.y = velo.y - 1 - if velo.y < -entity.accel then velo.y = -entity.accel end - - elseif velo.y < 0 then - velo.y = velo.y + 0.1 - if velo.y > 0 then velo.y = 0 end - end - - else - - -- jump - if ctrl.jump then - - if velo.y == 0 then - velo.y = velo.y + entity.jump_height - acce_y = acce_y + (acce_y * 3) + 1 - end - end - - end - end - - -- if not moving then set animation and return - if entity.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then - - if stand_anim then - mcl_mobs:set_animation(entity, stand_anim) - end - - return - end - - -- set moving animation - if moving_anim then - mcl_mobs:set_animation(entity, moving_anim) - end - - -- Stop! - local s = get_sign(entity.v) - - entity.v = entity.v - 0.02 * s - - if s ~= get_sign(entity.v) then - - entity.object:set_velocity({x = 0, y = 0, z = 0}) - entity.v = 0 - return - end - - -- enforce speed limit forward and reverse - local max_spd = entity.max_speed_reverse - - if get_sign(entity.v) >= 0 then - max_spd = entity.max_speed_forward - end - - if math.abs(entity.v) > max_spd then - entity.v = entity.v - get_sign(entity.v) - end - - -- Set position, velocity and acceleration - local p = entity.object:get_pos() - local new_velo - local new_acce = {x = 0, y = -9.8, z = 0} - - p.y = p.y - 0.5 - - local ni = node_is(p) - local v = entity.v - - if ni == "air" then - - if can_fly == true then - new_acce.y = 0 - end - - elseif ni == "liquid" or ni == "lava" then - - if ni == "lava" and entity.lava_damage ~= 0 then - - entity.lava_counter = (entity.lava_counter or 0) + dtime - - if entity.lava_counter > 1 then - - minetest.sound_play("default_punch", { - object = entity.object, - max_hear_distance = 5 - }, true) - - entity.object:punch(entity.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = entity.lava_damage} - }, nil) - - entity.lava_counter = 0 - end - end - - if entity.terrain_type == 2 - or entity.terrain_type == 3 then - - new_acce.y = 0 - p.y = p.y + 1 - - if node_is(p) == "liquid" then - - if velo.y >= 5 then - velo.y = 5 - elseif velo.y < 0 then - new_acce.y = 20 - else - new_acce.y = 5 - end - else - if math.abs(velo.y) < 1 then - local pos = entity.object:get_pos() - pos.y = math.floor(pos.y) + 0.5 - entity.object:set_pos(pos) - velo.y = 0 - end - end - else - v = v * 0.25 - end - end - - new_velo = get_velocity(v, entity.object:get_yaw() - rot_view, velo.y) - new_acce.y = new_acce.y + acce_y - - entity.object:set_velocity(new_velo) - entity.object:set_acceleration(new_acce) - - -- CRASH! - if enable_crash then - - local intensity = entity.v2 - v - - if intensity >= crash_threshold then - - entity.object:punch(entity.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = intensity} - }, nil) - - end - end - - entity.v2 = v -end - - --- directional flying routine by D00Med (edited by TenPlus1) - -function mcl_mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim) - - local ctrl = entity.driver:get_player_control() - local velo = entity.object:get_velocity() - local dir = entity.driver:get_look_dir() - local yaw = entity.driver:get_look_horizontal() + 1.57 -- offset fix between old and new commands - - if ctrl.up then - entity.object:set_velocity({ - x = dir.x * speed, - y = dir.y * speed + 2, - z = dir.z * speed - }) - - elseif ctrl.down then - entity.object:set_velocity({ - x = -dir.x * speed, - y = dir.y * speed + 2, - z = -dir.z * speed - }) - - elseif not ctrl.down or ctrl.up or ctrl.jump then - entity.object:set_velocity({x = 0, y = -2, z = 0}) - end - - entity.object:set_yaw(yaw + math.pi + math.pi / 2 - entity.rotate) - - -- firing arrows - if ctrl.LMB and ctrl.sneak and shoots then - - local pos = entity.object:get_pos() - local obj = minetest.add_entity({ - x = pos.x + 0 + dir.x * 2.5, - y = pos.y + 1.5 + dir.y, - z = pos.z + 0 + dir.z * 2.5}, arrow) - - local ent = obj:get_luaentity() - if ent then - ent.switch = 1 -- for mob specific arrows - ent.owner_id = tostring(entity.object) -- so arrows dont hurt entity you are riding - local vec = {x = dir.x * 6, y = dir.y * 6, z = dir.z * 6} - local yaw = entity.driver:get_look_horizontal() - obj:set_yaw(yaw + math.pi / 2) - obj:set_velocity(vec) - else - obj:remove() - end - end - - -- change animation if stopped - if velo.x == 0 and velo.y == 0 and velo.z == 0 then - - mcl_mobs:set_animation(entity, stand_anim) - else - -- moving animation - mcl_mobs:set_animation(entity, moving_anim) - end -end diff --git a/mods/ENTITIES/mcl_mobs/readme.MD b/mods/ENTITIES/mcl_mobs/readme.MD deleted file mode 100644 index aa79d909c..000000000 --- a/mods/ENTITIES/mcl_mobs/readme.MD +++ /dev/null @@ -1,74 +0,0 @@ - -Mobs Redo: MineClone 2 Edition - -Based on Mobs Redo from TenPlus1 -Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel, Zeg9, ExeterDad and AspireMint. - - -This mod contains the API only for adding your own mobs into the world, so please use the additional modpacks to add animals, monsters etc. - - -https://forum.minetest.net/viewtopic.php?f=11&t=9917 - ------------- -Credits: - -mcl_mobs_mob_poof.ogg: -- by Planman (license: Creative Commons Zero) -- Source: - ------------- - -Changelog from original Mobs Redo mod: -- 1.41- Mob pathfinding has been updated thanks to Elkien3 -- 1.40- Updated to use newer functions, requires Minetest 0.4.16+ to work. -- 1.39- Added 'on_breed', 'on_grown' and 'do_punch' custom functions per mob -- 1.38- Better entity checking, nametag setting and on_spawn function added to mob registry, tweaked light damage -- 1.37- Added support for Raymoo's CMI (common mob interface) mod: https://forum.minetest.net/viewtopic.php?f=9&t=15448 -- 1.36- Death check added, if mob dies in fire/lava/with lava pick then drops are cooked -- 1.35- Added owner_loyal flag for owned mobs to attack player enemies, also fixed group_attack -- 1.34- Added function to fly mob using directional movement (thanks D00Med for flying code) -- 1.33- Added functions to mount ride mobs (mobs.attach, mobs.detach, mobs.drive) many thanks to Blert2112 -- 1.32- Added new spawn check to count specific mobs AND new minetest.conf setting to chance spawn chance and numbers, added ability to protect tamed mobs -- 1.31- Added 'attack_animals' and 'specific_attack' flags for custom monster attacks, also 'mob_difficulty' .conf setting to make mobs harder. -- 1.30- Added support for invisibility mod (mobs cant attack what they cant see), tweaked and tidied code -- 1.29- Split original Mobs Redo into a modpack to make it easier to disable mob sets (animal, monster, npc) or simply use the Api itself for your own mod -- 1.28- New damage system added with ability for mob to be immune to weapons or healed by them :) -- 1.27- Added new sheep, lava flan and spawn egg textures. New Lava Pick tool smelts what you dig. New atan checking function. -- 1.26- Pathfinding feature added thanks to rnd, when monsters attack they become scary smart in finding you :) also, beehive produces honey now :) -- 1.25- Mobs no longer spawn within 12 blocks of player or despawn within same range, spawners now have player detection, Code tidy and tweak. -- 1.24- Added feature where certain animals run away when punched (runaway = true in mob definition) -- 1.23- Added mob spawner block for admin to setup spawners in-game (place and right click to enter settings) -- 1.22- Added ability to name tamed animals and npc using nametags, also npc will attack anyone who punches them apart from owner -- 1.21- Added some more error checking to reduce serialize.h error and added height checks for falling off cliffs (thanks cmdskp) -- 1.20- Error checking added to remove bad mobs, out of map limit mobs and stop serialize.h error -- 1.19- Chickens now drop egg items instead of placing the egg, also throwing eggs result in 1/8 chance of spawning chick -- 1.18- Added docile_by_day flag so that monsters will not attack automatically during daylight hours unless hit first -- 1.17- Added 'dogshoot' attack type, shoots when out of reach, melee attack when in reach, also api tweaks and self.reach added -- 1.16- Mobs follow multiple items now, Npc's can breed -- 1.15- Added Feeding/Taming/Breeding function, right-click to pick up any sheep with X mark on them and replace with new one to fix compatibility. -- 1.14- All .self variables saved in staticdata, Fixed self.health bug -- 1.13- Added capture function (thanks blert2112) chance of picking up mob with hand; net; magic lasso, replaced some .x models with newer .b3d one's -- 1.12- Added animal ownership so that players cannot steal your tamed animals -- 1.11- Added flying mobs (and swimming), fly=true and fly_in="air" or "deafult:water_source" for fishy -- 1,10- Footstep removed (use replace), explosion routine added for exploding mobs. -- 1.09- reworked breeding routine, added mob rotation value, added footstep feature, added jumping mobs with sounds feature, added magic lasso for picking up animals -- 1.08- Mob throwing attack has been rehauled so that they can damage one another, also drops and on_die function added -- 1.07- Npc's can now be set to follow player or stand by using self.order and self.owner variables -- beta- Npc mob added, kills monsters, attacks player when punched, right click with food to heal or gold lump for drop -- 1.06- Changed recovery times after breeding, and time taken to grow up (can be sped up by feeding baby animal) -- 1.05- Added ExeterDad's bunny's which can be picked up and tamed with 4 carrots from farming redo or farming_plus, also shears added to get wool from sheep and lastly Jordach/BSD's kitten -- 1.04- Added mating for sheep, cows and hogs... feed animals to make horny and hope for a baby which is half size, will grow up quick though :) -- 1.03- Added mob drop/replace feature so that chickens can drop eggs, cow/sheep can eat grass/wheat etc. -- 1.02- Sheared sheep are remembered and spawn shaven, Warthogs will attack when threatened, Api additions -- 1.01- Mobs that suffer fall damage or die in water/lava/sunlight will now drop items -- 1.0 - more work on Api so that certain mobs can float in water while some sink like a brick :) -- 0.9 - Spawn eggs added for all mobs (admin only, cannot be placed in protected areas)... Api tweaked -- 0.8 - Added sounds to monster mobs (thanks Cyberpangolin for the sfx) and also chicken sound -- 0.7 - mobs.protected switch added to api.lua, when set to 1 mobs no longer spawn in protected areas, also bug fixes -- 0.6 - Api now supports multi-textured mobs, e.g oerkki, dungeon master, rats and chickens have random skins when spawning (sheep fix TODO), also new Honey block -- 0.5 - Mobs now float in water, die from falling, and some code improvements -- 0.4 - Dungeon Masters and Mese Monsters have much better aim due to shoot_offset, also they can both shoot through nodes that aren't walkable (flowers, grass etc) plus new sheep sound :) -- 0.3 - Added LOTT's Spider mob, made Cobwebs, added KPavel's Bee with Honey and Beehives (made texture), Warthogs now have sound and can be tamed, taming of shaved sheep or milked cow with 8 wheat so it will not despawn, many bug fixes :) -- 0.2 - Cooking bucket of milk into cheese now returns empty bucket -- 0.1 - Initial Release diff --git a/mods/ENTITIES/mcl_mobs/sounds/default_punch.ogg b/mods/ENTITIES/mcl_mobs/sounds/default_punch.ogg deleted file mode 100644 index 28a500bf5..000000000 Binary files a/mods/ENTITIES/mcl_mobs/sounds/default_punch.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_mobs/sounds/mcl_mobs_mob_poof.ogg b/mods/ENTITIES/mcl_mobs/sounds/mcl_mobs_mob_poof.ogg deleted file mode 100644 index 9f683c0cf..000000000 Binary files a/mods/ENTITIES/mcl_mobs/sounds/mcl_mobs_mob_poof.ogg and /dev/null differ diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua deleted file mode 100644 index 74fcc3255..000000000 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ /dev/null @@ -1,484 +0,0 @@ ---lua locals -local get_node = minetest.get_node -local get_item_group = minetest.get_item_group -local get_node_light = minetest.get_node_light -local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air -local get_biome_name = minetest.get_biome_name -local get_objects_inside_radius = minetest.get_objects_inside_radius -local get_connected_players = minetest.get_connected_players -local minetest_get_perlin = minetest.get_perlin - -local math_random = math.random -local math_floor = math.floor -local math_ceil = math.ceil -local math_cos = math.cos -local math_sin = math.sin -local math_round = function(x) return (x > 0) and math_floor(x + 0.5) or math_ceil(x - 0.5) end - ---local vector_distance = vector.distance -local vector_new = vector.new -local vector_floor = vector.floor - -local table_copy = table.copy -local table_remove = table.remove - -local pairs = pairs - --- range for mob count -local aoc_range = 32 - ---do mobs spawn? -local mobs_spawn = minetest.settings:get_bool("mobs_spawn", true) ~= false - - -local noise_params = { - offset = 0, - scale = 3, - spread = { - x = 301, - y = 50, - z = 304, - }, - seed = 100, - octaves = 3, - persistence = 0.5, -} - --- THIS IS THE BIG LIST OF ALL BIOMES - used for programming/updating mobs --- Also used for missing parameter --- Please update the list when adding new biomes! - -local list_of_all_biomes = { - - -- underground: - - "FlowerForest_underground", - "JungleEdge_underground", - "ColdTaiga_underground", - "IcePlains_underground", - "IcePlainsSpikes_underground", - "MegaTaiga_underground", - "Taiga_underground", - "ExtremeHills+_underground", - "JungleM_underground", - "ExtremeHillsM_underground", - "JungleEdgeM_underground", - - -- ocean: - - "RoofedForest_ocean", - "JungleEdgeM_ocean", - "BirchForestM_ocean", - "BirchForest_ocean", - "IcePlains_deep_ocean", - "Jungle_deep_ocean", - "Savanna_ocean", - "MesaPlateauF_ocean", - "ExtremeHillsM_deep_ocean", - "Savanna_deep_ocean", - "SunflowerPlains_ocean", - "Swampland_deep_ocean", - "Swampland_ocean", - "MegaSpruceTaiga_deep_ocean", - "ExtremeHillsM_ocean", - "JungleEdgeM_deep_ocean", - "SunflowerPlains_deep_ocean", - "BirchForest_deep_ocean", - "IcePlainsSpikes_ocean", - "Mesa_ocean", - "StoneBeach_ocean", - "Plains_deep_ocean", - "JungleEdge_deep_ocean", - "SavannaM_deep_ocean", - "Desert_deep_ocean", - "Mesa_deep_ocean", - "ColdTaiga_deep_ocean", - "Plains_ocean", - "MesaPlateauFM_ocean", - "Forest_deep_ocean", - "JungleM_deep_ocean", - "FlowerForest_deep_ocean", - "MushroomIsland_ocean", - "MegaTaiga_ocean", - "StoneBeach_deep_ocean", - "IcePlainsSpikes_deep_ocean", - "ColdTaiga_ocean", - "SavannaM_ocean", - "MesaPlateauF_deep_ocean", - "MesaBryce_deep_ocean", - "ExtremeHills+_deep_ocean", - "ExtremeHills_ocean", - "MushroomIsland_deep_ocean", - "Forest_ocean", - "MegaTaiga_deep_ocean", - "JungleEdge_ocean", - "MesaBryce_ocean", - "MegaSpruceTaiga_ocean", - "ExtremeHills+_ocean", - "Jungle_ocean", - "RoofedForest_deep_ocean", - "IcePlains_ocean", - "FlowerForest_ocean", - "ExtremeHills_deep_ocean", - "MesaPlateauFM_deep_ocean", - "Desert_ocean", - "Taiga_ocean", - "BirchForestM_deep_ocean", - "Taiga_deep_ocean", - "JungleM_ocean", - - -- water or beach? - - "MesaPlateauFM_sandlevel", - "MesaPlateauF_sandlevel", - "MesaBryce_sandlevel", - "Mesa_sandlevel", - - -- beach: - - "FlowerForest_beach", - "Forest_beach", - "StoneBeach", - "ColdTaiga_beach_water", - "Taiga_beach", - "Savanna_beach", - "Plains_beach", - "ExtremeHills_beach", - "ColdTaiga_beach", - "Swampland_shore", - "MushroomIslandShore", - "JungleM_shore", - "Jungle_shore", - - -- dimension biome: - - "Nether", - "End", - - -- Overworld regular: - - "Mesa", - "FlowerForest", - "Swampland", - "Taiga", - "ExtremeHills", - "Jungle", - "Savanna", - "BirchForest", - "MegaSpruceTaiga", - "MegaTaiga", - "ExtremeHills+", - "Forest", - "Plains", - "Desert", - "ColdTaiga", - "MushroomIsland", - "IcePlainsSpikes", - "SunflowerPlains", - "IcePlains", - "RoofedForest", - "ExtremeHills+_snowtop", - "MesaPlateauFM_grasstop", - "JungleEdgeM", - "ExtremeHillsM", - "JungleM", - "BirchForestM", - "MesaPlateauF", - "MesaPlateauFM", - "MesaPlateauF_grasstop", - "MesaBryce", - "JungleEdge", - "SavannaM", -} - --- count how many mobs are in an area -local function count_mobs(pos) - local num = 0 - for _,object in pairs(get_objects_inside_radius(pos, aoc_range)) do - if object and object:get_luaentity() and object:get_luaentity().is_mob then - num = num + 1 - end - end - return num -end - - --- global functions - -function mcl_mobs:spawn_abm_check(pos, node, name) - -- global function to add additional spawn checks - -- return true to stop spawning mob -end - - ---[[ - Custom elements changed: - -name: -the mobs name - -dimension: -"overworld" -"nether" -"end" - -types of spawning: -"water" -"ground" -"lava" - -biomes: tells the spawner to allow certain mobs to spawn in certain biomes -{"this", "that", "grasslands", "whatever"} - - -what is aoc??? objects in area - -WARNING: BIOME INTEGRATION NEEDED -> How to get biome through lua?? -]]-- - - ---this is where all of the spawning information is kept -local spawn_dictionary = {} -local summary_chance = 0 - -function mcl_mobs:spawn_setup(def) - if not mobs_spawn then return end - - if not def then - minetest.log("warning", "Empty mob spawn setup definition") - return - end - - local name = def.name - if not name then - minetest.log("warning", "Missing mob name") - return - end - - local dimension = def.dimension or "overworld" - local type_of_spawning = def.type_of_spawning or "ground" - local biomes = def.biomes or list_of_all_biomes - local min_light = def.min_light or 0 - local max_light = def.max_light or (minetest.LIGHT_MAX + 1) - local chance = def.chance or 1000 - local aoc = def.aoc or aoc_range - local min_height = def.min_height or mcl_mapgen.overworld.min - local max_height = def.max_height or mcl_mapgen.overworld.max - local day_toggle = def.day_toggle - local on_spawn = def.on_spawn - local check_position = def.check_position - - -- chance/spawn number override in minetest.conf for registered mob - local numbers = minetest.settings:get(name) - if numbers then - numbers = numbers:split(",") - chance = tonumber(numbers[1]) or chance - aoc = tonumber(numbers[2]) or aoc - if chance == 0 then - minetest.log("warning", string.format("[mcl_mobs] %s has spawning disabled", name)) - return - end - minetest.log("action", string.format("[mcl_mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) - end - - if chance < 1 then - chance = 1 - minetest.log("warning", "Chance shouldn't be less than 1 (mob name: " .. name ..")") - end - - spawn_dictionary[#spawn_dictionary + 1] = { - name = name, - dimension = dimension, - type_of_spawning = type_of_spawning, - biomes = biomes, - min_light = min_light, - max_light = max_light, - chance = chance, - aoc = aoc, - min_height = min_height, - max_height = max_height, - day_toggle = day_toggle, - check_position = check_position, - on_spawn = on_spawn, - } - summary_chance = summary_chance + chance -end - -function mcl_mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_light, max_light, interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) - - -- Do mobs spawn at all? - if not mobs_spawn then - return - end - - -- chance/spawn number override in minetest.conf for registered mob - local numbers = minetest.settings:get(name) - - if numbers then - numbers = numbers:split(",") - chance = tonumber(numbers[1]) or chance - aoc = tonumber(numbers[2]) or aoc - - if chance == 0 then - minetest.log("warning", string.format("[mcl_mobs] %s has spawning disabled", name)) - return - end - - minetest.log("action", string.format("[mcl_mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) - end - - --load information into the spawn dictionary - local key = #spawn_dictionary + 1 - spawn_dictionary[key] = {} - spawn_dictionary[key]["name"] = name - spawn_dictionary[key]["dimension"] = dimension - spawn_dictionary[key]["type_of_spawning"] = type_of_spawning - spawn_dictionary[key]["biomes"] = biomes - spawn_dictionary[key]["min_light"] = min_light - spawn_dictionary[key]["max_light"] = max_light - spawn_dictionary[key]["chance"] = chance - spawn_dictionary[key]["aoc"] = aoc - spawn_dictionary[key]["min_height"] = min_height - spawn_dictionary[key]["max_height"] = max_height - spawn_dictionary[key]["day_toggle"] = day_toggle - - summary_chance = summary_chance + chance -end - -local two_pi = 2 * math.pi -local function get_next_mob_spawn_pos(pos) - local distance = math_random(25, 32) - local angle = math_random() * two_pi - return { - x = math_round(pos.x + distance * math_cos(angle)), - y = pos.y, - z = math_round(pos.z + distance * math_sin(angle)) - } -end - -local function decypher_limits(posy) - posy = math_floor(posy) - return posy - 32, posy + 32 -end - ---a simple helper function for mob_spawn -local function biome_check(biome_list, biome_goal) - for _, data in pairs(biome_list) do - if data == biome_goal then - return true - end - end - - return false -end - -local function is_farm_animal(n) - return n == "mobs_mc:pig" or n == "mobs_mc:cow" or n == "mobs_mc:sheep" or n == "mobs_mc:chicken" or n == "mobs_mc:horse" or n == "mobs_mc:donkey" -end - -if mobs_spawn then - - local perlin_noise - - local function spawn_a_mob(pos, dimension, y_min, y_max) - local dimension = dimension or mcl_worlds.pos_to_dimension(pos) - local goal_pos = get_next_mob_spawn_pos(pos) - local spawning_position_list = find_nodes_in_area_under_air( - {x = goal_pos.x, y = y_min, z = goal_pos.z}, - {x = goal_pos.x, y = y_max, z = goal_pos.z}, - {"group:solid", "group:water", "group:lava"} - ) - if #spawning_position_list <= 0 then return end - local spawning_position = spawning_position_list[math_random(1, #spawning_position_list)] - - --hard code mob limit in area to 5 for now - if count_mobs(spawning_position) >= 5 then return end - - local gotten_node = get_node(spawning_position).name - local gotten_biome = minetest.get_biome_data(spawning_position) - if not gotten_node or not gotten_biome then return end - gotten_biome = get_biome_name(gotten_biome.biome) --makes it easier to work with - - --add this so mobs don't spawn inside nodes - spawning_position.y = spawning_position.y + 1 - - --only need to poll for node light if everything else worked - local gotten_light = get_node_light(spawning_position) - - local is_water = get_item_group(gotten_node, "water") ~= 0 - local is_lava = get_item_group(gotten_node, "lava") ~= 0 - local is_ground = not (is_water or is_lava) - local is_grass = minetest.get_item_group(gotten_node,"grass_block") ~= 0 - local has_bed = minetest.find_node_near(pos,25,{"group:bed"}) - - if not is_ground then - spawning_position.y = spawning_position.y - 1 - end - - local mob_def - - --create a disconnected clone of the spawn dictionary - --prevents memory leak - local mob_library_worker_table = table_copy(spawn_dictionary) - - --grab mob that fits into the spawning location - --randomly grab a mob, don't exclude any possibilities - perlin_noise = perlin_noise or minetest_get_perlin(noise_params) - local noise = perlin_noise:get_3d(spawning_position) - local current_summary_chance = summary_chance - while #mob_library_worker_table > 0 do - local mob_chance_offset = (math_round(noise * current_summary_chance + 12345) % current_summary_chance) + 1 - local mob_index = 1 - local mob_chance = mob_library_worker_table[mob_index].chance - local step_chance = mob_chance - while step_chance < mob_chance_offset do - mob_index = mob_index + 1 - mob_chance = mob_library_worker_table[mob_index].chance - step_chance = step_chance + mob_chance - end - local mob_def = mob_library_worker_table[mob_index] - local mob_type = minetest.registered_entities[mob_def.name].type - if mob_def - and spawning_position.y >= mob_def.min_height - and spawning_position.y <= mob_def.max_height - and mob_def.dimension == dimension - and biome_check(mob_def.biomes, gotten_biome) - and gotten_light >= mob_def.min_light - and gotten_light <= mob_def.max_light - and (is_ground or mob_def.type_of_spawning ~= "ground") - and (mob_def.check_position and mob_def.check_position(spawning_position) or true) - and (not is_farm_animal(mob_def.name) or is_grass) - and (mob_type ~= "npc" or has_bed) - then - --everything is correct, spawn mob - local object = minetest.add_entity(spawning_position, mob_def.name) - if object then - return mob_def.on_spawn and mob_def.on_spawn(object, pos) - end - end - current_summary_chance = current_summary_chance - mob_chance - table_remove(mob_library_worker_table, mob_index) - end - end - - - --MAIN LOOP - - local timer = 0 - minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < 10 then return end - timer = 0 - for _, player in pairs(get_connected_players()) do - local pos = player:get_pos() - local dimension = mcl_worlds.pos_to_dimension(pos) - -- ignore void and unloaded area - if dimension ~= "void" and dimension ~= "default" then - local y_min, y_max = decypher_limits(pos.y) - for i = 1, math_random(1, 4) do - spawn_a_mob(pos, dimension, y_min, y_max) - end - end - end - end) -end diff --git a/mods/ENTITIES/mcl_mobs/textures/mobs_blood.png b/mods/ENTITIES/mcl_mobs/textures/mobs_blood.png deleted file mode 100644 index aa4a6123c..000000000 Binary files a/mods/ENTITIES/mcl_mobs/textures/mobs_blood.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_mobs/textures/mobs_nametag.png b/mods/ENTITIES/mcl_mobs/textures/mobs_nametag.png deleted file mode 100644 index 0326e71aa..000000000 Binary files a/mods/ENTITIES/mcl_mobs/textures/mobs_nametag.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_paintings/init.lua b/mods/ENTITIES/mcl_paintings/init.lua deleted file mode 100644 index 26bd2c61b..000000000 --- a/mods/ENTITIES/mcl_paintings/init.lua +++ /dev/null @@ -1,317 +0,0 @@ -mcl_paintings = {} - -local modname = minetest.get_current_modname() -dofile(minetest.get_modpath(modname).."/paintings.lua") - -local S = minetest.get_translator(modname) - -local math = math - -local wood = "[combine:16x16:-192,0=mcl_paintings_paintings.png" - -local function is_protected(pos, name) - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return true - end - return false -end - --- Check if there's a painting for provided painting size. --- If yes, returns the arguments. --- If not, returns the next smaller available painting. -local function shrink_painting(x, y) - if x > 4 or y > 4 then - return nil - end - local xstart = x - local painting - while not painting do - painting = mcl_paintings.paintings[y] and mcl_paintings.paintings[y][x] - if type(painting) == "table" then - break - elseif type(painting) == "number" then - x = painting - painting = nil - else - x = xstart - y = y - 1 - end - if y < 1 then - return nil - end - end - if type(painting) == "table" then - return x, y - end -end - -local function get_painting(x, y, motive) - local painting = mcl_paintings.paintings[y] and mcl_paintings.paintings[y][x] and mcl_paintings.paintings[y][x][motive] - if not painting then - return nil - end - local px, py = -painting.cx, -painting.cy - local sx, sy = 16*x, 16*y - return "[combine:"..sx.."x"..sy..":"..px..","..py.."=mcl_paintings_paintings.png" -end - -local function get_random_painting(x, y) - if not mcl_paintings.paintings[y] or not mcl_paintings.paintings[y][x] then - return nil - end - local max = #mcl_paintings.paintings[y][x] - if max < 1 then - return nil - end - local r = math.random(1, max) - return get_painting(x, y, r), r -end - ---[[local function size_to_minmax(size) - local min, max - if size == 2 then - min = -0.5 - max = 1.5 - elseif size == 3 then - min = -1.5 - max = 1.5 - elseif size == 4 then - min = -1.5 - max = 2.5 - else - min = -0.5 - max = 0.5 - end - return min, max -end]] - -local function size_to_minmax_entity(size) - return -size/2, size/2 -end - -local function set_entity(object) - local ent = object:get_luaentity() - local wallm = ent._facing - local xsize = ent._xsize - local ysize = ent._ysize - local exmin, exmax = size_to_minmax_entity(xsize) - local eymin, eymax = size_to_minmax_entity(ysize) - local visual_size = { x=xsize-0.0001, y=ysize-0.0001, z=1/32 } - if not ent._xsize or not ent._ysize or not ent._motive then - minetest.log("error", "[mcl_paintings] Painting loaded with missing painting values!") - return - end - local painting = get_painting(xsize, ysize, ent._motive) - if not painting then - minetest.log("error", "[mcl_paintings] No painting found for size " - ..xsize..","..ysize..", motive number "..ent._motive.."!") - return - end - local box - if wallm == 2 then - box = { -3/128, eymin, exmin, 1/64, eymax, exmax } - elseif wallm == 3 then - box = { -1/64, eymin, exmin, 3/128, eymax, exmax } - elseif wallm == 4 then - box = { exmin, eymin, -3/128, exmax, eymax, 1/64 } - elseif wallm == 5 then - box = { exmin, eymin, -1/64, exmax, eymax, 3/128 } - end - object:set_properties({ - selectionbox = box, - visual_size = visual_size, - textures = { wood, wood, wood, wood, painting, wood }, - }) - - local dir = minetest.wallmounted_to_dir(wallm) - if not dir then - return - end - object:set_yaw(minetest.dir_to_yaw(dir)) -end - -minetest.register_entity("mcl_paintings:painting", { - visual = "cube", - visual_size = { x=0.999, y=0.999, z=1/32 }, - selectionbox = { -1/64, -0.5, -0.5, 1/64, 0.5, 0.5 }, - physical = false, - collide_with_objects = false, - textures = { wood, wood, wood, wood, wood, wood }, - hp_max = 1, - - _motive = 0, - _pos = nil, - _facing = 2, - _xsize = 1, - _ysize = 1, - on_activate = function(self, staticdata) - self.object:set_armor_groups({immortal = 1}) - if staticdata and staticdata ~= "" then - local data = minetest.deserialize(staticdata) - if data then - self._facing = data._facing - self._pos = data._pos - self._motive = data._motive - self._xsize = data._xsize - self._ysize = data._ysize - end - end - set_entity(self.object) - end, - get_staticdata = function(self) - local data = { - _facing = self._facing, - _pos = self._pos, - _motive = self._motive, - _xsize = self._xsize, - _ysize = self._ysize, - } - return minetest.serialize(data) - end, - on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) - -- Drop as item on punch - if puncher and puncher:is_player() then - local kname = puncher:get_player_name() - local pos = self._pos - if not pos then - pos = self.object:get_pos() - end - if not minetest.is_protected(pos, kname) then - self.object:remove() - if not minetest.is_creative_enabled(kname) then - minetest.add_item(pos, "mcl_paintings:painting") - end - end - end - end, -}) - -minetest.register_craftitem("mcl_paintings:painting", { - description = S("Painting"), - inventory_image = "mcl_paintings_painting.png", - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - dir = vector.normalize(dir) - if dir.y ~= 0 then - -- Ceiling/floor paintings are not supported - return itemstack - end - local wallm = minetest.dir_to_wallmounted(dir) - if wallm then - local ppos = pointed_thing.above - local xmax - local ymax = 4 - local xmaxes = {} - local ymaxed = false - local negative = dir.x < 0 or dir.z > 0 - -- Check maximum possible painting size - local t - for y=0,3 do - for x=0,3 do - local k = x - if negative then - k = -k - end - if dir.z ~= 0 then - t = {x=k,y=y,z=0} - else - t = {x=0,y=y,z=k} - end - local unode = minetest.get_node(vector.add(pointed_thing.under, t)) - local anode = minetest.get_node(vector.add(ppos, t)) - local udef = minetest.registered_nodes[unode.name] - local adef = minetest.registered_nodes[anode.name] - if (not (udef and udef.walkable)) or (not adef or adef.walkable) then - xmaxes[y+1] = x - if x == 0 and not ymaxed then - ymax = y - ymaxed = true - end - break - end - end - if not xmaxes[y] then - xmaxes[y] = 4 - end - end - xmax = math.max(unpack(xmaxes)) - - local xsize, ysize = xmax, ymax - xsize, ysize = shrink_painting(xsize, ysize) - if not xsize then - return itemstack - end - - local _, exmax = size_to_minmax_entity(xsize) - local _, eymax = size_to_minmax_entity(ysize) - local pposa = vector.subtract(ppos, vector.multiply(dir, 0.5-5/256)) - local name = placer:get_player_name() - local pexmax - local peymax = eymax - 0.5 - local n - if negative then - pexmax = -exmax + 0.5 - n = -1 - else - pexmax = exmax - 0.5 - n = 1 - end - if is_protected(ppos, name) then return itemstack end - local ppos2 - if dir.z ~= 0 then - pposa = vector.add(pposa, {x=pexmax, y=peymax, z=0}) - ppos2 = vector.add(ppos, {x = (xsize-1)*n, y = ysize-1, z = 0}) - else - pposa = vector.add(pposa, {x=0, y=peymax, z=pexmax}) - ppos2 = vector.add(ppos, {x = 0, y = ysize-1, z = (xsize-1)*n}) - end - if is_protected(ppos2, name) then return itemstack end - local painting, pid = get_random_painting(xsize, ysize) - if not painting then - minetest.log("error", "[mcl_paintings] No painting found for size "..xsize..","..ysize.."!") - return itemstack - end - local staticdata = { - _facing = wallm, - _pos = ppos, - _motive = pid, - _xsize = xsize, - _ysize = ysize, - } - local obj = minetest.add_entity(pposa, "mcl_paintings:painting", minetest.serialize(staticdata)) - if not obj then - return itemstack - end - else - return itemstack - end - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end, -}) - -mcl_wip.register_wip_item("mcl_paintings:painting") - -minetest.register_craft({ - output = "mcl_paintings:painting", - recipe = { - { "mcl_core:stick", "mcl_core:stick", "mcl_core:stick" }, - { "mcl_core:stick", "group:wool", "mcl_core:stick" }, - { "mcl_core:stick", "mcl_core:stick", "mcl_core:stick" }, - } -}) - diff --git a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.de.tr b/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.de.tr deleted file mode 100644 index 983877251..000000000 --- a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.de.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_paintings -Painting=Gemälde diff --git a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.fr.tr b/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.fr.tr deleted file mode 100644 index 56fa14937..000000000 --- a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_paintings -Painting=Peinture \ No newline at end of file diff --git a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.pl.tr b/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.pl.tr deleted file mode 100644 index 473540dda..000000000 --- a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.pl.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_paintings -Painting=Obraz diff --git a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.ru.tr b/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.ru.tr deleted file mode 100644 index cc2f52778..000000000 --- a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.ru.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_paintings -Painting=Рисование diff --git a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.zh_TW.tr b/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.zh_TW.tr deleted file mode 100644 index d4b792185..000000000 --- a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.zh_TW.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_paintings -Painting=畫 diff --git a/mods/ENTITIES/mcl_paintings/locale/template.txt b/mods/ENTITIES/mcl_paintings/locale/template.txt deleted file mode 100644 index 73abae1e8..000000000 --- a/mods/ENTITIES/mcl_paintings/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_paintings -Painting= diff --git a/mods/ENTITIES/mcl_paintings/mod.conf b/mods/ENTITIES/mcl_paintings/mod.conf deleted file mode 100644 index 2c6955360..000000000 --- a/mods/ENTITIES/mcl_paintings/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_paintings -author = Wuzzy -description = The paintings mod for MCL2 -depends = mcl_wip - diff --git a/mods/ENTITIES/mcl_paintings/paintings.lua b/mods/ENTITIES/mcl_paintings/paintings.lua deleted file mode 100644 index ccf584364..000000000 --- a/mods/ENTITIES/mcl_paintings/paintings.lua +++ /dev/null @@ -1,55 +0,0 @@ -local TS = 16 -- texture size - -mcl_paintings.paintings = { - [1] = { - [1] = { - { cx = 0, cy = 0 }, - { cx = TS, cy = 0 }, - { cx = 2*TS, cy = 0 }, - { cx = 3*TS, cy = 0 }, - { cx = 4*TS, cy = 0 }, - { cx = 5*TS, cy = 0 }, - { cx = 6*TS, cy = 0 }, - }, - [2] = { - { cx = 0, cy = 2*TS }, - { cx = 2*TS, cy = 2*TS }, - { cx = 4*TS, cy = 2*TS }, - { cx = 6*TS, cy = 2*TS }, - { cx = 8*TS, cy = 2*TS }, - }, - [3] = 2, - [4] = 2, - }, - [2] = { - [1] = { - { cx = 0, cy = 4*TS }, - { cx = TS, cy = 4*TS }, - }, - [2] = { - { cx = 0, cy = 8*TS }, - { cx = 2*TS, cy = 8*TS }, - { cx = 4*TS, cy = 8*TS }, - { cx = 6*TS, cy = 8*TS }, - { cx = 8*TS, cy = 8*TS }, - { cx = 10*TS, cy = 8*TS }, - }, - [3] = 2, - [4] = { - { cx = 0, cy = 6*TS }, - }, - }, - [3] = { - [4] = { - { cx = 12*TS, cy = 4*TS }, - { cx = 12*TS, cy = 7*TS }, - }, - }, - [4] = { - [4] = { - { cx = 0, cy = 12*TS }, - { cx = 4*TS, cy = 12*TS }, - { cx = 8*TS, cy = 12*TS }, - }, - }, -} diff --git a/mods/ENTITIES/mcl_paintings/textures/mcl_paintings_painting.png b/mods/ENTITIES/mcl_paintings/textures/mcl_paintings_painting.png deleted file mode 100644 index afaaa935d..000000000 Binary files a/mods/ENTITIES/mcl_paintings/textures/mcl_paintings_painting.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_paintings/textures/mcl_paintings_paintings.png b/mods/ENTITIES/mcl_paintings/textures/mcl_paintings_paintings.png deleted file mode 100644 index 0a8462d12..000000000 Binary files a/mods/ENTITIES/mcl_paintings/textures/mcl_paintings_paintings.png and /dev/null differ diff --git a/mods/ENTITIES/mcl_wither_spawning/init.lua b/mods/ENTITIES/mcl_wither_spawning/init.lua deleted file mode 100644 index 2f1d744d8..000000000 --- a/mods/ENTITIES/mcl_wither_spawning/init.lua +++ /dev/null @@ -1,51 +0,0 @@ -local dim = {"x", "z"} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -local function load_schem(filename) - local file = io.open(modpath .. "/schems/" .. filename, "r") - local data = minetest.deserialize(file:read()) - file:close() - return data -end - -local wither_spawn_schems = {} - -for _, d in pairs(dim) do - wither_spawn_schems[d] = load_schem("wither_spawn_" .. d .. ".we") -end - -local function check_schem(pos, schem) - for _, n in pairs(schem) do - if minetest.get_node(vector.add(pos, n)).name ~= n.name then - return false - end - end - return true -end - -local function remove_schem(pos, schem) - for _, n in pairs(schem) do - minetest.remove_node(vector.add(pos, n)) - end -end - -local function wither_spawn(pos) - for _, d in pairs(dim) do - for i = 0, 2 do - local p = vector.add(pos, {x = 0, y = -2, z = 0, [d] = -i}) - local schem = wither_spawn_schems[d] - if check_schem(p, schem) then - remove_schem(p, schem) - minetest.add_entity(vector.add(p, {x = 0, y = 1, z = 0, [d] = 1}), "mobs_mc:wither") - end - end - end -end - -local wither_head = minetest.registered_nodes["mcl_heads:wither_skeleton"] -local old_on_place = wither_head.on_place -function wither_head.on_place(itemstack, placer, pointed) - minetest.after(0, wither_spawn, pointed.above) - old_on_place(itemstack, placer, pointed) -end diff --git a/mods/ENTITIES/mcl_wither_spawning/mod.conf b/mods/ENTITIES/mcl_wither_spawning/mod.conf deleted file mode 100644 index d144bb1ea..000000000 --- a/mods/ENTITIES/mcl_wither_spawning/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_wither_spawning -description = Wither Spawning for MineClone2 -author = Fleckenstein -depends = mobs_mc, mcl_heads diff --git a/mods/ENTITIES/mcl_wither_spawning/schems/wither_spawn_x.we b/mods/ENTITIES/mcl_wither_spawning/schems/wither_spawn_x.we deleted file mode 100644 index 6394bdc3f..000000000 --- a/mods/ENTITIES/mcl_wither_spawning/schems/wither_spawn_x.we +++ /dev/null @@ -1 +0,0 @@ -return {{["y"] = 1, ["x"] = 0, ["name"] = "mcl_nether:soul_sand", ["z"] = 0}, {["y"] = 2, ["x"] = 0, ["name"] = "mcl_heads:wither_skeleton", ["z"] = 0, ["param2"] = 2, ["param1"] = 15}, {["y"] = 0, ["x"] = 1, ["name"] = "mcl_nether:soul_sand", ["z"] = 0}, {["y"] = 1, ["x"] = 1, ["name"] = "mcl_nether:soul_sand", ["z"] = 0}, {["y"] = 2, ["x"] = 1, ["name"] = "mcl_heads:wither_skeleton", ["z"] = 0, ["param2"] = 2, ["param1"] = 15}, {["y"] = 1, ["x"] = 2, ["name"] = "mcl_nether:soul_sand", ["z"] = 0}, {["y"] = 2, ["x"] = 2, ["name"] = "mcl_heads:wither_skeleton", ["z"] = 0, ["param2"] = 2, ["param1"] = 15}} diff --git a/mods/ENTITIES/mcl_wither_spawning/schems/wither_spawn_z.we b/mods/ENTITIES/mcl_wither_spawning/schems/wither_spawn_z.we deleted file mode 100644 index 6b1775773..000000000 --- a/mods/ENTITIES/mcl_wither_spawning/schems/wither_spawn_z.we +++ /dev/null @@ -1 +0,0 @@ -return {{["y"] = 0, ["x"] = 0, ["name"] = "mcl_nether:soul_sand", ["z"] = 1}, {["y"] = 1, ["x"] = 0, ["name"] = "mcl_nether:soul_sand", ["z"] = 0}, {["y"] = 1, ["x"] = 0, ["name"] = "mcl_nether:soul_sand", ["z"] = 1}, {["y"] = 1, ["x"] = 0, ["name"] = "mcl_nether:soul_sand", ["z"] = 2}, {["y"] = 2, ["x"] = 0, ["name"] = "mcl_heads:wither_skeleton", ["z"] = 0, ["param2"] = 1, ["param1"] = 15}, {["y"] = 2, ["x"] = 0, ["name"] = "mcl_heads:wither_skeleton", ["z"] = 1, ["param2"] = 1, ["param1"] = 15}, {["y"] = 2, ["x"] = 0, ["name"] = "mcl_heads:wither_skeleton", ["z"] = 2, ["param2"] = 1, ["param1"] = 15}} diff --git a/mods/ENTITIES/mobs_mc/LICENSE b/mods/ENTITIES/mobs_mc/LICENSE deleted file mode 100644 index 9cecc1d46..000000000 --- a/mods/ENTITIES/mobs_mc/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - 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 . - -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: - - {project} Copyright (C) {year} {fullname} - 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 -. - - 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 -. diff --git a/mods/ENTITIES/mobs_mc/LICENSE-media.md b/mods/ENTITIES/mobs_mc/LICENSE-media.md deleted file mode 100644 index 4e3de49f1..000000000 --- a/mods/ENTITIES/mobs_mc/LICENSE-media.md +++ /dev/null @@ -1,310 +0,0 @@ -# Credits licensing for media files in `mobs_mc` - -## Licenses used - -The following media licenses are used: - -* [CC0](https://creativecommons.org/choose/zero/) -* [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) -* [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) -* [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html]) -* [MIT License](https://opensource.org/licenses/MIT) -* [LGPL v2.1](https://www.gnu.org/licenses/lgpl-2.1.html) - -Note: A “`*`” in a file name below is a placeholder which can stand for any text. - -## Models -All models were done by [22i](https://github.com/22i) and are licensed under GPLv3. - -Origin of those models: - -* [Mod “amc”](https://github.com/22i/amc/) -* [Repository with Blender source files for models](https://github.com/22i/minecraft-voxel-blender-models) - -## Textures - -* Mob and item textures are heavily based on [Pixel Perfection](https://www.planetminecraft.com/texture_pack/131pixel-perfection/), a texture pack for Minecraft. - * Original author: [XSSheep](https://www.planetminecraft.com/member/xssheep/) - * License (if not mentioned otherwise): CC BY-SA 4.0 - * Some textures have been modified or added - * Modifications and additions by MysticTempest: - * `mobs_mc_cave_spider.png` - * `mobs_mc_enderman_eyes.png` - * `mobs_mc_enderman.png` - * `mobs_mc_ghast.png` - * `mobs_mc_skeleton.png` - * `mobs_mc_slime.png` - * `mobs_mc_spider_eyes.png` - * `mobs_mc_spider.png` - * `mobs_mc_squid.png` - * `mobs_mc_zombie.png` - * `mobs_mc_villager_butcher.png` - * `mobs_mc_villager_farmer.png` - * `mobs_mc_villager_librarian.png` - * `mobs_mc_villager.png` - * `mobs_mc_villager_priest.png` - * `mobs_mc_villager_smith.png` - * `mobs_mc_parrot_blue.png` - * `mobs_mc_parrot_green.png` - * `mobs_mc_parrot_grey.png` - * `mobs_mc_parrot_red_blue.png` - * `mobs_mc_parrot_yellow_blue.png` - * `mobs_mc_evoker_base.png` (modified by kingoscargames) - * `mobs_mc_illusionist_bow.png` - * `mobs_mc_illusionist.png` - * `mobs_mc_vindicator_axe.png` - * `mobs_mc_vindicator_base.png` - * `mobs_mc_horse_skeleton.png` - * Additions by kingoscargames: - * `mobs_mc_vex.png` - * `mobs_mc_vex_charging.png` - * `mobs_mc_llama.png` - * `mobs_mc_llama_creamy.png` - * `mobs_mc_llama_brown.png` - * `mobs_mc_llama_white.png` - * `mobs_mc_llama_gray.png` - * `mobs_mc_llama_chest.png` - * `mobs_mc_endermite.png` - * `mobs_mc_magmacube.png` - * `mobs_mc_chicken.png` - * `mobs_mc_wither.png` - * `mobs_mc_wither_skeleton.png` - * `mobs_mc_TEMP_wither_projectile.png` - * Gerold55 - * `mobs_mc_mooshroom_brown.png` (CC0) - * `mobs_mc_mushroom_brown.png` (CC0) - -* “Spawn egg” textures (`mobs_mc_spawn_icon_*`) by 22i -* Llama decor (carpet) textures (`mobs_mc_llama_decor_*`) by erlehmann and rudzik8 -* Any other texture not mentioned here are licensed under the MIT License - -## Sounds - -* PilzAdam and Wuzzy (CC0) - * `mobs_mc_chicken_lay_egg.ogg` -* [AGFX](http://www.freesound.org/people/DrMinky/sounds/) (CC0) - * `mobs_mc_chicken_child.ogg` - * Source: -* [evsecrets](https://freesound.org/people/evsecrets/sounds/) (CC0) - * `mobs_mc_chicken_*.ogg` - * Source: -* [contramundum](https://freesound.org/people/contramundum/sounds/) - * `mobs_mc_parrot_*.ogg` - * Source: -* Randomation (CC0) - * `green_slime_damage.ogg` - * `green_slime_attack.ogg` - * Source: -* [Dr. Minky](http://www.freesound.org/people/DrMinky/sounds/) (CC BY 3.0) - * `green_slime_jump.ogg` - * `green_slime_land.ogg` - * `green_slime_death.ogg` -* Zozzy from Freesound.org (CC0) - * `mobs_mc_cow.ogg` - * Source: -* [Bird\_man](https://freesound.org/people/Bird_man/packs/16972/) - * `mobs_mc_cow_hurt.ogg` (CC0) - * Heavily modified - * Source: -* [Klaraschick](https://freesound.org/people/Klaraschick/) - * `mobs_mc_cow_milk.ogg` (CC0) - * shortened - * Source: -* [Hitrison](https://freesound.org/people/Hitrison/) - * `mobs_mc_cow_mushroom_stew.ogg` (CC BY 3.0) - * sound was modified - * Source: -* [NPXcoot](https://github.com/NPXcoot1) (CC BY-SA 4.0) - * `mobs_mc_ender_dragon_*` -* [bevibeldesign](https://freesound.org/people/bevibeldesign/) - * `mobs_mc_wither_spawn.ogg` (CC0) - * Source: -* [rubberduck](https://opengameart.org/users/rubberduck) - * `mobs_mc_endermite_*.ogg` (CC0) - * `mobs_mc_zombiepig_*.ogg` (CC0) - * `mobs_mc_enderman_teleport_*.ogg` (CC0) - * Source 1: - * Source 2: -* [Soundscapes55](https://freesound.org/people/Soundscapes55/) - * `mobs_mc_enderman_random.1.ogg` (CC0) - * Source: -* [griffinjennings](https://freesound.org/people/griffinjennings/) - * `mobs_mc_enderman_death.*.ogg` (CC BY 3.0) - * `mobs_mc_enderman_hurt.*.ogg` (CC BY 3.0) - * Sounds were heavily modified - * Source: -* [pointparkcinema](https://freesound.org/people/pointparkcinema/) - * `mobs_mc_guardian_random.1.ogg` (CC0) - * Source: -* [nornalbion](https://freesound.org/people/nornalbion/) - * `mobs_mc_guardian_random.2.ogg` (CC BY 3.0) - * `mobs_mc_guardian_random.3.ogg` (CC BY 3.0) - * `mobs_mc_guardian_hurt.*.ogg` (CC BY 3.0) - * Sounds were modified - * Source: -* [TheBuilder15](https://freesound.org/people/TheBuilder15/) - * `mobs_mc_guardian_death.ogg` (CC0) - * Source: -* Blender Foundation (CC BY 3.0) - * `mobs_sheep.ogg`, -* daufinsyd (MIT License) - * `mobs_mc_blaze_breath.ogg` - * `mobs_mc_blaze_died.ogg` -* [qubodup](https://opengameart.org/content/slime-monster) - * `mobs_mc_squid_hurt.*.ogg` (CC BY 3.0) - * `mobs_mc_squid_death.*.ogg` (CC BY 3.0) - * Changes were made - * Source: -* [kyles](https://freesound.org/people/kyles/) - * `mobs_mc_squid_flop.*.ogg` (CC0) - * Source: - * `mobs_mc_snowman_hurt.1.ogg` (CC0) - * Source: -* [thefilmbakery](https://freesound.org/people/thefilmbakery/) (CC0) - * `mobs_mc_blaze_hurt.ogg` - * Source: -* TenPlus1, from `mobs_monster` or `mobs_animal` mod (MIT License) - * `mobs_fireball.ogg` - * `mobs_mc_cat_idle.1.ogg` - * `mobs_mc_llama.ogg` - * `mobs_pig.ogg` - * `mobs_pig_angry.ogg` - * `mobs_sandmonster.ogg` -* [Daysycho](https://freesound.org/people/Darsycho/) - * `mobs_mc_spider_hurt.*.ogg` (CC0) - * Source: -* [columbia23](https://freesound.org/people/columbia23/) - * `mobs_mc_spider_death.ogg` (CC BY 3.0) - * `mobs_mc_spider_random.*.ogg` (CC BY 3.0) - * `mobs_mc_spider_attack.*.ogg` (CC BY 3.0) - * Source: -* BrandonReese (LGPL v2.1) - * `mobs_eerie.ogg` -* [Under7dude](https://freesound.org/people/Under7dude/) (CC0) - * `mobs_mc_zombie_growl.ogg` - * Source: -* [haratman](https://freesound.org/people/haratman/) (CC0) - * `mobs_mc_zombie_death.ogg` - * Source: - * `mobs_mc_zombie_hurt.ogg` - * Source: -* [Spennnyyy](https://freesound.org/people/Spennnyyy/) (CC0) - * `mcl_totems_totem.ogg` - * Source: -* [Baŝto](https://opengameart.org/users/ba%C5%9Dto) - * `mobs_mc_skeleton_random.*.ogg` (CC BY 3.0) - * Source: -* [spookymodem](https://freesound.org/people/spookymodem/) - * `mobs_mc_skeleton_death.ogg` (CC0) - * -* [Cribbler](https://freesound.org/people/Cribbler/) - * `mobs_mc_skeleton_hurt.ogg` (CC0) - * Source: -* [GoodListener](https://freesound.org/people/GoodListener/) - * `mobs_mc_horse_random.1.ogg` (CC BY 3.0) - * Source: - * `mobs_mc_horse_death.ogg` (CC BY 3.0) - * Source: -* [Garuda1982](https://freesound.org/people/Garuda1982/) - * `mobs_mc_donkey_random.1.ogg` (CC BY 3.0) - * `mobs_mc_donkey_hurt.ogg` (CC BY 3.0) - * `mobs_mc_donkey_death.ogg` (CC BY 3.0) - * Source: -* [JarredGibb](https://freesound.org/people/JarredGibb/sounds/233131/) - * `mobs_mc_donkey_random.2.ogg` (CC0) -* [ERH](https://freesound.org/people/ERH/) - * `mobs_mc_horse_random.2.ogg` (CC BY 3.0) - * Source: -* [j1987](https://freesound.org/people/j1987/) - * `mobs_mc_creeper_death.ogg` (CC0) - * Source: -* [themightyglider](https://opengameart.org/users/themightyglider) - * `mobs_mc_creeper_hurt.ogg` (CC0) - * Source: -* [pauliw](https://opengameart.org/users/pauliw) - * `mobs_mc_vex_hurt.ogg` (CC0) - * Source: - * `mobs_mc_vex_death.ogg` (CC0) - * Source: -* [suonho](https://freesound.org/people/suonho/) - * `mobs_mc_bat_idle.ogg` (CC BY 3.0) - * Source: -* [toefur](https://freesound.org/people/toefur/) - * `mobs_mc_bat_hurt.*.ogg` (CC0) - * `mobs_mc_bat_death.ogg` (CC0) - * Source: -* [cmusounddesign](https://freesound.org/people/cmusounddesign/) - * `mobs_mc_cat_hiss.ogg` (CC BY 3.0) - * Source: -* [SelsRoyalNavy](https://freesound.org/people/SelsRoyalNavy/) - * `mobs_mc_cat_idle.2.ogg` (CC0) - * Source: -* [ebcrosby](https://freesound.org/people/ebcrosby/) - * `mobs_mc_ocelot_hurt.ogg` (CC BY 3.0) - * Source: -* Hybrid Dog (forum.minetest.net) - * `mobs_mc_wolf_hurt.*.ogg` (CC0) - * `mobs_mc_wolf_bark.*.ogg` (CC0) - * `mobs_mc_wolf_death.*.ogg` (CC0) - * `mobs_mc_wolf_growl.*.ogg` (CC0) - * Sounds modified and simplified - * Source: "dogblocks" mod by Hybrid Dog -* [cliftoncarlson](https://freesound.org/people/cliftonmcarlson/) - * `mobs_mc_wolf_take_bone.ogg` (CC0) - * Source: -* [Inocodum](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3115) - * `mobs_mc_silverfish_hurt.ogg` (CC BY-SA 4.0) - * `mobs_mc_silverfish_death.ogg` (CC BY-SA 4.0) - * `mobs_mc_silverfish_idle.ogg` (CC BY-SA 4.0) - * Source: -* [LukeIRL](https://freesound.org/people/LukeIRL/) - * `mobs_mc_magma_cube_small.ogg` (CC BY 4.0) - * Derived from: - * `mobs_mc_magma_cube_big.ogg` (CC BY 4.0) - * Derived from: -* [kbnevel](https://freesound.org/people/kbnevel/) - * `mobs_mc_magma_cube_attack.ogg` (CC0) - * Derived from: -* [InspectorJ](https://freesound.org/people/InspectorJ/sounds/429591/) - * `mobs_mc_animal_eat_generic.ogg` (CC BY 3.0) - * Source: -* [tbsounddesigns](https://freesound.org/people/tbsounddesigns/) - * `mobs_mc_bear_random.*.ogg` (CC BY 3.0) - * Source 1: - * Source 2: - * Source 3: - * `mobs_mc_bear_growl.*.ogg` (CC BY 3.0) - * Source 1: - * Source 2: - * Source 3: -* [YleArkisto](https://freesound.org/people/YleArkisto/) - * `mobs_mc_bear_attack.*.ogg` (CC BY 3.0) - * `mobs_mc_bear_death.*.ogg` (CC BY 3.0) - * `mobs_mc_bear_hurt.1.ogg` (CC BY 3.0) - * Changes were made - * Source: -* [alexo400](https://freesound.org/people/alexo400/) - * `mobs_mc_snowman_death.*.ogg` (CC0) - * Source: -* [cabled\_mess](https://freesound.org/people/cabled_mess/) - * `mobs_mc_snowman_hurt.2.ogg` (CC0) - * Source: - * `mobs_mc_snowman_hurt.3.ogg` (CC0) - * Source: -* [kessir](https://freesound.org/people/kessir/sounds/) - * `mobs_mc_rabbit_hurt.*.ogg` (CC0) - * `mobs_mc_rabbit_death.2.ogg` (CC0) - * `mobs_mc_rabbit_death.3.ogg` (CC0) - * Source: - * `mobs_mc_rabbit_attack.*.ogg` (CC0) - * Source: - * `mobs_mc_rabbit_death.1.ogg` (CC0) - * Source: -* [Alshred](https://freesound.org/people/Alshred/sounds/403773/) - * `mobs_mc_rabbit_random.*.ogg` (CC0) - * Changes were made. - * Source: - -Note: Many of these sounds have been more or less modified to fit the game. - -Sounds not mentioned hre are licensed under CC0. diff --git a/mods/ENTITIES/mobs_mc/README.md b/mods/ENTITIES/mobs_mc/README.md deleted file mode 100644 index 4ee435d72..000000000 --- a/mods/ENTITIES/mobs_mc/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# MC-like mobs [`mobs_mc`] - -This mod adds mobs which closely resemble the mobs from the game Minecraft, version 1.12. - -## Credits - -* [maikerumine](https://github.com/maikerumine): Coding behaviour, spawning, drops, and misc. -* [Wuzzy2](https://github.com/Wuzzy2): Zombies, husks, item textures, and code -* [toby109tt](https://github.com/tobyplowy): Mapping fixes - better 2D planes -* [22i](https://github.com/22i): Models (done in Blender) and mob icons for spawn eggs -* [XSSheep](https://www.planetminecraft.com/member/xssheep/): Mob and item textures (from [Pixel Perfection](https://www.planetminecraft.com/texture_pack/131pixel-perfection/)) -* MysticTempest: More mob textures -* See `LICENSE_media.md` for detailed credits about each file - -## Licensing - -* Code: GNU General Public License, version 3 (see `LICENSE`) -* Media: MIT, CC0, CC BY 3.0 CC BY-SA 4.0, LGPLv2.1, GPLv3. See `LICENSE_media.md` for details - -### Links - -* [`mobs_mc`](https://github.com/maikerumine/mobs_mc) -* [Blender models](https://github.com/22i/minecraft-voxel-blender-models) -* [How to recreate mobs from textures with Blender and Gimp](http://imgur.com/a/Iqg88) - -## List of mobs - -**Note**: Many of these are incomplete. - -### Monsters - -* Zombie -* Husk -* Skeleton -* Stray -* Creeper -* Slime -* Spider -* Cave Spider -* Enderman -* Zombie Villager -* Zombie Pigman -* Wither Skeleton -* Magma Cube -* Blaze -* Ghast -* Evoker -* Vex -* Vindicator -* Witch -* Guardian -* Silverfish -* Endermite -* Shulker -* Ender Dragon -* Wither -* Elder Guardian - -### Peaceful mobs - -* Chicken -* Cow -* Pig -* Rabbit -* Sheep -* Squid -* Polar Bear -* Bat -* Mooshroom -* Horse -* Donkey -* Llama -* Mule -* Skeleton Horse -* Zombie Horse - -### Helpful mobs - -* Wolf -* Villager -* Iron golem -* Snow golem -* Ocelot/Cat -* Parrot diff --git a/mods/ENTITIES/mobs_mc/bat.lua b/mods/ENTITIES/mobs_mc/bat.lua deleted file mode 100644 index b41dabcba..000000000 --- a/mods/ENTITIES/mobs_mc/bat.lua +++ /dev/null @@ -1,146 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:bat", { - description = S("Bat"), - type = "animal", - spawn_class = "ambient", - can_despawn = true, - passive = true, - hp_min = 6, - hp_max = 6, - collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25}, - visual = "mesh", - mesh = "mobs_mc_bat.b3d", - textures = { - {"mobs_mc_bat.png"}, - }, - visual_size = {x=1, y=1}, - sounds = { - random = "mobs_mc_bat_idle", - damage = "mobs_mc_bat_hurt", - death = "mobs_mc_bat_death", - distance = 16, - }, - walk_velocity = 4.5, - run_velocity = 6.0, - -- TODO: Hang upside down - animation = { - stand_speed = 80, - stand_start = 0, - stand_end = 40, - walk_speed = 80, - walk_start = 0, - walk_end = 40, - run_speed = 80, - run_start = 0, - run_end = 40, - die_speed = 60, - die_start = 40, - die_end = 80, - die_loop = false, - }, - walk_chance = 100, - fall_damage = 0, - view_range = 16, - fear_height = 0, - - jump = false, - fly = true, - makes_footstep_sound = false, -}) - - --- Spawning - ---[[ If the game has been launched between the 20th of October and the 3rd of November system time, --- the maximum spawn light level is increased. ]] -local date = os.date("*t") -local maxlight -if (date.month == 10 and date.day >= 20) or (date.month == 11 and date.day <= 3) then - maxlight = 6 -else - maxlight = 3 -end - --- Spawn on solid blocks at or below Sea level and the selected light level -mcl_mobs:spawn_specific( -"mobs_mc:bat", -"overworld", -"ground", -{ -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"Desert", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -}, -0, -maxlight, -20, -5000, -2, -mcl_vars.mg_overworld_min, -mobs_mc.water_level-1) - - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:bat", S("Bat"), "mobs_mc_spawn_icon_bat.png", 0) diff --git a/mods/ENTITIES/mobs_mc/blaze.lua b/mods/ENTITIES/mobs_mc/blaze.lua deleted file mode 100644 index e0ff50909..000000000 --- a/mods/ENTITIES/mobs_mc/blaze.lua +++ /dev/null @@ -1,203 +0,0 @@ --- daufinsyd --- My work is under the LGPL terms --- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez --- blaze.lua partial copy of mobs_mc/ghast.lua - -local S = minetest.get_translator("mobs_mc") - -local mod_target = minetest.get_modpath("mcl_target") - ---################### ---################### BLAZE ---################### - - -mcl_mobs:register_mob("mobs_mc:blaze", { - description = S("Blaze"), - type = "monster", - spawn_class = "hostile", - hp_min = 20, - hp_max = 20, - xp_min = 10, - xp_max = 10, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.79, 0.3}, - rotate = -180, - visual = "mesh", - mesh = "mobs_mc_blaze.b3d", - textures = { - {"mobs_mc_blaze.png"}, - }, - armor = { fleshy = 100, snowball_vulnerable = 100, water_vulnerable = 100 }, - visual_size = {x=3, y=3}, - sounds = { - random = "mobs_mc_blaze_breath", - death = "mobs_mc_blaze_died", - damage = "mobs_mc_blaze_hurt", - distance = 16, - }, - walk_velocity = .8, - run_velocity = 1.6, - damage = 6, - reach = 2, - pathfinding = 1, - drops = { - {name = "mcl_mobitems:blaze_rod", - chance = 1, - min = 0, - max = 1, - looting = "common",}, - }, - animation = { - stand_speed = 25, - stand_start = 0, - stand_end = 100, - walk_speed = 25, - walk_start = 0, - walk_end = 100, - run_speed = 50, - run_start = 0, - run_end = 100, - }, - -- MC Wiki: takes 1 damage every half second while in water - water_damage = 2, - lava_damage = 0, - fire_damage = 0, - fall_damage = 0, - fall_speed = -2.25, - light_damage = 0, - view_range = 16, - attack_type = "dogshoot", - arrow = "mobs_mc:blaze_fireball", - shoot_interval = 3.5, - shoot_offset = 1.0, - passive = false, - jump = true, - jump_height = 4, - fly = true, - makes_footstep_sound = false, - fear_height = 0, - glow = 14, - fire_resistant = true, - do_custom = function(self) - if self.state == "attack" and self.attack:get_pos() and vector.distance(self.object:get_pos(), self.attack:get_pos()) < 1.2 then - mcl_burning.set_on_fire(self.attack, 5) - end - local pos = self.object:get_pos() - minetest.add_particle({ - pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, - velocity = {x=0, y=math.random(1,1), z=0}, - expirationtime = math.random(), - size = math.random(1, 4), - collisiondetection = true, - vertical = false, - texture = "mcl_particles_smoke_anim.png^[colorize:#2c2c2c:255", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }) - minetest.add_particle({ - pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, - velocity = {x=0, y=math.random(1,1), z=0}, - expirationtime = math.random(), - size = math.random(1, 4), - collisiondetection = true, - vertical = false, - texture = "mcl_particles_smoke_anim.png^[colorize:#424242:255", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }) - minetest.add_particle({ - pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, - velocity = {x=0, y=math.random(1,1), z=0}, - expirationtime = math.random(), - size = math.random(1, 4), - collisiondetection = true, - vertical = false, - texture = "mcl_particles_smoke_anim.png^[colorize:#0f0f0f:255", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }) - end, -}) - -mcl_mobs:spawn_specific( -"mobs_mc:blaze", -"nether", -"ground", -{"Nether"}, -0, -minetest.LIGHT_MAX+1, -30, -5000, -3, -mcl_vars.mg_nether_min, -mcl_vars.mg_nether_max) - --- Blaze fireball -mcl_mobs:register_arrow("mobs_mc:blaze_fireball", { - visual = "sprite", - visual_size = {x = 0.3, y = 0.3}, - textures = {"mcl_fire_fire_charge.png"}, - velocity = 15, - _is_fireball = true, - - -- Direct hit, no fire... just plenty of pain - hit_player = function(self, player) - mcl_burning.set_on_fire(player, 5) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 5}, - }, nil) - end, - - hit_mob = function(self, mob) - mcl_burning.set_on_fire(mob, 5) - mob:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 5}, - }, nil) - end, - - hit_object = function(self, object) - local lua = object:get_luaentity() - if lua then - if lua.name == "mcl_minecarts:tnt_minecart" then - lua:on_activate_by_rail(2) - end - end - end, - - -- Node hit, make fire - hit_node = function(self, pos, node) - if node == "air" then - minetest.set_node(pos, {name = "mcl_fire:fire"}) - else - if self._shot_from_dispenser and mod_target and node == "mcl_target:target_off" then - mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks - end - local v = vector.normalize(self.object:get_velocity()) - local crashpos = vector.subtract(pos, v) - local crashnode = minetest.get_node(crashpos) - local cndef = minetest.registered_nodes[crashnode.name] - -- Set fire if node is air, or a replacable flammable node (e.g. a plant) - if crashnode.name == "air" or - (cndef and cndef.buildable_to and minetest.get_item_group(crashnode.name, "flammable") >= 1) then - minetest.set_node(crashpos, {name = "mcl_fire:fire"}) - end - end - end -}) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:blaze", S("Blaze"), "mobs_mc_spawn_icon_blaze.png", 0) diff --git a/mods/ENTITIES/mobs_mc/chicken.lua b/mods/ENTITIES/mobs_mc/chicken.lua deleted file mode 100644 index a36b58502..000000000 --- a/mods/ENTITIES/mobs_mc/chicken.lua +++ /dev/null @@ -1,159 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### CHICKEN ---################### - - - -mcl_mobs:register_mob("mobs_mc:chicken", { - description = S("Chicken"), - type = "animal", - spawn_class = "passive", - - hp_min = 4, - hp_max = 4, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.69, 0.2}, - runaway = true, - floats = 1, - visual = "mesh", - mesh = "mobs_mc_chicken.b3d", - textures = { - {"mobs_mc_chicken.png"}, - }, - visual_size = {x=2.2, y=2.2}, - - makes_footstep_sound = true, - walk_velocity = 1, - drops = { - {name = "mcl_mobitems:chicken", - chance = 1, - min = 1, - max = 1, - looting = "common",}, - {name = "mcl_mobitems:feather", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - }, - fall_damage = 0, - fall_speed = -2.25, - sounds = { - random = "mobs_mc_chicken_buck", - damage = "mobs_mc_chicken_hurt", - death = "mobs_mc_chicken_hurt", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - sounds_child = { - random = "mobs_mc_chicken_child", - damage = "mobs_mc_chicken_child", - death = "mobs_mc_chicken_child", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - animation = { - stand_speed = 25, walk_speed = 25, run_speed = 50, - stand_start = 0, stand_end = 0, - walk_start = 0, walk_end = 40, - run_start = 0, run_end = 40, - }, - - follow = { - "mcl_farming:wheat_seeds", - "mcl_farming:melon_seeds", - "mcl_farming:pumpkin_seeds", - "mcl_farming:beetroot_seeds", - }, - view_range = 16, - fear_height = 4, - - on_rightclick = function(self, clicker) - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end - if mcl_mobs:protect(self, clicker) then return end - if mcl_mobs:capture_mob(self, clicker, 0, 60, 5, false, nil) then return end - end, - - do_custom = function(self, dtime) - - self.egg_timer = (self.egg_timer or 0) + dtime - if self.egg_timer < 10 then - return - end - self.egg_timer = 0 - - if self.child - or math.random(1, 100) > 1 then - return - end - - local pos = self.object:get_pos() - - minetest.add_item(pos, "mcl_throwing:egg") - - minetest.sound_play("mobs_mc_chicken_lay_egg", { - pos = pos, - gain = 1.0, - max_hear_distance = 16, - }, true) - end, - -}) - ---spawn -mcl_mobs:spawn_specific( -"mobs_mc:chicken", -"overworld", -"ground", -{ - "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", - "MegaTaiga", - "MegaSpruceTaiga", - "ExtremeHills", - "ExtremeHills_beach", - "ExtremeHillsM", - "ExtremeHills+", - "ExtremeHills+_snowtop", - "StoneBeach", - "Plains", - "Plains_beach", - "SunflowerPlains", - "Taiga", - "Taiga_beach", - "Forest", - "Forest_beach", - "FlowerForest", - "FlowerForest_beach", - "BirchForest", - "BirchForestM", - "RoofedForest", - "Savanna", - "Savanna_beach", - "SavannaM", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", - "JungleEdge", - "JungleEdgeM", - "Swampland", - "Swampland_shore" -}, -9, -minetest.LIGHT_MAX+1, -30, 17000, -3, -mobs_mc.water_level, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0) diff --git a/mods/ENTITIES/mobs_mc/common.lua b/mods/ENTITIES/mobs_mc/common.lua deleted file mode 100644 index e69de29bb..000000000 diff --git a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua deleted file mode 100644 index b2d6158bc..000000000 --- a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua +++ /dev/null @@ -1,218 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - -local cow_def = { - description = S("Cow"), - type = "animal", - spawn_class = "passive", - hp_min = 10, - hp_max = 10, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.39, 0.45}, - visual = "mesh", - mesh = "mobs_mc_cow.b3d", - textures = { { - "mobs_mc_cow.png", - "blank.png", - }, }, - visual_size = {x=2.8, y=2.8}, - makes_footstep_sound = true, - walk_velocity = 1, - drops = { - {name = "mcl_mobitems:beef", - chance = 1, - min = 1, - max = 3, - looting = "common",}, - {name = "mcl_mobitems:leather", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - }, - runaway = true, - sounds = { - random = "mobs_mc_cow", - damage = "mobs_mc_cow_hurt", - death = "mobs_mc_cow_hurt", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - animation = { - stand_speed = 25, walk_speed = 40, - run_speed = 60, stand_start = 0, - stand_end = 0, walk_start = 0, - walk_end = 40, run_start = 0, - run_end = 40, - }, - on_rightclick = function(self, clicker) - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end - if mcl_mobs:protect(self, clicker) then return end - - if self.child then - return - end - - local item = clicker:get_wielded_item() - if item:get_name() == "mcl_buckets:bucket_empty" and clicker:get_inventory() then - local inv = clicker:get_inventory() - inv:remove_item("main", "mcl_buckets:bucket_empty") - minetest.sound_play("mobs_mc_cow_milk", {pos=self.object:get_pos(), gain=0.6}) - -- if room add bucket of milk to inventory, otherwise drop as item - if inv:room_for_item("main", {name = "mcl_mobitems:milk_bucket"}) then - clicker:get_inventory():add_item("main", "mcl_mobitems:milk_bucket") - else - local pos = self.object:get_pos() - pos.y = pos.y + 0.5 - minetest.add_item(pos, {name = "mcl_mobitems:milk_bucket"}) - end - return - end - mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) - end, - follow = "mcl_farming:wheat_item", - view_range = 10, - fear_height = 4, -} - -mcl_mobs:register_mob("mobs_mc:cow", cow_def) - --- Mooshroom -local mooshroom_def = table.copy(cow_def) -mooshroom_def.description = S("Mooshroom") -mooshroom_def.mesh = "mobs_mc_cow.b3d" -mooshroom_def.textures = { {"mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png"}, {"mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } } -mooshroom_def.on_rightclick = function(self, clicker) - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end - if mcl_mobs:protect(self, clicker) then return end - - if self.child then - return - end - local item = clicker:get_wielded_item() - -- Use shears to get mushrooms and turn mooshroom into cow - if item:get_name() == "mcl_tools:shears" then - local pos = self.object:get_pos() - minetest.sound_play("mcl_tools_shears_cut", {pos = pos}, true) - - if self.base_texture[1] == "mobs_mc_mooshroom_brown.png" then - minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, "mcl_mushrooms:mushroom_brown 5") - else - minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, "mcl_mushrooms:mushroom_red 5") - end - - local oldyaw = self.object:get_yaw() - self.object:remove() - local cow = minetest.add_entity(pos, "mobs_mc:cow") - cow:set_yaw(oldyaw) - - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:add_wear(mobs_mc.shears_wear) - clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item) - end - -- Use bucket to milk - elseif item:get_name() == "mcl_buckets:bucket_empty" and clicker:get_inventory() then - local inv = clicker:get_inventory() - inv:remove_item("main", "mcl_buckets:bucket_empty") - minetest.sound_play("mobs_mc_cow_milk", {pos=self.object:get_pos(), gain=0.6}) - -- If room, add milk to inventory, otherwise drop as item - if inv:room_for_item("main", {name="mcl_mobitems:milk_bucket"}) then - clicker:get_inventory():add_item("main", "mcl_mobitems:milk_bucket") - else - local pos = self.object:get_pos() - pos.y = pos.y + 0.5 - minetest.add_item(pos, {name = "mcl_mobitems:milk_bucket"}) - end - -- Use bowl to get mushroom stew - elseif item:get_name() == "mcl_core:bowl" and clicker:get_inventory() then - local inv = clicker:get_inventory() - inv:remove_item("main", "mcl_core:bowl") - minetest.sound_play("mobs_mc_cow_mushroom_stew", {pos=self.object:get_pos(), gain=0.6}) - -- If room, add mushroom stew to inventory, otherwise drop as item - if inv:room_for_item("main", {name="mcl_mushrooms:mushroom_stew"}) then - clicker:get_inventory():add_item("main", "mcl_mushrooms:mushroom_stew") - else - local pos = self.object:get_pos() - pos.y = pos.y + 0.5 - minetest.add_item(pos, {name = "mcl_mushrooms:mushroom_stew"}) - end - end - mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) -end -mcl_mobs:register_mob("mobs_mc:mooshroom", mooshroom_def) - - --- Spawning -mcl_mobs:spawn_specific( -"mobs_mc:cow", -"overworld", -"ground", -{ - "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", - "MegaTaiga", - "MegaSpruceTaiga", - "ExtremeHills", - "ExtremeHills_beach", - "ExtremeHillsM", - "ExtremeHills+", - "ExtremeHills+_snowtop", - "StoneBeach", - "Plains", - "Plains_beach", - "SunflowerPlains", - "Taiga", - "Taiga_beach", - "Forest", - "Forest_beach", - "FlowerForest", - "FlowerForest_beach", - "BirchForest", - "BirchForestM", - "RoofedForest", - "Savanna", - "Savanna_beach", - "SavannaM", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", - "JungleEdge", - "JungleEdgeM", - "Swampland", - "Swampland_shore" -}, -9, -minetest.LIGHT_MAX+1, -30, -17000, -10, -mobs_mc.water_level, -mcl_vars.mg_overworld_max) - - - -mcl_mobs:spawn_specific( -"mobs_mc:mooshroom", -"overworld", -"ground", -{ -"MushroomIslandShore", -"MushroomIsland" -}, -9, -minetest.LIGHT_MAX+1, -30, -17000, -5, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- spawn egg -mcl_mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0) -mcl_mobs:register_egg("mobs_mc:mooshroom", S("Mooshroom"), "mobs_mc_spawn_icon_mooshroom.png", 0) diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua deleted file mode 100644 index 8d50c6755..000000000 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ /dev/null @@ -1,411 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### CREEPER ---################### - - - - -mcl_mobs:register_mob("mobs_mc:creeper", { - type = "monster", - spawn_class = "hostile", - hp_min = 20, - hp_max = 20, - xp_min = 5, - xp_max = 5, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3}, - pathfinding = 1, - visual = "mesh", - mesh = "mobs_mc_creeper.b3d", - textures = { - {"mobs_mc_creeper.png", - "mobs_mc_empty.png"}, - }, - visual_size = {x=3, y=3}, - sounds = { - attack = "tnt_ignite", - death = "mobs_mc_creeper_death", - damage = "mobs_mc_creeper_hurt", - fuse = "tnt_ignite", - explode = "tnt_explode", - distance = 16, - }, - makes_footstep_sound = true, - walk_velocity = 1.05, - run_velocity = 2.1, - runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, - attack_type = "explode", - - --hssssssssssss - - explosion_strength = 3, - explosion_radius = 3.5, - explosion_damage_radius = 3.5, - explosiontimer_reset_radius = 6, - reach = 3, - explosion_timer = 1.5, - allow_fuse_reset = true, - stop_to_explode = true, - - -- Force-ignite creeper with flint and steel and explode after 1.5 seconds. - -- TODO: Make creeper flash after doing this as well. - -- TODO: Test and debug this code. - on_rightclick = function(self, clicker) - if self._forced_explosion_countdown_timer ~= nil then - return - end - local item = clicker:get_wielded_item() - if item:get_name() == "mcl_fire:flint_and_steel" then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - -- Wear tool - local wdef = item:get_definition() - item:add_wear(1000) - -- Tool break sound - if item:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = clicker:get_pos(), gain = 0.5}, true) - end - clicker:set_wielded_item(item) - end - self._forced_explosion_countdown_timer = self.explosion_timer - minetest.sound_play(self.sounds.attack, {pos = self.object:get_pos(), gain = 1, max_hear_distance = 16}, true) - end - end, - do_custom = function(self, dtime) - if self._forced_explosion_countdown_timer ~= nil then - self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime - if self._forced_explosion_countdown_timer <= 0 then - mcl_mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) - end - end - end, - on_die = function(self, pos, cmi_cause) - -- Drop a random music disc when killed by skeleton or stray - if cmi_cause and cmi_cause.type == "punch" then - local luaentity = cmi_cause.puncher and cmi_cause.puncher:get_luaentity() - if luaentity and luaentity.name:find("arrow") then - local shooter_luaentity = luaentity._shooter and luaentity._shooter:get_luaentity() - if shooter_luaentity and (shooter_luaentity.name == "mobs_mc:skeleton" or shooter_luaentity.name == "mobs_mc:stray") then - minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, "mcl_jukebox:record_" .. math.random(9)) - end - end - end - end, - maxdrops = 2, - drops = { - {name = "mcl_mobitems:gunpowder", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - - -- Head - -- TODO: Only drop if killed by charged creeper - {name = "mcl_heads:creeper", - chance = 200, -- 0.5% - min = 1, - max = 1,}, - }, - animation = { - speed_normal = 24, - speed_run = 48, - stand_start = 0, - stand_end = 23, - walk_start = 24, - walk_end = 49, - run_start = 24, - run_end = 49, - hurt_start = 110, - hurt_end = 139, - death_start = 140, - death_end = 189, - look_start = 50, - look_end = 108, - }, - floats = 1, - fear_height = 4, - view_range = 16, -}) - -mcl_mobs:register_mob("mobs_mc:creeper_charged", { - description = S("Creeper"), - type = "monster", - spawn_class = "hostile", - hp_min = 20, - hp_max = 20, - xp_min = 5, - xp_max = 5, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3}, - pathfinding = 1, - visual = "mesh", - mesh = "mobs_mc_creeper.b3d", - - --BOOM - - textures = { - {"mobs_mc_creeper.png", - "mobs_mc_creeper_charge.png"}, - }, - visual_size = {x=3, y=3}, - sounds = { - attack = "tnt_ignite", - death = "mobs_mc_creeper_death", - damage = "mobs_mc_creeper_hurt", - fuse = "tnt_ignite", - explode = "tnt_explode", - distance = 16, - }, - makes_footstep_sound = true, - walk_velocity = 1.05, - run_velocity = 2.1, - runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, - attack_type = "explode", - - explosion_strength = 6, - explosion_radius = 8, - explosion_damage_radius = 8, - explosiontimer_reset_radius = 6, - reach = 3, - explosion_timer = 1.5, - allow_fuse_reset = true, - stop_to_explode = true, - - -- Force-ignite creeper with flint and steel and explode after 1.5 seconds. - -- TODO: Make creeper flash after doing this as well. - -- TODO: Test and debug this code. - on_rightclick = function(self, clicker) - if self._forced_explosion_countdown_timer ~= nil then - return - end - local item = clicker:get_wielded_item() - if item:get_name() == "mcl_fire:flint_and_steel" then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - -- Wear tool - local wdef = item:get_definition() - item:add_wear(1000) - -- Tool break sound - if item:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = clicker:get_pos(), gain = 0.5}, true) - end - clicker:set_wielded_item(item) - end - self._forced_explosion_countdown_timer = self.explosion_timer - minetest.sound_play(self.sounds.attack, {pos = self.object:get_pos(), gain = 1, max_hear_distance = 16}, true) - end - end, - do_custom = function(self, dtime) - if self._forced_explosion_countdown_timer ~= nil then - self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime - if self._forced_explosion_countdown_timer <= 0 then - mcl_mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) - end - end - end, - on_die = function(self, pos, cmi_cause) - -- Drop a random music disc when killed by skeleton or stray - if cmi_cause and cmi_cause.type == "punch" then - local luaentity = cmi_cause.puncher and cmi_cause.puncher:get_luaentity() - if luaentity and luaentity.name:find("arrow") then - local shooter_luaentity = luaentity._shooter and luaentity._shooter:get_luaentity() - if shooter_luaentity and (shooter_luaentity.name == "mobs_mc:skeleton" or shooter_luaentity.name == "mobs_mc:stray") then - minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, "mcl_jukebox:record_" .. math.random(9)) - end - end - end - end, - maxdrops = 2, - drops = { - {name = "mcl_mobitems:gunpowder", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - - -- Head - -- TODO: Only drop if killed by charged creeper - {name = "mcl_heads:creeper", - chance = 200, -- 0.5% - min = 1, - max = 1,}, - }, - animation = { - speed_normal = 24, - speed_run = 48, - stand_start = 0, - stand_end = 23, - walk_start = 24, - walk_end = 49, - run_start = 24, - run_end = 49, - hurt_start = 110, - hurt_end = 139, - death_start = 140, - death_end = 189, - look_start = 50, - look_end = 108, - }, - floats = 1, - fear_height = 4, - view_range = 16, - --Having trouble when fire is placed with lightning - fire_resistant = true, - glow = 3, -}) - -mcl_mobs:spawn_specific( -"mobs_mc:creeper", -"overworld", -"ground", -{ -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"Desert", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -"RoofedForest_ocean", -"JungleEdgeM_ocean", -"BirchForestM_ocean", -"BirchForest_ocean", -"IcePlains_deep_ocean", -"Jungle_deep_ocean", -"Savanna_ocean", -"MesaPlateauF_ocean", -"ExtremeHillsM_deep_ocean", -"Savanna_deep_ocean", -"SunflowerPlains_ocean", -"Swampland_deep_ocean", -"Swampland_ocean", -"MegaSpruceTaiga_deep_ocean", -"ExtremeHillsM_ocean", -"JungleEdgeM_deep_ocean", -"SunflowerPlains_deep_ocean", -"BirchForest_deep_ocean", -"IcePlainsSpikes_ocean", -"Mesa_ocean", -"StoneBeach_ocean", -"Plains_deep_ocean", -"JungleEdge_deep_ocean", -"SavannaM_deep_ocean", -"Desert_deep_ocean", -"Mesa_deep_ocean", -"ColdTaiga_deep_ocean", -"Plains_ocean", -"MesaPlateauFM_ocean", -"Forest_deep_ocean", -"JungleM_deep_ocean", -"FlowerForest_deep_ocean", -"MushroomIsland_ocean", -"MegaTaiga_ocean", -"StoneBeach_deep_ocean", -"IcePlainsSpikes_deep_ocean", -"ColdTaiga_ocean", -"SavannaM_ocean", -"MesaPlateauF_deep_ocean", -"MesaBryce_deep_ocean", -"ExtremeHills+_deep_ocean", -"ExtremeHills_ocean", -"MushroomIsland_deep_ocean", -"Forest_ocean", -"MegaTaiga_deep_ocean", -"JungleEdge_ocean", -"MesaBryce_ocean", -"MegaSpruceTaiga_ocean", -"ExtremeHills+_ocean", -"Jungle_ocean", -"RoofedForest_deep_ocean", -"IcePlains_ocean", -"FlowerForest_ocean", -"ExtremeHills_deep_ocean", -"MesaPlateauFM_deep_ocean", -"Desert_ocean", -"Taiga_ocean", -"BirchForestM_deep_ocean", -"Taiga_deep_ocean", -"JungleM_ocean", -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -7, -20, -16500, -2, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0) diff --git a/mods/ENTITIES/mobs_mc/depends.txt b/mods/ENTITIES/mobs_mc/depends.txt deleted file mode 100644 index 674eb8094..000000000 --- a/mods/ENTITIES/mobs_mc/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_mobs \ No newline at end of file diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua deleted file mode 100644 index d2f971f79..000000000 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ /dev/null @@ -1,142 +0,0 @@ ---################### ---################### ENDERDRAGON ---################### - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:enderdragon", { - description = S("Ender Dragon"), - type = "monster", - spawn_class = "hostile", - pathfinding = 1, - attacks_animals = true, - walk_chance = 100, - hp_max = 200, - hp_min = 200, - xp_min = 500, - xp_max = 500, - collisionbox = {-2, 3, -2, 2, 5, 2}, - physical = false, - visual = "mesh", - mesh = "mobs_mc_dragon.b3d", - textures = { - {"mobs_mc_dragon.png"}, - }, - visual_size = {x=3, y=3}, - view_range = 35, - walk_velocity = 6, - run_velocity = 6, - can_despawn = false, - sounds = { - -- TODO: more sounds - shoot_attack = "mobs_mc_ender_dragon_shoot", - attack = "mobs_mc_ender_dragon_attack", - distance = 60, - }, - physical = true, - damage = 10, - jump = true, - jump_height = 14, - fly = true, - makes_footstep_sound = false, - dogshoot_switch = 1, - dogshoot_count_max =5, - dogshoot_count2_max = 5, - passive = false, - attack_animals = true, - lava_damage = 0, - fire_damage = 0, - on_rightclick = nil, - attack_type = "dogshoot", - arrow = "mobs_mc:dragon_fireball", - shoot_interval = 0.5, - shoot_offset = -1.0, - xp_min = 500, - xp_max = 500, - animation = { - fly_speed = 8, stand_speed = 8, - stand_start = 0, stand_end = 20, - walk_start = 0, walk_end = 20, - run_start = 0, run_end = 20, - }, - ignores_nametag = true, - do_custom = function(self) - mcl_bossbars.update_boss(self.object, "Ender Dragon", "light_purple") - for _, obj in ipairs(minetest.get_objects_inside_radius(self.object:get_pos(), 80)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_end:crystal" then - if luaentity.beam then - if luaentity.beam == self.beam then - break - end - else - if self.beam then - self.beam:remove() - end - minetest.add_entity(self.object:get_pos(), "mcl_end:crystal_beam"):get_luaentity():init(self.object, obj) - break - end - end - end - if self._portal_pos then - -- migrate old format - if type(self._portal_pos) == "string" then - self._portal_pos = minetest.string_to_pos(self._portal_pos) - end - local portal_center = vector.add(self._portal_pos, vector.new(3, 11, 3)) - local pos = self.object:get_pos() - if vector.distance(pos, portal_center) > 50 then - self.object:set_pos(self._last_good_pos or portal_center) - else - self._last_good_pos = pos - end - end - end, - on_die = function(self, pos) - if self._portal_pos then - mcl_portals.spawn_gateway_portal() - mcl_structures.call_struct(self._portal_pos, "end_exit_portal_open") - if self._initial then - mcl_experience.throw_xp(pos, 11500) -- 500 + 11500 = 12000 - minetest.set_node(vector.add(self._portal_pos, vector.new(3, 5, 3)), {name = "mcl_end:dragon_egg"}) - end - end - end, - fire_resistant = true, -}) - - -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false - --- dragon fireball (projectile) -mcl_mobs:register_arrow("mobs_mc:dragon_fireball", { - visual = "sprite", - visual_size = {x = 1.25, y = 1.25}, - textures = {"mobs_mc_dragon_fireball.png"}, - velocity = 6, - - -- direct hit, no fire... just plenty of pain - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 0.5, - damage_groups = {fleshy = 12}, - }, nil) - end, - - hit_mob = function(self, mob) - minetest.sound_play("tnt_explode", {pos = mob:get_pos(), gain = 1.5, max_hear_distance = 2*64}, true) - mob:punch(self.object, 1.0, { - full_punch_interval = 0.5, - damage_groups = {fleshy = 12}, - }, nil) - end, - - -- node hit, explode - hit_node = function(self, pos, node) - mcl_mobs:boom(self, pos, 2) - end -}) - -mcl_mobs:register_egg("mobs_mc:enderdragon", S("Ender Dragon"), "mobs_mc_spawn_icon_dragon.png", 0, true) - -mcl_wip.register_wip_item("mobs_mc:enderdragon") diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua deleted file mode 100644 index 9ed59bb1f..000000000 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ /dev/null @@ -1,780 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - --- ENDERMAN BEHAVIOUR (OLD): --- In this game, endermen attack the player on sight, like other monsters do. --- However, they have a reduced viewing range to make them less dangerous. --- This differs from MC, in which endermen only become hostile when provoked, --- and they are provoked by looking directly at them. - --- Rootyjr ------------------------------ --- implemented ability to detect when seen / break eye contact and aggressive response --- implemented teleport to avoid arrows. --- implemented teleport to avoid rain. --- implemented teleport to chase. --- added enderman particles. --- drew mcl_portal_particle1.png --- drew mcl_portal_particle2.png --- drew mcl_portal_particle3.png --- drew mcl_portal_particle4.png --- drew mcl_portal_particle5.png --- added rain damage. --- fixed the grass_with_dirt issue. - -local S = minetest.get_translator("mobs_mc") - -local telesound = function(pos, is_source) - local snd - if is_source then - snd = "mobs_mc_enderman_teleport_src" - else - snd = "mobs_mc_enderman_teleport_dst" - end - minetest.sound_play(snd, {pos=pos, max_hear_distance=16}, true) -end - ---################### ---################### ENDERMAN ---################### - -local pr = PseudoRandom(os.time()*(-334)) - --- How freqeuntly to take and place blocks, in seconds -local take_frequency_min = 235 -local take_frequency_max = 245 -local place_frequency_min = 235 -local place_frequency_max = 245 - - --- Texuture overrides for enderman block. Required for cactus because it's original is a nodebox --- and the textures have tranparent pixels. -local block_texture_overrides -do - local cbackground = "mobs_mc_enderman_cactus_background.png" - local ctiles = minetest.registered_nodes["mcl_core:cactus"].tiles - - local ctable = {} - local last - for i=1, 6 do - if ctiles[i] then - last = ctiles[i] - end - table.insert(ctable, cbackground .. "^" .. last) - end - - block_texture_overrides = { - ["mcl_core:cactus"] = ctable, - -- FIXME: replace colorize colors with colors from palette - ["mcl_core:dirt_with_grass"] = - { - "mcl_core_grass_block_top.png^[colorize:green:90", - "default_dirt.png", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)"} - } -end - --- Create the textures table for the enderman, depending on which kind of block --- the enderman holds (if any). -local create_enderman_textures = function(block_type, itemstring) - local base = "mobs_mc_enderman.png^mobs_mc_enderman_eyes.png" - - --[[ Order of the textures in the texture table: - Flower, 90 degrees - Flower, 45 degrees - Held block, backside - Held block, bottom - Held block, front - Held block, left - Held block, right - Held block, top - Enderman texture (base) - ]] - -- Regular cube - if block_type == "cube" then - local tiles = minetest.registered_nodes[itemstring].tiles - local textures = {} - local last - if block_texture_overrides[itemstring] then - -- Texture override available? Use these instead! - textures = block_texture_overrides[itemstring] - else - -- Extract the texture names - for i = 1, 6 do - if type(tiles[i]) == "string" then - last = tiles[i] - elseif type(tiles[i]) == "table" then - if tiles[i].name then - last = tiles[i].name - end - end - table.insert(textures, last) - end - end - return { - "blank.png", - "blank.png", - textures[5], - textures[2], - textures[6], - textures[3], - textures[4], - textures[1], - base, -- Enderman texture - } - -- Node of plantlike drawtype, 45° (recommended) - elseif block_type == "plantlike45" then - local textures = minetest.registered_nodes[itemstring].tiles - return { - "blank.png", - textures[1], - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - base, - } - -- Node of plantlike drawtype, 90° - elseif block_type == "plantlike90" then - local textures = minetest.registered_nodes[itemstring].tiles - return { - textures[1], - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - base, - } - elseif block_type == "unknown" then - return { - "blank.png", - "blank.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - base, -- Enderman texture - } - -- No block held (for initial texture) - elseif block_type == "nothing" or block_type == nil then - return { - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - base, -- Enderman texture - } - end -end - --- Select a new animation definition. -local select_enderman_animation = function(animation_type) - -- Enderman holds a block - if animation_type == "block" then - return { - walk_speed = 25, - run_speed = 50, - stand_speed = 25, - stand_start = 200, - stand_end = 200, - walk_start = 161, - walk_end = 200, - run_start = 161, - run_end = 200, - punch_start = 121, - punch_end = 160, - } - -- Enderman doesn't hold a block - elseif animation_type == "normal" or animation_type == nil then - return { - walk_speed = 25, - run_speed = 50, - stand_speed = 25, - stand_start = 40, - stand_end = 80, - walk_start = 0, - walk_end = 40, - run_start = 0, - run_end = 40, - punch_start = 81, - punch_end = 120, - } - end -end - -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false - -mcl_mobs:register_mob("mobs_mc:enderman", { - description = S("Enderman"), - type = "monster", - spawn_class = "passive", - passive = true, - pathfinding = 1, - hp_min = 40, - hp_max = 40, - xp_min = 5, - xp_max = 5, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 2.89, 0.3}, - visual = "mesh", - mesh = "mobs_mc_enderman.b3d", - textures = create_enderman_textures(), - visual_size = {x=3, y=3}, - makes_footstep_sound = true, - sounds = { - -- TODO: Custom war cry sound - war_cry = "mobs_sandmonster", - death = {name="mobs_mc_enderman_death", gain=0.7}, - damage = {name="mobs_mc_enderman_hurt", gain=0.5}, - random = {name="mobs_mc_enderman_random", gain=0.5}, - distance = 16, - }, - walk_velocity = 0.2, - run_velocity = 3.4, - damage = 7, - reach = 2, - drops = { - {name = "mcl_throwing:ender_pearl", - chance = 1, - min = 0, - max = 1, - looting = "common"}, - }, - animation = select_enderman_animation("normal"), - _taken_node = "", - do_custom = function(self, dtime) - -- PARTICLE BEHAVIOUR HERE. - local enderpos = self.object:get_pos() - local chanceOfParticle = math.random(0, 1) - if chanceOfParticle == 1 then - minetest.add_particle({ - pos = {x=enderpos.x+math.random(-1,1)*math.random()/2,y=enderpos.y+math.random(0,3),z=enderpos.z+math.random(-1,1)*math.random()/2}, - velocity = {x=math.random(-.25,.25), y=math.random(-.25,.25), z=math.random(-.25,.25)}, - acceleration = {x=math.random(-.5,.5), y=math.random(-.5,.5), z=math.random(-.5,.5)}, - expirationtime = math.random(), - size = math.random(), - collisiondetection = true, - vertical = false, - texture = "mcl_portals_particle"..math.random(1, 5)..".png", - }) - end - -- RAIN DAMAGE / EVASIVE WARP BEHAVIOUR HERE. - local dim = mcl_worlds.pos_to_dimension(enderpos) - if dim == "overworld" then - if mcl_weather.state == "rain" or mcl_weather.state == "lightning" then - local damage = true - local enderpos = self.object:get_pos() - enderpos.y = enderpos.y+2.89 - local height = {x=enderpos.x, y=enderpos.y+512,z=enderpos.z} - local ray = minetest.raycast(enderpos, height, true) - -- Check for blocks above enderman. - for pointed_thing in ray do - if pointed_thing.type == "node" then - local nn = minetest.get_node(minetest.get_pointed_thing_position(pointed_thing)).name - local def = minetest.registered_nodes[nn] - if (not def) or def.walkable then - -- There's a node in the way. Delete arrow without damage - damage = false - break - end - end - end - - if damage == true then - self.state = "" - --rain hurts enderman - self.object:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=self._damage}, - }, nil) - --randomly teleport hopefully under something. - self:teleport(nil) - end - end - else return end - -- AGRESSIVELY WARP/CHASE PLAYER BEHAVIOUR HERE. - if self.state == "attack" then - --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then - --self:teleport(nil) - --self.state = "" - --else - if self.attack then - local target = self.attack - local pos = target:get_pos() - if pos ~= nil then - if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then - self:teleport(target) - end - end - end - --end - end - -- ARROW / DAYTIME PEOPLE AVOIDANCE BEHAVIOUR HERE. - -- Check for arrows and people nearby. - local enderpos = self.object:get_pos() - enderpos.y = enderpos.y + 1.5 - local objs = minetest.get_objects_inside_radius(enderpos, 2) - for n = 1, #objs do - local obj = objs[n] - if obj then - if minetest.is_player(obj) then - -- Warp from players during day. - --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then - -- self:teleport(nil) - --end - else - local lua = obj:get_luaentity() - if lua then - if lua.name == "mcl_bows:arrow_entity" or lua.name == "mcl_throwing:snowball_entity" then - self:teleport(nil) - end - end - end - end - end - -- PROVOKED BEHAVIOUR HERE. - local enderpos = self.object:get_pos() - if self.provoked == "broke_contact" then - self.provoked = "false" - --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then - -- self:teleport(nil) - -- self.state = "" - --else - if self.attack ~= nil and not minetest.settings:get_bool("creative_mode") then - self.state = 'attack' - end - --end - end - -- Check to see if people are near by enough to look at us. - for _,obj in pairs(minetest.get_connected_players()) do - - --check if they are within radius - local player_pos = obj:get_pos() - if player_pos then -- prevent crashing in 1 in a million scenario - - local ender_distance = vector.distance(enderpos, player_pos) - if ender_distance <= 64 then - - -- Check if they are looking at us. - local look_dir_not_normalized = obj:get_look_dir() - local look_dir = vector.normalize(look_dir_not_normalized) - local player_eye_height = obj:get_properties().eye_height - - --skip player if they have no data - log it - if not player_eye_height then - minetest.log("error", "Enderman at location: ".. dump(enderpos).." has indexed a null player!") - else - - --calculate very quickly the exact location the player is looking - --within the distance between the two "heads" (player and enderman) - local look_pos = vector.new(player_pos.x, player_pos.y + player_eye_height, player_pos.z) - local look_pos_base = look_pos - local ender_eye_pos = vector.new(enderpos.x, enderpos.y + 2.75, enderpos.z) - local eye_distance_from_player = vector.distance(ender_eye_pos, look_pos) - look_pos = vector.add(look_pos, vector.multiply(look_dir, eye_distance_from_player)) - - --if looking in general head position, turn hostile - if minetest.line_of_sight(ender_eye_pos, look_pos_base) and vector.distance(look_pos, ender_eye_pos) <= 0.4 then - self.provoked = "staring" - self.attack = minetest.get_player_by_name(obj:get_player_name()) - break - else -- I'm not sure what this part does, but I don't want to break anything - jordan4ibanez - if self.provoked == "staring" then - self.provoked = "broke_contact" - end - end - - end - end - end - end - -- TAKE AND PLACE STUFF BEHAVIOUR BELOW. - if not mobs_griefing then - return - end - -- Take and put nodes - if not self._take_place_timer or not self._next_take_place_time then - self._take_place_timer = 0 - self._next_take_place_time = math.random(take_frequency_min, take_frequency_max) - return - end - self._take_place_timer = self._take_place_timer + dtime - if (self._taken_node == nil or self._taken_node == "") and self._take_place_timer >= self._next_take_place_time then - -- Take random node - self._take_place_timer = 0 - self._next_take_place_time = math.random(place_frequency_min, place_frequency_max) - local pos = self.object:get_pos() - local takable_nodes = minetest.find_nodes_in_area_under_air({x=pos.x-2, y=pos.y-1, z=pos.z-2}, {x=pos.x+2, y=pos.y+1, z=pos.z+2}, "group:enderman_takable") - if #takable_nodes >= 1 then - local r = pr:next(1, #takable_nodes) - local take_pos = takable_nodes[r] - local node = minetest.get_node(take_pos) - -- Don't destroy protected stuff. - if not minetest.is_protected(take_pos, "") then - minetest.remove_node(take_pos) - local dug = minetest.get_node_or_nil(take_pos) - if dug and dug.name == "air" then - self._taken_node = node.name - local def = minetest.registered_nodes[self._taken_node] - -- Update animation and texture accordingly (adds visibly carried block) - local block_type - -- Cube-shaped - if def.drawtype == "normal" or - def.drawtype == "nodebox" or - def.drawtype == "liquid" or - def.drawtype == "flowingliquid" or - def.drawtype == "glasslike" or - def.drawtype == "glasslike_framed" or - def.drawtype == "glasslike_framed_optional" or - def.drawtype == "allfaces" or - def.drawtype == "allfaces_optional" or - def.drawtype == nil then - block_type = "cube" - elseif def.drawtype == "plantlike" then - -- Flowers and stuff - block_type = "plantlike45" - elseif def.drawtype == "airlike" then - -- Just air - block_type = nil - else - -- Fallback for complex drawtypes - block_type = "unknown" - end - self.base_texture = create_enderman_textures(block_type, self._taken_node) - self.object:set_properties({ textures = self.base_texture }) - self.animation = select_enderman_animation("block") - mcl_mobs:set_animation(self, self.animation.current) - if def.sounds and def.sounds.dug then - minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true) - end - end - end - end - elseif self._taken_node ~= nil and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then - -- Place taken node - self._take_place_timer = 0 - self._next_take_place_time = math.random(take_frequency_min, take_frequency_max) - local pos = self.object:get_pos() - local yaw = self.object:get_yaw() - -- Place node at looking direction - local place_pos = vector.subtract(pos, minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(yaw)))) - -- Also check to see if protected. - if minetest.get_node(place_pos).name == "air" and not minetest.is_protected(place_pos, "") then - -- ... but only if there's a free space - local success = minetest.place_node(place_pos, {name = self._taken_node}) - if success then - local def = minetest.registered_nodes[self._taken_node] - -- Update animation accordingly (removes visible block) - self.animation = select_enderman_animation("normal") - mcl_mobs:set_animation(self, self.animation.current) - if def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16}, true) - end - self._taken_node = "" - end - end - end - end, - do_teleport = function(self, target) - if target ~= nil then - local target_pos = target:get_pos() - -- Find all solid nodes below air in a 10×10×10 cuboid centered on the target - local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(target_pos, 5), vector.add(target_pos, 5), {"group:solid", "group:cracky", "group:crumbly"}) - local telepos - if nodes ~= nil then - if #nodes > 0 then - -- Up to 64 attempts to teleport - for n=1, math.min(64, #nodes) do - local r = pr:next(1, #nodes) - local nodepos = nodes[r] - local node_ok = true - -- Selected node needs to have 3 nodes of free space above - for u=1, 3 do - local node = minetest.get_node({x=nodepos.x, y=nodepos.y+u, z=nodepos.z}) - local ndef = minetest.registered_nodes[node.name] - if ndef and ndef.walkable then - node_ok = false - break - end - end - if node_ok then - telepos = {x=nodepos.x, y=nodepos.y+1, z=nodepos.z} - end - end - if telepos then - telesound(self.object:get_pos(), false) - self.object:set_pos(telepos) - telesound(telepos, true) - end - end - end - else - -- Attempt to randomly teleport enderman - local pos = self.object:get_pos() - -- Up to 8 top-level attempts to teleport - for n=1, 8 do - local node_ok = false - -- We need to add (or subtract) different random numbers to each vector component, so it couldn't be done with a nice single vector.add() or .subtract(): - local randomCube = vector.new( pos.x + 8*(pr:next(0,16)-8), pos.y + 8*(pr:next(0,16)-8), pos.z + 8*(pr:next(0,16)-8) ) - local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(randomCube, 4), vector.add(randomCube, 4), {"group:solid", "group:cracky", "group:crumbly"}) - if nodes ~= nil then - if #nodes > 0 then - -- Up to 8 low-level (in total up to 8*8 = 64) attempts to teleport - for n=1, math.min(8, #nodes) do - local r = pr:next(1, #nodes) - local nodepos = nodes[r] - node_ok = true - for u=1, 3 do - local node = minetest.get_node({x=nodepos.x, y=nodepos.y+u, z=nodepos.z}) - local ndef = minetest.registered_nodes[node.name] - if ndef and ndef.walkable then - node_ok = false - break - end - end - if node_ok then - telesound(self.object:get_pos(), false) - local telepos = {x=nodepos.x, y=nodepos.y+1, z=nodepos.z} - self.object:set_pos(telepos) - telesound(telepos, true) - break - end - end - end - end - if node_ok then - break - end - end - end - end, - on_die = function(self, pos) - -- Drop carried node on death - if self._taken_node ~= nil and self._taken_node ~= "" then - minetest.add_item(pos, self._taken_node) - end - end, - do_punch = function(self, hitter, tflp, tool_caps, dir) - -- damage from rain caused by itself so we don't want it to attack itself. - if hitter ~= self.object and hitter ~= nil then - --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then - -- self:teleport(nil) - --else - if pr:next(1, 8) == 8 then --FIXME: real mc rate - self:teleport(hitter) - end - self.attack=hitter - self.state="attack" - --end - end - end, - armor = { fleshy = 100, water_vulnerable = 100 }, - water_damage = 8, - view_range = 64, - fear_height = 4, - attack_type = "dogfight", -}) - - --- End spawn -mcl_mobs:spawn_specific( -"mobs_mc:enderman", -"end", -"ground", -{ -"End" -}, -0, -minetest.LIGHT_MAX+1, -30, -3000, -12, -mcl_vars.mg_end_min, -mcl_vars.mg_end_max) --- Overworld spawn -mcl_mobs:spawn_specific( -"mobs_mc:enderman", -"overworld", -"ground", -{ -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"Desert", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -"RoofedForest_ocean", -"JungleEdgeM_ocean", -"BirchForestM_ocean", -"BirchForest_ocean", -"IcePlains_deep_ocean", -"Jungle_deep_ocean", -"Savanna_ocean", -"MesaPlateauF_ocean", -"ExtremeHillsM_deep_ocean", -"Savanna_deep_ocean", -"SunflowerPlains_ocean", -"Swampland_deep_ocean", -"Swampland_ocean", -"MegaSpruceTaiga_deep_ocean", -"ExtremeHillsM_ocean", -"JungleEdgeM_deep_ocean", -"SunflowerPlains_deep_ocean", -"BirchForest_deep_ocean", -"IcePlainsSpikes_ocean", -"Mesa_ocean", -"StoneBeach_ocean", -"Plains_deep_ocean", -"JungleEdge_deep_ocean", -"SavannaM_deep_ocean", -"Desert_deep_ocean", -"Mesa_deep_ocean", -"ColdTaiga_deep_ocean", -"Plains_ocean", -"MesaPlateauFM_ocean", -"Forest_deep_ocean", -"JungleM_deep_ocean", -"FlowerForest_deep_ocean", -"MushroomIsland_ocean", -"MegaTaiga_ocean", -"StoneBeach_deep_ocean", -"IcePlainsSpikes_deep_ocean", -"ColdTaiga_ocean", -"SavannaM_ocean", -"MesaPlateauF_deep_ocean", -"MesaBryce_deep_ocean", -"ExtremeHills+_deep_ocean", -"ExtremeHills_ocean", -"MushroomIsland_deep_ocean", -"Forest_ocean", -"MegaTaiga_deep_ocean", -"JungleEdge_ocean", -"MesaBryce_ocean", -"MegaSpruceTaiga_ocean", -"ExtremeHills+_ocean", -"Jungle_ocean", -"RoofedForest_deep_ocean", -"IcePlains_ocean", -"FlowerForest_ocean", -"ExtremeHills_deep_ocean", -"MesaPlateauFM_deep_ocean", -"Desert_ocean", -"Taiga_ocean", -"BirchForestM_deep_ocean", -"Taiga_deep_ocean", -"JungleM_ocean", -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -7, -30, -19000, -2, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- Nether spawn (rare) -mcl_mobs:spawn_specific( -"mobs_mc:enderman", -"nether", -"ground", -{ -"Nether" -}, -0, -7, -30, -27500, -4, -mcl_vars.mg_nether_min, -mcl_vars.mg_nether_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0) diff --git a/mods/ENTITIES/mobs_mc/endermite.lua b/mods/ENTITIES/mobs_mc/endermite.lua deleted file mode 100644 index 53200da70..000000000 --- a/mods/ENTITIES/mobs_mc/endermite.lua +++ /dev/null @@ -1,41 +0,0 @@ ---################### ---################### ENDERMITE ---################### - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:endermite", { - description = S("Endermite"), - type = "monster", - spawn_class = "hostile", - passive = false, - hp_min = 8, - hp_max = 8, - xp_min = 3, - xp_max = 3, - armor = {fleshy = 100, arthropod = 100}, - group_attack = true, - collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.29, 0.2}, - visual = "mesh", - mesh = "mobs_mc_endermite.b3d", - textures = { - {"mobs_mc_endermite.png"}, - }, - visual_size = {x=3, y=3}, - makes_footstep_sound = false, - sounds = { - random = "mobs_mc_endermite_random", - damage = "mobs_mc_endermite_hurt", - death = "mobs_mc_endermite_death", - distance = 16, - }, - walk_velocity = 1, - run_velocity = 2, - jump = true, - fear_height = 4, - view_range = 16, - damage = 2, - reach = 1, -}) - -mcl_mobs:register_egg("mobs_mc:endermite", S("Endermite"), "mobs_mc_spawn_icon_endermite.png", 0) diff --git a/mods/ENTITIES/mobs_mc/ghast.lua b/mods/ENTITIES/mobs_mc/ghast.lua deleted file mode 100644 index fd77b9ed8..000000000 --- a/mods/ENTITIES/mobs_mc/ghast.lua +++ /dev/null @@ -1,128 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### GHAST ---################### - - -mcl_mobs:register_mob("mobs_mc:ghast", { - description = S("Ghast"), - type = "monster", - spawn_class = "hostile", - pathfinding = 1, - group_attack = true, - hp_min = 10, - hp_max = 10, - xp_min = 5, - xp_max = 5, - collisionbox = {-2, 5, -2, 2, 9, 2}, - visual = "mesh", - mesh = "mobs_mc_ghast.b3d", - textures = { - {"mobs_mc_ghast.png"}, - }, - visual_size = {x=12, y=12}, - sounds = { - shoot_attack = "mobs_fireball", - death = "mobs_mc_zombie_death", - attack = "mobs_fireball", - random = "mobs_eerie", - distance = 16, - -- TODO: damage - -- TODO: better death - }, - walk_velocity = 1.6, - run_velocity = 3.2, - drops = { - {name = "mcl_mobitems:gunpowder", chance = 1, min = 0, max = 2, looting = "common"}, - {name = "mcl_mobitems:ghast_tear", chance = 10/6, min = 0, max = 1, looting = "common", looting_ignore_chance = true}, - }, - animation = { - stand_speed = 50, walk_speed = 50, run_speed = 50, - stand_start = 0, stand_end = 40, - walk_start = 0, walk_end = 40, - run_start = 0, run_end = 40, - }, - fall_damage = 0, - view_range = 100, - attack_type = "dogshoot", - arrow = "mobs_mc:fireball", - shoot_interval = 3.5, - shoot_offset = -5, - dogshoot_switch = 1, - dogshoot_count_max =1, - passive = false, - jump = true, - jump_height = 4, - floats=1, - fly = true, - makes_footstep_sound = false, - instant_death = true, - fire_resistant = true, - do_custom = function(self) - if self.firing == true then - self.base_texture = {"mobs_mc_ghast_firing.png"} - self.object:set_properties({textures=self.base_texture}) - else - self.base_texture = {"mobs_mc_ghast.png"} - self.object:set_properties({textures=self.base_texture}) - end - end, -}) - - -mcl_mobs:spawn_specific( -"mobs_mc:ghast", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -18000, -2, -mcl_vars.mg_nether_min, -mcl_vars.mg_nether_max) - --- fireball (projectile) -mcl_mobs:register_arrow("mobs_mc:fireball", { - visual = "sprite", - visual_size = {x = 1, y = 1}, - textures = {"mcl_fire_fire_charge.png"}, - velocity = 15, - collisionbox = {-.5, -.5, -.5, .5, .5, .5}, - _is_fireball = true, - - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 6}, - }, nil) - mcl_mobs:boom(self, self.object:get_pos(), 1, true) - end, - - hit_mob = function(self, mob) - mob:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 6}, - }, nil) - mcl_mobs:boom(self, self.object:get_pos(), 1, true) - end, - - hit_node = function(self, pos, node) - mcl_mobs:boom(self, pos, 1, true) - end -}) - - - - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:ghast", S("Ghast"), "mobs_mc_spawn_icon_ghast.png", 0) diff --git a/mods/ENTITIES/mobs_mc/guardian.lua b/mods/ENTITIES/mobs_mc/guardian.lua deleted file mode 100644 index 53e93f472..000000000 --- a/mods/ENTITIES/mobs_mc/guardian.lua +++ /dev/null @@ -1,105 +0,0 @@ ---################### ---################### GUARDIAN ---################### - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:guardian", { - description = S("Guardian"), - type = "monster", - spawn_class = "hostile", - hp_min = 30, - hp_max = 30, - xp_min = 10, - xp_max = 10, - breath_max = -1, - passive = false, - attack_type = "dogfight", - pathfinding = 1, - view_range = 16, - walk_velocity = 2, - run_velocity = 4, - damage = 6, - reach = 3, - collisionbox = {-0.425, 0.25, -0.425, 0.425, 1.1, 0.425}, - visual = "mesh", - mesh = "mobs_mc_guardian.b3d", - textures = { - {"mobs_mc_guardian.png"}, - }, - visual_size = {x=3, y=3}, - sounds = { - random = "mobs_mc_guardian_random", - war_cry = "mobs_mc_guardian_random", - damage = {name="mobs_mc_guardian_hurt", gain=0.3}, - death = "mobs_mc_guardian_death", - flop = "mobs_mc_squid_flop", - distance = 16, - }, - animation = { - stand_speed = 25, walk_speed = 25, run_speed = 50, - stand_start = 0, stand_end = 20, - walk_start = 0, walk_end = 20, - run_start = 0, run_end = 20, - }, - drops = { - -- Greatly increased amounts of prismarine - {name = "mcl_ocean:prismarine_shard", - chance = 1, - min = 0, - max = 32, - looting = "common",}, - -- TODO: Reduce of drops when ocean monument is ready. - - -- The following drops are approximations - -- Fish / prismarine crystal - {name = "mcl_fishing:fish_raw", - chance = 4, - min = 1, - max = 1, - looting = "common",}, - {name = "mcl_ocean:prismarine_crystals", - chance = 4, - min = 1, - max = 2, - looting = "common",}, - - -- Rare drop: fish - {name = "mcl_fishing:fish_raw", - chance = 160, -- 2.5% / 4 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.0025,}, - {name = "mcl_fishing:salmon_raw", - chance = 160, - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.0025,}, - {name = "mcl_fishing:clownfish_raw", - chance = 160, - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.0025,}, - {name = "mcl_fishing:pufferfish_raw", - chance = 160, - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.0025,}, - }, - fly = true, - makes_footstep_sound = false, - fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" }, - jump = false, - view_range = 16, -}) - --- Spawning disabled due to size issues --- TODO: Re-enable spawning ---mcl_mobs:spawn_specific("mobs_mc:guardian", { "mcl_core:water_source", "mclx_core:river_water_source" }, { "mcl_core:water_source", "mclx_core:river_water_source" }, 0, minetest.LIGHT_MAX+1, 30, 25000, 2, mcl_vars.mg_overworld_min, mobs_mc.water_level - 10) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:guardian", S("Guardian"), "mobs_mc_spawn_icon_guardian.png", 0) diff --git a/mods/ENTITIES/mobs_mc/guardian_elder.lua b/mods/ENTITIES/mobs_mc/guardian_elder.lua deleted file mode 100644 index f33576fb9..000000000 --- a/mods/ENTITIES/mobs_mc/guardian_elder.lua +++ /dev/null @@ -1,116 +0,0 @@ --- v1.4 - ---################### ---################### GUARDIAN ---################### - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:guardian_elder", { - description = S("Elder Guardian"), - type = "monster", - spawn_class = "hostile", - hp_min = 80, - hp_max = 80, - xp_min = 10, - xp_max = 10, - breath_max = -1, - passive = false, - attack_type = "dogfight", - pathfinding = 1, - view_range = 16, - walk_velocity = 2, - run_velocity = 4, - damage = 8, - reach = 3, - collisionbox = {-0.99875, 0.5, -0.99875, 0.99875, 2.4975, 0.99875}, - visual = "mesh", - mesh = "mobs_mc_guardian.b3d", - textures = { - {"mobs_mc_guardian_elder.png"}, - }, - visual_size = {x=7, y=7}, - sounds = { - random = "mobs_mc_guardian_random", - war_cry = "mobs_mc_guardian_random", - damage = {name="mobs_mc_guardian_hurt", gain=0.3}, - death = "mobs_mc_guardian_death", - flop = "mobs_mc_squid_flop", - base_pitch = 0.6, - distance = 16, - }, - animation = { - stand_speed = 25, walk_speed = 25, run_speed = 50, - stand_start = 0, stand_end = 20, - walk_start = 0, walk_end = 20, - run_start = 0, run_end = 20, - }, - drops = { - -- TODO: Reduce # of drops when ocean monument is ready. - - -- Greatly increased amounts of prismarine - {name = "mcl_ocean:prismarine_shard", - chance = 1, - min = 1, - max = 64, - looting = "common",}, - - -- TODO: Only drop if killed by player - {name = "mcl_sponges:sponge_wet", - chance = 1, - min = 1, - max = 1,}, - - -- The following drops are approximations - -- Fish / prismarine crystal - {name = "mcl_fishing:fish_raw", - chance = 4, - min = 1, - max = 1, - looting = "common",}, - {name = "mcl_ocean:prismarine_crystals", - chance = 1, - min = 1, - max = 10, - looting = "common",}, - - -- Rare drop: fish - {name = "mcl_fishing:fish_raw", - chance = 160, -- 2.5% / 4 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 4,}, - {name = "mcl_fishing:salmon_raw", - chance = 160, - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 4,}, - {name = "mcl_fishing:clownfish_raw", - chance = 160, - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 4,}, - {name = "mcl_fishing:pufferfish_raw", - chance = 160, - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 4,}, - }, - fly = true, - makes_footstep_sound = false, - fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" }, - jump = false, - view_range = 16, -}) - --- Spawning disabled due to size issues <- what do you mean? -j4i --- TODO: Re-enable spawning --- mcl_mobs:spawn_specific("mobs_mc:guardian_elder", { "mcl_core:water_source", "mclx_core:river_water_source" }, { "mcl_core:water_source", "mclx_core:river_water_source" }, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mcl_vars.mg_overworld_min, mobs_mc.water_level-18) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:guardian_elder", S("Elder Guardian"), "mobs_mc_spawn_icon_guardian_elder.png", 0) - diff --git a/mods/ENTITIES/mobs_mc/horse.lua b/mods/ENTITIES/mobs_mc/horse.lua deleted file mode 100644 index d423c124c..000000000 --- a/mods/ENTITIES/mobs_mc/horse.lua +++ /dev/null @@ -1,615 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### HORSE ---################### - --- Return overlay texture for horse/donkey/mule, e.g. chest, saddle or horse armor -local horse_extra_texture = function(horse) - local base = horse._naked_texture - local saddle = horse._saddle - local chest = horse._chest - local armor = horse._horse_armor - local textures = {} - if armor and minetest.get_item_group(armor, "horse_armor") > 0 then - textures[2] = base .. "^" .. minetest.registered_items[armor]._horse_overlay_image - else - textures[2] = base - end - if saddle then - textures[3] = base - else - textures[3] = "blank.png" - end - if chest then - textures[1] = base - else - textures[1] = "blank.png" - end - return textures -end - --- Helper functions to determine equipment rules -local can_equip_horse_armor = function(entity_id) - return entity_id == "mobs_mc:horse" or entity_id == "mobs_mc:skeleton_horse" or entity_id == "mobs_mc:zombie_horse" -end -local can_equip_chest = function(entity_id) - return entity_id == "mobs_mc:mule" or entity_id == "mobs_mc:donkey" -end -local can_breed = function(entity_id) - return entity_id == "mobs_mc:horse" or "mobs_mc:mule" or entity_id == "mobs_mc:donkey" -end - ---[[ Generate all possible horse textures. -Horse textures are a combination of a base texture and an optional marking overlay. ]] --- The base horse textures (fur) (fur) -local horse_base = { - "mobs_mc_horse_brown.png", - "mobs_mc_horse_darkbrown.png", - "mobs_mc_horse_white.png", - "mobs_mc_horse_gray.png", - "mobs_mc_horse_black.png", - "mobs_mc_horse_chestnut.png", - "mobs_mc_horse_creamy.png", -} --- Horse marking texture overlay, to be appended to the base texture string -local horse_markings = { - "", -- no markings - "mobs_mc_horse_markings_whitedots.png", -- snowflake appaloosa - "mobs_mc_horse_markings_blackdots.png", -- sooty - "mobs_mc_horse_markings_whitefield.png", -- paint - "mobs_mc_horse_markings_white.png", -- stockings and blaze -} - -local horse_textures = {} -for b=1, #horse_base do - for m=1, #horse_markings do - local fur = horse_base[b] - if horse_markings[m] ~= "" then - fur = fur .. "^" .. horse_markings[m] - end - table.insert(horse_textures, { - "blank.png", -- chest - fur, -- base texture + markings and optional armor - "blank.png", -- saddle - }) - end -end - --- in e7898352d890c2414af653eba624939df9c0b8b4 (0.76-dev) all items from mobs_mc were moved to mcl_mobitems --- this results in existing horses wearing armor would still have the old texture filename in their --- properties this function updates them. It should be removed some time in the future when we can be --- reasonably sure all horses that want it get the new nexture. -local function update_textures(self) - local old = "mobs_mc_horse_armor_" - local txt = self.object:get_properties().textures - if txt[2]:find(old) then - txt[2] = txt[2]:gsub(old,"mcl_mobitems_horse_armor_") - self.object:set_properties({textures=txt}) - return - end -end - --- Horse -local horse = { - description = S("Horse"), - type = "animal", - spawn_class = "passive", - visual = "mesh", - mesh = "mobs_mc_horse.b3d", - visual_size = {x=3.0, y=3.0}, - collisionbox = {-0.69825, -0.01, -0.69825, 0.69825, 1.59, 0.69825}, - animation = { - stand_speed = 25, - stand_start = 0, - stand_end = 0, - walk_speed = 25, - walk_start = 0, - walk_end = 40, - run_speed = 60, - run_start = 0, - run_end = 40, - }, - textures = horse_textures, - sounds = { - random = "mobs_mc_horse_random", - -- TODO: Separate damage sound - damage = "mobs_mc_horse_death", - death = "mobs_mc_horse_death", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - fear_height = 4, - fly = false, - walk_chance = 60, - view_range = 16, - follow = { - "mcl_core:apple", - "mcl_core:sugar", - "mcl_farming:wheat_item", - "mcl_farming:hay_block", - "mcl_core:apple_gold", - "mcl_farming:carrot_item_gold", - }, - passive = true, - hp_min = 15, - hp_max = 30, - xp_min = 1, - xp_max = 3, - floats = 1, - makes_footstep_sound = true, - jump = true, - jump_height = 5.75, -- can clear 2.5 blocks - drops = { - {name = "mcl_mobitems:leather", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - }, - on_spawn = update_textures, - do_custom = function(self, dtime) - - -- set needed values if not already present - if not self._regentimer then - self._regentimer = 0 - end - if not self.v2 then - self.v2 = 0 - self.max_speed_forward = 7 - self.max_speed_reverse = 2 - self.accel = 6 - self.terrain_type = 3 - self.driver_attach_at = {x = 0, y = 4.17, z = -1.75} - self.driver_eye_offset = {x = 0, y = 3, z = 0} - self.driver_scale = {x = 1/self.visual_size.x, y = 1/self.visual_size.y} - end - - -- Slowly regenerate health - self._regentimer = self._regentimer + dtime - if self._regentimer >= 4 then - if self.health < self.hp_max then - self.health = self.health + 1 - end - self._regentimer = 0 - end - - -- Some weird human is riding. Buck them off? - if self.driver and not self.tamed and self.buck_off_time <= 0 then - if math.random() < 0.2 then - mcl_mobs.detach(self.driver, {x = 1, y = 0, z = 1}) - -- TODO bucking animation - else - -- Nah, can't be bothered. Think about it again in one second - self.buck_off_time = 20 - end - end - - -- Tick the timer for trying to buck the player off - if self.buck_off_time then - if self.driver then - self.buck_off_time = self.buck_off_time - 1 - else - -- Player isn't riding anymore so no need to count - self.buck_off_time = nil - end - end - - -- if driver present and horse has a saddle allow control of horse - if self.driver and self._saddle then - - mcl_mobs.drive(self, "walk", "stand", false, dtime) - - return false -- skip rest of mob functions - end - - return true - end, - - on_die = function(self, pos) - - -- drop saddle when horse is killed while riding - if self._saddle then - minetest.add_item(pos, "mcl_mobitems:saddle") - end - -- also detach from horse properly - if self.driver then - mcl_mobs.detach(self.driver, {x = 1, y = 0, z = 1}) - end - - end, - - on_rightclick = function(self, clicker) - - -- make sure player is clicking - if not clicker or not clicker:is_player() then - return - end - - local item = clicker:get_wielded_item() - local iname = item:get_name() - local heal = 0 - - -- Taming - self.temper = self.temper or (math.random(1,100)) - - if not self.tamed then - local temper_increase = 0 - - -- Feeding, intentionally not using mobs:feed_tame because horse taming is - -- different and more complicated - if (iname == "mcl_core:sugar") then - temper_increase = 3 - elseif (iname == "mcl_farming:wheat_item") then - temper_increase = 3 - elseif (iname == "mcl_core:apple") then - temper_increase = 3 - elseif (iname == "mcl_farming:carrot_item_gold") then - temper_increase = 5 - elseif (iname == "mcl_core:apple_gold") then - temper_increase = 10 - -- Trying to ride - elseif not self.driver then - self.object:set_properties({stepheight = 1.1}) - mcl_mobs.attach(self, clicker) - self.buck_off_time = 40 -- TODO how long does it take in minecraft? - if self.temper > 100 then - self.tamed = true -- NOTE taming can only be finished by riding the horse - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - end - end - temper_increase = 5 - - -- Clicking on the horse while riding ==> unmount - elseif self.driver and self.driver == clicker then - mcl_mobs.detach(clicker, {x = 1, y = 0, z = 1}) - end - - -- If nothing happened temper_increase = 0 and addition does nothing - self.temper = self.temper + temper_increase - - return - end - - if can_breed(self.name) then - -- Breed horse with golden apple or golden carrot - if (iname == "mcl_core:apple_gold") then - heal = 10 - elseif (iname == "mcl_farming:carrot_item_gold") then - heal = 4 - end - if heal > 0 and mcl_mobs:feed_tame(self, clicker, heal, true, false) then - return - end - end - -- Feed with anything else - -- TODO heal amounts don't work - if (iname == "mcl_core:sugar") then - heal = 1 - elseif (iname == "mcl_farming:wheat_item") then - heal = 2 - elseif (iname == "mcl_core:apple") then - heal = 3 - elseif (iname == "mcl_farming:hay_block") then - heal = 20 - end - if heal > 0 and mcl_mobs:feed_tame(self, clicker, heal, false, false) then - return - end - - if mcl_mobs:protect(self, clicker) then - return - end - - -- Make sure tamed horse is mature and being clicked by owner only - if self.tamed and not self.child and self.owner == clicker:get_player_name() then - - local inv = clicker:get_inventory() - - -- detatch player already riding horse - if self.driver and clicker == self.driver then - - mcl_mobs.detach(clicker, {x = 1, y = 0, z = 1}) - - -- Put on saddle if tamed - elseif not self.driver and not self._saddle - and iname == "mcl_mobitems:saddle" then - - -- Put on saddle and take saddle from player's inventory - local w = clicker:get_wielded_item() - self._saddle = true - if not minetest.is_creative_enabled(clicker:get_player_name()) then - w:take_item() - clicker:set_wielded_item(w) - end - - -- Update texture - if not self._naked_texture then - -- Base horse texture without chest or saddle - self._naked_texture = self.base_texture[2] - end - local tex = horse_extra_texture(self) - self.base_texture = tex - self.object:set_properties({textures = self.base_texture}) - minetest.sound_play({name = "mcl_armor_equip_leather"}, {gain=0.5, max_hear_distance=12, pos=self.object:get_pos()}, true) - - -- Put on horse armor if tamed - elseif can_equip_horse_armor(self.name) and not self.driver and not self._horse_armor - and minetest.get_item_group(iname, "horse_armor") > 0 then - - - -- Put on armor and take armor from player's inventory - local armor = minetest.get_item_group(iname, "horse_armor") - self._horse_armor = iname - local w = clicker:get_wielded_item() - if not minetest.is_creative_enabled(clicker:get_player_name()) then - w:take_item() - clicker:set_wielded_item(w) - end - - -- Set horse armor strength - self.armor = armor - local agroups = self.object:get_armor_groups() - agroups.fleshy = self.armor - self.object:set_armor_groups(agroups) - - -- Update texture - if not self._naked_texture then - -- Base horse texture without chest or saddle - self._naked_texture = self.base_texture[2] - end - local tex = horse_extra_texture(self) - self.base_texture = tex - self.object:set_properties({textures = self.base_texture}) - local def = w:get_definition() - if def.sounds and def.sounds._mcl_armor_equip then - minetest.sound_play({name = def.sounds._mcl_armor_equip}, {gain=0.5, max_hear_distance=12, pos=self.object:get_pos()}, true) - end - - -- Mount horse - elseif not self.driver and self._saddle then - - self.object:set_properties({stepheight = 1.1}) - mcl_mobs.attach(self, clicker) - - -- Used to capture horse - elseif not self.driver and iname ~= "" then - mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) - end - end - end, - - on_breed = function(parent1, parent2) - local pos = parent1.object:get_pos() - local child = mcl_mobs:spawn_child(pos, parent1.name) - if child then - local ent_c = child:get_luaentity() - local p = math.random(1, 2) - local child_texture - -- Randomly pick one of the parents for the child texture - if p == 1 then - if parent1._naked_texture then - child_texture = parent1._naked_texture - else - child_texture = parent1.base_texture[2] - end - else - if parent2._naked_texture then - child_texture = parent2._naked_texture - else - child_texture = parent2.base_texture[2] - end - end - local splt = string.split(child_texture, "^") - if #splt >= 2 then - -- Randomly mutate base texture (fur) and markings - -- with chance of 1/9 each - local base = splt[1] - local markings = splt[2] - local mutate_base = math.random(1, 9) - local mutate_markings = math.random(1, 9) - if mutate_base == 1 then - local b = math.random(1, #horse_base) - base = horse_base[b] - end - if mutate_markings == 1 then - local m = math.random(1, #horse_markings) - markings = horse_markings[m] - end - child_texture = base - if markings ~= "" then - child_texture = child_texture .. "^" .. markings - end - end - ent_c.base_texture = { "blank.png", child_texture, "blank.png" } - ent_c._naked_texture = child_texture - - child:set_properties({textures = ent_c.base_texture}) - return false - end - end, -} - -mcl_mobs:register_mob("mobs_mc:horse", horse) - --- Skeleton horse -local skeleton_horse = table.copy(horse) -skeleton_horse.description = S("Skeleton Horse") -skeleton_horse.breath_max = -1 -skeleton_horse.armor = {undead = 100, fleshy = 100} -skeleton_horse.textures = {{"blank.png", "mobs_mc_horse_skeleton.png", "blank.png"}} -skeleton_horse.drops = { - {name = "mcl_mobitems:bone", - chance = 1, - min = 0, - max = 2,}, -} -skeleton_horse.sounds = { - random = "mobs_mc_skeleton_random", - death = "mobs_mc_skeleton_death", - damage = "mobs_mc_skeleton_hurt", - eat = "mobs_mc_animal_eat_generic", - base_pitch = 0.95, - distance = 16, -} -skeleton_horse.harmed_by_heal = true -mcl_mobs:register_mob("mobs_mc:skeleton_horse", skeleton_horse) - --- Zombie horse -local zombie_horse = table.copy(horse) -zombie_horse.description = S("Zombie Horse") -zombie_horse.breath_max = -1 -zombie_horse.armor = {undead = 100, fleshy = 100} -zombie_horse.textures = {{"blank.png", "mobs_mc_horse_zombie.png", "blank.png"}} -zombie_horse.drops = { - {name = "mcl_mobitems:rotten_flesh", - chance = 1, - min = 0, - max = 2,}, -} -zombie_horse.sounds = { - random = "mobs_mc_horse_random", - -- TODO: Separate damage sound - damage = "mobs_mc_horse_death", - death = "mobs_mc_horse_death", - eat = "mobs_mc_animal_eat_generic", - base_pitch = 0.5, - distance = 16, -} -zombie_horse.harmed_by_heal = true -mcl_mobs:register_mob("mobs_mc:zombie_horse", zombie_horse) - --- Donkey -local d = 0.86 -- donkey scale -local donkey = table.copy(horse) -donkey.description = S("Donkey") -donkey.textures = {{"blank.png", "mobs_mc_donkey.png", "blank.png"}} -donkey.animation = { - speed_normal = 25, - stand_start = 0, stand_end = 0, - walk_start = 0, walk_end = 40, -} -donkey.sounds = { - random = "mobs_mc_donkey_random", - damage = "mobs_mc_donkey_hurt", - death = "mobs_mc_donkey_death", - eat = "mobs_mc_animal_eat_generic", - distance = 16, -} -donkey.visual_size = { x=horse.visual_size.x*d, y=horse.visual_size.y*d } -donkey.collisionbox = { - horse.collisionbox[1] * d, - horse.collisionbox[2] * d, - horse.collisionbox[3] * d, - horse.collisionbox[4] * d, - horse.collisionbox[5] * d, - horse.collisionbox[6] * d, -} -donkey.jump = true -donkey.jump_height = 3.75 -- can clear 1 block height - -mcl_mobs:register_mob("mobs_mc:donkey", donkey) - --- Mule -local m = 0.94 -local mule = table.copy(donkey) -mule.description = S("Mule") -mule.textures = {{"blank.png", "mobs_mc_mule.png", "blank.png"}} -mule.visual_size = { x=horse.visual_size.x*m, y=horse.visual_size.y*m } -mule.sounds = table.copy(donkey.sounds) -mule.sounds.base_pitch = 1.15 -mule.collisionbox = { - horse.collisionbox[1] * m, - horse.collisionbox[2] * m, - horse.collisionbox[3] * m, - horse.collisionbox[4] * m, - horse.collisionbox[5] * m, - horse.collisionbox[6] * m, -} -mcl_mobs:register_mob("mobs_mc:mule", mule) - ---=========================== ---Spawn Function -mcl_mobs:spawn_specific( -"mobs_mc:horse", -"overworld", -"ground", -{ - "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", - "MegaTaiga", - "MegaSpruceTaiga", - "ExtremeHills", - "ExtremeHills_beach", - "ExtremeHillsM", - "ExtremeHills+", - "ExtremeHills+_snowtop", - "StoneBeach", - "Plains", - "Plains_beach", - "SunflowerPlains", - "Taiga", - "Taiga_beach", - "Forest", - "Forest_beach", - "FlowerForest", - "FlowerForest_beach", - "BirchForest", - "BirchForestM", - "RoofedForest", - "Savanna", - "Savanna_beach", - "SavannaM", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", - "JungleEdge", - "JungleEdgeM", - "Swampland", - "Swampland_shore" -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -4, -mobs_mc.water_level+3, -mcl_vars.mg_overworld_max) - - -mcl_mobs:spawn_specific( -"mobs_mc:donkey", -"overworld", -"ground", -{ -"Mesa", -"MesaPlateauFM_grasstop", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -4, -mobs_mc.water_level+3, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0) -mcl_mobs:register_egg("mobs_mc:skeleton_horse", S("Skeleton Horse"), "mobs_mc_spawn_icon_horse_skeleton.png", 0) ---mobs:register_egg("mobs_mc:zombie_horse", S("Zombie Horse"), "mobs_mc_spawn_icon_horse_zombie.png", 0) -mcl_mobs:register_egg("mobs_mc:donkey", S("Donkey"), "mobs_mc_spawn_icon_donkey.png", 0) -mcl_mobs:register_egg("mobs_mc:mule", S("Mule"), "mobs_mc_spawn_icon_mule.png", 0) diff --git a/mods/ENTITIES/mobs_mc/init.lua b/mods/ENTITIES/mobs_mc/init.lua deleted file mode 100644 index 02f5023a5..000000000 --- a/mods/ENTITIES/mobs_mc/init.lua +++ /dev/null @@ -1,144 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes -mobs_mc = {} - -local pr = PseudoRandom(os.time()*5) - -local offsets = {} -for x=-2, 2 do - for z=-2, 2 do - table.insert(offsets, {x=x, y=0, z=z}) - end -end - ---[[ Periodically check and teleport mob to owner if not sitting (order ~= "sit") and -the owner is too far away. To be used with do_custom. Note: Optimized for mobs smaller than 1×1×1. -Larger mobs might have space problems after teleportation. - -* dist: Minimum required distance from owner to teleport. Default: 12 -* teleport_check_interval: Optional. Interval in seconds to check the mob teleportation. Default: 4 ]] -mobs_mc.make_owner_teleport_function = function(dist, teleport_check_interval) - return function(self, dtime) - -- No teleportation if no owner or if sitting - if not self.owner or self.order == "sit" then - return - end - if not teleport_check_interval then - teleport_check_interval = 4 - end - if not dist then - dist = 12 - end - if self._teleport_timer == nil then - self._teleport_timer = teleport_check_interval - return - end - self._teleport_timer = self._teleport_timer - dtime - if self._teleport_timer <= 0 then - self._teleport_timer = teleport_check_interval - local mob_pos = self.object:get_pos() - local owner = minetest.get_player_by_name(self.owner) - if not owner then - -- No owner found, no teleportation - return - end - local owner_pos = owner:get_pos() - local dist_from_owner = vector.distance(owner_pos, mob_pos) - if dist_from_owner > dist then - -- Check for nodes below air in a 5×1×5 area around the owner position - local check_offsets = table.copy(offsets) - -- Attempt to place mob near player. Must be placed on walkable node below a non-walkable one. Place inside that air node. - while #check_offsets > 0 do - local r = pr:next(1, #check_offsets) - local telepos = vector.add(owner_pos, check_offsets[r]) - local telepos_below = {x=telepos.x, y=telepos.y-1, z=telepos.z} - table.remove(check_offsets, r) - -- Long story short, spawn on a platform - local trynode = minetest.registered_nodes[minetest.get_node(telepos).name] - local trybelownode = minetest.registered_nodes[minetest.get_node(telepos_below).name] - if trynode and not trynode.walkable and - trybelownode and trybelownode.walkable then - -- Correct position found! Let's teleport. - self.object:set_pos(telepos) - return - end - end - end - end - end -end - -local function is_forbidden_node(pos, node) - node = node or minetest.get_node(pos) - return minetest.get_item_group(node.name, "stair") > 0 or minetest.get_item_group(node.name, "slab") > 0 or minetest.get_item_group(node.name, "carpet") > 0 -end - -function mcl_mobs:spawn_abm_check(pos, node, name) - -- Don't spawn monsters on mycelium - if (node.name == "mcl_core:mycelium" or node.name == "mcl_core:mycelium_snow") and minetest.registered_entities[name].type == "monster" then - return true - --Don't Spawn mobs on stairs, slabs, or carpets - elseif is_forbidden_node(pos, node) or is_forbidden_node(vector.add(pos, vector.new(0, 1, 0))) then - return true - -- Spawn on opaque or liquid nodes - elseif minetest.get_item_group(node.name, "opaque") ~= 0 or minetest.registered_nodes[node.name].liquidtype ~= "none" or node.name == "mcl_core:grass_path" then - return false - end - - -- Reject everything else - return true -end - -mobs_mc.shears_wear = 276 -mobs_mc.water_level = tonumber(minetest.settings:get("water_level")) or 0 - --- Animals -local path = minetest.get_modpath("mobs_mc") -dofile(path .. "/bat.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/rabbit.lua") -- Mesh and animation byExeterDad -dofile(path .. "/chicken.lua") -- Mesh and animation by Pavel_S -dofile(path .. "/cow+mooshroom.lua") -- Mesh by Morn76 Animation by Pavel_S -dofile(path .. "/horse.lua") -- KrupnoPavel; Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/llama.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/ocelot.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/parrot.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/pig.lua") -- Mesh and animation by Pavel_S -dofile(path .. "/polar_bear.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/sheep.lua") -- Mesh and animation by Pavel_S -dofile(path .. "/wolf.lua") -- KrupnoPavel -dofile(path .. "/squid.lua") -- Animation, sound and egg texture by daufinsyd - --- NPCs -dofile(path .. "/villager.lua") -- KrupnoPavel Mesh and animation by toby109tt / https://github.com/22i - --- Illagers and witch -dofile(path .. "/villager_evoker.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/villager_vindicator.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/villager_zombie.lua") -- Mesh and animation by toby109tt / https://github.com/22i - -dofile(path .. "/witch.lua") -- Mesh and animation by toby109tt / https://github.com/22i - ---Monsters -dofile(path .. "/blaze.lua") -- Animation by daufinsyd -dofile(path .. "/creeper.lua") -- Mesh by Morn76 Animation by Pavel_S -dofile(path .. "/ender_dragon.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/enderman.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/endermite.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/villager_illusioner.lua") -- Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/ghast.lua") -- maikerumine -dofile(path .. "/guardian.lua") -- maikerumine Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/guardian_elder.lua") -- maikerumine Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/snowman.lua") -dofile(path .. "/iron_golem.lua") -- maikerumine Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/shulker.lua") -- maikerumine Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/silverfish.lua") -- maikerumine Mesh and animation by toby109tt / https://github.com/22i -dofile(path .. "/skeleton+stray.lua") -- Mesh by Morn76 Animation by Pavel_S -dofile(path .. "/skeleton_wither.lua") -- Mesh by Morn76 Animation by Pavel_S -dofile(path .. "/zombie.lua") -- Mesh by Morn76 Animation by Pavel_S -dofile(path .. "/zombiepig.lua") -- Mesh by Morn76 Animation by Pavel_S -dofile(path .. "/slime+magma_cube.lua") -- Wuzzy -dofile(path .. "/spider.lua") -- Spider by AspireMint (fishyWET (CC-BY-SA 3.0 license for texture) -dofile(path .. "/vex.lua") -- KrupnoPavel -dofile(path .. "/wither.lua") -- Mesh and animation by toby109tt / https://github.com/22i diff --git a/mods/ENTITIES/mobs_mc/iron_golem.lua b/mods/ENTITIES/mobs_mc/iron_golem.lua deleted file mode 100644 index 7f1e66714..000000000 --- a/mods/ENTITIES/mobs_mc/iron_golem.lua +++ /dev/null @@ -1,204 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### IRON GOLEM ---################### - -local etime = 0 - -mcl_mobs:register_mob("mobs_mc:iron_golem", { - description = S("Iron Golem"), - type = "npc", - spawn_class = "passive", - passive = true, - hp_min = 100, - hp_max = 100, - breath_max = -1, - collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.69, 0.7}, - visual = "mesh", - mesh = "mobs_mc_iron_golem.b3d", - textures = { - {"mobs_mc_iron_golem.png"}, - }, - visual_size = {x=3, y=3}, - makes_footstep_sound = true, - -- TODO: sounds - view_range = 16, - stepheight = 1.1, - owner = "", - order = "follow", - floats = 0, - walk_velocity = 0.6, - run_velocity = 1.2, - -- Approximation - damage = 14, - reach = 3, - group_attack = true, - attacks_monsters = true, - attack_type = "dogfight", - _got_poppy = false, - pick_up = {"mcl_flowers:poppy"}, - on_pick_up = function(self,n) - if n.itemstring:find("mcl_flowers:poppy") then - if not self._got_poppy then - self._got_poppy=true - return - end - return true - end - end, - replace_what = {"mcl_flowers:poppy"}, - replace_with = {"air"}, - on_replace = function(self, pos, oldnode, newnode) - if not self.got_poppy and oldnode.name == "mcl_flowers:poppy" then - self._got_poppy=true - return - end - return false - end, - drops = { - {name = "mcl_core:iron_ingot", - chance = 1, - min = 3, - max = 5,}, - {name = "mcl_flowers:poppy", - chance = 1, - min = 0, - max = 2,}, - }, - fall_damage = 0, - animation = { - stand_speed = 15, walk_speed = 15, run_speed = 25, punch_speed = 15, - stand_start = 0, stand_end = 0, - walk_start = 0, walk_end = 40, - run_start = 0, run_end = 40, - punch_start = 40, punch_end = 50, - }, - jump = true, - on_step = function(self,dtime) - etime = etime + dtime - if etime > 10 then - if self._home and vector.distance(self._home,self.object:get_pos()) > 50 then - mcl_mobs:gopath(self,self._home) - end - end - end, -}) - - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:iron_golem", S("Iron Golem"), "mobs_mc_spawn_icon_iron_golem.png", 0) - - ---[[ This is to be called when a pumpkin or jack'o lantern has been placed. Recommended: In the on_construct function of the node. -This summons an iron golen if placing the pumpkin created an iron golem summon pattern: - -.P. -III -.I. - -P = Pumpkin or jack'o lantern -I = Iron block -. = Air -]] - -function mobs_mc.check_iron_golem_summon(pos) - local checks = { - -- These are the possible placement patterns, with offset from the pumpkin block. - -- These tables include the positions of the iron blocks (1-4) and air blocks (5-8) - -- 4th element is used to determine spawn position. - -- If a 9th element is present, that one is used for the spawn position instead. - -- Standing (x axis) - { - {x=-1, y=-1, z=0}, {x=1, y=-1, z=0}, {x=0, y=-1, z=0}, {x=0, y=-2, z=0}, -- iron blocks - {x=-1, y=0, z=0}, {x=1, y=0, z=0}, {x=-1, y=-2, z=0}, {x=1, y=-2, z=0}, -- air - }, - -- Upside down standing (x axis) - { - {x=-1, y=1, z=0}, {x=1, y=1, z=0}, {x=0, y=1, z=0}, {x=0, y=2, z=0}, - {x=-1, y=0, z=0}, {x=1, y=0, z=0}, {x=-1, y=2, z=0}, {x=1, y=2, z=0}, - {x=0, y=0, z=0}, -- Different offset for upside down pattern - }, - - -- Standing (z axis) - { - {x=0, y=-1, z=-1}, {x=0, y=-1, z=1}, {x=0, y=-1, z=0}, {x=0, y=-2, z=0}, - {x=0, y=0, z=-1}, {x=0, y=0, z=1}, {x=0, y=-2, z=-1}, {x=0, y=-2, z=1}, - }, - -- Upside down standing (z axis) - { - {x=0, y=1, z=-1}, {x=0, y=1, z=1}, {x=0, y=1, z=0}, {x=0, y=2, z=0}, - {x=0, y=0, z=-1}, {x=0, y=0, z=1}, {x=0, y=2, z=-1}, {x=0, y=2, z=1}, - {x=0, y=0, z=0}, - }, - - -- Lying - { - {x=-1, y=0, z=-1}, {x=0, y=0, z=-1}, {x=1, y=0, z=-1}, {x=0, y=0, z=-2}, - {x=-1, y=0, z=0}, {x=1, y=0, z=0}, {x=-1, y=0, z=-2}, {x=1, y=0, z=-2}, - }, - { - {x=-1, y=0, z=1}, {x=0, y=0, z=1}, {x=1, y=0, z=1}, {x=0, y=0, z=2}, - {x=-1, y=0, z=0}, {x=1, y=0, z=0}, {x=-1, y=0, z=2}, {x=1, y=0, z=2}, - }, - { - {x=-1, y=0, z=-1}, {x=-1, y=0, z=0}, {x=-1, y=0, z=1}, {x=-2, y=0, z=0}, - {x=0, y=0, z=-1}, {x=0, y=0, z=1}, {x=-2, y=0, z=-1}, {x=-2, y=0, z=1}, - }, - { - {x=1, y=0, z=-1}, {x=1, y=0, z=0}, {x=1, y=0, z=1}, {x=2, y=0, z=0}, - {x=0, y=0, z=-1}, {x=0, y=0, z=1}, {x=2, y=0, z=-1}, {x=2, y=0, z=1}, - }, - - - } - - for c=1, #checks do - -- Check all possible patterns - local ok = true - -- Check iron block nodes - for i=1, 4 do - local cpos = vector.add(pos, checks[c][i]) - local node = minetest.get_node(cpos) - if node.name ~= "mcl_core:ironblock" then - ok = false - break - end - end - -- Check air nodes - for a=5, 8 do - local cpos = vector.add(pos, checks[c][a]) - local node = minetest.get_node(cpos) - if node.name ~= "air" then - ok = false - break - end - end - -- Pattern found! - if ok then - -- Remove the nodes - minetest.remove_node(pos) - core.check_for_falling(pos) - for i=1, 4 do - local cpos = vector.add(pos, checks[c][i]) - minetest.remove_node(cpos) - core.check_for_falling(cpos) - end - -- Summon iron golem - local place - if checks[c][9] then - place = vector.add(pos, checks[c][9]) - else - place = vector.add(pos, checks[c][4]) - end - place.y = place.y - 0.5 - minetest.add_entity(place, "mobs_mc:iron_golem") - break - end - end -end diff --git a/mods/ENTITIES/mobs_mc/llama.lua b/mods/ENTITIES/mobs_mc/llama.lua deleted file mode 100644 index a211b117a..000000000 --- a/mods/ENTITIES/mobs_mc/llama.lua +++ /dev/null @@ -1,242 +0,0 @@ -local S = minetest.get_translator("mobs_mc") - ---################### ---################### LLAMA ---################### - -local carpets = { - -- group = { carpet , short_texture_name } - unicolor_white = { "mcl_wool:white_carpet", "white" }, - unicolor_dark_orange = { "mcl_wool:brown_carpet", "brown" }, - unicolor_grey = { "mcl_wool:silver_carpet", "light_gray" }, - unicolor_darkgrey = { "mcl_wool:grey_carpet", "gray" }, - unicolor_blue = { "mcl_wool:blue_carpet", "blue" }, - unicolor_dark_green = { "mcl_wool:green_carpet", "green" }, - unicolor_green = { "mcl_wool:lime_carpet", "lime" }, - unicolor_violet = { "mcl_wool:purple_carpet", "purple" }, - unicolor_light_red = { "mcl_wool:pink_carpet", "pink" }, - unicolor_yellow = { "mcl_wool:yellow_carpet", "yellow" }, - unicolor_orange = { "mcl_wool:orange_carpet", "orange" }, - unicolor_red = { "mcl_wool:red_carpet", "red" }, - unicolor_cyan = { "mcl_wool:cyan_carpet", "cyan" }, - unicolor_red_violet = { "mcl_wool:magenta_carpet", "magenta" }, - unicolor_black = { "mcl_wool:black_carpet", "black" }, - unicolor_light_blue = { "mcl_wool:light_blue_carpet", "light_blue" }, -} - -mcl_mobs:register_mob("mobs_mc:llama", { - description = S("Llama"), - type = "animal", - spawn_class = "passive", - hp_min = 15, - hp_max = 30, - xp_min = 1, - xp_max = 3, - passive = false, - collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.86, 0.45}, - visual = "mesh", - mesh = "mobs_mc_llama.b3d", - textures = { -- 1: chest -- 2: decor (carpet) -- 3: llama base texture - {"blank.png", "blank.png", "mobs_mc_llama_brown.png"}, - {"blank.png", "blank.png", "mobs_mc_llama_creamy.png"}, - {"blank.png", "blank.png", "mobs_mc_llama_gray.png"}, - {"blank.png", "blank.png", "mobs_mc_llama_white.png"}, - {"blank.png", "blank.png", "mobs_mc_llama.png"}, - }, - visual_size = {x=3, y=3}, - makes_footstep_sound = true, - runaway = true, - walk_velocity = 1, - run_velocity = 4.4, - follow_velocity = 4.4, - floats = 1, - drops = { - {name = "mcl_mobitems:leather", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - }, - fear_height = 4, - sounds = { - random = "mobs_mc_llama", - eat = "mobs_mc_animal_eat_generic", - -- TODO: Death and damage sounds - distance = 16, - }, - animation = { - speed_normal = 24, - run_speed = 60, - run_start = 0, - run_end = 40, - stand_start = 0, - stand_end = 0, - walk_start = 0, - walk_end = 40, - hurt_start = 118, - hurt_end = 154, - death_start = 154, - death_end = 179, - eat_start = 49, - eat_end = 78, - look_start = 78, - look_end = 108, - }, - follow = { "mcl_farming:wheat_item", "mcl_farming:hay_block" }, - view_range = 16, - do_custom = function(self, dtime) - - -- set needed values if not already present - if not self.v2 then - self.v2 = 0 - self.max_speed_forward = 4 - self.max_speed_reverse = 2 - self.accel = 4 - self.terrain_type = 3 - self.driver_attach_at = {x = 0, y = 4.17, z = -1.5} - self.driver_eye_offset = {x = 0, y = 3, z = 0} - self.driver_scale = {x = 1/self.visual_size.x, y = 1/self.visual_size.y} - end - - -- if driver present allow control of llama - if self.driver then - - mcl_mobs.drive(self, "walk", "stand", false, dtime) - - return false -- skip rest of mob functions - end - - return true - end, - - on_die = function(self, pos) - - -- detach from llama properly - if self.driver then - mcl_mobs.detach(self.driver, {x = 1, y = 0, z = 1}) - end - - end, - - on_rightclick = function(self, clicker) - - -- Make sure player is clicking - if not clicker or not clicker:is_player() then - return - end - - local item = clicker:get_wielded_item() - if item:get_name() == "mcl_farming:hay_block" then - -- Breed with hay bale - if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end - else - -- Feed with anything else - if mcl_mobs:feed_tame(self, clicker, 1, false, true) then return end - end - if mcl_mobs:protect(self, clicker) then return end - - -- Make sure tamed llama is mature and being clicked by owner only - if self.tamed and not self.child and self.owner == clicker:get_player_name() then - - -- Place carpet - if minetest.get_item_group(item:get_name(), "carpet") == 1 and not self.carpet then - for group, carpetdata in pairs(carpets) do - if minetest.get_item_group(item:get_name(), group) == 1 then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - local substr = carpetdata[2] - local tex_carpet = "mobs_mc_llama_decor_"..substr..".png" - self.base_texture = table.copy(self.base_texture) - self.base_texture[2] = tex_carpet - self.object:set_properties({ - textures = self.base_texture, - }) - self.carpet = item:get_name() - self.drops = { - {name = "mcl_mobitems:leather", - chance = 1, - min = 0, - max = 2,}, - {name = item:get_name(), - chance = 1, - min = 1, - max = 1,}, - } - return - end - end - end - - -- detatch player already riding llama - if self.driver and clicker == self.driver then - - mcl_mobs.detach(clicker, {x = 1, y = 0, z = 1}) - - -- attach player to llama - elseif not self.driver then - - self.object:set_properties({stepheight = 1.1}) - mcl_mobs.attach(self, clicker) - end - - -- Used to capture llama - elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then - mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) - end - end, - - on_breed = function(parent1, parent2) - -- When breeding, make sure the child has no carpet - local pos = parent1.object:get_pos() - local child, parent - if math.random(1,2) == 1 then - parent = parent1 - else - parent = parent2 - end - child = mcl_mobs:spawn_child(pos, parent.name) - if child then - local ent_c = child:get_luaentity() - ent_c.base_texture = table.copy(ent_c.base_texture) - ent_c.base_texture[2] = "blank.png" - child:set_properties({textures = ent_c.base_texture}) - ent_c.tamed = true - ent_c.carpet = nil - ent_c.owner = parent.owner - return false - end - end, - -}) - ---spawn -mcl_mobs:spawn_specific( -"mobs_mc:llama", -"overworld", -"ground", -{ - "Mesa", - "MesaPlateauFM_grasstop", - "MesaPlateauF", - "MesaPlateauFM", - "MesaPlateauF_grasstop", - "MesaBryce", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", - "JungleEdge", - "JungleEdgeM", -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -5, -mobs_mc.water_level+15, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0) diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr deleted file mode 100644 index 676415d69..000000000 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr +++ /dev/null @@ -1,64 +0,0 @@ -# textdomain: mobs_mc -Agent=Akteur -Bat=Fledermaus -Blaze=Lohe -Chicken=Huhn -Cow=Kuh -Mooshroom=Pilzkuh -Creeper=Creeper -Ender Dragon=Enderdrache -Enderman=Enderman -Endermite=Endermilbe -Ghast=Ghast -Elder Guardian=Großer Wächter -Guardian=Wächter -Horse=Pferd -Skeleton Horse=Skelettpferd -Zombie Horse=Zombiepferd -Donkey=Esel -Mule=Maultier -Iron Golem=Eisengolem -Llama=Lama -Ocelot=Ozelot -Parrot=Papagei -Pig=Schwein -Polar Bear=Eisbär -Rabbit=Kaninchen -Killer Bunny=Killerkaninchen -Sheep=Schaf -Shulker=Shulker -Silverfish=Silberfischchen -Skeleton=Skelett -Stray=Eiswanderer -Wither Skeleton=Witherskelett -Magma Cube=Magmakubus -Slime=Schleim -Snow Golem=Schneegolem -Spider=Spinne -Cave Spider=Höhlenspinne -Squid=Tintenfisch -Vex=Plagegeist -Evoker=Magier -Illusioner=Illusionist -Villager=Dorfbewohner -Vindicator=Diener -Zombie Villager=Dorfbewohnerzombie -Witch=Hexe -Wither=Wither -Wolf=Wolf -Husk=Wüstenzombie -Zombie=Zombie -Zombie Pigman=Schweinezombie -Farmer=Bauer -Fisherman=Fischer -Fletcher=Pfeilmacher -Shepherd=Schäfer -Librarian=Bibliothekar -Cartographer=Kartograph -Armorer=Rüstungsschmied -Leatherworker=Lederarbeiter -Butcher=Metzger -Weapon Smith=Waffenschmied -Tool Smith=Werkzeugschmied -Cleric=Priester -Nitwit=Dorftrottel diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr deleted file mode 100644 index 7f89bb664..000000000 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr +++ /dev/null @@ -1,64 +0,0 @@ -# textdomain: mobs_mc -Agent=Agente -Bat=Murciélago -Blaze=Blaze -Chicken=Pollo -Cow=Vaca -Mooshroom=Champiñaca -Creeper=Creeper -Ender Dragon=Enderdragón -Enderman=Enderman -Endermite=Endermite -Ghast=Ghast -Elder Guardian=Gran guardián -Guardian=Guardián -Horse=Caballo -Skeleton Horse=Caballo esquelético -Zombie Horse=Caballo zombie -Donkey=Burro -Mule=Mula -Iron Golem=Golem de hierro -Llama=Llama -Ocelot=Ocelote -Parrot=Loro -Pig=Cerdo -Polar Bear=Oso polar -Rabbit=Conejo -Killer Bunny=Conejo asesino -Sheep=Oveja -Shulker=Shulker -Silverfish=Lepisma -Skeleton=Esqueleto -Stray=Esqueleto -Wither Skeleton=Esqueleto wither -Magma Cube=Cubo de Magma -Slime=Slime -Snow Golem=Golem de nieve -Spider=Araña -Cave Spider=Araña de las cuevas -Squid=Calamar -Vex=Ánima -Evoker=Invocador -Illusioner=Illusionista -Villager=Aldeano -Vindicator=Vindicador -Zombie Villager=Aldeano zombie -Witch=Bruja -Wither=Wither -Wolf=Lobo -Husk=Husk -Zombie=Zombie -Zombie Pigman=Cerdo Zombie -Farmer=Granjero -Fisherman=Pescador -Fletcher=Flechador -Shepherd=Sacerdote -Librarian=Bibliotecario -Cartographer=Cartógrafo -Armorer=Armero -Leatherworker=Peletero -Butcher=Carnicero -Weapon Smith=Herrero de Armas -Tool Smith=Herrero de Herramientas -Cleric=Sacerdote -Nitwit=Simple diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr deleted file mode 100644 index 3354dd49a..000000000 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr +++ /dev/null @@ -1,64 +0,0 @@ -# textdomain: mobs_mc -Agent=Agent -Bat=Chauve-souris -Blaze=Blaze -Chicken=Poulet -Cow=Vache -Mooshroom=Champimeuh -Creeper=Creeper -Ender Dragon=Ender Dragon -Enderman=Enderman -Endermite=Endermite -Ghast=Ghast -Elder Guardian=Gardien de l'Elder -Guardian=Gardien -Horse=Cheval -Skeleton Horse=Cheval-squelette -Zombie Horse=Cheval-zombie -Donkey=Âne -Mule=Mule -Iron Golem=Golem de fer -Llama=Lama -Ocelot=Ocelot -Parrot=Perroquet -Pig=Cochon -Polar Bear=Ours blanc -Rabbit=Lapin -Killer Bunny=Lapin tueur -Sheep=Mouton -Shulker=Shulker -Silverfish=Poisson d'argent -Skeleton=Squelette -Stray=Vagabond -Wither Skeleton=Wither squelette -Magma Cube=Cube de magma -Slime=Slime -Snow Golem=Golem de neige -Spider=Araignée -Cave Spider=Araignée venimeuse -Squid=Poulpe -Vex=Vex -Evoker=Invocateur -Illusioner=Illusionniste -Villager=Villageois -Vindicator=Vindicateur -Zombie Villager=Zombie Villageois -Witch=Sorcière -Wither=Wither -Wolf=Loup -Husk=Zombie Momifié -Zombie=Zombie -Zombie Pigman=Zombie Cochon -Farmer=Fermier -Fisherman=Pêcheur -Fletcher=Archer -Shepherd=Berger -Librarian=Bibliothécaire -Cartographer=Cartographe -Armorer=Armurier -Leatherworker=Tanneur -Butcher=Boucher -Weapon Smith=Fabriquant d'arme -Tool Smith=Fabriquant d'outil -Cleric=Clerc -Nitwit=Crétin diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr deleted file mode 100644 index 62fe69a97..000000000 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr +++ /dev/null @@ -1,64 +0,0 @@ -# textdomain: mobs_mc -Agent=Агент -Bat=Летучая мышь -Blaze=Ифрит -Chicken=Курица -Cow=Корова -Mooshroom=Гриб -Creeper=Крипер -Ender Dragon=Дракон Предела -Enderman=Эндермен -Endermite=Эндермит -Ghast=Гаст -Elder Guardian=Древний страж -Guardian=Страж -Horse=Лошадь -Skeleton Horse=Скелет лошади -Zombie Horse=Зомби-лошадь -Donkey=Ослик -Mule=Мул -Iron Golem=Железный голем -Llama=Лама -Ocelot=Оцелот -Parrot=Попугай -Pig=Свинья -Polar Bear=Полярный медведь -Rabbit=Кролик -Killer Bunny=Кролик-убийца -Sheep=Овца -Shulker=Шалкер -Silverfish=Чешуйница -Skeleton=Скелет -Stray=Странник -Wither Skeleton=Скелет-иссушитель -Magma Cube=Лавовый куб -Slime=Слизняк -Snow Golem=Снежный голем -Spider=Паук -Cave Spider=Пещерный паук -Squid=Кальмар -Vex=Досаждатель -Evoker=Маг -Illusioner=Иллюзор -Villager=Житель -Vindicator=Поборник -Zombie Villager=Зомби-житель -Witch=Ведьма -Wither=Иссушитель -Wolf=Волк -Husk=Кадавр -Zombie=Зомби -Zombie Pigman=Зомби-свиночеловек -Farmer=Фермер -Fisherman=Рыбак -Fletcher=Лучник -Shepherd=Пастух -Librarian=Библиотекарь -Cartographer=Картограф -Armorer=Бронник -Leatherworker=Кожевник -Butcher=Мясник -Weapon Smith=Оружейник -Tool Smith=Инструментальщик -Cleric=Церковник -Nitwit=Нищий diff --git a/mods/ENTITIES/mobs_mc/locale/template.txt b/mods/ENTITIES/mobs_mc/locale/template.txt deleted file mode 100644 index aedd8754c..000000000 --- a/mods/ENTITIES/mobs_mc/locale/template.txt +++ /dev/null @@ -1,64 +0,0 @@ -# textdomain: mobs_mc -Agent= -Bat= -Blaze= -Chicken= -Cow= -Mooshroom= -Creeper= -Ender Dragon= -Enderman= -Endermite= -Ghast= -Elder Guardian= -Guardian= -Horse= -Skeleton Horse= -Zombie Horse= -Donkey= -Mule= -Iron Golem= -Llama= -Ocelot= -Parrot= -Pig= -Polar Bear= -Rabbit= -Killer Bunny= -Sheep= -Shulker= -Silverfish= -Skeleton= -Stray= -Wither Skeleton= -Magma Cube= -Slime= -Snow Golem= -Spider= -Cave Spider= -Squid= -Vex= -Evoker= -Illusioner= -Villager= -Vindicator= -Zombie Villager= -Witch= -Wither= -Wolf= -Husk= -Zombie= -Zombie Pigman= -Farmer= -Fisherman= -Fletcher= -Shepherd= -Librarian= -Cartographer= -Armorer= -Leatherworker= -Butcher= -Weapon Smith= -Tool Smith= -Cleric= -Nitwit= diff --git a/mods/ENTITIES/mobs_mc/mod.conf b/mods/ENTITIES/mobs_mc/mod.conf deleted file mode 100644 index 3d6a6928d..000000000 --- a/mods/ENTITIES/mobs_mc/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mobs_mc -author = maikerumine -description = Adds Minecraft-like monsters and animals. -depends = mcl_init, mcl_particles, mcl_mobs, mcl_wip, mcl_core -optional_depends = default, mcl_tnt, mcl_bows, mcl_throwing, mcl_fishing, bones, mesecons_materials, mobs_mc_gameconfig, doc_items - diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_agent.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_agent.b3d deleted file mode 100644 index 3e79c009b..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_agent.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_bat.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_bat.b3d deleted file mode 100644 index 522e611ab..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_bat.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_blaze.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_blaze.b3d deleted file mode 100644 index 2328c8a64..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_blaze.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d deleted file mode 100644 index 1a6ecbbe8..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_chicken.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_chicken.b3d deleted file mode 100644 index 6d839a459..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_chicken.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d deleted file mode 100644 index c00983919..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_creeper.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_creeper.b3d deleted file mode 100644 index e04ffc7b0..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_creeper.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_dragon.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_dragon.b3d deleted file mode 100644 index fb7195192..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_dragon.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_enderman.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_enderman.b3d deleted file mode 100644 index 30f42632b..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_enderman.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_endermite.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_endermite.b3d deleted file mode 100644 index 633925e90..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_endermite.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_evoker.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_evoker.b3d deleted file mode 100644 index 6e1017e0c..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_evoker.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_ghast.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_ghast.b3d deleted file mode 100644 index cebc037c0..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_ghast.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_guardian.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_guardian.b3d deleted file mode 100644 index d1fed68ba..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_guardian.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_horse.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_horse.b3d deleted file mode 100644 index 613cb5edd..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_horse.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_illusioner.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_illusioner.b3d deleted file mode 100644 index 7bb719ffb..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_illusioner.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_iron_golem.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_iron_golem.b3d deleted file mode 100644 index a7fbd352b..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_iron_golem.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_llama.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_llama.b3d deleted file mode 100644 index 5d6dd6b37..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_llama.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_magmacube.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_magmacube.b3d deleted file mode 100644 index 52bf62a6d..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_magmacube.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_mooshroom.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_mooshroom.b3d deleted file mode 100644 index c00983919..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_mooshroom.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_parrot.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_parrot.b3d deleted file mode 100644 index 7cb326d3d..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_parrot.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_pig.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_pig.b3d deleted file mode 100644 index 8ba5b6a84..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_pig.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_polarbear.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_polarbear.b3d deleted file mode 100644 index bb64b2b79..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_polarbear.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_rabbit.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_rabbit.b3d deleted file mode 100644 index ad2067d7b..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_rabbit.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_sheepfur.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_sheepfur.b3d deleted file mode 100644 index 1db15ddba..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_sheepfur.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_shulker.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_shulker.b3d deleted file mode 100644 index e370bc840..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_shulker.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_silverfish.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_silverfish.b3d deleted file mode 100644 index b550d563b..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_silverfish.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_skeleton.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_skeleton.b3d deleted file mode 100644 index aa1681dbe..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_skeleton.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_slime.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_slime.b3d deleted file mode 100644 index b426ee23d..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_slime.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_snowman.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_snowman.b3d deleted file mode 100644 index d399ff722..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_snowman.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_spider.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_spider.b3d deleted file mode 100644 index aec461a6b..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_spider.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_squid.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_squid.b3d deleted file mode 100644 index 887576b28..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_squid.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_stray.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_stray.b3d deleted file mode 100644 index c8eefe033..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_stray.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_vex.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_vex.b3d deleted file mode 100644 index f52772dd6..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_vex.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_villager.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_villager.b3d deleted file mode 100644 index a941ca8ef..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_villager.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_villager_zombie.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_villager_zombie.b3d deleted file mode 100644 index b7dd9d7ee..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_villager_zombie.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_vindicator.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_vindicator.b3d deleted file mode 100644 index ae14e8edb..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_vindicator.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_witch.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_witch.b3d deleted file mode 100644 index 86c298830..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_witch.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_wither.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_wither.b3d deleted file mode 100644 index 4669f3eb5..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_wither.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_witherskeleton.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_witherskeleton.b3d deleted file mode 100644 index c1b808307..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_witherskeleton.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_wolf.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_wolf.b3d deleted file mode 100644 index 63db5e097..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_wolf.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie.b3d deleted file mode 100644 index deacf31b6..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie_pigman.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie_pigman.b3d deleted file mode 100644 index 0b9f4f7c9..000000000 Binary files a/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie_pigman.b3d and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/ocelot.lua b/mods/ENTITIES/mobs_mc/ocelot.lua deleted file mode 100644 index 983199762..000000000 --- a/mods/ENTITIES/mobs_mc/ocelot.lua +++ /dev/null @@ -1,234 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### OCELOT AND CAT ---################### - -local pr = PseudoRandom(os.time()*12) - -local default_walk_chance = 70 - -local follow = { - "mcl_fishing:fish_raw", - "mcl_fishing:salmon_raw", - "mcl_fishing:clownfish_raw", - "mcl_fishing:pufferfish_raw", -} - -local function is_food(itemstring) - return table.indexof(follow, itemstring) ~= -1 -end - --- Ocelot -local ocelot = { - description = S("Ocelot"), - type = "animal", - spawn_class = "passive", - can_despawn = true, - hp_min = 10, - hp_max = 10, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.69, 0.3}, - visual = "mesh", - mesh = "mobs_mc_cat.b3d", - textures = {"mobs_mc_cat_ocelot.png"}, - visual_size = {x=2.0, y=2.0}, - makes_footstep_sound = true, - walk_chance = default_walk_chance, - walk_velocity = 1, - run_velocity = 3, - follow_velocity = 1, - floats = 1, - runaway = true, - fall_damage = 0, - fear_height = 4, - sounds = { - damage = "mobs_mc_ocelot_hurt", - death = "mobs_mc_ocelot_hurt", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - animation = { - speed_normal = 25, - run_speed = 50, - stand_start = 0, - stand_end = 0, - walk_start = 0, - walk_end = 40, - run_start = 0, - run_end = 40, - }, - follow = follow, - view_range = 12, - passive = true, - attack_type = "dogfight", - pathfinding = 1, - damage = 2, - reach = 1, - attack_animals = true, - specific_attack = { "mobs_mc:chicken" }, - on_rightclick = function(self, clicker) - if self.child then return end - -- Try to tame ocelot (mobs:feed_tame is intentionally NOT used) - local item = clicker:get_wielded_item() - if is_food(item:get_name()) then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - -- 1/3 chance of getting tamed - if pr:next(1, 3) == 1 then - local yaw = self.object:get_yaw() - local cat = minetest.add_entity(self.object:get_pos(), "mobs_mc:cat") - cat:set_yaw(yaw) - local ent = cat:get_luaentity() - ent.owner = clicker:get_player_name() - ent.tamed = true - self.object:remove() - return - end - end - - end, -} - -mcl_mobs:register_mob("mobs_mc:ocelot", ocelot) - --- Cat -local cat = table.copy(ocelot) -cat.description = S("Cat") -cat.textures = {{"mobs_mc_cat_black.png"}, {"mobs_mc_cat_red.png"}, {"mobs_mc_cat_siamese.png"}} -cat.can_despawn = false -cat.owner = "" -cat.order = "roam" -- "sit" or "roam" -cat.owner_loyal = true -cat.tamed = true -cat.runaway = false -cat.follow_velocity = 2.4 --- Automatically teleport cat to owner -cat.do_custom = mobs_mc.make_owner_teleport_function(12) -cat.sounds = { - random = "mobs_mc_cat_idle", - damage = "mobs_mc_cat_hiss", - death = "mobs_mc_ocelot_hurt", - eat = "mobs_mc_animal_eat_generic", - distance = 16, -} -cat.on_rightclick = function(self, clicker) - if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end - if mcl_mobs:capture_mob(self, clicker, 0, 60, 5, false, nil) then return end - if mcl_mobs:protect(self, clicker) then return end - - if self.child then return end - - -- Toggle sitting order - - if not self.owner or self.owner == "" then - -- Huh? This cat has no owner? Let's fix this! This should never happen. - self.owner = clicker:get_player_name() - end - - if not self.order or self.order == "" or self.order == "sit" then - self.order = "roam" - self.walk_chance = default_walk_chance - self.jump = true - else - -- “Sit!” - -- TODO: Add sitting model - self.order = "sit" - self.walk_chance = 0 - self.jump = false - end - -end - -mcl_mobs:register_mob("mobs_mc:cat", cat) - -local base_spawn_chance = 5000 - --- Spawn ocelot ---they get the same as the llama because I'm trying to rework so much of this code right now -j4i -mcl_mobs:spawn_specific( -"mobs_mc:ocelot", -"overworld", -"ground", -{ -"Jungle", -"JungleEdgeM", -"JungleM", -"JungleEdge", -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -5, -mobs_mc.water_level+15, -mcl_vars.mg_overworld_max) ---[[ -mobs:spawn({ - name = "mobs_mc:ocelot", - nodes = { "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_flowers:fern", "mcl_core:vine" }, - neighbors = {"air"}, - light_max = minetest.LIGHT_MAX+1, - light_min = 0, - chance = math.ceil(base_spawn_chance * 1.5), -- emulates 1/3 spawn failure rate - active_object_count = 12, - min_height = mobs_mc.water_level+1, -- Right above ocean level - max_height = mcl_vars.mg_overworld_max, - on_spawn = function(self, pos) - Note: Minecraft has a 1/3 spawn failure rate. - In this mod it is emulated by reducing the spawn rate accordingly (see above). - - -- 1/7 chance to spawn 2 ocelot kittens - if pr:next(1,7) == 1 then - -- Turn object into a child - local make_child = function(object) - local ent = object:get_luaentity() - object:set_properties({ - visual_size = { x = ent.base_size.x/2, y = ent.base_size.y/2 }, - collisionbox = { - ent.base_colbox[1]/2, - ent.base_colbox[2]/2, - ent.base_colbox[3]/2, - ent.base_colbox[4]/2, - ent.base_colbox[5]/2, - ent.base_colbox[6]/2, - } - }) - ent.child = true - end - - -- Possible spawn offsets, two of these will get selected - local k = 0.7 - local offsets = { - { x=k, y=0, z=0 }, - { x=-k, y=0, z=0 }, - { x=0, y=0, z=k }, - { x=0, y=0, z=-k }, - { x=k, y=0, z=k }, - { x=k, y=0, z=-k }, - { x=-k, y=0, z=k }, - { x=-k, y=0, z=-k }, - } - for i=1, 2 do - local o = pr:next(1, #offsets) - local offset = offsets[o] - local child_pos = vector.add(pos, offsets[o]) - table.remove(offsets, o) - make_child(minetest.add_entity(child_pos, "mobs_mc:ocelot")) - end - end - end, -}) -]]-- - --- spawn eggs --- FIXME: The spawn icon shows a cat texture, not an ocelot texture -mcl_mobs:register_egg("mobs_mc:ocelot", S("Ocelot"), "mobs_mc_spawn_icon_cat.png", 0) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua deleted file mode 100644 index 84b3aaead..000000000 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ /dev/null @@ -1,190 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### PARROT ---################### -local shoulders = { - left = vector.new(-3.75,10.5,0), - right = vector.new(3.75,10.5,0) -} - ---find a free shoulder or return nil -local function get_shoulder(player) - local sh = "left" - for _,o in pairs(player:get_children()) do - local l = o:get_luaentity() - if l and l.name == "mobs_mc:parrot" then - local _,_,a = l.object:get_attach() - for _,s in pairs(shoulders) do - if a and vector.equals(a,s) then - if sh == "left" then - sh = "right" - else - return - end - - end - end - end - end - return shoulders[sh] -end - -local function perch(self,player) - if self.tamed and player:get_player_name() == self.owner and not self.object:get_attach() then - local shoulder = get_shoulder(player) - if not shoulder then return true end - self.object:set_attach(player,"",shoulder,vector.new(0,0,0),true) - mcl_mobs:set_animation(self, "stand") - end -end - -local function check_perch(self,dtime) - if self.object:get_attach() then - for _,p in pairs(minetest.get_connected_players()) do - for _,o in pairs(p:get_children()) do - local l = o:get_luaentity() - if l and l.name == "mobs_mc:parrot" then - local n1 = minetest.get_node(vector.offset(p:get_pos(),0,-0.6,0)).name - local n2 = minetest.get_node(vector.offset(p:get_pos(),0,0,0)).name - local n3 = minetest.get_node(vector.offset(p:get_pos(),0,1,0)).name - if n1 == "air" or minetest.get_item_group(n2,"water") > 0 or minetest.get_item_group(n2,"lava") > 0 then - o:set_detach() - self.detach_timer = 0 - return - end - end - end - end - elseif not self.detach_timer then - for _,p in pairs(minetest.get_connected_players()) do - if vector.distance(self.object:get_pos(),p:get_pos()) < 0.5 then - perch(self,p) - return - end - end - elseif self.detach_timer then - if self.detach_timer > 1 then - self.detach_timer = nil - else - self.detach_timer = self.detach_timer + dtime - end - end -end - -mcl_mobs:register_mob("mobs_mc:parrot", { - description = S("Parrot"), - type = "npc", - spawn_class = "passive", - pathfinding = 1, - hp_min = 6, - hp_max = 6, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25}, - visual = "mesh", - mesh = "mobs_mc_parrot.b3d", - textures = {{"mobs_mc_parrot_blue.png"},{"mobs_mc_parrot_green.png"},{"mobs_mc_parrot_grey.png"},{"mobs_mc_parrot_red_blue.png"},{"mobs_mc_parrot_yellow_blue.png"}}, - visual_size = {x=3, y=3}, - walk_velocity = 3, - run_velocity = 5, - sounds = { - random = "mobs_mc_parrot_random", - damage = {name="mobs_mc_parrot_hurt", gain=0.3}, - death = {name="mobs_mc_parrot_death", gain=0.6}, - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - drops = { - {name = "mcl_mobitems:feather", - chance = 1, - min = 1, - max = 2, - looting = "common",}, - }, - animation = { - stand_speed = 50, - walk_speed = 50, - fly_speed = 50, - stand_start = 0, - stand_end = 0, - fly_start = 30, - fly_end = 45, - walk_start = 0, - walk_end = 20, - -- TODO: actual walk animation - --walk_start = 0, - --walk_end = 20, - - -- TODO: more unused animations between 45 and 130 - }, - fall_damage = 0, - fall_speed = -2.25, - attack_type = "dogfight", - floats = 1, - physical = true, - fly = true, - makes_footstep_sound = false, - fear_height = 0, - view_range = 16, - follow = { - "mcl_farming:wheat_seeds", - "mcl_farming:melon_seeds", - "mcl_farming:pumpkin_seeds", - "mcl_farming:beetroot_seeds", - }, - on_rightclick = function(self, clicker) - if self._doomed then return end - local item = clicker:get_wielded_item() - -- Kill parrot if fed with cookie - if item:get_name() == "mcl_farming:cookie" then - minetest.sound_play("mobs_mc_animal_eat_generic", {object = self.object, max_hear_distance=16}, true) - self.health = 0 - -- Doomed to die - self._doomed = true - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - return - end - -- Feed to tame, but not breed - if mcl_mobs:feed_tame(self, clicker, 1, false, true) then return end - perch(self,clicker) - end, - do_custom = function(self,dtime) - check_perch(self,dtime) - end, - do_punch = function(self,puncher) --do_punch is the mcl_mobs_redo variant - it gets called by on_punch later.... - if self.object:get_attach() == puncher then - return false --return false explicitly here. mcl_mobs checks for that - end - end, -}) - --- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* <- I'll get to this eventually -j4i -mcl_mobs:spawn_specific( -"mobs_mc:parrot", -"overworld", -"ground", -{ -"Jungle", -"JungleEdgeM", -"JungleM", -"JungleEdge", -}, -0, -minetest.LIGHT_MAX+1, -7, -30000, -1, -mobs_mc.water_level+7, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0) diff --git a/mods/ENTITIES/mobs_mc/pig.lua b/mods/ENTITIES/mobs_mc/pig.lua deleted file mode 100644 index 3cf88b915..000000000 --- a/mods/ENTITIES/mobs_mc/pig.lua +++ /dev/null @@ -1,242 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:pig", { - description = S("Pig"), - type = "animal", - spawn_class = "passive", - runaway = true, - hp_min = 10, - hp_max = 10, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.45, -0.01, -0.45, 0.45, 0.865, 0.45}, - visual = "mesh", - mesh = "mobs_mc_pig.b3d", - textures = {{ - "blank.png", -- baby - "mobs_mc_pig.png", -- base - "blank.png", -- saddle - }}, - visual_size = {x=2.5, y=2.5}, - makes_footstep_sound = true, - walk_velocity = 1, - run_velocity = 3, - follow_velocity = 3.4, - drops = { - {name = "mcl_mobitems:porkchop", - chance = 1, - min = 1, - max = 3, - looting = "common",}, - }, - fear_height = 4, - sounds = { - random = "mobs_pig", - death = "mobs_pig_angry", - damage = "mobs_pig", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - animation = { - stand_speed = 40, - walk_speed = 40, - run_speed = 90, - stand_start = 0, - stand_end = 0, - walk_start = 0, - walk_end = 40, - run_start = 0, - run_end = 40, - }, - follow = { - "mcl_farming:potato_item", - "mcl_farming:carrot_item", - "mcl_farming:beetroot_item", - "mcl_mobitems:carrot_on_a_stick" - }, - view_range = 8, - do_custom = function(self, dtime) - - -- set needed values if not already present - if not self.v2 then - self.v2 = 0 - self.max_speed_forward = 4 - self.max_speed_reverse = 2 - self.accel = 4 - self.terrain_type = 3 - self.driver_attach_at = {x = 0.0, y = 2.75, z = -1.5} - self.driver_eye_offset = {x = 0, y = 3, z = 0} - self.driver_scale = {x = 1/self.visual_size.x, y = 1/self.visual_size.y} - end - - -- if driver present allow control of horse - if self.driver then - - mcl_mobs.drive(self, "walk", "stand", false, dtime) - - return false -- skip rest of mob functions - end - - return true - end, - - on_die = function(self, pos) - - -- drop saddle when horse is killed while riding - -- also detach from horse properly - if self.driver then - mcl_mobs.detach(self.driver, {x = 1, y = 0, z = 1}) - end - end, - - on_rightclick = function(self, clicker) - if not clicker or not clicker:is_player() then - return - end - - local wielditem = clicker:get_wielded_item() - -- Feed pig - if wielditem:get_name() ~= "mcl_mobitems:carrot_on_a_stick" then - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end - end - if mcl_mobs:protect(self, clicker) then return end - - if self.child then - return - end - - -- Put saddle on pig - local item = clicker:get_wielded_item() - if item:get_name() == "mcl_mobitems:saddle" and self.saddle ~= "yes" then - self.base_texture = { - "blank.png", -- baby - "mobs_mc_pig.png", -- base - "mobs_mc_pig_saddle.png", -- saddle - } - self.object:set_properties({ - textures = self.base_texture - }) - self.saddle = "yes" - self.tamed = true - self.drops = { - {name = "mcl_mobitems:porkchop", - chance = 1, - min = 1, - max = 3,}, - {name = "mcl_mobitems:saddle", - chance = 1, - min = 1, - max = 1,}, - } - if not minetest.is_creative_enabled(clicker:get_player_name()) then - local inv = clicker:get_inventory() - local stack = inv:get_stack("main", clicker:get_wield_index()) - stack:take_item() - inv:set_stack("main", clicker:get_wield_index(), stack) - end - minetest.sound_play({name = "mcl_armor_equip_leather"}, {gain=0.5, max_hear_distance=8, pos=self.object:get_pos()}, true) - return - end - - -- Mount or detach player - local name = clicker:get_player_name() - if self.driver and clicker == self.driver then - -- Detach if already attached - mcl_mobs.detach(clicker, {x=1, y=0, z=0}) - return - - elseif not self.driver and self.saddle == "yes" and wielditem:get_name() == "mcl_mobitems:carrot_on_a_stick" then - -- Ride pig if it has a saddle and player uses a carrot on a stick - - mcl_mobs.attach(self, clicker) - - if not minetest.is_creative_enabled(clicker:get_player_name()) then - - local inv = self.driver:get_inventory() - -- 26 uses - if wielditem:get_wear() > 63000 then - -- Break carrot on a stick - local def = wielditem:get_definition() - if def.sounds and def.sounds.breaks then - minetest.sound_play(def.sounds.breaks, {pos = clicker:get_pos(), max_hear_distance = 8, gain = 0.5}, true) - end - wielditem = {name = "mcl_fishing:fishing_rod", count = 1} - else - wielditem:add_wear(2521) - end - inv:set_stack("main",self.driver:get_wield_index(), wielditem) - end - return - - -- Capture pig - elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then - mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) - end - end, - - on_breed = function(parent1, parent2) - local pos = parent1.object:get_pos() - local child = mcl_mobs:spawn_child(pos, parent1.name) - if child then - local ent_c = child:get_luaentity() - ent_c.tamed = true - ent_c.owner = parent1.owner - return false - end - end, -}) - -mcl_mobs:spawn_specific( -"mobs_mc:pig", -"overworld", -"ground", -{ - "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", - "MegaTaiga", - "MegaSpruceTaiga", - "ExtremeHills", - "ExtremeHills_beach", - "ExtremeHillsM", - "ExtremeHills+", - "ExtremeHills+_snowtop", - "StoneBeach", - "Plains", - "Plains_beach", - "SunflowerPlains", - "Taiga", - "Taiga_beach", - "Forest", - "Forest_beach", - "FlowerForest", - "FlowerForest_beach", - "BirchForest", - "BirchForestM", - "RoofedForest", - "Savanna", - "Savanna_beach", - "SavannaM", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", - "JungleEdge", - "JungleEdgeM", - "Swampland", - "Swampland_shore" -}, -9, -minetest.LIGHT_MAX+1, -30, -15000, -8, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0) diff --git a/mods/ENTITIES/mobs_mc/polar_bear.lua b/mods/ENTITIES/mobs_mc/polar_bear.lua deleted file mode 100644 index 3fd2d0a0c..000000000 --- a/mods/ENTITIES/mobs_mc/polar_bear.lua +++ /dev/null @@ -1,90 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### POLARBEAR ---################### - - -mcl_mobs:register_mob("mobs_mc:polar_bear", { - description = S("Polar Bear"), - type = "animal", - spawn_class = "passive", - runaway = false, - passive = false, - hp_min = 30, - hp_max = 30, - xp_min = 1, - xp_max = 3, - breath_max = -1, - collisionbox = {-0.7, -0.01, -0.7, 0.7, 1.39, 0.7}, - visual = "mesh", - mesh = "mobs_mc_polarbear.b3d", - textures = { - {"mobs_mc_polarbear.png"}, - }, - visual_size = {x=3.0, y=3.0}, - makes_footstep_sound = true, - damage = 6, - reach = 2, - walk_velocity = 1.2, - run_velocity = 2.4, - group_attack = true, - attack_type = "dogfight", - drops = { - -- 3/4 chance to drop raw fish (poor approximation) - {name = "mcl_fishing:fish_raw", - chance = 2, - min = 0, - max = 2, - looting = "common",}, - -- 1/4 to drop raw salmon - {name = "mcl_fishing:salmon_raw", - chance = 4, - min = 0, - max = 2, - looting = "common",}, - - }, - floats = 1, - fear_height = 4, - sounds = { - random = "mobs_mc_bear_random", - attack = "mobs_mc_bear_attack", - damage = "mobs_mc_bear_hurt", - death = "mobs_mc_bear_death", - war_cry = "mobs_mc_bear_growl", - distance = 16, - }, - animation = { - speed_normal = 25, speed_run = 50, - stand_start = 0, stand_end = 0, - walk_start = 0, walk_end = 40, - run_start = 0, run_end = 40, - }, - - view_range = 16, -}) - - -mcl_mobs:spawn_specific( -"mobs_mc:polar_bear", -"overworld", -"ground", -{ -"ColdTaiga", -"IcePlainsSpikes", -"IcePlains", -"ExtremeHills+_snowtop", -}, -0, -minetest.LIGHT_MAX+1, -30, -7000, -3, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- spawn egg -mcl_mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0) diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua deleted file mode 100644 index 524000a71..000000000 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ /dev/null @@ -1,219 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - -local rabbit = { - description = S("Rabbit"), - type = "animal", - spawn_class = "passive", - passive = true, - reach = 1, - - hp_min = 3, - hp_max = 3, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.49, 0.2}, - - visual = "mesh", - mesh = "mobs_mc_rabbit.b3d", - textures = { - {"mobs_mc_rabbit_brown.png"}, - {"mobs_mc_rabbit_gold.png"}, - {"mobs_mc_rabbit_white.png"}, - {"mobs_mc_rabbit_white_splotched.png"}, - {"mobs_mc_rabbit_salt.png"}, - {"mobs_mc_rabbit_black.png"}, - }, - visual_size = {x=1.5, y=1.5}, - sounds = { - random = "mobs_mc_rabbit_random", - damage = "mobs_mc_rabbit_hurt", - death = "mobs_mc_rabbit_death", - attack = "mobs_mc_rabbit_attack", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - makes_footstep_sound = false, - walk_velocity = 1, - run_velocity = 3.7, - follow_velocity = 1.1, - floats = 1, - runaway = true, - jump = true, - drops = { - {name = "mcl_mobitems:rabbit", chance = 1, min = 0, max = 1, looting = "common",}, - {name = "mcl_mobitems:rabbit_hide", chance = 1, min = 0, max = 1, looting = "common",}, - {name = "mcl_mobitems:rabbit_foot", chance = 10, min = 0, max = 1, looting = "rare", looting_factor = 0.03,}, - }, - fear_height = 4, - animation = { - speed_normal = 25, speed_run = 50, - stand_start = 0, stand_end = 0, - walk_start = 0, walk_end = 20, - run_start = 0, run_end = 20, - }, - -- Follow (yellow) dangelions, carrots and golden carrots - follow = { - "mcl_flowers:dandelion", - "mcl_farming:carrot_item", - "mcl_farming:carrot_item_gold", - }, - view_range = 8, - -- Eat carrots and reduce their growth stage by 1 - replace_rate = 10, - replace_what = { - {"mcl_farming:carrot", "mcl_farming:carrot_7", 0}, - {"mcl_farming:carrot_7", "mcl_farming:carrot_6", 0}, - {"mcl_farming:carrot_6", "mcl_farming:carrot_5", 0}, - {"mcl_farming:carrot_5", "mcl_farming:carrot_4", 0}, - {"mcl_farming:carrot_4", "mcl_farming:carrot_3", 0}, - {"mcl_farming:carrot_3", "mcl_farming:carrot_2", 0}, - {"mcl_farming:carrot_2", "mcl_farming:carrot_1", 0}, - {"mcl_farming:carrot_1", "air", 0}, - }, - on_rightclick = function(self, clicker) - -- Feed, tame protect or capture - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end - if mcl_mobs:protect(self, clicker) then return end - if mcl_mobs:capture_mob(self, clicker, 0, 50, 80, false, nil) then return end - end, - do_custom = function(self) - -- Easter egg: Change texture if rabbit is named “Toast” - if self.nametag == "Toast" and not self._has_toast_texture then - self._original_rabbit_texture = self.base_texture - self.base_texture = { "mobs_mc_rabbit_toast.png" } - self.object:set_properties({ textures = self.base_texture }) - self._has_toast_texture = true - elseif self.nametag ~= "Toast" and self._has_toast_texture then - self.base_texture = self._original_rabbit_texture - self.object:set_properties({ textures = self.base_texture }) - self._has_toast_texture = false - end - end, -} - -mcl_mobs:register_mob("mobs_mc:rabbit", rabbit) - --- The killer bunny (Only with spawn egg) -local killer_bunny = table.copy(rabbit) -killer_bunny.description = S("Killer Bunny") -killer_bunny.type = "monster" -killer_bunny.spawn_class = "hostile" -killer_bunny.attack_type = "dogfight" -killer_bunny.specific_attack = { "player", "mobs_mc:wolf", "mobs_mc:dog" } -killer_bunny.damage = 8 -killer_bunny.passive = false --- 8 armor points -killer_bunny.armor = 50 -killer_bunny.textures = { "mobs_mc_rabbit_caerbannog.png" } -killer_bunny.view_range = 16 -killer_bunny.replace_rate = nil -killer_bunny.replace_what = nil -killer_bunny.on_rightclick = nil -killer_bunny.run_velocity = 6 -killer_bunny.do_custom = function(self) - if not self._killer_bunny_nametag_set then - self.nametag = "The Killer Bunny" - self._killer_bunny_nametag_set = true - end -end - -mcl_mobs:register_mob("mobs_mc:killer_bunny", killer_bunny) - --- Mob spawning rules. --- Different skins depending on spawn location <- we'll get to this when the spawning algorithm is fleshed out - -mcl_mobs:spawn_specific( -"mobs_mc:rabbit", -"overworld", -"ground", -{ -"Desert", -"FlowerForest", -"Taiga", -"ExtremeHills", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Plains", -"ColdTaiga", -"SunflowerPlains", -"RoofedForest", -"MesaPlateauFM_grasstop", -"ExtremeHillsM", -"BirchForestM", -}, -9, -minetest.LIGHT_MAX+1, -30, -15000, -8, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - ---[[ -local spawn = { - name = "mobs_mc:rabbit", - neighbors = {"air"}, - chance = 15000, - active_object_count = 10, - min_light = 0, - max_light = minetest.LIGHT_MAX+1, - min_height = mcl_vars.mg_overworld_min, - max_height = mcl_vars.mg_overworld_max, -} - -local spawn_desert = table.copy(spawn) -spawn_desert.nodes = { "mcl_core:sand", "mcl_core:sandstone" } -spawn_desert.on_spawn = function(self, pos) - local texture = "mobs_mc_rabbit_gold.png" - self.base_texture = { "mobs_mc_rabbit_gold.png" } - self.object:set_properties({textures = self.base_texture}) -end -mcl_mobs:spawn(spawn_desert) - -local spawn_snow = table.copy(spawn) -spawn_snow.nodes = { "mcl_core:snow", "mcl_core:snowblock", "mcl_core:dirt_with_grass_snow" } -spawn_snow.on_spawn = function(self, pos) - local texture - local r = math.random(1, 100) - -- 80% white fur - if r <= 80 then - texture = "mobs_mc_rabbit_white.png" - -- 20% black and white fur - else - texture = "mobs_mc_rabbit_white_splotched.png" - end - self.base_texture = { texture } - self.object:set_properties({textures = self.base_texture}) -end -mcl_mobs:spawn(spawn_snow) - -local spawn_grass = table.copy(spawn) -spawn_grass.nodes = { "mcl_core:dirt_with_grass" } -spawn_grass.on_spawn = function(self, pos) - local texture - local r = math.random(1, 100) - -- 50% brown fur - if r <= 50 then - texture = "mobs_mc_rabbit_brown.png" - -- 40% salt fur - elseif r <= 90 then - texture = "mobs_mc_rabbit_salt.png" - -- 10% black fur - else - texture = "mobs_mc_rabbit_black.png" - end - self.base_texture = { texture } - self.object:set_properties({textures = self.base_texture}) -end -mcl_mobs:spawn(spawn_grass) -]]-- - --- Spawn egg -mcl_mobs:register_egg("mobs_mc:rabbit", S("Rabbit"), "mobs_mc_spawn_icon_rabbit.png", 0) - --- Note: This spawn egg does not exist in Minecraft -mcl_mobs:register_egg("mobs_mc:killer_bunny", S("Killer Bunny"), "mobs_mc_spawn_icon_rabbit.png^[colorize:#FF0000:192", 0) -- TODO: Update inventory image diff --git a/mods/ENTITIES/mobs_mc/sheep.lua b/mods/ENTITIES/mobs_mc/sheep.lua deleted file mode 100644 index d2d09be50..000000000 --- a/mods/ENTITIES/mobs_mc/sheep.lua +++ /dev/null @@ -1,358 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### SHEEP ---################### - -local colors = { - -- group = { wool, textures } - unicolor_white = { "mcl_wool:white", "#FFFFFF00" }, - unicolor_dark_orange = { "mcl_wool:brown", "#502A00D0" }, - unicolor_grey = { "mcl_wool:silver", "#5B5B5BD0" }, - unicolor_darkgrey = { "mcl_wool:grey", "#303030D0" }, - unicolor_blue = { "mcl_wool:blue", "#0000CCD0" }, - unicolor_dark_green = { "mcl_wool:green", "#005000D0" }, - unicolor_green = { "mcl_wool:lime", "#50CC00D0" }, - unicolor_violet = { "mcl_wool:purple" , "#5000CCD0" }, - unicolor_light_red = { "mcl_wool:pink", "#FF5050D0" }, - unicolor_yellow = { "mcl_wool:yellow", "#CCCC00D0" }, - unicolor_orange = { "mcl_wool:orange", "#CC5000D0" }, - unicolor_red = { "mcl_wool:red", "#CC0000D0" }, - unicolor_cyan = { "mcl_wool:cyan", "#00CCCCD0" }, - unicolor_red_violet = { "mcl_wool:magenta", "#CC0050D0" }, - unicolor_black = { "mcl_wool:black", "#000000D0" }, - unicolor_light_blue = { "mcl_wool:light_blue", "#5050FFD0" }, -} - -local rainbow_colors = { - "unicolor_light_red", - "unicolor_red", - "unicolor_orange", - "unicolor_yellow", - "unicolor_green", - "unicolor_dark_green", - "unicolor_light_blue", - "unicolor_blue", - "unicolor_violet", - "unicolor_red_violet" -} - -local sheep_texture = function(color_group) - if not color_group then - color_group = "unicolor_white" - end - return { - "mobs_mc_sheep_fur.png^[colorize:"..colors[color_group][2], - "mobs_mc_sheep.png", - } -end - -local gotten_texture = { "blank.png", "mobs_mc_sheep.png" } - ---mcsheep -mcl_mobs:register_mob("mobs_mc:sheep", { - description = S("Sheep"), - type = "animal", - spawn_class = "passive", - hp_min = 8, - hp_max = 8, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.29, 0.45}, - - visual = "mesh", - visual_size = {x=3, y=3}, - mesh = "mobs_mc_sheepfur.b3d", - textures = { sheep_texture("unicolor_white") }, - gotten_texture = gotten_texture, - color = "unicolor_white", - makes_footstep_sound = true, - walk_velocity = 1, - drops = { - {name = "mcl_mobitems:mutton", - chance = 1, - min = 1, - max = 2, - looting = "common",}, - {name = colors["unicolor_white"][1], - chance = 1, - min = 1, - max = 1, - looting = "common",}, - }, - fear_height = 4, - sounds = { - random = "mobs_sheep", - death = "mobs_sheep", - damage = "mobs_sheep", - sounds = "mobs_mc_animal_eat_generic", - distance = 16, - }, - animation = { - speed_normal = 25, run_speed = 65, - stand_start = 40, stand_end = 80, - walk_start = 0, walk_end = 40, - run_start = 0, run_end = 40, - }, - follow = { "mcl_farming:wheat_item" }, - view_range = 12, - - -- Eat grass - replace_rate = 20, - replace_what = { - { "mcl_core:dirt_with_grass", "mcl_core:dirt", -1 }, - { "mcl_flowers:tallgrass", "air", 0 }, - }, - -- Properly regrow wool after eating grass - on_replace = function(self, pos, oldnode, newnode) - if not self.color or not colors[self.color] then - self.color = "unicolor_white" - end - self.gotten = false - self.base_texture = sheep_texture(self.color) - self.object:set_properties({ textures = self.base_texture }) - self.drops = { - {name = "mcl_mobitems:mutton", - chance = 1, - min = 1, - max = 2,}, - {name = colors[self.color][1], - chance = 1, - min = 1, - max = 1,}, - } - end, - - -- Set random color on spawn - do_custom = function(self, dtime) - if not self.initial_color_set then - local r = math.random(0,100000) - local textures - if r <= 81836 then - -- 81.836% - self.color = "unicolor_white" - elseif r <= 81836 + 5000 then - -- 5% - self.color = "unicolor_grey" - elseif r <= 81836 + 5000 + 5000 then - -- 5% - self.color = "unicolor_darkgrey" - elseif r <= 81836 + 5000 + 5000 + 5000 then - -- 5% - self.color = "unicolor_black" - elseif r <= 81836 + 5000 + 5000 + 5000 + 3000 then - -- 3% - self.color = "unicolor_dark_orange" - else - -- 0.164% - self.color = "unicolor_light_red" - end - self.base_texture = sheep_texture(self.color) - self.object:set_properties({ textures = self.base_texture }) - self.drops = { - {name = "mcl_mobitems:mutton", - chance = 1, - min = 1, - max = 2,}, - {name = colors[self.color][1], - chance = 1, - min = 1, - max = 1,}, - } - self.initial_color_set = true - end - - local is_kay27 = self.nametag == "kay27" - - if self.color_change_timer then - local old_color = self.color - if is_kay27 then - self.color_change_timer = self.color_change_timer - dtime - if self.color_change_timer < 0 then - self.color_change_timer = 0.5 - self.color_index = (self.color_index + 1) % #rainbow_colors - self.color = rainbow_colors[self.color_index + 1] - end - else - self.color_change_timer = nil - self.color_index = nil - self.color = self.initial_color - end - - if old_color ~= self.color then - self.base_texture = sheep_texture(self.color) - self.object:set_properties({textures = self.base_texture}) - end - elseif is_kay27 then - self.initial_color = self.color - self.color_change_timer = 0 - self.color_index = -1 - end - end, - - on_rightclick = function(self, clicker) - local item = clicker:get_wielded_item() - - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end - if mcl_mobs:protect(self, clicker) then return end - - if item:get_name() == "mcl_tools:shears" and not self.gotten and not self.child then - self.gotten = true - local pos = self.object:get_pos() - minetest.sound_play("mcl_tools_shears_cut", {pos = pos}, true) - pos.y = pos.y + 0.5 - if not self.color then - self.color = "unicolor_white" - end - minetest.add_item(pos, ItemStack(colors[self.color][1].." "..math.random(1,3))) - self.base_texture = gotten_texture - self.object:set_properties({ - textures = self.base_texture, - }) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:add_wear(mobs_mc.shears_wear) - clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item) - end - self.drops = { - {name = "mcl_mobitems:mutton", - chance = 1, - min = 1, - max = 2,}, - } - return - end - -- Dye sheep - if minetest.get_item_group(item:get_name(), "dye") == 1 and not self.gotten then - minetest.log("verbose", "[mobs_mc] " ..item:get_name() .. " " .. minetest.get_item_group(item:get_name(), "dye")) - for group, colordata in pairs(colors) do - if minetest.get_item_group(item:get_name(), group) == 1 then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - self.base_texture = sheep_texture(group) - self.object:set_properties({ - textures = self.base_texture, - }) - self.color = group - self.drops = { - {name = "mcl_mobitems:mutton", - chance = 1, - min = 1, - max = 2,}, - {name = colordata[1], - chance = 1, - min = 1, - max = 1,}, - } - break - end - end - return - end - if mcl_mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end - end, - on_breed = function(parent1, parent2) - -- Breed sheep and choose a fur color for the child. - local pos = parent1.object:get_pos() - local child = mcl_mobs:spawn_child(pos, parent1.name) - if child then - local ent_c = child:get_luaentity() - local color1 = parent1.color - local color2 = parent2.color - - local dye1 = mcl_dye.unicolor_to_dye(color1) - local dye2 = mcl_dye.unicolor_to_dye(color2) - local output - -- Check if parent colors could be mixed as dyes - if dye1 and dye2 then - output = minetest.get_craft_result({items = {dye1, dye2}, method="normal"}) - end - local mixed = false - if output and not output.item:is_empty() then - -- Try to mix dyes and use that as new fur color - local new_dye = output.item:get_name() - local groups = minetest.registered_items[new_dye].groups - for k, v in pairs(groups) do - if string.sub(k, 1, 9) == "unicolor_" then - ent_c.color = k - ent_c.base_texture = sheep_texture(k) - mixed = true - break - end - end - end - - -- Colors not mixable - if not mixed then - -- Choose color randomly from one of the parents - local p = math.random(1, 2) - if p == 1 and color1 then - ent_c.color = color1 - else - ent_c.color = color2 - end - ent_c.base_texture = sheep_texture(ent_c.color) - end - child:set_properties({textures = ent_c.base_texture}) - ent_c.initial_color_set = true - ent_c.tamed = true - ent_c.owner = parent1.owner - return false - end - end, -}) -mcl_mobs:spawn_specific( -"mobs_mc:sheep", -"overworld", -"ground", -{ - "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", - "MegaTaiga", - "MegaSpruceTaiga", - "ExtremeHills", - "ExtremeHills_beach", - "ExtremeHillsM", - "ExtremeHills+", - "ExtremeHills+_snowtop", - "StoneBeach", - "Plains", - "Plains_beach", - "SunflowerPlains", - "Taiga", - "Taiga_beach", - "Forest", - "Forest_beach", - "FlowerForest", - "FlowerForest_beach", - "BirchForest", - "BirchForestM", - "RoofedForest", - "Savanna", - "Savanna_beach", - "SavannaM", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", - "JungleEdge", - "JungleEdgeM", - "Swampland", - "Swampland_shore" -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -3, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0) diff --git a/mods/ENTITIES/mobs_mc/shulker.lua b/mods/ENTITIES/mobs_mc/shulker.lua deleted file mode 100644 index 5b3c4d282..000000000 --- a/mods/ENTITIES/mobs_mc/shulker.lua +++ /dev/null @@ -1,98 +0,0 @@ ---MCmobs v0.2 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### SHULKER ---################### - --- animation 45-80 is transition between passive and attack stance - -mcl_mobs:register_mob("mobs_mc:shulker", { - description = S("Shulker"), - type = "monster", - spawn_class = "hostile", - attack_type = "shoot", - shoot_interval = 0.5, - arrow = "mobs_mc:shulkerbullet", - shoot_offset = 0.5, - passive = false, - hp_min = 30, - hp_max = 30, - xp_min = 5, - xp_max = 5, - armor = 150, - collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.99, 0.5}, - visual = "mesh", - mesh = "mobs_mc_shulker.b3d", - textures = { "mobs_mc_endergolem.png", }, - -- TODO: sounds - -- TODO: Make shulker dye-able - visual_size = {x=3, y=3}, - walk_chance = 0, - jump = false, - drops = { - {name = "mcl_mobitems:shulker_shell", - chance = 2, - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.0625}, - }, - animation = { - stand_speed = 25, walk_speed = 25, run_speed = 50, punch_speed = 25, - speed_normal = 25, speed_run = 50, - stand_start = 0, stand_end = 45, - walk_start = 0, walk_end = 45, - run_start = 0, run_end = 45, - punch_start = 80, punch_end = 100, - }, - view_range = 16, - fear_height = 4, -}) - --- bullet arrow (weapon) -mcl_mobs:register_arrow("mobs_mc:shulkerbullet", { - visual = "sprite", - visual_size = {x = 0.25, y = 0.25}, - textures = {"mobs_mc_shulkerbullet.png"}, - velocity = 6, - - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 4}, - }, nil) - end, - - hit_mob = function(self, mob) - mob:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 4}, - }, nil) - end, - - hit_node = function(self, pos, node) - end -}) - - -mcl_mobs:register_egg("mobs_mc:shulker", S("Shulker"), "mobs_mc_spawn_icon_shulker.png", 0) - -mcl_mobs:spawn_specific( -"mobs_mc:shulker", -"end", -"ground", -{ -"End" -}, -0, -minetest.LIGHT_MAX+1, -30, -5000, -2, -mcl_vars.mg_end_min, -mcl_vars.mg_end_max) diff --git a/mods/ENTITIES/mobs_mc/silverfish.lua b/mods/ENTITIES/mobs_mc/silverfish.lua deleted file mode 100644 index 857c9326e..000000000 --- a/mods/ENTITIES/mobs_mc/silverfish.lua +++ /dev/null @@ -1,140 +0,0 @@ ---################### ---################### SILVERFISH ---################### - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:silverfish", { - description = S("Silverfish"), - type = "monster", - spawn_class = "hostile", - passive = false, - group_attack = true, - reach = 1, - hp_min = 8, - hp_max = 8, - xp_min = 5, - xp_max = 5, - armor = {fleshy = 100, arthropod = 100}, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.44, 0.4}, - visual = "mesh", - mesh = "mobs_mc_silverfish.b3d", - textures = { - {"mobs_mc_silverfish.png"}, - }, - pathfinding = 1, - visual_size = {x=3, y=3}, - sounds = { - random = "mobs_mc_silverfish_idle", - death = "mobs_mc_silverfish_death", - damage = "mobs_mc_silverfish_hurt", - distance = 16, - }, - makes_footstep_sound = false, - walk_velocity = 0.6, - run_velocity = 2, - jump = true, - fear_height = 4, - replace_what = { - {"mcl_core:stone", "mcl_monster_eggs:monster_egg_stone", -1}, - {"mcl_core:cobble", "mcl_monster_eggs:monster_egg_cobble", -1}, - {"mcl_core:stonebrick", "mcl_monster_eggs:monster_egg_stonebrick", -1}, - {"mcl_core:stonebrickmossy", "mcl_monster_eggs:monster_egg_stonebrickmossy", -1}, - {"mcl_core:stonebrickcracked", "mcl_monster_eggs:monster_egg_stonebrickcracked", -1}, - {"mcl_core:stonebrickcarved", "mcl_monster_eggs:monster_egg_stonebrickcarved", -1}, - }, - replace_rate = 2, - animation = { - speed_normal = 25, speed_run = 50, - stand_start = 0, stand_end = 20, - walk_start = 0, walk_end = 20, - run_start = 0, run_end = 20, - }, - view_range = 16, - attack_type = "dogfight", - damage = 1, - reach = 1, -}) - -mcl_mobs:register_egg("mobs_mc:silverfish", S("Silverfish"), "mobs_mc_spawn_icon_silverfish.png", 0) - --- Monster egg blocks (Minetest Game) -if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then - local spawn_silverfish = function(pos, oldnode, oldmetadata, digger) - if not minetest.is_creative_enabled(digger:get_player_name()) then - minetest.add_entity(pos, "mobs_mc:silverfish") - end - end - minetest.register_node("mobs_mc:monster_egg_stone", { - description = "Stone Monster Egg", - tiles = {"default_stone.png"}, - groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', - is_ground_content = true, - sounds = default.node_sound_stone_defaults(), - after_dig_node = spawn_silverfish, - }) - - minetest.register_node("mobs_mc:monster_egg_cobble", { - description = "Cobblestone Monster Egg", - tiles = {"default_cobble.png"}, - is_ground_content = false, - groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', - sounds = default.node_sound_stone_defaults(), - after_dig_node = spawn_silverfish, - }) - - minetest.register_node("mobs_mc:monster_egg_mossycobble", { - description = "Mossy Cobblestone Monster Egg", - tiles = {"default_mossycobble.png"}, - is_ground_content = false, - groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', - sounds = default.node_sound_stone_defaults(), - after_dig_node = spawn_silverfish, - }) - - minetest.register_node("mobs_mc:monster_egg_stonebrick", { - description = "Stone Brick Monster Egg", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_stone_brick.png"}, - is_ground_content = false, - groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', - sounds = default.node_sound_stone_defaults(), - after_dig_node = spawn_silverfish, - }) - - minetest.register_node("mobs_mc:monster_egg_stone_block", { - description = "Stone Block Monster Egg", - tiles = {"default_stone_block.png"}, - is_ground_content = false, - groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', - sounds = default.node_sound_stone_defaults(), - after_dig_node = spawn_silverfish, - }) - - -- Randomly spawn stone monster eggs in the world - local mg_name = minetest.get_mapgen_setting("mg_name") - local scarcity - if mg_name == "v6" then - scarcity = 28 * 28 * 28 - else - scarcity = 22 * 22 * 22 - end - minetest.register_ore({ - ore_type = "scatter", - ore = "mobs_mc:monster_egg_stone", - wherein = "default:stone", - clust_scarcity = scarcity, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = 31000, - biomes = { "grassland" }, - }) - -end diff --git a/mods/ENTITIES/mobs_mc/skeleton+stray.lua b/mods/ENTITIES/mobs_mc/skeleton+stray.lua deleted file mode 100644 index aab719b1c..000000000 --- a/mods/ENTITIES/mobs_mc/skeleton+stray.lua +++ /dev/null @@ -1,338 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") -local mod_bows = minetest.get_modpath("mcl_bows") ~= nil - ---################### ---################### SKELETON ---################### - - - -local skeleton = { - description = S("Skeleton"), - type = "monster", - spawn_class = "hostile", - hp_min = 20, - hp_max = 20, - xp_min = 6, - xp_max = 6, - breath_max = -1, - armor = {undead = 100, fleshy = 100}, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.98, 0.3}, - pathfinding = 1, - group_attack = true, - visual = "mesh", - mesh = "mobs_mc_skeleton.b3d", - textures = { { - "mcl_bows_bow_0.png", -- bow - "mobs_mc_skeleton.png", -- skeleton - } }, - visual_size = {x=1, y=1}, - makes_footstep_sound = true, - textures = { - { - "mobs_mc_empty.png", -- armor - "mobs_mc_skeleton.png", -- texture - "mcl_bows_bow_0.png", -- wielded_item - } - }, - walk_velocity = 1.2, - run_velocity = 2.4, - damage = 2, - reach = 2, - drops = { - {name = "mcl_bows:arrow", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - {name = "mcl_bows:bow", - chance = 100 / 8.5, - min = 1, - max = 1, - looting = "rare",}, - {name = "mcl_mobitems:bone", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - - -- Head - -- TODO: Only drop if killed by charged creeper - {name = "mcl_heads:skeleton", - chance = 200, -- 0.5% chance - min = 1, - max = 1,}, - }, - animation = { - stand_speed = 15, - stand_start = 0, - stand_end = 40, - walk_speed = 15, - walk_start = 40, - walk_end = 60, - run_speed = 30, - shoot_start = 70, - shoot_end = 90, - die_start = 160, - die_end = 170, - die_speed = 15, - die_loop = false, - }, - ignited_by_sunlight = true, - view_range = 16, - fear_height = 4, - attack_type = "dogshoot", - arrow = "mcl_bows:arrow_entity", - shoot_arrow = function(self, pos, dir) - if mod_bows then - -- 2-4 damage per arrow - local dmg = math.max(4, math.random(2, 8)) - mcl_bows.shoot_arrow("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) - end - end, - shoot_interval = 2, - shoot_offset = 1.5, - dogshoot_switch = 1, - dogshoot_count_max =1.8, - harmed_by_heal = true, -} - -mcl_mobs:register_mob("mobs_mc:skeleton", skeleton) - - ---################### ---################### STRAY ---################### - -local stray = table.copy(skeleton) -stray.description = S("Stray") -stray.mesh = "mobs_mc_skeleton.b3d" -stray.textures = { - { - "mobs_mc_stray_overlay.png", - "mobs_mc_stray.png", - "mcl_bows_bow_0.png", - }, -} --- TODO: different sound (w/ echo) --- TODO: stray's arrow inflicts slowness status -table.insert(stray.drops, { - name = "mcl_potions:slowness_arrow", - chance = 2, - min = 1, - max = 1, - looting = "rare", - looting_chance_function = function(lvl) - local chance = 0.5 - for i = 1, lvl do - if chance > 1 then - return 1 - end - chance = chance + (1 - chance) / 2 - end - return chance - end, -}) - -mcl_mobs:register_mob("mobs_mc:stray", stray) - --- Overworld spawn -mcl_mobs:spawn_specific( -"mobs_mc:skeleton", -"overworld", -"ground", -{ -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"Desert", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -"RoofedForest_ocean", -"JungleEdgeM_ocean", -"BirchForestM_ocean", -"BirchForest_ocean", -"IcePlains_deep_ocean", -"Jungle_deep_ocean", -"Savanna_ocean", -"MesaPlateauF_ocean", -"ExtremeHillsM_deep_ocean", -"Savanna_deep_ocean", -"SunflowerPlains_ocean", -"Swampland_deep_ocean", -"Swampland_ocean", -"MegaSpruceTaiga_deep_ocean", -"ExtremeHillsM_ocean", -"JungleEdgeM_deep_ocean", -"SunflowerPlains_deep_ocean", -"BirchForest_deep_ocean", -"IcePlainsSpikes_ocean", -"Mesa_ocean", -"StoneBeach_ocean", -"Plains_deep_ocean", -"JungleEdge_deep_ocean", -"SavannaM_deep_ocean", -"Desert_deep_ocean", -"Mesa_deep_ocean", -"ColdTaiga_deep_ocean", -"Plains_ocean", -"MesaPlateauFM_ocean", -"Forest_deep_ocean", -"JungleM_deep_ocean", -"FlowerForest_deep_ocean", -"MushroomIsland_ocean", -"MegaTaiga_ocean", -"StoneBeach_deep_ocean", -"IcePlainsSpikes_deep_ocean", -"ColdTaiga_ocean", -"SavannaM_ocean", -"MesaPlateauF_deep_ocean", -"MesaBryce_deep_ocean", -"ExtremeHills+_deep_ocean", -"ExtremeHills_ocean", -"MushroomIsland_deep_ocean", -"Forest_ocean", -"MegaTaiga_deep_ocean", -"JungleEdge_ocean", -"MesaBryce_ocean", -"MegaSpruceTaiga_ocean", -"ExtremeHills+_ocean", -"Jungle_ocean", -"RoofedForest_deep_ocean", -"IcePlains_ocean", -"FlowerForest_ocean", -"ExtremeHills_deep_ocean", -"MesaPlateauFM_deep_ocean", -"Desert_ocean", -"Taiga_ocean", -"BirchForestM_deep_ocean", -"Taiga_deep_ocean", -"JungleM_ocean", -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -7, -20, -17000, -2, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - - --- Nether spawn -mcl_mobs:spawn_specific( -"mobs_mc:skeleton", -"nether", -"ground", -{ -"Nether" -}, -0, -7, -30, -10000, -3, -mcl_vars.mg_nether_min, -mcl_vars.mg_nether_max) - --- Stray spawn --- TODO: Spawn directly under the sky -mcl_mobs:spawn_specific( -"mobs_mc:stray", -"overworld", -"ground", -{ -"ColdTaiga", -"IcePlainsSpikes", -"IcePlains", -"ExtremeHills+_snowtop", -}, -0, -7, -20, -19000, -2, -mobs_mc.water_level, -mcl_vars.mg_overworld_max) - - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:skeleton", S("Skeleton"), "mobs_mc_spawn_icon_skeleton.png", 0) -mcl_mobs:register_egg("mobs_mc:stray", S("Stray"), "mobs_mc_spawn_icon_stray.png", 0) diff --git a/mods/ENTITIES/mobs_mc/skeleton_wither.lua b/mods/ENTITIES/mobs_mc/skeleton_wither.lua deleted file mode 100644 index 5e31453fa..000000000 --- a/mods/ENTITIES/mobs_mc/skeleton_wither.lua +++ /dev/null @@ -1,115 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### WITHER SKELETON ---################### - -mcl_mobs:register_mob("mobs_mc:witherskeleton", { - description = S("Wither Skeleton"), - type = "monster", - spawn_class = "hostile", - hp_min = 20, - hp_max = 20, - xp_min = 6, - xp_max = 6, - breath_max = -1, - armor = {undead = 100, fleshy = 100}, - pathfinding = 1, - group_attack = true, - collisionbox = {-0.35, -0.01, -0.35, 0.35, 2.39, 0.35}, - visual = "mesh", - mesh = "mobs_mc_witherskeleton.b3d", - textures = { - { - "mobs_mc_empty.png", -- armor - "mobs_mc_wither_skeleton.png", -- wither skeleton - "default_tool_stonesword.png", -- sword - } - }, - visual_size = {x=1.2, y=1.2}, - makes_footstep_sound = true, - sounds = { - random = "mobs_mc_skeleton_random", - death = "mobs_mc_skeleton_death", - damage = "mobs_mc_skeleton_hurt", - distance = 16, - }, - walk_velocity = 1.2, - run_velocity = 2.4, - damage = 7, - reach = 2, - drops = { - {name = "mcl_core:coal_lump", - chance = 1, - min = 0, - max = 1, - looting = "common",}, - {name = "mcl_mobitems:bone", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - - -- Head - {name = "mcl_heads:wither_skeleton", - chance = 40, -- 2.5% chance - min = 1, - max = 1, - looting = "rare",}, - }, - animation = { - stand_start = 0, - stand_end = 40, - stand_speed = 15, - walk_start = 40, - walk_end = 60, - walk_speed = 15, - run_start = 40, - run_end = 60, - run_speed = 30, - shoot_start = 70, - shoot_end = 90, - punch_start = 110, - punch_end = 130, - punch_speed = 25, - die_start = 160, - die_end = 170, - die_speed = 15, - die_loop = false, - }, - water_damage = 0, - lava_damage = 0, - fire_damage = 0, - light_damage = 0, - view_range = 16, - attack_type = "dogfight", - dogshoot_switch = 1, - dogshoot_count_max =0.5, - fear_height = 4, - harmed_by_heal = true, - fire_resistant = true, -}) - ---spawn -mcl_mobs:spawn_specific( -"mobs_mc:witherskeleton", -"nether", -"ground", -{ -"Nether" -}, -0, -7, -30, -5000, -5, -mcl_vars.mg_nether_min, -mcl_vars.mg_nether_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0) diff --git a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua deleted file mode 100644 index 0c6c1ee1e..000000000 --- a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua +++ /dev/null @@ -1,453 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - --- Returns a function that spawns children in a circle around pos. --- To be used as on_die callback. --- self: mob reference --- pos: position of "mother" mob --- child_mod: Mob to spawn --- children_count: Number of children to spawn --- spawn_distance: Spawn distance from "mother" mob --- eject_speed: Initial speed of child mob away from "mother" mob -local spawn_children_on_die = function(child_mob, children_count, spawn_distance, eject_speed) - return function(self, pos) - local angle, posadd, newpos, dir - if not eject_speed then - eject_speed = 1 - end - local mndef = minetest.registered_nodes[minetest.get_node(pos).name] - local mother_stuck = mndef and mndef.walkable - angle = math.random(0, math.pi*2) - local children = {} - for i=1,children_count do - dir = {x=math.cos(angle),y=0,z=math.sin(angle)} - posadd = vector.multiply(vector.normalize(dir), spawn_distance) - newpos = vector.add(pos, posadd) - -- If child would end up in a wall, use position of the "mother", unless - -- the "mother" was stuck as well - local speed_penalty = 1 - local cndef = minetest.registered_nodes[minetest.get_node(newpos).name] - if (not mother_stuck) and cndef and cndef.walkable then - newpos = pos - speed_penalty = 0.5 - end - local mob = minetest.add_entity(newpos, child_mob) - if (not mother_stuck) then - mob:set_velocity(vector.multiply(dir, eject_speed * speed_penalty)) - end - mob:set_yaw(angle - math.pi/2) - table.insert(children, mob) - angle = angle + (math.pi*2)/children_count - end - -- If mother was murdered, children attack the killer after 1 second - if self.state == "attack" then - minetest.after(1.0, function(children, enemy) - for c=1, #children do - local child = children[c] - local le = child:get_luaentity() - if le ~= nil then - le.state = "attack" - le.attack = enemy - end - end - end, children, self.attack) - end - end -end - --- Slime -local slime_big = { - description = S("Slime"), - type = "monster", - spawn_class = "hostile", - group_attack = { "mobs_mc:slime_big", "mobs_mc:slime_small", "mobs_mc:slime_tiny" }, - hp_min = 16, - hp_max = 16, - xp_min = 4, - xp_max = 4, - collisionbox = {-1.02, -0.01, -1.02, 1.02, 2.03, 1.02}, - visual_size = {x=12.5, y=12.5}, - textures = {{"mobs_mc_slime.png", "mobs_mc_slime.png"}}, - visual = "mesh", - mesh = "mobs_mc_slime.b3d", - makes_footstep_sound = true, - sounds = { - jump = "green_slime_jump", - death = "green_slime_death", - damage = "green_slime_damage", - attack = "green_slime_attack", - distance = 16, - }, - damage = 4, - reach = 3, - armor = 100, - drops = {}, - -- TODO: Fix animations - animation = { - jump_speed = 17, - stand_speed = 17, - walk_speed = 17, - jump_start = 1, - jump_end = 20, - stand_start = 1, - stand_end = 20, - walk_start = 1, - walk_end = 20, - }, - fall_damage = 0, - view_range = 16, - attack_type = "dogfight", - passive = false, - jump = true, - walk_velocity = 2.5, - run_velocity = 2.5, - walk_chance = 0, - jump_height = 5.2, - fear_height = 0, - spawn_small_alternative = "mobs_mc:slime_small", - on_die = spawn_children_on_die("mobs_mc:slime_small", 4, 1.0, 1.5), - use_texture_alpha = true, -} -mcl_mobs:register_mob("mobs_mc:slime_big", slime_big) - -local slime_small = table.copy(slime_big) -slime_small.sounds.base_pitch = 1.15 -slime_small.hp_min = 4 -slime_small.hp_max = 4 -slime_small.xp_min = 2 -slime_small.xp_max = 2 -slime_small.collisionbox = {-0.51, -0.01, -0.51, 0.51, 1.00, 0.51} -slime_small.visual_size = {x=6.25, y=6.25} -slime_small.damage = 3 -slime_small.reach = 2.75 -slime_small.walk_velocity = 1.3 -slime_small.run_velocity = 1.3 -slime_small.jump_height = 4.3 -slime_small.spawn_small_alternative = "mobs_mc:slime_tiny" -slime_small.on_die = spawn_children_on_die("mobs_mc:slime_tiny", 4, 0.6, 1.0) -mcl_mobs:register_mob("mobs_mc:slime_small", slime_small) - -local slime_tiny = table.copy(slime_big) -slime_tiny.sounds.base_pitch = 1.3 -slime_tiny.hp_min = 1 -slime_tiny.hp_max = 1 -slime_tiny.xp_min = 1 -slime_tiny.xp_max = 1 -slime_tiny.collisionbox = {-0.2505, -0.01, -0.2505, 0.2505, 0.50, 0.2505} -slime_tiny.visual_size = {x=3.125, y=3.125} -slime_tiny.damage = 0 -slime_tiny.reach = 2.5 -slime_tiny.drops = { - -- slimeball - {name = "mcl_mobitems:slimeball", - chance = 1, - min = 0, - max = 2,}, -} -slime_tiny.walk_velocity = 0.7 -slime_tiny.run_velocity = 0.7 -slime_tiny.jump_height = 3 -slime_tiny.spawn_small_alternative = nil -slime_tiny.on_die = nil - -mcl_mobs:register_mob("mobs_mc:slime_tiny", slime_tiny) - -local smin = mcl_vars.mg_overworld_min -local smax = mobs_mc.water_level - 23 - -mcl_mobs:spawn_specific( -"mobs_mc:slime_tiny", -"overworld", -"ground", -{ -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -minetest.LIGHT_MAX+1, -30, -12000, -4, -smin, -smax) - -mcl_mobs:spawn_specific( -"mobs_mc:slime_small", -"overworld", -"ground", -{ -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -minetest.LIGHT_MAX+1, -30, -8500, -4, -smin, -smax) - -mcl_mobs:spawn_specific( -"mobs_mc:slime_big", -"overworld", -"ground", -{ -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -minetest.LIGHT_MAX+1, -30, -10000, -4, -smin, -smax) - --- Magma cube -local magma_cube_big = { - description = S("Magma Cube"), - type = "monster", - spawn_class = "hostile", - hp_min = 16, - hp_max = 16, - xp_min = 4, - xp_max = 4, - collisionbox = {-1.02, -0.01, -1.02, 1.02, 2.03, 1.02}, - visual_size = {x=12.5, y=12.5}, - textures = {{ "mobs_mc_magmacube.png", "mobs_mc_magmacube.png" }}, - visual = "mesh", - mesh = "mobs_mc_magmacube.b3d", - makes_footstep_sound = true, - sounds = { - jump = "mobs_mc_magma_cube_big", - death = "mobs_mc_magma_cube_big", - attack = "mobs_mc_magma_cube_attack", - distance = 16, - }, - walk_velocity = 4, - run_velocity = 4, - damage = 6, - reach = 3, - armor = 53, - drops = { - {name = "mcl_mobitems:magma_cream", - chance = 4, - min = 1, - max = 1,}, - }, - -- TODO: Fix animations - animation = { - jump_speed = 20, - stand_speed = 20, - walk_speed = 20, - jump_start = 1, - jump_end = 40, - stand_start = 1, - stand_end = 1, - walk_start = 1, - walk_end = 40, - }, - water_damage = 0, - lava_damage = 0, - fire_damage = 0, - light_damage = 0, - fall_damage = 0, - view_range = 16, - attack_type = "dogfight", - passive = false, - jump = true, - jump_height = 8, - walk_chance = 0, - fear_height = 0, - spawn_small_alternative = "mobs_mc:magma_cube_small", - on_die = spawn_children_on_die("mobs_mc:magma_cube_small", 3, 0.8, 1.5), - fire_resistant = true, -} -mcl_mobs:register_mob("mobs_mc:magma_cube_big", magma_cube_big) - -local magma_cube_small = table.copy(magma_cube_big) -magma_cube_small.sounds.jump = "mobs_mc_magma_cube_small" -magma_cube_small.sounds.death = "mobs_mc_magma_cube_small" -magma_cube_small.hp_min = 4 -magma_cube_small.hp_max = 4 -magma_cube_small.xp_min = 2 -magma_cube_small.xp_max = 2 -magma_cube_small.collisionbox = {-0.51, -0.01, -0.51, 0.51, 1.00, 0.51} -magma_cube_small.visual_size = {x=6.25, y=6.25} -magma_cube_small.damage = 3 -magma_cube_small.reach = 2.75 -magma_cube_small.walk_velocity = .8 -magma_cube_small.run_velocity = 2.6 -magma_cube_small.jump_height = 6 -magma_cube_small.damage = 4 -magma_cube_small.reach = 2.75 -magma_cube_small.armor = 66 -magma_cube_small.spawn_small_alternative = "mobs_mc:magma_cube_tiny" -magma_cube_small.on_die = spawn_children_on_die("mobs_mc:magma_cube_tiny", 4, 0.6, 1.0) -mcl_mobs:register_mob("mobs_mc:magma_cube_small", magma_cube_small) - -local magma_cube_tiny = table.copy(magma_cube_big) -magma_cube_tiny.sounds.jump = "mobs_mc_magma_cube_small" -magma_cube_tiny.sounds.death = "mobs_mc_magma_cube_small" -magma_cube_tiny.sounds.base_pitch = 1.25 -magma_cube_tiny.hp_min = 1 -magma_cube_tiny.hp_max = 1 -magma_cube_tiny.xp_min = 1 -magma_cube_tiny.xp_max = 1 -magma_cube_tiny.collisionbox = {-0.2505, -0.01, -0.2505, 0.2505, 0.50, 0.2505} -magma_cube_tiny.visual_size = {x=3.125, y=3.125} -magma_cube_tiny.walk_velocity = 1.02 -magma_cube_tiny.run_velocity = 1.02 -magma_cube_tiny.jump_height = 4 -magma_cube_tiny.damage = 3 -magma_cube_tiny.reach = 2.5 -magma_cube_tiny.armor = 50 -magma_cube_tiny.drops = {} -magma_cube_tiny.spawn_small_alternative = nil -magma_cube_tiny.on_die = nil - -mcl_mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny) - - -local mmin = mcl_vars.mg_nether_min -local mmax = mcl_vars.mg_nether_max - -mcl_mobs:spawn_specific( -"mobs_mc:magma_cube_tiny", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -4, -mmin, -mmax) - - -mcl_mobs:spawn_specific( -"mobs_mc:magma_cube_small", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -15500, -4, -mmin, -mmax) - -mcl_mobs:spawn_specific( -"mobs_mc:magma_cube_big", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -16000, -4, -mmin, -mmax) - ---mcl_mobs:spawn_specific("mobs_mc:magma_cube_tiny", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax) ---mcl_mobs:spawn_specific("mobs_mc:magma_cube_small", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax) ---mcl_mobs:spawn_specific("mobs_mc:magma_cube_big", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax) - - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:magma_cube_big", S("Magma Cube"), "mobs_mc_spawn_icon_magmacube.png") -mcl_mobs:register_egg("mobs_mc:slime_big", S("Slime"), "mobs_mc_spawn_icon_slime.png") diff --git a/mods/ENTITIES/mobs_mc/snowman.lua b/mods/ENTITIES/mobs_mc/snowman.lua deleted file mode 100644 index 816c96947..000000000 --- a/mods/ENTITIES/mobs_mc/snowman.lua +++ /dev/null @@ -1,199 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - -local snow_trail_frequency = 0.5 -- Time in seconds for checking to add a new snow trail - -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false -local mod_throwing = minetest.get_modpath("mcl_throwing") ~= nil - -local gotten_texture = { - "mobs_mc_snowman.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", -} - -mcl_mobs:register_mob("mobs_mc:snowman", { - description = S("Snow Golem"), - type = "npc", - spawn_class = "passive", - passive = true, - hp_min = 4, - hp_max = 4, - pathfinding = 1, - view_range = 10, - fall_damage = 0, - water_damage = 4, - rain_damage = 4, - armor = { fleshy = 100, water_vulnerable = 100 }, - attacks_monsters = true, - collisionbox = {-0.35, -0.01, -0.35, 0.35, 1.89, 0.35}, - visual = "mesh", - mesh = "mobs_mc_snowman.b3d", - sounds = { - damage = { name = "mobs_mc_snowman_hurt", gain = 0.2 }, - death = { name = "mobs_mc_snowman_death", gain = 0.25 }, - distance = 16, - }, - textures = { - "mobs_mc_snowman.png", --snowman texture - "farming_pumpkin_side.png", --top - "farming_pumpkin_top.png", --down - "farming_pumpkin_face.png", --front - "farming_pumpkin_side.png", --left - "farming_pumpkin_side.png", --right - "farming_pumpkin_top.png", --left - }, - gotten_texture = gotten_texture, - drops = {{ name = "mcl_throwing:snowball", chance = 1, min = 0, max = 15 }}, - visual_size = {x=3, y=3}, - walk_velocity = 0.6, - run_velocity = 2, - jump = true, - makes_footstep_sound = true, - attack_type = "shoot", - arrow = "mcl_throwing:snowball_entity", - shoot_arrow = function(self, pos, dir) - if mod_throwing then - mcl_throwing.throw("mcl_throwing:snowball", pos, dir, nil, self.object) - end - end, - shoot_interval = 1, - shoot_offset = 1, - animation = { - stand_speed = 25, - walk_speed = 25, - run_speed = 50, - stand_start = 20, - stand_end = 40, - walk_start = 0, - walk_end = 20, - run_start = 0, - run_end = 20, - die_start = 40, - die_end = 50, - die_speed = 15, - die_loop = false, - }, - do_custom = function(self, dtime) - if not mobs_griefing then - return - end - -- Leave a trail of top snow behind. - -- This is done in do_custom instead of just using replace_what because with replace_what, - -- the top snop may end up floating in the air. - if not self._snowtimer then - self._snowtimer = 0 - return - end - self._snowtimer = self._snowtimer + dtime - if self.health > 0 and self._snowtimer > snow_trail_frequency then - self._snowtimer = 0 - local pos = self.object:get_pos() - local below = {x=pos.x, y=pos.y-1, z=pos.z} - local def = minetest.registered_nodes[minetest.get_node(pos).name] - -- Node at snow golem's position must be replacable - if def and def.buildable_to then - -- Node below must be walkable - -- and a full cube (this prevents oddities like top snow on top snow, lower slabs, etc.) - local belowdef = minetest.registered_nodes[minetest.get_node(below).name] - if belowdef and belowdef.walkable and (belowdef.node_box == nil or belowdef.node_box.type == "regular") then - -- Place top snow - minetest.set_node(pos, {name = "mcl_core:snow"}) - end - end - end - end, - -- Remove pumpkin if using shears - on_rightclick = function(self, clicker) - local item = clicker:get_wielded_item() - if self.gotten ~= true and item:get_name() == "mcl_tools:shears" then - -- Remove pumpkin - self.gotten = true - self.object:set_properties({ - textures = gotten_texture, - }) - - local pos = self.object:get_pos() - minetest.sound_play("mcl_tools_shears_cut", {pos = pos}, true) - - if minetest.registered_items["mcl_farming:pumpkin_face"] then - minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, "mcl_farming:pumpkin_face") - end - - -- Wear out - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:add_wear(mobs_mc.shears_wear) - clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item) - end - end - end, -}) - -local summon_particles = function(obj) - local lua = obj:get_luaentity() - local min = {x=lua.collisionbox[1], y=lua.collisionbox[2], z=lua.collisionbox[3]} - local max = {x=lua.collisionbox[4], y=lua.collisionbox[5], z=lua.collisionbox[6]} - local pos = obj:get_pos() - minetest.add_particlespawner({ - amount = 60, - time = 0.1, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = {x = -0.1, y = -0.1, z = -0.1}, - maxvel = {x = 0.1, y = 0.1, z = 0.1}, - minexptime = 1.0, - maxexptime = 2.0, - minsize = 2.0, - maxsize = 3.0, - texture = "mcl_particles_smoke.png", - }) -end - --- This is to be called when a pumpkin or jack'o lantern has been placed. Recommended: In the on_construct function --- of the node. --- This summons a snow golen when pos is next to a row of two snow blocks. -function mobs_mc.check_snow_golem_summon(pos) - local checks = { - -- These are the possible placement patterns - -- { snow block pos. 1, snow block pos. 2, snow golem spawn position } - { {x=pos.x, y=pos.y-1, z=pos.z}, {x=pos.x, y=pos.y-2, z=pos.z}, {x=pos.x, y=pos.y-2.5, z=pos.z} }, - { {x=pos.x, y=pos.y+1, z=pos.z}, {x=pos.x, y=pos.y+2, z=pos.z}, {x=pos.x, y=pos.y-0.5, z=pos.z} }, - { {x=pos.x-1, y=pos.y, z=pos.z}, {x=pos.x-2, y=pos.y, z=pos.z}, {x=pos.x-2, y=pos.y-0.5, z=pos.z} }, - { {x=pos.x+1, y=pos.y, z=pos.z}, {x=pos.x+2, y=pos.y, z=pos.z}, {x=pos.x+2, y=pos.y-0.5, z=pos.z} }, - { {x=pos.x, y=pos.y, z=pos.z-1}, {x=pos.x, y=pos.y, z=pos.z-2}, {x=pos.x, y=pos.y-0.5, z=pos.z-2} }, - { {x=pos.x, y=pos.y, z=pos.z+1}, {x=pos.x, y=pos.y, z=pos.z+2}, {x=pos.x, y=pos.y-0.5, z=pos.z+2} }, - } - - for c=1, #checks do - local b1 = checks[c][1] - local b2 = checks[c][2] - local place = checks[c][3] - local b1n = minetest.get_node(b1) - local b2n = minetest.get_node(b2) - if b1n.name == "mcl_core:snowblock" and b2n.name == "mcl_core:snowblock" then - -- Remove the pumpkin and both snow blocks and summon the snow golem - minetest.remove_node(pos) - minetest.remove_node(b1) - minetest.remove_node(b2) - core.check_for_falling(pos) - core.check_for_falling(b1) - core.check_for_falling(b2) - local obj = minetest.add_entity(place, "mobs_mc:snowman") - if obj then - summon_particles(obj) - end - break - end - end -end - --- Spawn egg -mcl_mobs:register_egg("mobs_mc:snowman", S("Snow Golem"), "mobs_mc_spawn_icon_snowman.png", 0) diff --git a/mods/ENTITIES/mobs_mc/sounds/green_slime_attack.ogg b/mods/ENTITIES/mobs_mc/sounds/green_slime_attack.ogg deleted file mode 100644 index a8ca49391..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/green_slime_attack.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/green_slime_damage.ogg b/mods/ENTITIES/mobs_mc/sounds/green_slime_damage.ogg deleted file mode 100644 index 966ff77ed..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/green_slime_damage.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/green_slime_death.ogg b/mods/ENTITIES/mobs_mc/sounds/green_slime_death.ogg deleted file mode 100644 index 7eef1f4ce..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/green_slime_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/green_slime_jump.ogg b/mods/ENTITIES/mobs_mc/sounds/green_slime_jump.ogg deleted file mode 100644 index 2c836e415..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/green_slime_jump.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/green_slime_land.ogg b/mods/ENTITIES/mobs_mc/sounds/green_slime_land.ogg deleted file mode 100644 index 449031712..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/green_slime_land.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mcl_totems_totem.ogg b/mods/ENTITIES/mobs_mc/sounds/mcl_totems_totem.ogg deleted file mode 100644 index f7669b2a6..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mcl_totems_totem.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_eerie.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_eerie.ogg deleted file mode 100644 index 988509bd4..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_eerie.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_fireball.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_fireball.ogg deleted file mode 100644 index 119818f14..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_fireball.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_animal_eat_generic.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_animal_eat_generic.ogg deleted file mode 100644 index cdf6969bb..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_animal_eat_generic.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_death.ogg deleted file mode 100644 index f9e7798b8..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.1.ogg deleted file mode 100644 index 0aa1723b1..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.2.ogg deleted file mode 100644 index 2e09e3e93..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.3.ogg deleted file mode 100644 index 156e6ba18..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_idle.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_idle.ogg deleted file mode 100644 index e56b90802..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bat_idle.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_attack.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_attack.1.ogg deleted file mode 100644 index 35901a46e..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_attack.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_attack.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_attack.2.ogg deleted file mode 100644 index bd6c14b47..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_attack.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_death.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_death.1.ogg deleted file mode 100644 index fcfcffa88..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_death.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.1.ogg deleted file mode 100644 index 863e15baa..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.2.ogg deleted file mode 100644 index 72ff57902..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.3.ogg deleted file mode 100644 index 710d3f632..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_growl.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_hurt.1.ogg deleted file mode 100644 index 630f09987..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.1.ogg deleted file mode 100644 index 8b3498baf..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.2.ogg deleted file mode 100644 index b8d1a67d0..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.3.ogg deleted file mode 100644 index 3d83696f9..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_bear_random.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_breath.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_breath.ogg deleted file mode 100644 index d756a79f8..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_breath.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_died.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_died.ogg deleted file mode 100644 index 591bffe78..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_died.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_hurt.ogg deleted file mode 100644 index 0ee4ec53a..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_blaze_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_hiss.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_hiss.ogg deleted file mode 100644 index a51db0fe9..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_hiss.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_idle.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_idle.1.ogg deleted file mode 100644 index 48e9977ed..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_idle.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_idle.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_idle.2.ogg deleted file mode 100644 index 7e7324833..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cat_idle.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.1.ogg deleted file mode 100644 index 506d040a4..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.2.ogg deleted file mode 100644 index 858362b92..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.3.ogg deleted file mode 100644 index ca090123f..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_buck.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_child.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_child.ogg deleted file mode 100644 index 5ea33fc07..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_child.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_hurt.ogg deleted file mode 100644 index 32c4337ba..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_lay_egg.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_lay_egg.ogg deleted file mode 100644 index 6a7781aae..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_chicken_lay_egg.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow.ogg deleted file mode 100644 index 87e57e44e..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_hurt.ogg deleted file mode 100644 index b07a78281..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_milk.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_milk.ogg deleted file mode 100644 index a9163e1b3..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_milk.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_mushroom_stew.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_mushroom_stew.ogg deleted file mode 100644 index d120e860f..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_cow_mushroom_stew.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_creeper_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_creeper_death.ogg deleted file mode 100644 index ba43206ad..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_creeper_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_creeper_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_creeper_hurt.ogg deleted file mode 100644 index 9aed7a2e7..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_creeper_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_death.ogg deleted file mode 100644 index 908a82b9e..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_hurt.ogg deleted file mode 100644 index 9d1001fd3..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_random.1.ogg deleted file mode 100644 index 26e1e9a56..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_random.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_random.2.ogg deleted file mode 100644 index 293a2b998..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_donkey_random.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ender_dragon_attack.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ender_dragon_attack.ogg deleted file mode 100644 index 5591609c7..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ender_dragon_attack.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ender_dragon_shoot.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ender_dragon_shoot.ogg deleted file mode 100644 index 4030ba671..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ender_dragon_shoot.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_death.ogg deleted file mode 100644 index 6f92ffdc3..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.1.ogg deleted file mode 100644 index 6b125fa4f..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.2.ogg deleted file mode 100644 index 427069c85..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.3.ogg deleted file mode 100644 index 104bdd7ec..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_random.1.ogg deleted file mode 100644 index 1dc588d4d..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_teleport_dst.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_teleport_dst.ogg deleted file mode 100644 index 1896d7d4d..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_teleport_dst.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_teleport_src.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_teleport_src.ogg deleted file mode 100644 index 7b08a4884..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_enderman_teleport_src.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_death.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_death.1.ogg deleted file mode 100644 index 74b3336be..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_death.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_death.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_death.2.ogg deleted file mode 100644 index 02aec38c6..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_death.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.1.ogg deleted file mode 100644 index 68a7fee53..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.2.ogg deleted file mode 100644 index 578732d91..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.3.ogg deleted file mode 100644 index 5d8cda08d..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_random.1.ogg deleted file mode 100644 index 07650e3bb..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_endermite_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_death.ogg deleted file mode 100644 index 93c093d05..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_hurt.1.ogg deleted file mode 100644 index 7d7cad3f8..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_hurt.2.ogg deleted file mode 100644 index 9d870486b..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.1.ogg deleted file mode 100644 index d33157c14..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.2.ogg deleted file mode 100644 index 5853e16c5..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.3.ogg deleted file mode 100644 index 9fc4df09d..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_guardian_random.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_death.ogg deleted file mode 100644 index b4fd749c0..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_hurt.ogg deleted file mode 100644 index b6d7efd98..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_random.1.ogg deleted file mode 100644 index b5569a7e0..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_random.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_random.2.ogg deleted file mode 100644 index 784d69930..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_horse_random.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_llama.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_llama.ogg deleted file mode 100644 index 54f62cd6d..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_llama.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_attack.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_attack.ogg deleted file mode 100644 index 380ea612a..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_attack.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_big.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_big.ogg deleted file mode 100644 index cd166daf7..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_big.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_small.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_small.ogg deleted file mode 100644 index 1dec6141f..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_magma_cube_small.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ocelot_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ocelot_hurt.ogg deleted file mode 100644 index d2c6d97aa..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_ocelot_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_death.ogg deleted file mode 100644 index b4d181e0e..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_hurt.ogg deleted file mode 100644 index 96315f210..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_random.1.ogg deleted file mode 100644 index ecfc30ef6..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_random.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_random.2.ogg deleted file mode 100644 index e9ad247eb..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_parrot_random.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_attack.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_attack.1.ogg deleted file mode 100644 index 70b404651..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_attack.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_attack.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_attack.2.ogg deleted file mode 100644 index b1f6ef770..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_attack.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.1.ogg deleted file mode 100644 index afd18ff23..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.2.ogg deleted file mode 100644 index c628437f2..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.3.ogg deleted file mode 100644 index c7133e084..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_death.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.1.ogg deleted file mode 100644 index 10bdea141..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.2.ogg deleted file mode 100644 index 7578bea25..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.3.ogg deleted file mode 100644 index f000ff1a4..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.1.ogg deleted file mode 100644 index 7ccf45091..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.2.ogg deleted file mode 100644 index 3e37b8c28..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.3.ogg deleted file mode 100644 index 21bcb4270..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.4.ogg deleted file mode 100644 index d446f400a..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_rabbit_random.4.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_death.ogg deleted file mode 100644 index 1930b4e42..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_hurt.ogg deleted file mode 100644 index bc6279a6c..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_idle.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_idle.ogg deleted file mode 100644 index dbfc41b4d..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_silverfish_idle.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_death.ogg deleted file mode 100644 index c11402b14..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_hurt.ogg deleted file mode 100644 index 2289183d2..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_random.1.ogg deleted file mode 100644 index e81c45a41..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_random.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_random.2.ogg deleted file mode 100644 index 1d495b878..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_skeleton_random.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.1.ogg deleted file mode 100644 index 4794d7e0b..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.2.ogg deleted file mode 100644 index aa1fb3f96..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.3.ogg deleted file mode 100644 index 5de0b0dd2..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_death.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.1.ogg deleted file mode 100644 index b7ac7d7a6..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.2.ogg deleted file mode 100644 index e2765e620..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.3.ogg deleted file mode 100644 index 5abb1b190..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_snowman_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_attack.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_attack.1.ogg deleted file mode 100644 index 9dac01d1a..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_attack.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_attack.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_attack.2.ogg deleted file mode 100644 index 76a66c483..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_attack.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_death.ogg deleted file mode 100644 index cf2c7dc26..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.1.ogg deleted file mode 100644 index bb750f430..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.2.ogg deleted file mode 100644 index de76a688a..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.3.ogg deleted file mode 100644 index 479617681..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_random.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_random.ogg deleted file mode 100644 index 32b774615..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_spider_random.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_death.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_death.1.ogg deleted file mode 100644 index 869c3ae10..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_death.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.1.ogg deleted file mode 100644 index 0fde5dc80..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.2.ogg deleted file mode 100644 index 0a2efd469..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.3.ogg deleted file mode 100644 index d371fc7ae..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.4.ogg deleted file mode 100644 index 956db6ac4..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_flop.4.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_hurt.1.ogg deleted file mode 100644 index 2b68ba9f3..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_hurt.2.ogg deleted file mode 100644 index fc47997e8..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_squid_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_vex_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_vex_death.ogg deleted file mode 100644 index 561893726..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_vex_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_vex_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_vex_hurt.ogg deleted file mode 100644 index 26ecfad43..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_vex_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg deleted file mode 100644 index 9c56b0f65..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg deleted file mode 100644 index bafc77b7e..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.3.ogg deleted file mode 100644 index 9e5c79b6d..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg deleted file mode 100644 index 5c9ee492b..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg deleted file mode 100644 index acb236445..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg deleted file mode 100644 index 1ef7a5227..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.7.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.7.ogg deleted file mode 100644 index c2743fbcc..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.7.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.1.ogg deleted file mode 100644 index b72b8b83f..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.2.ogg deleted file mode 100644 index 6de7085b0..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg deleted file mode 100644 index 6c96f57b8..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.2.ogg deleted file mode 100644 index a7568a3d6..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.1.ogg deleted file mode 100644 index f17771367..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.2.ogg deleted file mode 100644 index 763bf9132..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.3.ogg deleted file mode 100644 index e012ed349..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.4.ogg deleted file mode 100644 index 51d808f52..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.4.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wither_spawn.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wither_spawn.ogg deleted file mode 100644 index 8f0061144..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wither_spawn.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.1.ogg deleted file mode 100644 index 4434015f8..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.2.ogg deleted file mode 100644 index f721eb221..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.3.ogg deleted file mode 100644 index 4352e36dd..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_bark.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_death.ogg deleted file mode 100644 index c5b39bcbc..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_growl.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_growl.ogg deleted file mode 100644 index aa3286e47..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_growl.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.1.ogg deleted file mode 100644 index 203dd9b57..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.2.ogg deleted file mode 100644 index cf57285a1..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.3.ogg deleted file mode 100644 index c603e07ac..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_take_bone.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_take_bone.ogg deleted file mode 100644 index 3c1b6913e..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_wolf_take_bone.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_death.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_death.ogg deleted file mode 100644 index 62405cb40..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_death.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_growl.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_growl.ogg deleted file mode 100644 index 82b1416fd..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_growl.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_hurt.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_hurt.ogg deleted file mode 100644 index 1ebfa37ac..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombie_hurt.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_death.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_death.1.ogg deleted file mode 100644 index 1c05e7068..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_death.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_death.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_death.2.ogg deleted file mode 100644 index 6c0bc4899..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_death.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.1.ogg deleted file mode 100644 index b20b636fc..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.2.ogg deleted file mode 100644 index 8a6543716..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.2.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.3.ogg deleted file mode 100644 index 79776601e..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_hurt.3.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_random.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_random.1.ogg deleted file mode 100644 index f266a5c36..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_random.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_war_cry.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_war_cry.1.ogg deleted file mode 100644 index efa398c32..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_zombiepig_war_cry.1.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_pig.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_pig.ogg deleted file mode 100644 index e7c7591e3..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_pig.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_pig_angry.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_pig_angry.ogg deleted file mode 100644 index 2a4f47b4f..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_pig_angry.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_sandmonster.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_sandmonster.ogg deleted file mode 100644 index 2feae6ae0..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_sandmonster.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_sheep.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_sheep.ogg deleted file mode 100644 index 87296b618..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_sheep.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_spider.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_spider.ogg deleted file mode 100644 index 41050067a..000000000 Binary files a/mods/ENTITIES/mobs_mc/sounds/mobs_spider.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/spider.lua b/mods/ENTITIES/mobs_mc/spider.lua deleted file mode 100644 index 0fc16928e..000000000 --- a/mods/ENTITIES/mobs_mc/spider.lua +++ /dev/null @@ -1,247 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### SPIDER ---################### - - --- Spider by AspireMint (fishyWET (CC-BY-SA 3.0 license for texture) - -local spider = { - description = S("Spider"), - type = "monster", - spawn_class = "hostile", - passive = false, - docile_by_day = true, - attack_type = "dogfight", - pathfinding = 1, - damage = 2, - reach = 2, - hp_min = 16, - hp_max = 16, - xp_min = 5, - xp_max = 5, - armor = {fleshy = 100, arthropod = 100}, - collisionbox = {-0.7, -0.01, -0.7, 0.7, 0.89, 0.7}, - visual = "mesh", - mesh = "mobs_mc_spider.b3d", - textures = { - {"mobs_mc_spider.png^(mobs_mc_spider_eyes.png^[makealpha:0,0,0)"}, - }, - visual_size = {x=3, y=3}, - makes_footstep_sound = false, - sounds = { - random = "mobs_mc_spider_random", - attack = "mobs_mc_spider_attack", - damage = "mobs_mc_spider_hurt", - death = "mobs_mc_spider_death", - -- TODO: sounds: walk - distance = 16, - }, - walk_velocity = 1.3, - run_velocity = 2.8, - jump = true, - jump_height = 4, - view_range = 16, - floats = 1, - drops = { - {name = "mcl_mobitems:string", chance = 1, min = 0, max = 2, looting = "common"}, - {name = "mcl_mobitems:spider_eye", chance = 3, min = 1, max = 1, looting = "common", looting_chance_function = function(lvl) - return 1 - 2 / (lvl + 3) - end}, - }, - specific_attack = { "player", "mobs_mc:iron_golem" }, - fear_height = 4, - animation = { - stand_speed = 10, - walk_speed = 25, - run_speed = 50, - stand_start = 20, - stand_end = 40, - walk_start = 0, - walk_end = 20, - run_start = 0, - run_end = 20, - }, -} -mcl_mobs:register_mob("mobs_mc:spider", spider) - --- Cave spider -local cave_spider = table.copy(spider) -cave_spider.description = S("Cave Spider") -cave_spider.textures = { {"mobs_mc_cave_spider.png^(mobs_mc_spider_eyes.png^[makealpha:0,0,0)"} } --- TODO: Poison damage --- TODO: Revert damage to 2 -cave_spider.damage = 3 -- damage increased to undo non-existing poison -cave_spider.hp_min = 1 -cave_spider.hp_max = 12 -cave_spider.collisionbox = {-0.35, -0.01, -0.35, 0.35, 0.49, 0.35} -cave_spider.visual_size = {x=1.66666, y=1.5} -cave_spider.walk_velocity = 1.3 -cave_spider.run_velocity = 3.2 -cave_spider.sounds = table.copy(spider.sounds) -cave_spider.sounds.base_pitch = 1.25 -mcl_mobs:register_mob("mobs_mc:cave_spider", cave_spider) - - -mcl_mobs:spawn_specific( -"mobs_mc:spider", -"overworld", -"ground", -{ -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"Desert", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -"RoofedForest_ocean", -"JungleEdgeM_ocean", -"BirchForestM_ocean", -"BirchForest_ocean", -"IcePlains_deep_ocean", -"Jungle_deep_ocean", -"Savanna_ocean", -"MesaPlateauF_ocean", -"ExtremeHillsM_deep_ocean", -"Savanna_deep_ocean", -"SunflowerPlains_ocean", -"Swampland_deep_ocean", -"Swampland_ocean", -"MegaSpruceTaiga_deep_ocean", -"ExtremeHillsM_ocean", -"JungleEdgeM_deep_ocean", -"SunflowerPlains_deep_ocean", -"BirchForest_deep_ocean", -"IcePlainsSpikes_ocean", -"Mesa_ocean", -"StoneBeach_ocean", -"Plains_deep_ocean", -"JungleEdge_deep_ocean", -"SavannaM_deep_ocean", -"Desert_deep_ocean", -"Mesa_deep_ocean", -"ColdTaiga_deep_ocean", -"Plains_ocean", -"MesaPlateauFM_ocean", -"Forest_deep_ocean", -"JungleM_deep_ocean", -"FlowerForest_deep_ocean", -"MushroomIsland_ocean", -"MegaTaiga_ocean", -"StoneBeach_deep_ocean", -"IcePlainsSpikes_deep_ocean", -"ColdTaiga_ocean", -"SavannaM_ocean", -"MesaPlateauF_deep_ocean", -"MesaBryce_deep_ocean", -"ExtremeHills+_deep_ocean", -"ExtremeHills_ocean", -"MushroomIsland_deep_ocean", -"Forest_ocean", -"MegaTaiga_deep_ocean", -"JungleEdge_ocean", -"MesaBryce_ocean", -"MegaSpruceTaiga_ocean", -"ExtremeHills+_ocean", -"Jungle_ocean", -"RoofedForest_deep_ocean", -"IcePlains_ocean", -"FlowerForest_ocean", -"ExtremeHills_deep_ocean", -"MesaPlateauFM_deep_ocean", -"Desert_ocean", -"Taiga_ocean", -"BirchForestM_deep_ocean", -"Taiga_deep_ocean", -"JungleM_ocean", -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -7, -30, -17000, -2, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:spider", S("Spider"), "mobs_mc_spawn_icon_spider.png", 0) -mcl_mobs:register_egg("mobs_mc:cave_spider", S("Cave Spider"), "mobs_mc_spawn_icon_cave_spider.png", 0) diff --git a/mods/ENTITIES/mobs_mc/squid.lua b/mods/ENTITIES/mobs_mc/squid.lua deleted file mode 100644 index 86b80976e..000000000 --- a/mods/ENTITIES/mobs_mc/squid.lua +++ /dev/null @@ -1,220 +0,0 @@ --- v1.1 - ---################### ---################### SQUID ---################### - -local S = minetest.get_translator("mobs_mc") - -mcl_mobs:register_mob("mobs_mc:squid", { - description = S("Squid"), - type = "animal", - spawn_class = "water", - can_despawn = true, - passive = true, - hp_min = 10, - hp_max = 10, - xp_min = 1, - xp_max = 3, - armor = 100, - -- FIXME: If the squid is near the floor, it turns black - collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.9, 0.4}, - visual = "mesh", - mesh = "mobs_mc_squid.b3d", - textures = { - {"mobs_mc_squid.png"} - }, - sounds = { - damage = {name="mobs_mc_squid_hurt", gain=0.3}, - death = {name="mobs_mc_squid_death", gain=0.4}, - flop = "mobs_mc_squid_flop", - -- TODO: sounds: random - distance = 16, - }, - animation = { - stand_start = 1, - stand_end = 60, - walk_start = 1, - walk_end = 60, - run_start = 1, - run_end = 60, - }, - drops = { - {name = "mcl_dye:black", - chance = 1, - min = 1, - max = 3, - looting = "common",}, - }, - visual_size = {x=3, y=3}, - makes_footstep_sound = false, - fly = true, - fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" }, - breathes_in_water = true, - jump = false, - view_range = 16, - runaway = true, - fear_height = 4, -}) - --- TODO: Behaviour: squirt - --- Spawn near the water surface - -local water = mobs_mc.water_level ---name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height -mcl_mobs:spawn_specific( -"mobs_mc:squid", -"overworld", -"water", -{ -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"Desert", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -"RoofedForest_ocean", -"JungleEdgeM_ocean", -"BirchForestM_ocean", -"BirchForest_ocean", -"IcePlains_deep_ocean", -"Jungle_deep_ocean", -"Savanna_ocean", -"MesaPlateauF_ocean", -"ExtremeHillsM_deep_ocean", -"Savanna_deep_ocean", -"SunflowerPlains_ocean", -"Swampland_deep_ocean", -"Swampland_ocean", -"MegaSpruceTaiga_deep_ocean", -"ExtremeHillsM_ocean", -"JungleEdgeM_deep_ocean", -"SunflowerPlains_deep_ocean", -"BirchForest_deep_ocean", -"IcePlainsSpikes_ocean", -"Mesa_ocean", -"StoneBeach_ocean", -"Plains_deep_ocean", -"JungleEdge_deep_ocean", -"SavannaM_deep_ocean", -"Desert_deep_ocean", -"Mesa_deep_ocean", -"ColdTaiga_deep_ocean", -"Plains_ocean", -"MesaPlateauFM_ocean", -"Forest_deep_ocean", -"JungleM_deep_ocean", -"FlowerForest_deep_ocean", -"MushroomIsland_ocean", -"MegaTaiga_ocean", -"StoneBeach_deep_ocean", -"IcePlainsSpikes_deep_ocean", -"ColdTaiga_ocean", -"SavannaM_ocean", -"MesaPlateauF_deep_ocean", -"MesaBryce_deep_ocean", -"ExtremeHills+_deep_ocean", -"ExtremeHills_ocean", -"MushroomIsland_deep_ocean", -"Forest_ocean", -"MegaTaiga_deep_ocean", -"JungleEdge_ocean", -"MesaBryce_ocean", -"MegaSpruceTaiga_ocean", -"ExtremeHills+_ocean", -"Jungle_ocean", -"RoofedForest_deep_ocean", -"IcePlains_ocean", -"FlowerForest_ocean", -"ExtremeHills_deep_ocean", -"MesaPlateauFM_deep_ocean", -"Desert_ocean", -"Taiga_ocean", -"BirchForestM_deep_ocean", -"Taiga_deep_ocean", -"JungleM_ocean", -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -}, -0, -minetest.LIGHT_MAX+1, -30, -5500, -3, -water-16, -water+1) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:squid", S("Squid"), "mobs_mc_spawn_icon_squid.png", 0) diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_chicken_egg.png b/mods/ENTITIES/mobs_mc/textures/mobs_chicken_egg.png deleted file mode 100644 index 9c6545452..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_chicken_egg.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_TEMP_wither_projectile.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_TEMP_wither_projectile.png deleted file mode 100644 index df8b24c12..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_TEMP_wither_projectile.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_arrow_particle.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_arrow_particle.png deleted file mode 100644 index 1d0cd9b1c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_arrow_particle.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_bat.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_bat.png deleted file mode 100644 index 578f8e743..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_bat.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_blaze.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_blaze.png deleted file mode 100644 index 1d92c9f6c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_blaze.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_black.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_black.png deleted file mode 100644 index 8d1322565..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_black.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_ocelot.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_ocelot.png deleted file mode 100644 index 079252724..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_ocelot.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_red.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_red.png deleted file mode 100644 index e90a1175d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_red.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_siamese.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_siamese.png deleted file mode 100644 index c6efc84c7..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_siamese.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cave_spider.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cave_spider.png deleted file mode 100644 index 9fb9d35e5..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cave_spider.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_chicken.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_chicken.png deleted file mode 100644 index b9d69278e..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_chicken.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cow.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cow.png deleted file mode 100644 index 62696c734..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cow.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_creeper.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_creeper.png deleted file mode 100644 index 99b432ac6..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_creeper.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_creeper_charge.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_creeper_charge.png deleted file mode 100644 index a5e8ab443..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_creeper_charge.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_diamond_horse_armor.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_diamond_horse_armor.png deleted file mode 100644 index 121be08de..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_diamond_horse_armor.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_donkey.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_donkey.png deleted file mode 100644 index e3f04ffd3..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_donkey.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_dragon.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_dragon.png deleted file mode 100644 index 251778ce4..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_dragon.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_dragon_fireball.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_dragon_fireball.png deleted file mode 100644 index 69e643b13..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_dragon_fireball.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_empty.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_empty.png deleted file mode 100644 index 809f22b69..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_empty.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_endergolem.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_endergolem.png deleted file mode 100644 index 701292658..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_endergolem.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman.png deleted file mode 100644 index e9475a222..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_block.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_block.png deleted file mode 100644 index 97d949d8a..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_block.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_cactus_background.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_cactus_background.png deleted file mode 100644 index e2f7ad9a2..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_cactus_background.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_eyes.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_eyes.png deleted file mode 100644 index ee3ab74e8..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_enderman_eyes.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_endermite.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_endermite.png deleted file mode 100644 index 40f9b47c7..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_endermite.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_evoker.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_evoker.png deleted file mode 100644 index eec707c5c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_evoker.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast.png deleted file mode 100644 index dc2addc1d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png deleted file mode 100644 index 3e5b41c32..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_gold_horse_armor.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_gold_horse_armor.png deleted file mode 100644 index f6b4fdfb9..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_gold_horse_armor.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_guardian.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_guardian.png deleted file mode 100644 index c0121954c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_guardian.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_guardian_elder.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_guardian_elder.png deleted file mode 100644 index 8b085e8cc..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_guardian_elder.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_black.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_black.png deleted file mode 100644 index 91159c9d8..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_black.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_brown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_brown.png deleted file mode 100644 index 2d1733af9..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_brown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_chestnut.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_chestnut.png deleted file mode 100644 index ef051a009..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_chestnut.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_creamy.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_creamy.png deleted file mode 100644 index a4e6ce8f0..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_creamy.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_darkbrown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_darkbrown.png deleted file mode 100644 index 5fa6dd45a..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_darkbrown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_gray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_gray.png deleted file mode 100644 index fb6c1c6b6..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_gray.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_blackdots.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_blackdots.png deleted file mode 100644 index b0dc0fc62..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_blackdots.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_white.png deleted file mode 100644 index 8dadffef6..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_white.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_whitedots.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_whitedots.png deleted file mode 100644 index 89fdc7c32..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_whitedots.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_whitefield.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_whitefield.png deleted file mode 100644 index b5a4b5ddf..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_markings_whitefield.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_skeleton.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_skeleton.png deleted file mode 100644 index 615eb67a8..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_skeleton.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_white.png deleted file mode 100644 index 264fffd26..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_white.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_husk.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_husk.png deleted file mode 100644 index 4c93cde04..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_husk.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_illusionist.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_illusionist.png deleted file mode 100644 index e6a0f86a6..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_illusionist.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_iron_golem.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_iron_golem.png deleted file mode 100644 index 99d2c5656..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_iron_golem.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_iron_horse_armor.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_iron_horse_armor.png deleted file mode 100644 index 4f078a92b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_iron_horse_armor.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama.png deleted file mode 100644 index 4a08544cf..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_brown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_brown.png deleted file mode 100644 index 6cf366deb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_brown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_creamy.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_creamy.png deleted file mode 100644 index e1df4612f..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_creamy.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_black.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_black.png deleted file mode 100644 index 9a06b5871..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_black.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_blue.png deleted file mode 100644 index 74db6eb32..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_blue.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_brown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_brown.png deleted file mode 100644 index 3ed90ca0d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_brown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png deleted file mode 100644 index b66df4571..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_gray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_gray.png deleted file mode 100644 index b74dd86af..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_gray.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png deleted file mode 100644 index e956a3023..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png deleted file mode 100644 index 6c3b2a795..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png deleted file mode 100644 index 33b9376dd..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png deleted file mode 100644 index f201bc4fa..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png deleted file mode 100644 index d05057fbb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png deleted file mode 100644 index a261eada2..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png deleted file mode 100644 index 108aab155..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_purple.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_purple.png deleted file mode 100644 index 3b3e472ce..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_purple.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_red.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_red.png deleted file mode 100644 index 18b9fbcff..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_red.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png deleted file mode 100644 index b70b55419..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png deleted file mode 100644 index 50962e99d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_gray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_gray.png deleted file mode 100644 index 9e43edfe2..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_gray.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_white.png deleted file mode 100644 index 6306f3252..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_white.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_magmacube.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_magmacube.png deleted file mode 100644 index ec562ec0b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_magmacube.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mooshroom.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_mooshroom.png deleted file mode 100644 index 4ee2bd943..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mooshroom.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mooshroom_brown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_mooshroom_brown.png deleted file mode 100644 index 115416a53..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mooshroom_brown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mule.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_mule.png deleted file mode 100644 index 328018f5d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mule.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mushroom_brown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_mushroom_brown.png deleted file mode 100644 index fac0f56ef..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mushroom_brown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mushroom_red.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_mushroom_red.png deleted file mode 100644 index 8c22bd62a..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_mushroom_red.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_blue.png deleted file mode 100644 index 9181de260..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_blue.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_green.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_green.png deleted file mode 100644 index 152acb8f4..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_green.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_grey.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_grey.png deleted file mode 100644 index ce723561c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_grey.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_red_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_red_blue.png deleted file mode 100644 index 2f14ef1a5..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_red_blue.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_yellow_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_yellow_blue.png deleted file mode 100644 index f35adfd02..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_parrot_yellow_blue.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_pig.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_pig.png deleted file mode 100644 index 715134b42..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_pig.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_pig_saddle.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_pig_saddle.png deleted file mode 100644 index 8126f31eb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_pig_saddle.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_polarbear.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_polarbear.png deleted file mode 100644 index 2d4795ccc..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_polarbear.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_black.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_black.png deleted file mode 100644 index bce60d12b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_black.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_brown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_brown.png deleted file mode 100644 index 7a8dc898a..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_brown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_caerbannog.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_caerbannog.png deleted file mode 100644 index a64e6fdb3..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_caerbannog.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_gold.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_gold.png deleted file mode 100644 index bbcd41f17..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_gold.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_salt.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_salt.png deleted file mode 100644 index efaee4d9d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_salt.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_toast.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_toast.png deleted file mode 100644 index 445a6de28..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_toast.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_white.png deleted file mode 100644 index b8ab75876..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_white.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_white_splotched.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_white_splotched.png deleted file mode 100644 index a6b707ffb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_rabbit_white_splotched.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_sheep.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_sheep.png deleted file mode 100644 index 13496a3c5..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_sheep.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_sheep_fur.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_sheep_fur.png deleted file mode 100644 index fa447031d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_sheep_fur.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_black.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_black.png deleted file mode 100644 index 09ac72325..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_black.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_blue.png deleted file mode 100644 index 3417417f1..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_blue.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_brown.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_brown.png deleted file mode 100644 index 8b3bceaeb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_brown.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_cyan.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_cyan.png deleted file mode 100644 index 9e25c8771..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_cyan.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_gray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_gray.png deleted file mode 100644 index ce3f0ffd3..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_gray.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_green.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_green.png deleted file mode 100644 index 7a7e411b9..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_green.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_light_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_light_blue.png deleted file mode 100644 index 90464d0e4..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_light_blue.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_lime.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_lime.png deleted file mode 100644 index b290167c5..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_lime.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_magenta.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_magenta.png deleted file mode 100644 index 80060721e..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_magenta.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_orange.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_orange.png deleted file mode 100644 index 4daaa29e2..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_orange.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_pink.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_pink.png deleted file mode 100644 index b6608a42f..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_pink.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_purple.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_purple.png deleted file mode 100644 index 701292658..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_purple.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_red.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_red.png deleted file mode 100644 index a0560e57c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_red.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_silver.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_silver.png deleted file mode 100644 index 176ee045b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_silver.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_white.png deleted file mode 100644 index 6fa5a5c9a..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_white.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_yellow.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_yellow.png deleted file mode 100644 index c2d94ac74..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulker_yellow.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulkerbullet.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulkerbullet.png deleted file mode 100644 index 524491893..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_shulkerbullet.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_silverfish.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_silverfish.png deleted file mode 100644 index 956af9ce7..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_silverfish.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_skeleton.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_skeleton.png deleted file mode 100644 index 0af86cd6a..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_skeleton.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_slime.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_slime.png deleted file mode 100644 index 5a30e16fd..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_slime.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_snowman.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_snowman.png deleted file mode 100644 index dc161eb6d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_snowman.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_bat.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_bat.png deleted file mode 100644 index 9720b7679..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_bat.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_blaze.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_blaze.png deleted file mode 100644 index aaa8de0ae..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_blaze.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cat.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cat.png deleted file mode 100644 index 3f975c19d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cat.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cave_spider.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cave_spider.png deleted file mode 100644 index dea6dc92b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cave_spider.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_chicken.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_chicken.png deleted file mode 100644 index 58fc64136..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_chicken.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cow.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cow.png deleted file mode 100644 index ac3e7a2d1..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_cow.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_creeper.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_creeper.png deleted file mode 100644 index 99b766881..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_creeper.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_donkey.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_donkey.png deleted file mode 100644 index 10bd751fb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_donkey.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_dragon.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_dragon.png deleted file mode 100644 index 5519d4de7..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_dragon.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_enderman.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_enderman.png deleted file mode 100644 index 36983ce33..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_enderman.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_endermite.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_endermite.png deleted file mode 100644 index f2d3b4065..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_endermite.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_evoker.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_evoker.png deleted file mode 100644 index c6aec4f43..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_evoker.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_ghast.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_ghast.png deleted file mode 100644 index 3c0422cae..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_ghast.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_guardian.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_guardian.png deleted file mode 100644 index 10bcbcffb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_guardian.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_guardian_elder.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_guardian_elder.png deleted file mode 100644 index fac4ac819..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_guardian_elder.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse.png deleted file mode 100644 index 38d88e8b6..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse_skeleton.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse_skeleton.png deleted file mode 100644 index bea0c518d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse_skeleton.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse_zombie.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse_zombie.png deleted file mode 100644 index ab981289b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_horse_zombie.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_husk.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_husk.png deleted file mode 100644 index 48945d89e..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_husk.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_illusioner.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_illusioner.png deleted file mode 100644 index 7b9dc99e3..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_illusioner.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_iron_golem.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_iron_golem.png deleted file mode 100644 index 6de2cccb9..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_iron_golem.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_llama.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_llama.png deleted file mode 100644 index f3daba200..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_llama.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_magmacube.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_magmacube.png deleted file mode 100644 index 9c38e1b38..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_magmacube.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_mooshroom.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_mooshroom.png deleted file mode 100644 index 552b70389..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_mooshroom.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_mule.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_mule.png deleted file mode 100644 index 741df99f3..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_mule.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_parrot.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_parrot.png deleted file mode 100644 index b52c390f7..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_parrot.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_pig.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_pig.png deleted file mode 100644 index 692d1714d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_pig.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_polarbear.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_polarbear.png deleted file mode 100644 index 7570cacc8..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_polarbear.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_rabbit.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_rabbit.png deleted file mode 100644 index 1c77e4199..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_rabbit.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_sheep.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_sheep.png deleted file mode 100644 index 72ddb1702..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_sheep.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_shulker.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_shulker.png deleted file mode 100644 index 491f840d6..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_shulker.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_silverfish.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_silverfish.png deleted file mode 100644 index d0bca5664..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_silverfish.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_skeleton.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_skeleton.png deleted file mode 100644 index d0225da21..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_skeleton.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_slime.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_slime.png deleted file mode 100644 index 0366bd267..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_slime.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_snowman.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_snowman.png deleted file mode 100644 index f518f0cfe..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_snowman.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_spider.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_spider.png deleted file mode 100644 index 7877d0bb0..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_spider.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_squid.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_squid.png deleted file mode 100644 index 40fa44080..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_squid.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_stray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_stray.png deleted file mode 100644 index 67e5bbe3c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_stray.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_vex.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_vex.png deleted file mode 100644 index 93bfa7b92..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_vex.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_villager.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_villager.png deleted file mode 100644 index cf8ce28cc..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_villager.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_vindicator.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_vindicator.png deleted file mode 100644 index 24316e0f9..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_vindicator.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_witch.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_witch.png deleted file mode 100644 index cd1db520f..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_witch.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_wither.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_wither.png deleted file mode 100644 index 5ce5c44bf..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_wither.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_witherskeleton.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_witherskeleton.png deleted file mode 100644 index 9055548bb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_witherskeleton.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_wolf.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_wolf.png deleted file mode 100644 index 7098285b6..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_wolf.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie.png deleted file mode 100644 index 0b4da4163..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie_pigman.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie_pigman.png deleted file mode 100644 index ba27c85d3..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie_pigman.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie_villager.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie_villager.png deleted file mode 100644 index 9430af7ef..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_zombie_villager.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spider.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spider.png deleted file mode 100644 index 155544c19..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spider.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spider_eyes.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spider_eyes.png deleted file mode 100644 index 6a134bb5c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spider_eyes.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_squid.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_squid.png deleted file mode 100644 index 463b39294..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_squid.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray.png deleted file mode 100644 index 21f15614d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray_overlay.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray_overlay.png deleted file mode 100644 index b4b47a9fb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray_overlay.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_trading_formspec_bg.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_trading_formspec_bg.png deleted file mode 100644 index e271ddb24..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_trading_formspec_bg.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_trading_formspec_disabled.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_trading_formspec_disabled.png deleted file mode 100644 index 3516b8bd2..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_trading_formspec_disabled.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_vex.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_vex.png deleted file mode 100644 index 980a1e3a3..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_vex.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_vex_charging.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_vex_charging.png deleted file mode 100644 index 97cf85906..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_vex_charging.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager.png deleted file mode 100644 index 7220aa15b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_armorer.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_armorer.png deleted file mode 100644 index 6d0eb39b1..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_armorer.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_butcher.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_butcher.png deleted file mode 100644 index 025600ff2..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_butcher.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_cartographer.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_cartographer.png deleted file mode 100644 index 7ab66072e..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_cartographer.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_farmer.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_farmer.png deleted file mode 100644 index 851f3a59d..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_farmer.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_fisherman.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_fisherman.png deleted file mode 100644 index c394f2e6e..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_fisherman.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_fletcher.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_fletcher.png deleted file mode 100644 index d9875ec10..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_fletcher.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_leatherworker.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_leatherworker.png deleted file mode 100644 index ea491713e..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_leatherworker.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_librarian.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_librarian.png deleted file mode 100644 index f4a90d6fb..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_librarian.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_nitwit.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_nitwit.png deleted file mode 100644 index 8009f0326..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_nitwit.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_priest.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_priest.png deleted file mode 100644 index 38318d4a9..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_priest.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_sheperd.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_sheperd.png deleted file mode 100644 index db3226969..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_sheperd.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_smith.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_smith.png deleted file mode 100644 index 8afdc6b29..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_smith.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_toolsmith.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_toolsmith.png deleted file mode 100644 index 538a64b99..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_toolsmith.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_weaponsmith.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_weaponsmith.png deleted file mode 100644 index 07157a553..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_villager_weaponsmith.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_vindicator.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_vindicator.png deleted file mode 100644 index 512eae60a..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_vindicator.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_witch.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_witch.png deleted file mode 100644 index acdf2ff93..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_witch.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither.png deleted file mode 100644 index d0b299ee9..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_half_health.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_half_health.png deleted file mode 100644 index f6353400c..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_half_health.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_skeleton.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_skeleton.png deleted file mode 100644 index d0d6afe77..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_skeleton.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf.png deleted file mode 100644 index ea1358984..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_angry.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_angry.png deleted file mode 100644 index b0c4eb55b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_angry.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_collar.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_collar.png deleted file mode 100644 index e0440f77b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_collar.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_icon_roam.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_icon_roam.png deleted file mode 100644 index fc09566a5..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_icon_roam.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_icon_sit.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_icon_sit.png deleted file mode 100644 index 7dde7e5a8..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_icon_sit.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_tame.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_tame.png deleted file mode 100644 index ad32cad15..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wolf_tame.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie.png deleted file mode 100644 index ef85701e8..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_butcher.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_butcher.png deleted file mode 100644 index 8efc88cba..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_butcher.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_farmer.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_farmer.png deleted file mode 100644 index 07a42bc32..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_farmer.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_librarian.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_librarian.png deleted file mode 100644 index b2d37fb18..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_librarian.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_pigman.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_pigman.png deleted file mode 100644 index d1c58b41f..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_pigman.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_priest.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_priest.png deleted file mode 100644 index 7d04f8529..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_priest.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_smith.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_smith.png deleted file mode 100644 index 02fe1ae7f..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_smith.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_villager.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_villager.png deleted file mode 100644 index 2fc85021b..000000000 Binary files a/mods/ENTITIES/mobs_mc/textures/mobs_mc_zombie_villager.png and /dev/null differ diff --git a/mods/ENTITIES/mobs_mc/vex.lua b/mods/ENTITIES/mobs_mc/vex.lua deleted file mode 100644 index 9a5455425..000000000 --- a/mods/ENTITIES/mobs_mc/vex.lua +++ /dev/null @@ -1,97 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### VEX ---################### - -mcl_mobs:register_mob("mobs_mc:vex", { - description = S("Vex"), - type = "monster", - spawn_class = "hostile", - pathfinding = 1, - passive = false, - attack_type = "dogfight", - physical = false, - hp_min = 14, - hp_max = 14, - xp_min = 6, - xp_max = 6, - collisionbox = {-0.2, 0.2, -0.2, 0.2, 1.0, 0.2}, --bat - visual = "mesh", - mesh = "mobs_mc_vex.b3d", - textures = { - { - "default_tool_steelsword.png", - "mobs_mc_vex.png", - }, - }, - visual_size = {x=1.25, y=1.25}, - damage = 9, - reach = 2, - view_range = 16, - walk_velocity = 3.2, - run_velocity = 5.9, - attack_type = "dogfight", - sounds = { - -- TODO: random - death = "mobs_mc_vex_death", - damage = "mobs_mc_vex_hurt", - distance = 16, - }, - animation = { - stand_speed = 25, - walk_speed = 25, - run_speed = 50, - stand_start = 40, - stand_end = 80, - walk_start = 0, - walk_end = 40, - run_start = 0, - run_end = 40, - }, - do_custom = function(self, dtime) - -- Glow red while attacking - -- TODO: Charge sound - if self.state == "attack" then - if self.base_texture[2] ~= "mobs_mc_vex_charging.png" then - self.base_texture[2] = "mobs_mc_vex_charging.png" - self.object:set_properties({textures=self.base_texture}) - end - else - if self.base_texture[1] ~= "default_tool_steelsword.png" then - self.base_texture[1] = "default_tool_steelsword.png" - self.object:set_properties({textures=self.base_texture}) - end - end - - -- Take constant damage if the vex' life clock ran out - -- (only for vexes summoned by evokers) - if self._summoned then - if not self._lifetimer then - self._lifetimer = 33 - end - self._lifetimer = self._lifetimer - dtime - if self._lifetimer <= 0 then - if self._damagetimer then - self._damagetimer = self._damagetimer - 1 - end - self.object:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 2}, - }, nil) - self._damagetimer = 1 - end - end - end, - fly = true, - makes_footstep_sound = false, -}) - - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:vex", S("Vex"), "mobs_mc_spawn_icon_vex.png", 0) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua deleted file mode 100644 index d623e7ca9..000000000 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ /dev/null @@ -1,1417 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - ---################### ---################### VILLAGER ---################### --- Summary: Villagers are complex NPCs, their main feature allows players to trade with them. - --- TODO: Particles --- TODO: 4s Regeneration I after trade unlock --- TODO: Behaviour: --- TODO: Run into house on rain or danger, open doors --- TODO: Internal inventory, trade with other villagers --- TODO: Schedule stuff (work,sleep,father) - -local S = minetest.get_translator("mobs_mc") -local N = function(s) return s end -local F = minetest.formspec_escape - --- playername-indexed table containing the previously used tradenum -local player_tradenum = {} --- playername-indexed table containing the objectref of trader, if trading formspec is open -local player_trading_with = {} - -local DEFAULT_WALK_CHANCE = 33 -- chance to walk in percent, if no player nearby -local PLAYER_SCAN_INTERVAL = 5 -- every X seconds, villager looks for players nearby -local PLAYER_SCAN_RADIUS = 4 -- scan radius for looking for nearby players - ---[=======[ TRADING ]=======] - --- LIST OF VILLAGER PROFESSIONS AND TRADES - --- TECHNICAL RESTRICTIONS (FIXME): --- * You can't use a clock as requested item --- * You can't use a compass as requested item if its stack size > 1 --- * You can't use a compass in the second requested slot --- This is a problem in the mcl_compass and mcl_clock mods, --- these items should be implemented as single items, then everything --- will be much easier. - -local COMPASS = "mcl_compass:compass" -if minetest.registered_aliases[COMPASS] then - COMPASS = minetest.registered_aliases[COMPASS] -end - -local E1 = { "mcl_core:emerald", 1, 1 } -- one emerald - --- Special trades for v6 only --- NOTE: These symbols MUST only be added at the end of a tier -local TRADE_V6_RED_SANDSTONE, TRADE_V6_DARK_OAK_SAPLING, TRADE_V6_ACACIA_SAPLING, TRADE_V6_BIRCH_SAPLING -if minetest.get_mapgen_setting("mg_name") == "v6" then - TRADE_V6_RED_SANDSTONE = { E1, { "mcl_core:redsandstone", 12, 16 } } - TRADE_V6_DARK_OAK_SAPLING = { { "mcl_core:emerald", 6, 9 }, { "mcl_core:darksapling", 1, 1 } } - TRADE_V6_ACACIA_SAPLING = { { "mcl_core:emerald", 14, 17 }, { "mcl_core:acaciasapling", 1, 1 } } - TRADE_V6_BIRCH_SAPLING = { { "mcl_core:emerald", 8, 11 }, { "mcl_core:birchsapling", 1, 1 } } -end - -local tiernames = { - "Novice", - "Apprentice", - "Journeyman", - "Expert", - "Master", -} - -local badges = { - "default_wood.png", - "default_steel_block.png", - "default_gold_block.png", - "mcl_core_emerald_block.png", - "default_diamond_block.png", -} - -local professions = { - unemployed = { - name = N("Unemployed"), - textures = { - "mobs_mc_villager.png", - "mobs_mc_villager.png", - }, - trades = nil, - }, - farmer = { - name = N("Farmer"), - textures = { - "mobs_mc_villager_farmer.png", - "mobs_mc_villager_farmer.png", - }, - jobsite = "mcl_composters:composter", - trades = { - { - { { "mcl_farming:wheat_item", 18, 22, }, E1 }, - { { "mcl_farming:potato_item", 15, 19, }, E1 }, - { { "mcl_farming:carrot_item", 15, 19, }, E1 }, - { E1, { "mcl_farming:bread", 2, 4 } }, - }, - - { - { { "mcl_farming:pumpkin", 8, 13 }, E1 }, - { E1, { "mcl_farming:pumpkin_pie", 2, 3} }, - { E1, { "mcl_core:apple", 2, 3} }, - }, - - { - { { "mcl_farming:melon", 7, 12 }, E1 }, - { E1, {"mcl_farming:cookie", 5, 7 }, }, - }, - { - { E1, { "mcl_mushrooms:mushroom_stew", 6, 10 } }, --FIXME: expert level farmer is supposed to sell sus stews. - }, - { - { E1, { "mcl_farming:carrot_item_gold", 3, 10 } }, - { E1, { "mcl_potions:speckled_melon", 4, 1 } }, - TRADE_V6_BIRCH_SAPLING, - TRADE_V6_DARK_OAK_SAPLING, - TRADE_V6_ACACIA_SAPLING, - }, - } - }, - fisherman = { - name = N("Fisherman"), - textures = { - "mobs_mc_villager_fisherman.png", - "mobs_mc_villager_fisherman.png", - }, - jobsite = "mcl_barrels:barrel_closed", - trades = { - { - { { "mcl_fishing:fish_raw", 6, 6, "mcl_core:emerald", 1, 1 },{ "mcl_fishing:fish_cooked", 6, 6 } }, - { { "mcl_mobitems:string", 15, 20 }, E1 }, - { { "mcl_core:coal_lump", 15, 10 }, E1 }, - -- FIXME missing: bucket of cod + fish should be cod. - }, - { - { { "mcl_fishing:fish_raw", 6, 15,}, E1 }, - { { "mcl_fishing:salmon_raw", 6, 6, "mcl_core:emerald", 1, 1 },{ "mcl_fishing:salmon_cooked", 6, 6 } }, - -- FIXME missing campfire - -- {{ "mcl_core:emerald", 1, 2 },{"mcl_campfires:campfire",1,1} }, - }, - { - { { "mcl_fishing:salmon_raw", 6, 13,}, E1 }, - { { "mcl_core:emerald", 7, 22 }, { "mcl_fishing:fishing_rod_enchanted", 1, 1} }, - }, - { - { { "mcl_fishing:clownfish_raw", 6, 6,}, E1 }, - }, - { - { { "mcl_fishing:pufferfish_raw", 4, 4,}, E1 }, - - { { "mcl_boats:boat", 1, 1,}, E1 }, - { { "mcl_boats:boat_acacia", 1, 1,}, E1 }, - { { "mcl_boats:boat_spruce", 1, 1,}, E1 }, - { { "mcl_boats:boat_dark_oak", 1, 1,}, E1 }, - { { "mcl_boats:boat_birch", 1, 1,}, E1 }, - }, - }, - }, - fletcher = { - name = N("Fletcher"), - textures = { - "mobs_mc_villager_fletcher.png", - "mobs_mc_villager_fletcher.png", - }, - jobsite = "mcl_fletching_table:fletching_table", - trades = { - { - { { "mcl_mobitems:string", 15, 20 }, E1 }, - { E1, { "mcl_bows:arrow", 8, 12 } }, - { { "mcl_core:gravel", 10, 10, "mcl_core:emerald", 1, 1 }, { "mcl_core:flint", 6, 10 } }, - }, - { - { { "mcl_core:flint", 26, 26 }, E1 }, - { { "mcl_core:emerald", 2, 3 }, { "mcl_bows:bow", 1, 1 } }, - }, - { - { { "mcl_mobitems:string", 14, 14 }, E1 }, - { { "mcl_core:emerald", 3, 3 }, { "mcl_bows:crossbow", 1, 1 } }, - }, - { - { { "mcl_mobitems:string", 24, 24 }, E1 }, - { { "mcl_core:emerald", 7, 21 } , { "mcl_bows:bow_enchanted", 1, 1 } }, - }, - { - --FIXME: supposed to be tripwire hook{ { "tripwirehook", 24, 24 }, E1 }, - { { "mcl_core:emerald", 8, 22 } , { "mcl_bows:crossbow_enchanted", 1, 1 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:healing_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:harming_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:night_vision_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:swiftness_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:slowness_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:leaping_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:poison_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:regeneration_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:invisibility_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:water_breathing_arrow", 5, 5 } }, - { { "mcl_core:emerald", 2, 2, "mcl_bows:arrow", 5, 5 }, { "mcl_potions:fire_resistance_arrow", 5, 5 } }, - }, - } - }, - shepherd ={ - name = N("Shepherd"), - textures = { - "mobs_mc_villager_sheperd.png", - "mobs_mc_villager_sheperd.png", - }, - jobsite = "mcl_loom:loom", - trades = { - { - { { "mcl_wool:white", 16, 22 }, E1 }, - { { "mcl_core:emerald", 3, 4 }, { "mcl_tools:shears", 1, 1 } }, - }, - - { - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:white", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:grey", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:silver", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:black", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:yellow", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:orange", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:red", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:magenta", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:purple", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:blue", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:cyan", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:lime", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:green", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:pink", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:light_blue", 1, 1 } }, - { { "mcl_core:emerald", 1, 2 }, { "mcl_wool:brown", 1, 1 } }, - }, - }, - }, - librarian = { - name = N("Librarian"), - textures = { - "mobs_mc_villager_librarian.png", - "mobs_mc_villager_librarian.png", - }, - jobsite = "mcl_books:bookshelf", --FIXME: lectern - trades = { - { - { { "mcl_core:paper", 24, 36 }, E1 }, - { { "mcl_books:book", 8, 10 }, E1 }, - { { "mcl_core:emerald", 9, 9 }, { "mcl_books:bookshelf", 1 ,1 }}, - { { "mcl_core:emerald", 5, 64, "mcl_books:book", 1, 1 }, { "mcl_enchanting:book_enchanted", 1 ,1 }}, - }, - { - { { "mcl_books:written_book", 2, 2 }, E1 }, - { { "mcl_core:emerald", 5, 64, "mcl_books:book", 1, 1 }, { "mcl_enchanting:book_enchanted", 1 ,1 }}, - { E1, { "mcl_lanterns:lantern_floor", 1, 1 } }, - }, - - { - { { "mcl_dye:black", 5, 5 }, E1 }, - { { "mcl_core:emerald", 5, 64, "mcl_books:book", 1, 1 }, { "mcl_enchanting:book_enchanted", 1 ,1 }}, - { E1, { "mcl_core:glass", 4, 4 } }, - }, - - { - { E1, { "mcl_books:writable_book", 1, 1 } }, - { { "mcl_core:emerald", 5, 64, "mcl_books:book", 1, 1 }, { "mcl_enchanting:book_enchanted", 1 ,1 }}, - { { "mcl_core:emerald", 4, 4 }, { "mcl_compass:compass", 1 ,1 }}, - { { "mcl_core:emerald", 5, 5 }, { "mcl_clock:clock", 1, 1 } }, - }, - - { - { { "mcl_core:emerald", 20, 20 }, { "mcl_mobs:nametag", 1, 1 } }, - } - }, - }, - cartographer = { - name = N("Cartographer"), - textures = { - "mobs_mc_villager_cartographer.png", - "mobs_mc_villager_cartographer.png", - }, - jobsite = "mcl_cartography_table:cartography_table", - trades = { - { - { { "mcl_core:paper", 24, 24 }, E1 }, - { { "mcl_core:emerald", 7, 7}, { "mcl_maps:empty_map", 1, 1 } }, - }, - { - -- compass subject to special checks - { { "xpanes:pane_natural_flat", 1, 1 }, E1 }, - --{ { "mcl_core:emerald", 13, 13, "mcl_compass:compass", 1, 1 }, { "FIXME:ocean explorer map" 1, 1} }, - }, - { - { { "mcl_compass:compass", 1, 1 }, E1 }, - --{ { "mcl_core:emerald", 13, 13, "mcl_compass:compass", 1, 1 }, { "FIXME:woodland explorer map" 1, 1} }, - }, - { - { { "mcl_core:emerald", 7, 7}, { "mcl_itemframes:item_frame", 1, 1 }}, - - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_white", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_grey", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_silver", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_black", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_red", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_green", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_cyan", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_blue", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_magenta", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_orange", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_purple", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_brown", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_pink", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_lime", 1, 1 }}, - { { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_light_blue", 1, 1 }}, - }, - { - --{ { "mcl_core:emerald", 8, 8}, { "FIXME: globe banner pattern", 1, 1 } }, - }, - -- TODO: special maps - }, - }, - armorer = { - name = N("Armorer"), - textures = { - "mobs_mc_villager_armorer.png", - "mobs_mc_villager_armorer.png", - }, - jobsite = "mcl_blast_furnace:blast_furnace", - trades = { - { - { { "mcl_core:coal_lump", 15, 15 }, E1 }, - { { "mcl_core:emerald", 5, 5 }, { "mcl_armor:helmet_iron", 1, 1 } }, - { { "mcl_core:emerald", 9, 9 }, { "mcl_armor:chestplate_iron", 1, 1 } }, - { { "mcl_core:emerald", 7, 7 }, { "mcl_armor:leggings_iron", 1, 1 } }, - { { "mcl_core:emerald", 4, 4 }, { "mcl_armor:boots_iron", 1, 1 } }, - }, - - { - { { "mcl_core:iron_ingot", 4, 4 }, E1 }, - { { "mcl_core:emerald", 36, 36 }, { "mcl_bells:bell", 1, 1 } }, - { { "mcl_core:emerald", 3, 3 }, { "mcl_armor:leggings_chain", 1, 1 } }, - { { "mcl_core:emerald", 1, 1 }, { "mcl_armor:boots_chain", 1, 1 } }, - }, - { - { { "mcl_buckets:bucket_lava", 1, 1 }, E1 }, - { { "mcl_core:diamond", 1, 1 }, E1 }, - { { "mcl_core:emerald", 1, 1 }, { "mcl_armor:helmet_chain", 1, 1 } }, - { { "mcl_core:emerald", 4, 4 }, { "mcl_armor:chestplate_chain", 1, 1 } }, - { { "mcl_core:emerald", 5, 5 }, { "mcl_shields:shield", 1, 1 } }, - }, - - { - { { "mcl_core:emerald", 19, 33 }, { "mcl_armor:leggings_diamond_enchanted", 1, 1 } }, - { { "mcl_core:emerald", 13, 27 }, { "mcl_armor:boots_diamond_enchanted", 1, 1 } }, - }, - { - { { "mcl_core:emerald", 13, 27 }, { "mcl_armor:helmet_diamond_enchanted", 1, 1 } }, - { { "mcl_core:emerald", 21, 35 }, { "mcl_armor:chestplate_diamond_enchanted", 1, 1 } }, - }, - }, - }, - leatherworker = { - name = N("Leatherworker"), - textures = { - "mobs_mc_villager_leatherworker.png", - "mobs_mc_villager_leatherworker.png", - }, - jobsite = "mcl_cauldrons:cauldron", - trades = { - { - { { "mcl_mobitems:leather", 9, 12 }, E1 }, - { { "mcl_core:emerald", 3, 3 }, { "mcl_armor:leggings_leather", 2, 4 } }, - { { "mcl_core:emerald", 7, 7 }, { "mcl_armor:chestplate_leather", 2, 4 } }, - }, - { - { { "mcl_core:flint", 26, 26 }, E1 }, - { { "mcl_core:emerald", 5, 5 }, { "mcl_armor:helmet_leather", 2, 4 } }, - { { "mcl_core:emerald", 4, 4 }, { "mcl_armor:boots_leather", 2, 4 } }, - }, - { - { { "mcl_mobitems:rabbit_hide", 9, 9 }, E1 }, - { { "mcl_core:emerald", 7, 7 }, { "mcl_armor:chestplate_leather", 1, 1 } }, - }, - { - --{ { "FIXME: scute", 4, 4 }, E1 }, - { { "mcl_core:emerald", 8, 10 }, { "mcl_mobitems:saddle", 1, 1 } }, - }, - { - { { "mcl_core:emerald", 6, 6 }, { "mcl_mobitems:saddle", 1, 1 } }, - { { "mcl_core:emerald", 5, 5 }, { "mcl_armor:helmet_leather", 2, 4 } }, - }, - }, - }, - butcher = { - name = N("Butcher"), - textures = { - "mobs_mc_villager_butcher.png", - "mobs_mc_villager_butcher.png", - }, - jobsite = "mcl_smoker:smoker", - trades = { - { - { { "mcl_mobitems:beef", 14, 14 }, E1 }, - { { "mcl_mobitems:chicken", 7, 7 }, E1 }, - { { "mcl_mobitems:rabbit", 4, 4 }, E1 }, - { E1, { "mcl_mobitems:rabbit_stew", 1, 1 } }, - }, - - { - { { "mcl_core:coal_lump", 15, 15 }, E1 }, - { E1, { "mcl_mobitems:cooked_porkchop", 5, 5 } }, - { E1, { "mcl_mobitems:cooked_chicken", 8, 8 } }, - }, - { - { { "mcl_mobitems:mutton", 7, 7 }, E1 }, - { { "mcl_mobitems:beef", 10, 10 }, E1 }, - }, - { - { { "mcl_mobitems:mutton", 7, 7 }, E1 }, - { { "mcl_mobitems:beef", 10, 10 }, E1 }, - }, - { - --{ { "FIXME: Sweet Berries", 10, 10 }, E1 }, - }, - }, - }, - weapon_smith = { - name = N("Weapon Smith"), - textures = { - "mobs_mc_villager_weaponsmith.png", - "mobs_mc_villager_weaponsmith.png", - }, - jobsite = "mcl_furnaces:furnace", --FIXME: grindstone - trades = { - { - { { "mcl_core:coal_lump", 15, 15 }, E1 }, - { { "mcl_core:emerald", 3, 3 }, { "mcl_tools:axe_iron", 1, 1 } }, - { { "mcl_core:emerald", 7, 21 }, { "mcl_tools:sword_iron_enchanted", 1, 1 } }, - }, - - { - { { "mcl_core:iron_ingot", 4, 4 }, E1 }, - { { "mcl_core:emerald", 36, 36 }, { "mcl_bells:bell", 1, 1 } }, - }, - { - { { "mcl_core:flint", 7, 9 }, E1 }, - }, - { - { { "mcl_core:diamond", 7, 9 }, E1 }, - { { "mcl_core:emerald", 17, 31 }, { "mcl_tools:axe_diamond_enchanted", 1, 1 } }, - }, - - { - { { "mcl_core:emerald", 13, 27 }, { "mcl_tools:sword_diamond_enchanted", 1, 1 } }, - }, - }, - }, - tool_smith = { - name = N("Tool Smith"), - textures = { - "mobs_mc_villager_toolsmith.png", - "mobs_mc_villager_toolsmith.png", - }, - jobsite = "mcl_anvils:anvil", --FIXME: smithing table - trades = { - { - { { "mcl_core:coal_lump", 15, 15 }, E1 }, - { E1, { "mcl_tools:axe_stone", 1, 1 } }, - { E1, { "mcl_tools:shovel_stone", 1, 1 } }, - { E1, { "mcl_tools:pick_stone", 1, 1 } }, - { E1, { "mcl_farming:hoe_stone", 1, 1 } }, - }, - - { - { { "mcl_core:iron_ingot", 4, 4 }, E1 }, - { { "mcl_core:emerald", 36, 36 }, { "mcl_bells:bell", 1, 1 } }, - }, - { - { { "mcl_core:flint", 30, 30 }, E1 }, - { { "mcl_core:emerald", 6, 20 }, { "mcl_tools:axe_iron_enchanted", 1, 1 } }, - { { "mcl_core:emerald", 7, 21 }, { "mcl_tools:shovel_iron_enchanted", 1, 1 } }, - { { "mcl_core:emerald", 8, 22 }, { "mcl_tools:pick_iron_enchanted", 1, 1 } }, - { { "mcl_core:emerald", 4, 4 }, { "mcl_farming:hoe_diamond", 1, 1 } }, - }, - { - { { "mcl_core:diamond", 1, 1 }, E1 }, - { { "mcl_core:emerald", 17, 31 }, { "mcl_tools:axe_diamond_enchanted", 1, 1 } }, - { { "mcl_core:emerald", 10, 24 }, { "mcl_tools:shovel_diamond_enchanted", 1, 1 } }, - }, - { - { { "mcl_core:emerald", 18, 32 }, { "mcl_tools:pick_diamond_enchanted", 1, 1 } }, - }, - }, - }, - cleric = { - name = N("Cleric"), - textures = { - "mobs_mc_villager_priest.png", - "mobs_mc_villager_priest.png", - }, - jobsite = "mcl_brewing:stand_000", - trades = { - { - { { "mcl_mobitems:rotten_flesh", 32, 32 }, E1 }, - { E1, { "mesecons:redstone", 2, 2 } }, - }, - { - { { "mcl_core:gold_ingot", 3, 3 }, E1 }, - { E1, { "mcl_dye:blue", 1, 1 } }, - }, - { - { { "mcl_mobitems:rabbit_foot", 2, 2 }, E1 }, - { E1, { "mcl_nether:glowstone", 4, 4 } }, - }, - { - --{ { "FIXME: scute", 4, 4 }, E1 }, - { { "mcl_potions:glass_bottle", 9, 9 }, E1 }, - { { "mcl_core:emerald", 5, 5 }, { "mcl_throwing:ender_pearl", 1, 1 } }, - TRADE_V6_RED_SANDSTONE, - }, - { - { { "mcl_nether:nether_wart_item", 22, 22 }, E1 }, - { { "mcl_core:emerald", 3, 3 }, { "mcl_experience:bottle", 1, 1 } }, - }, - }, - }, - nitwit = { - name = N("Nitwit"), - textures = { - "mobs_mc_villager_nitwit.png", - "mobs_mc_villager_nitwit.png", - }, - -- No trades for nitwit - trades = nil, - } -} - -local profession_names = {} -for id, _ in pairs(professions) do - table.insert(profession_names, id) -end - -local jobsites={} -for _,n in pairs(profession_names) do - table.insert(jobsites,professions[n].jobsite) -end - -local function stand_still(self) - self.walk_chance = 0 - self.jump = false -end - -local function init_trader_vars(self) - if not self._max_trade_tier then - self._max_trade_tier = 1 - end - if not self._locked_trades then - self._locked_trades = 0 - end - if not self._trading_players then - self._trading_players = {} - end -end - -local function get_badge_textures(self) - local t = professions[self._profession].textures - if self._profession == "unemployed" or self._profession == "nitwit" then return t end - local tier = self._max_trade_tier or 1 - return { - "[combine:64x64:0,0="..t[1]..":11,55=".. badges[tier].."\\^[resize\\:2x2", - t[2] - } -end - -local function set_textures(self) - self.object:set_properties({textures=get_badge_textures(self)}) -end - -local function go_home(entity) - entity.state = "go_home" - local b=entity._bed - if not b then return end - mcl_mobs:gopath(entity,b,function(entity,b) - if vector.distance(entity.object:get_pos(),b) < 2 then - entity.state = "stand" - set_velocity(entity,0) - entity.object:set_pos(b) - local n=minetest.get_node(b) - if n and n.name ~= "mcl_beds:bed_red_bottom" then - entity._bed=nil --the stormtroopers have killed uncle owen - return false - end - return true - end - end) -end - ------ JOBSITE LOGIC -local function get_profession_by_jobsite(js) - for k,v in pairs(professions) do - if v.jobsite == js then return k end - end -end - -local function employ(self,jobsite_pos) - local n = minetest.get_node(jobsite_pos) - local m = minetest.get_meta(jobsite_pos) - local p = get_profession_by_jobsite(n.name) - if p and m:get_string("villager") == "" then - self._profession=p - m:set_string("villager",self._id) - self._jobsite = jobsite_pos - set_textures(self) - return true - end -end - -local function look_for_job(self) - local p = self.object:get_pos() - local nn = minetest.find_nodes_in_area(vector.offset(p,-48,-48,-48),vector.offset(p,48,48,48),jobsites) - for _,n in pairs(nn) do - local m=minetest.get_meta(n) - if m:get_string("villager") == "" then - --minetest.log("goingt to jobsite "..minetest.pos_to_string(n) ) - local gp = mcl_mobs:gopath(self,n,function() - --minetest.log("arrived jobsite "..minetest.pos_to_string(n) ) - end) - if gp then return end - end - end -end - -local function get_a_job(self) - local p = self.object:get_pos() - local nn = minetest.find_nodes_in_area(vector.offset(p,-8,-8,-8),vector.offset(p,8,8,8),jobsites) - for _,n in pairs(nn) do - if n and employ(self,n) then return true end - end - if self.state ~= "gowp" then look_for_job(self) end -end - -local function update_max_tradenum(self) - if not self._trades then - return - end - local trades = minetest.deserialize(self._trades) - for t=1, #trades do - local trade = trades[t] - if trade.tier > self._max_trade_tier then - self._max_tradenum = t - 1 - return - end - end - self._max_tradenum = #trades -end - -local function init_trades(self, inv) - local profession = professions[self._profession] - local trade_tiers = profession.trades - if trade_tiers == nil then - -- Empty trades - self._trades = false - return - end - - local max_tier = #trade_tiers - local trades = {} - for tiernum=1, max_tier do - local tier = trade_tiers[tiernum] - for tradenum=1, #tier do - local trade = tier[tradenum] - local wanted1_item = trade[1][1] - local wanted1_count = math.random(trade[1][2], trade[1][3]) - local offered_item = trade[2][1] - local offered_count = math.random(trade[2][2], trade[2][3]) - - local offered_stack = ItemStack({name = offered_item, count = offered_count}) - if mcl_enchanting.is_enchanted(offered_item) then - if mcl_enchanting.is_book(offered_item) then - offered_stack = mcl_enchanting.enchant_uniform_randomly(offered_stack, {"soul_speed"}) - else - mcl_enchanting.enchant_randomly(offered_stack, math.random(5, 19), false, false, true) - mcl_enchanting.unload_enchantments(offered_stack) - end - end - - local wanted = { wanted1_item .. " " ..wanted1_count } - if trade[1][4] then - local wanted2_item = trade[1][4] - local wanted2_count = math.random(trade[1][5], trade[1][6]) - table.insert(wanted, wanted2_item .. " " ..wanted2_count) - end - - table.insert(trades, { - wanted = wanted, - offered = offered_stack:to_table(), - tier = tiernum, -- tier of this trade - traded_once = false, -- true if trade was traded at least once - trade_counter = 0, -- how often the this trade was mate after the last time it got unlocked - locked = false, -- if this trade is locked. Locked trades can't be used - }) - end - end - self._trades = minetest.serialize(trades) - minetest.deserialize(self._trades) -end - -local function set_trade(trader, player, inv, concrete_tradenum) - local trades = minetest.deserialize(trader._trades) - if not trades then - init_trades(trader) - trades = minetest.deserialize(trader._trades) - if not trades then - minetest.log("error", "[mobs_mc] Failed to select villager trade!") - return - end - end - local name = player:get_player_name() - - -- Stop tradenum from advancing into locked tiers or out-of-range areas - if concrete_tradenum > trader._max_tradenum then - concrete_tradenum = trader._max_tradenum - elseif concrete_tradenum < 1 then - concrete_tradenum = 1 - end - player_tradenum[name] = concrete_tradenum - local trade = trades[concrete_tradenum] - inv:set_stack("wanted", 1, ItemStack(trade.wanted[1])) - local offered = ItemStack(trade.offered) - -- Only load enchantments for enchanted items; fixes unnecessary metadata being applied to regular items from villagers. - if mcl_enchanting.is_enchanted(offered:get_name()) then - mcl_enchanting.load_enchantments(offered) - end - inv:set_stack("offered", 1, offered) - if trade.wanted[2] then - local wanted2 = ItemStack(trade.wanted[2]) - inv:set_stack("wanted", 2, wanted2) - else - inv:set_stack("wanted", 2, "") - end - -end - -local function show_trade_formspec(playername, trader, tradenum) - if not trader._trades then - return - end - if not tradenum then - tradenum = 1 - end - local trades = minetest.deserialize(trader._trades) - local trade = trades[tradenum] - local profession = professions[trader._profession].name - local disabled_img = "" - if trade.locked then - disabled_img = "image[4.3,2.52;1,1;mobs_mc_trading_formspec_disabled.png]".. - "image[4.3,1.1;1,1;mobs_mc_trading_formspec_disabled.png]" - end - local tradeinv_name = "mobs_mc:trade_"..playername - local tradeinv = F("detached:"..tradeinv_name) - - local b_prev, b_next = "", "" - if #trades > 1 then - if tradenum > 1 then - b_prev = "button[1,1;0.5,1;prev_trade;<]" - end - if tradenum < trader._max_tradenum then - b_next = "button[7.26,1;0.5,1;next_trade;>]" - end - end - - local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..playername}) - if not inv then - return - end - local wanted1 = inv:get_stack("wanted", 1) - local wanted2 = inv:get_stack("wanted", 2) - local offered = inv:get_stack("offered", 1) - - local w2_formspec = "" - if not wanted2:is_empty() then - w2_formspec = "item_image[3,1;1,1;"..wanted2:to_string().."]" - .."tooltip[3,1;0.8,0.8;"..F(wanted2:get_description()).."]" - end - local tiername = tiernames[trader._max_trade_tier] - if tiername then - tiername = S(tiername) - else - tiername = S("Master") - end - local formspec = - "size[9,8.75]" - .."background[-0.19,-0.25;9.41,9.49;mobs_mc_trading_formspec_bg.png]" - ..disabled_img -.."label[3,0;"..F(minetest.colorize("#313131", S(profession).." - "..tiername)) .."]" - .."list[current_player;main;0,4.5;9,3;9]" - .."list[current_player;main;0,7.74;9,1;]" - ..b_prev..b_next - .."["..tradeinv..";wanted;2,1;2,1;]" - .."item_image[2,1;1,1;"..wanted1:to_string().."]" - .."tooltip[2,1;0.8,0.8;"..F(wanted1:get_description()).."]" - ..w2_formspec - .."item_image[5.76,1;1,1;"..offered:get_name().." "..offered:get_count().."]" - .."tooltip[5.76,1;0.8,0.8;"..F(offered:get_description()).."]" - .."list["..tradeinv..";input;2,2.5;2,1;]" - .."list["..tradeinv..";output;5.76,2.55;1,1;]" - .."listring["..tradeinv..";output]" - .."listring[current_player;main]" - .."listring["..tradeinv..";input]" - .."listring[current_player;main]" - minetest.sound_play("mobs_mc_villager_trade", {to_player = playername}, true) - minetest.show_formspec(playername, tradeinv_name, formspec) -end - -local function update_offer(inv, player, sound) - local name = player:get_player_name() - local trader = player_trading_with[name] - local tradenum = player_tradenum[name] - if not trader or not tradenum then - return false - end - local trades = minetest.deserialize(trader._trades) - if not trades then - return false - end - local trade = trades[tradenum] - if not trade then - return false - end - local wanted1, wanted2 = inv:get_stack("wanted", 1), inv:get_stack("wanted", 2) - local input1, input2 = inv:get_stack("input", 1), inv:get_stack("input", 2) - - -- BEGIN OF SPECIAL HANDLING OF COMPASS - -- These 2 functions are a complicated check to check if the input contains a - -- special item which we cannot check directly against their name, like - -- compass. - -- TODO: Remove these check functions when compass and clock are implemented - -- as single items. - local function check_special(special_item, group, wanted1, wanted2, input1, input2) - if minetest.registered_aliases[special_item] then - special_item = minetest.registered_aliases[special_item] - end - if wanted1:get_name() == special_item then - local function check_input(input, wanted, group) - return minetest.get_item_group(input:get_name(), group) ~= 0 and input:get_count() >= wanted:get_count() - end - if check_input(input1, wanted1, group) then - return true - elseif check_input(input2, wanted1, group) then - return true - else - return false - end - end - return false - end - -- Apply above function to all items which we consider special. - -- This function succeeds if ANY item check succeeds. - local function check_specials(wanted1, wanted2, input1, input2) - return check_special(COMPASS, "compass", wanted1, wanted2, input1, input2) - end - -- END OF SPECIAL HANDLING OF COMPASS - - if ( - ((inv:contains_item("input", wanted1) and - (wanted2:is_empty() or inv:contains_item("input", wanted2))) or - -- BEGIN OF SPECIAL HANDLING OF COMPASS - check_specials(wanted1, wanted2, input1, input2)) and - -- END OF SPECIAL HANDLING OF COMPASS - (trade.locked == false)) then - inv:set_stack("output", 1, inv:get_stack("offered", 1)) - if sound then - minetest.sound_play("mobs_mc_villager_accept", {to_player = name}, true) - end - return true - else - inv:set_stack("output", 1, ItemStack("")) - if sound then - minetest.sound_play("mobs_mc_villager_deny", {to_player = name}, true) - end - return false - end -end - --- Returns a single itemstack in the given inventory to the player's main inventory, or drop it when there's no space left -local function return_item(itemstack, dropper, pos, inv_p) - if dropper:is_player() then - -- Return to main inventory - if inv_p:room_for_item("main", itemstack) then - inv_p:add_item("main", itemstack) - else - -- Drop item on the ground - local v = dropper:get_look_dir() - local p = {x=pos.x, y=pos.y+1.2, z=pos.z} - p.x = p.x+(math.random(1,3)*0.2) - p.z = p.z+(math.random(1,3)*0.2) - local obj = minetest.add_item(p, itemstack) - if obj then - v.x = v.x*4 - v.y = v.y*4 + 2 - v.z = v.z*4 - obj:set_velocity(v) - obj:get_luaentity()._insta_collect = false - end - end - else - -- Fallback for unexpected cases - minetest.add_item(pos, itemstack) - end - return itemstack -end - -local function return_fields(player) - local name = player:get_player_name() - local inv_t = minetest.get_inventory({type="detached", name = "mobs_mc:trade_"..name}) - local inv_p = player:get_inventory() - if not inv_t or not inv_p then - return - end - for i=1, inv_t:get_size("input") do - local stack = inv_t:get_stack("input", i) - return_item(stack, player, player:get_pos(), inv_p) - stack:clear() - inv_t:set_stack("input", i, stack) - end - inv_t:set_stack("output", 1, "") -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if string.sub(formname, 1, 14) == "mobs_mc:trade_" then - local name = player:get_player_name() - if fields.quit then - -- Get input items back - return_fields(player) - -- Reset internal "trading with" state - local trader = player_trading_with[name] - if trader then - trader._trading_players[name] = nil - end - player_trading_with[name] = nil - elseif fields.next_trade or fields.prev_trade then - local trader = player_trading_with[name] - if not trader or not trader.object:get_luaentity() then - return - end - local trades = trader._trades - if not trades then - return - end - local dir = 1 - if fields.prev_trade then - dir = -1 - end - local tradenum = player_tradenum[name] + dir - local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..name}) - if not inv then - return - end - set_trade(trader, player, inv, tradenum) - update_offer(inv, player, false) - show_trade_formspec(name, trader, player_tradenum[name]) - end - end -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - return_fields(player) - player_tradenum[name] = nil - local trader = player_trading_with[name] - if trader then - trader._trading_players[name] = nil - end - player_trading_with[name] = nil - -end) - --- Return true if player is trading with villager, and the villager entity exists -local function trader_exists(playername) - local trader = player_trading_with[playername] - return trader ~= nil and trader.object:get_luaentity() ~= nil -end - -local trade_inventory = { - allow_take = function(inv, listname, index, stack, player) - if listname == "input" then - return stack:get_count() - elseif listname == "output" then - if not trader_exists(player:get_player_name()) then - return 0 - end - -- Only allow taking full stack - local count = stack:get_count() - if count == inv:get_stack(listname, index):get_count() then - -- Also update output stack again. - -- If input has double the wanted items, the - -- output will stay because there will be still - -- enough items in input after the trade - local wanted1 = inv:get_stack("wanted", 1) - local wanted2 = inv:get_stack("wanted", 2) - local input1 = inv:get_stack("input", 1) - local input2 = inv:get_stack("input", 2) - wanted1:set_count(wanted1:get_count()*2) - wanted2:set_count(wanted2:get_count()*2) - -- BEGIN OF SPECIAL HANDLING FOR COMPASS - local function special_checks(wanted1, input1, input2) - if wanted1:get_name() == COMPASS then - local compasses = 0 - if (minetest.get_item_group(input1:get_name(), "compass") ~= 0) then - compasses = compasses + input1:get_count() - end - if (minetest.get_item_group(input2:get_name(), "compass") ~= 0) then - compasses = compasses + input2:get_count() - end - return compasses >= wanted1:get_count() - end - return false - end - -- END OF SPECIAL HANDLING FOR COMPASS - if (inv:contains_item("input", wanted1) and - (wanted2:is_empty() or inv:contains_item("input", wanted2))) - -- BEGIN OF SPECIAL HANDLING FOR COMPASS - or special_checks(wanted1, input1, input2) then - -- END OF SPECIAL HANDLING FOR COMPASS - return -1 - else - -- If less than double the wanted items, - -- remove items from output (final trade, - -- input runs empty) - return count - end - else - return 0 - end - else - return 0 - end - end, - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - if from_list == "input" and to_list == "input" then - return count - elseif from_list == "output" and to_list == "input" then - if not trader_exists(player:get_player_name()) then - return 0 - end - local move_stack = inv:get_stack(from_list, from_index) - if inv:get_stack(to_list, to_index):item_fits(move_stack) then - return count - end - end - return 0 - end, - allow_put = function(inv, listname, index, stack, player) - if listname == "input" then - if not trader_exists(player:get_player_name()) then - return 0 - else - return stack:get_count() - end - else - return 0 - end - end, - on_put = function(inv, listname, index, stack, player) - update_offer(inv, player, true) - end, - on_move = function(inv, from_list, from_index, to_list, to_index, count, player) - if from_list == "output" and to_list == "input" then - inv:remove_item("input", inv:get_stack("wanted", 1)) - local wanted2 = inv:get_stack("wanted", 2) - if not wanted2:is_empty() then - inv:remove_item("input", inv:get_stack("wanted", 2)) - end - minetest.sound_play("mobs_mc_villager_accept", {to_player = player:get_player_name()}, true) - end - update_offer(inv, player, true) - end, - on_take = function(inv, listname, index, stack, player) - local accept - local name = player:get_player_name() - if listname == "output" then - local wanted1 = inv:get_stack("wanted", 1) - inv:remove_item("input", wanted1) - local wanted2 = inv:get_stack("wanted", 2) - if not wanted2:is_empty() then - inv:remove_item("input", inv:get_stack("wanted", 2)) - end - -- BEGIN OF SPECIAL HANDLING FOR COMPASS - if wanted1:get_name() == COMPASS then - for n=1, 2 do - local input = inv:get_stack("input", n) - if minetest.get_item_group(input:get_name(), "compass") ~= 0 then - input:set_count(input:get_count() - wanted1:get_count()) - inv:set_stack("input", n, input) - break - end - end - end - -- END OF SPECIAL HANDLING FOR COMPASS - local trader = player_trading_with[name] - local tradenum = player_tradenum[name] - local trades - if trader and trader._trades then - trades = minetest.deserialize(trader._trades) - end - if trades then - local trade = trades[tradenum] - local unlock_stuff = false - if not trade.traded_once then - -- Unlock all the things if something was traded - -- for the first time ever - unlock_stuff = true - trade.traded_once = true - elseif trade.trade_counter == 0 and math.random(1,5) == 1 then - -- Otherwise, 20% chance to unlock if used freshly reset trade - unlock_stuff = true - end - local update_formspec = false - if unlock_stuff then - -- First-time trade unlock all trades and unlock next trade tier - if trade.tier + 1 > trader._max_trade_tier then - trader._max_trade_tier = trader._max_trade_tier + 1 - if trader._max_trade_tier > 5 then - trader._max_trade_tier = 5 - end - set_textures(trader) - update_max_tradenum(trader) - update_formspec = true - end - for t=1, #trades do - trades[t].locked = false - trades[t].trade_counter = 0 - end - trader._locked_trades = 0 - -- Also heal trader for unlocking stuff - -- TODO: Replace by Regeneration I - trader.health = math.min(trader.hp_max, trader.health + 4) - end - trade.trade_counter = trade.trade_counter + 1 - -- Semi-randomly lock trade for repeated trade (not if there's only 1 trade) - if trader._max_tradenum > 1 then - if trade.trade_counter >= 12 then - trade.locked = true - elseif trade.trade_counter >= 2 then - local r = math.random(1, math.random(4, 10)) - if r == 1 then - trade.locked = true - end - end - end - - if trade.locked then - inv:set_stack("output", 1, "") - update_formspec = true - trader._locked_trades = trader._locked_trades + 1 - -- Check if we managed to lock ALL available trades. Rare but possible. - if trader._locked_trades >= trader._max_tradenum then - -- Emergency unlock! Unlock all other trades except the current one - for t=1, #trades do - if t ~= tradenum then - trades[t].locked = false - trades[t].trade_counter = 0 - end - end - trader._locked_trades = 1 - -- Also heal trader for unlocking stuff - -- TODO: Replace by Regeneration I - trader.health = math.min(trader.hp_max, trader.health + 4) - end - end - trader._trades = minetest.serialize(trades) - if update_formspec then - show_trade_formspec(name, trader, tradenum) - end - else - minetest.log("error", "[mobs_mc] Player took item from trader output but player_trading_with or player_tradenum is nil!") - end - - accept = true - elseif listname == "input" then - update_offer(inv, player, false) - end - if accept then - minetest.sound_play("mobs_mc_villager_accept", {to_player = name}, true) - else - minetest.sound_play("mobs_mc_villager_deny", {to_player = name}, true) - end - end, -} - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - player_tradenum[name] = 1 - player_trading_with[name] = nil - - -- Create or get player-specific trading inventory - local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..name}) - if not inv then - inv = minetest.create_detached_inventory("mobs_mc:trade_"..name, trade_inventory, name) - end - inv:set_size("input", 2) - inv:set_size("output", 1) - inv:set_size("wanted", 2) - inv:set_size("offered", 1) -end) - ---[=======[ MOB REGISTRATION AND SPAWNING ]=======] - -local pick_up = { "mcl_farming:bread", "mcl_farming:carrot_item", "mcl_farming:beetroot_item" , "mcl_farming:potato_item" } - -mcl_mobs:register_mob("mobs_mc:villager", { - description = S("Villager"), - type = "npc", - spawn_class = "passive", - hp_min = 20, - hp_max = 20, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, - visual = "mesh", - mesh = "mobs_mc_villager.b3d", - textures = { - "mobs_mc_villager.png", - "mobs_mc_villager.png", --hat - }, - visual_size = {x=2.75, y=2.75}, - makes_footstep_sound = true, - walk_velocity = 1.2, - run_velocity = 2.4, - drops = {}, - can_despawn = false, - -- TODO: sounds - sounds = { - random = "mobs_mc_villager", - damage = "mobs_mc_villager_hurt", - distance = 10, - }, - animation = { - stand_speed = 25, - stand_start = 40, - stand_end = 59, - walk_speed = 25, - walk_start = 0, - walk_end = 40, - run_speed = 25, - run_start = 0, - run_end = 40, - head_shake_start = 210, - head_shake_end = 220, - head_shake_loop = false, - head_nod_start = 210, - head_nod_end = 220, - head_nod_loop = false, - }, - follow = pick_up, - nofollow = true, - view_range = 16, - fear_height = 4, - jump = true, - walk_chance = DEFAULT_WALK_CHANCE, - _bed = nil, - _id = nil, - _profession = "unemployed", - look_at_player = true, - pick_up = pick_up, - can_open_doors = true, - on_pick_up = function(self,itementity) - local clicker - for _,p in pairs(minetest.get_connected_players()) do - if vector.distance(p:get_pos(),self.object:get_pos()) < 10 then - clicker = p - end - end - if clicker then - mcl_mobs:feed_tame(self, clicker, 1, true, false) - return - end - return true --do not pick up - end, - on_rightclick = function(self, clicker) - local trg=vector.new(0,9,0) - if self._jobsite then - mcl_mobs:gopath(self,self._jobsite,function() - --minetest.log("arrived at jobsite") - end) - end - if self.child or self._profession == "unemployed" then - return - end - -- Initiate trading - init_trader_vars(self) - local name = clicker:get_player_name() - self._trading_players[name] = true - - if self._trades == nil then - init_trades(self) - end - update_max_tradenum(self) - if self._trades == false then - -- Villager has no trades, rightclick is a no-op - return - end - - player_trading_with[name] = self - - local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..name}) - if not inv then - return - end - - set_trade(self, clicker, inv, 1) - - show_trade_formspec(name, self) - - -- Behaviour stuff: - -- Make villager look at player and stand still - local selfpos = self.object:get_pos() - local clickerpos = clicker:get_pos() - local dir = vector.direction(selfpos, clickerpos) - self.object:set_yaw(minetest.dir_to_yaw(dir)) - stand_still(self) - end, - - _player_scan_timer = 0, - _trading_players = {}, -- list of playernames currently trading with villager (open formspec) - do_custom = function(self, dtime) - -- Stand still if player is nearby. - if not self._player_scan_timer then - self._player_scan_timer = 0 - end - - self._player_scan_timer = self._player_scan_timer + dtime - -- Check infrequently to keep CPU load low - if self._player_scan_timer > PLAYER_SCAN_INTERVAL then - self._player_scan_timer = 0 - local selfpos = self.object:get_pos() - local objects = minetest.get_objects_inside_radius(selfpos, PLAYER_SCAN_RADIUS) - local has_player = false - for o, obj in pairs(objects) do - if obj:is_player() then - has_player = true - break - end - end - if has_player then - minetest.log("verbose", "[mobs_mc] Player near villager found!") - stand_still(self) - else - minetest.log("verbose", "[mobs_mc] No player near villager found!") - self.walk_chance = DEFAULT_WALK_CHANCE - self.jump = true - end - if self._bed and ( self.state ~= "go_home" and vector.distance(self.object:get_pos(),self._bed) > 50 ) then - go_home(self) - end - if self._profession == "unemployed" then - get_a_job(self) - end - end - end, - - on_spawn = function(self) - if self._id then - set_textures(self) - return - end - self._id=minetest.sha1(minetest.get_gametime()..minetest.pos_to_string(self.object:get_pos())..tostring(math.random())) - self._profession = "unemployed" - if math.random(100) == 1 then - self._profession = "nitwit" - end - set_textures(self) - end, - on_die = function(self, pos) - -- Close open trade formspecs and give input back to players - local trading_players = self._trading_players - if trading_players then - for name, _ in pairs(trading_players) do - minetest.close_formspec(name, "mobs_mc:trade_"..name) - local player = minetest.get_player_by_name(name) - if player then - return_fields(player) - end - end - end - end, -}) - - - -mcl_mobs:spawn_specific( -"mobs_mc:villager", -"overworld", -"ground", -{ -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"ColdTaiga", -"SunflowerPlains", -"RoofedForest", -"MesaPlateauFM_grasstop", -"ExtremeHillsM", -"BirchForestM", -}, -0, -minetest.LIGHT_MAX+1, -30, -20, -4, -mobs_mc.water_level+1, -mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0) diff --git a/mods/ENTITIES/mobs_mc/villager_evoker.lua b/mods/ENTITIES/mobs_mc/villager_evoker.lua deleted file mode 100644 index 6e62e00b6..000000000 --- a/mods/ENTITIES/mobs_mc/villager_evoker.lua +++ /dev/null @@ -1,87 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### EVOKER ---################### - -local pr = PseudoRandom(os.time()*666) - -mcl_mobs:register_mob("mobs_mc:evoker", { - description = S("Evoker"), - type = "monster", - spawn_class = "hostile", - physical = true, - pathfinding = 1, - hp_min = 24, - hp_max = 24, - xp_min = 10, - xp_max = 10, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.95, 0.4}, - visual = "mesh", - mesh = "mobs_mc_villager.b3d", - textures = { { - "mobs_mc_evoker.png", - "blank.png", --no hat - -- TODO: Attack glow - } }, - visual_size = {x=2.75, y=2.75}, - makes_footstep_sound = true, - damage = 6, - walk_velocity = 0.2, - run_velocity = 1.4, - group_attack = true, - attack_type = "dogfight", - -- Summon vexes - custom_attack = function(self, to_attack) - local r = pr:next(2,4) - local basepos = self.object:get_pos() - basepos.y = basepos.y + 1 - for i=1, r do - local spawnpos = vector.add(basepos, minetest.yaw_to_dir(pr:next(0,360))) - local vex = minetest.add_entity(spawnpos, "mobs_mc:vex") - local ent = vex:get_luaentity() - -- Mark vexes as summoned and start their life clock (they take damage it reaches 0) - ent._summoned = true - ent._lifetimer = pr:next(33, 108) - end - end, - shoot_interval = 15, - passive = false, - drops = { - {name = "mcl_core:emerald", - chance = 1, - min = 0, - max = 1, - looting = "common",}, - {name = "mcl_totems:totem", - chance = 1, - min = 1, - max = 1,}, - }, - -- TODO: sounds - animation = { - stand_speed = 25, - stand_start = 40, - stand_end = 59, - walk_speed = 25, - walk_start = 0, - walk_end = 40, - run_speed = 25, - shoot_start = 120, --magic arm swinging - shoot_end = 140, - die_speed = 15, - die_start = 190, - die_end = 200, - die_loop = false, - }, - view_range = 16, - fear_height = 4, -}) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:evoker", S("Evoker"), "mobs_mc_spawn_icon_evoker.png", 0) diff --git a/mods/ENTITIES/mobs_mc/villager_illusioner.lua b/mods/ENTITIES/mobs_mc/villager_illusioner.lua deleted file mode 100644 index 4af0c4024..000000000 --- a/mods/ENTITIES/mobs_mc/villager_illusioner.lua +++ /dev/null @@ -1,64 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") -local mod_bows = minetest.get_modpath("mcl_bows") ~= nil - -mcl_mobs:register_mob("mobs_mc:illusioner", { - description = S("Illusioner"), - type = "monster", - spawn_class = "hostile", - attack_type = "shoot", - shoot_interval = 2.5, - shoot_offset = 1.5, - arrow = "mcl_bows:arrow_entity", - shoot_arrow = function(self, pos, dir) - if mod_bows then - -- 1-4 damage per arrow - local dmg = math.random(1, 4) - mcl_bows.shoot_arrow("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) - end - end, - hp_min = 32, - hp_max = 32, - xp_min = 6, - xp_max = 6, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, - visual = "mesh", - mesh = "mobs_mc_illusioner.b3d", - textures = { { - "mobs_mc_illusionist.png", - "mobs_mc_illusionist.png", --hat - "mcl_bows_bow.png", - }, }, - sounds = { - -- TODO: more sounds - distance = 16, - }, - visual_size = {x=2.75, y=2.75}, - walk_velocity = 0.6, - run_velocity = 2, - jump = true, - animation = { - stand_speed = 25, - stand_start = 40, - stand_end = 59, - walk_speed = 25, - walk_start = 0, - walk_end = 40, - run_speed = 25, - shoot_start = 150, - shoot_end = 170, - die_speed = 15, - die_start = 170, - die_end = 180, - die_loop = false, - -- 120-140 magic arm swinging, 140-150 transition between magic to bow shooting - }, - view_range = 16, - fear_height = 4, -}) - -mcl_mobs:register_egg("mobs_mc:illusioner", S("Illusioner"), "mobs_mc_spawn_icon_illusioner.png", 0) diff --git a/mods/ENTITIES/mobs_mc/villager_vindicator.lua b/mods/ENTITIES/mobs_mc/villager_vindicator.lua deleted file mode 100644 index 0ed611899..000000000 --- a/mods/ENTITIES/mobs_mc/villager_vindicator.lua +++ /dev/null @@ -1,75 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### VINDICATOR ---################### - - -mcl_mobs:register_mob("mobs_mc:vindicator", { - description = S("Vindicator"), - type = "monster", - spawn_class = "hostile", - physical = false, - pathfinding = 1, - hp_min = 24, - hp_max = 24, - xp_min = 6, - xp_max = 6, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, - visual = "mesh", - mesh = "mobs_mc_vindicator.b3d", - textures = { - { - "mobs_mc_vindicator.png", - "blank.png", --no hat - "default_tool_steelaxe.png", - -- TODO: Glow when attacking (mobs_mc_vindicator.png) - }, - }, - visual_size = {x=2.75, y=2.75}, - makes_footstep_sound = true, - damage = 13, - reach = 2, - walk_velocity = 1.2, - run_velocity = 2.4, - attack_type = "dogfight", - drops = { - {name = "mcl_core:emerald", - chance = 1, - min = 0, - max = 1, - looting = "common",}, - {name = "mcl_tools:axe_iron", - chance = 100 / 8.5, - min = 1, - max = 1, - looting = "rare",}, - }, - -- TODO: sounds - animation = { - stand_speed = 25, - stand_start = 40, - stand_end = 59, - walk_speed = 25, - walk_start = 0, - walk_end = 40, - run_speed = 25, - punch_speed = 25, - punch_start = 90, - punch_end = 110, - die_speed = 15, - die_start = 170, - die_end = 180, - die_loop = false, - }, - view_range = 16, - fear_height = 4, -}) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:vindicator", S("Vindicator"), "mobs_mc_spawn_icon_vindicator.png", 0) diff --git a/mods/ENTITIES/mobs_mc/villager_zombie.lua b/mods/ENTITIES/mobs_mc/villager_zombie.lua deleted file mode 100644 index 3dece8c29..000000000 --- a/mods/ENTITIES/mobs_mc/villager_zombie.lua +++ /dev/null @@ -1,245 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### ZOMBIE VILLAGER ---################### - -local professions = { - farmer = "mobs_mc_villager_farmer.png", - fisherman = "mobs_mc_villager_farmer.png", - fletcher = "mobs_mc_villager_farmer.png", - shepherd = "mobs_mc_villager_farmer.png", - librarian = "mobs_mc_villager_librarian.png", - cartographer = "mobs_mc_villager_librarian.png", - armorer = "mobs_mc_villager_smith.png", - leatherworker = "mobs_mc_villager_butcher.png", - butcher = "mobs_mc_villager_butcher.png", - weapon_smith = "mobs_mc_villager_smith.png", - tool_smith = "mobs_mc_villager_smith.png", - cleric = "mobs_mc_villager_priest.png", - nitwit = "mobs_mc_villager.png", -} - -mcl_mobs:register_mob("mobs_mc:villager_zombie", { - description = S("Zombie Villager"), - type = "monster", - spawn_class = "hostile", - hp_min = 20, - hp_max = 20, - xp_min = 5, - xp_max = 5, - breath_max = -1, - armor = {undead = 90, fleshy = 90}, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, - visual = "mesh", - mesh = "mobs_mc_villager_zombie.b3d", - textures = { - {"mobs_mc_empty.png", "mobs_mc_zombie_butcher.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_farmer.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_librarian.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_priest.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_smith.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_villager.png", "mobs_mc_empty.png"}, - }, - visual_size = {x=2.75, y=2.75}, - makes_footstep_sound = true, - damage = 3, - reach = 2, - walk_velocity = 1.2, - run_velocity = 2.4, - attack_type = "dogfight", - group_attack = true, - drops = { - {name = "mcl_mobitems:rotten_flesh", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - {name = "mcl_core:iron_ingot", - chance = 120, -- 2.5% / 3 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 3,}, - {name = "mcl_farming:carrot_item", - chance = 120, -- 2.5% / 3 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 3,}, - {name = "mcl_farming:potato_item", - chance = 120, -- 2.5% / 3 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 3,}, - }, - sounds = { - random = "mobs_mc_zombie_growl", - war_cry = "mobs_mc_zombie_growl", - death = "mobs_mc_zombie_death", - damage = "mobs_mc_zombie_hurt", - distance = 16, - }, - animation = { - speed_normal = 25, - speed_run = 50, - stand_start = 20, - stand_end = 40, - walk_start = 0, - walk_end = 20, - run_start = 0, - run_end = 20, - }, - on_rightclick = function(self, clicker) - if not self._curing and clicker and clicker:is_player() then - local wielditem = clicker:get_wielded_item() - -- ToDo: Only cure if zombie villager has the weakness effect - if wielditem:get_name() == "mcl_core:apple_gold" then - wielditem:take_item() - clicker:set_wielded_item(wielditem) - self._curing = math.random(3 * 60, 5 * 60) - self.shaking = true - end - end - end, - do_custom = function(self, dtime) - if self._curing then - self._curing = self._curing - dtime - local obj = self.object - if self._curing <= 0 then - local villager_obj = minetest.add_entity(obj:get_pos(), "mobs_mc:villager") - local villager = villager_obj:get_luaentity() - local yaw = obj:get_yaw() - villager_obj:set_yaw(yaw) - villager.target_yaw = yaw - villager.nametag = self.nametag - local texture = self.base_texture[1]:gsub("zombie", "villager") - if texture == "mobs_mc_villager_villager.png" then - texture = "mobs_mc_villager.png" - end - local textures = {texture} - villager.base_texture = textures - villager_obj:set_properties({textures = textures}) - local matches = {} - for prof, tex in pairs(professions) do - if texture == tex then - table.insert(matches, prof) - end - end - villager._profession = matches[math.random(#matches)] - self._curing = nil - mcl_burning.extinguish(obj) - obj:remove() - return false - end - end - end, - sunlight_damage = 2, - ignited_by_sunlight = true, - view_range = 16, - fear_height = 4, - harmed_by_heal = true, -}) - -mcl_mobs:spawn_specific( -"mobs_mc:villager_zombie", -"overworld", -"ground", -{ -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"Desert", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -}, -0, -7, -30, -4090, -4, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) ---mcl_mobs:spawn_specific("mobs_mc:villager_zombie", "overworld", "ground", 0, 7, 30, 60000, 4, mcl_vars.mg_overworld_min, mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0) diff --git a/mods/ENTITIES/mobs_mc/witch.lua b/mods/ENTITIES/mobs_mc/witch.lua deleted file mode 100644 index f61fdb2d1..000000000 --- a/mods/ENTITIES/mobs_mc/witch.lua +++ /dev/null @@ -1,109 +0,0 @@ ---MCmobs v0.2 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### WITCH ---################### - - - - -mcl_mobs:register_mob("mobs_mc:witch", { - description = S("Witch"), - type = "monster", - spawn_class = "hostile", - hp_min = 26, - hp_max = 26, - xp_min = 5, - xp_max = 5, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, - visual = "mesh", - mesh = "mobs_mc_witch.b3d", - textures = { - {"mobs_mc_witch.png"}, - }, - visual_size = {x=2.75, y=2.75}, - makes_footstep_sound = true, - damage = 2, - reach = 2, - walk_velocity = 1.2, - run_velocity = 2.4, - pathfinding = 1, - group_attack = true, - attack_type = "dogshoot", - arrow = "mobs_mc:potion_arrow", - shoot_interval = 2.5, - shoot_offset = 1, - dogshoot_switch = 1, - dogshoot_count_max =1.8, - max_drops = 3, - drops = { - {name = "mcl_potions:glass_bottle", chance = 8, min = 0, max = 2, looting = "common",}, - {name = "mcl_nether:glowstone_dust", chance = 8, min = 0, max = 2, looting = "common",}, - {name = "mcl_mobitems:gunpowder", chance = 8, min = 0, max = 2, looting = "common",}, - {name = "mesecons:redstone", chance = 8, min = 0, max = 2, looting = "common",}, - {name = "mcl_mobitems:spider_eye", chance = 8, min = 0, max = 2, looting = "common",}, - {name = "mcl_core:sugar", chance = 8, min = 0, max = 2, looting = "common",}, - {name = "mcl_core:stick", chance = 4, min = 0, max = 2, looting = "common",}, - }, - -- TODO: sounds - animation = { - speed_normal = 30, - speed_run = 60, - stand_start = 0, - stand_end = 0, - walk_start = 0, - walk_end = 40, - run_start = 0, - run_end = 40, - hurt_start = 85, - hurt_end = 115, - death_start = 117, - death_end = 145, - shoot_start = 50, - shoot_end = 82, - }, - view_range = 16, - fear_height = 4, -}) - --- potion projectile (EXPERIMENTAL) -mcl_mobs:register_arrow("mobs_mc:potion_arrow", { - visual = "sprite", - visual_size = {x = 0.5, y = 0.5}, - --textures = {"vessels_glass_bottle.png"}, --TODO fix to else if default - textures = {"mcl_potions_dragon_breath.png"}, - velocity = 6, - - -- direct hit, no fire... just plenty of pain - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 2}, - }, nil) - end, - - hit_mob = function(self, mob) - mob:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 2}, - }, nil) - end, - - -- node hit, bursts into flame - hit_node = function(self, pos, node) - --TODO - end -}) - --- TODO: Spawn when witch works properly <- eventually -j4i ---mcl_mobs:spawn_specific("mobs_mc:witch", { "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_flowers:fern", "mcl_core:vine" }, {"air"}, 0, minetest.LIGHT_MAX-6, 12, 20000, 2, mobs_mc.water_level-6, mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:witch", S("Witch"), "mobs_mc_spawn_icon_witch.png", 0, true) - -mcl_wip.register_wip_item("mobs_mc:witch") diff --git a/mods/ENTITIES/mobs_mc/wither.lua b/mods/ENTITIES/mobs_mc/wither.lua deleted file mode 100644 index 3b47d0752..000000000 --- a/mods/ENTITIES/mobs_mc/wither.lua +++ /dev/null @@ -1,120 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### WITHER ---################### - -mcl_mobs:register_mob("mobs_mc:wither", { - description = S("Wither"), - type = "monster", - spawn_class = "hostile", - hp_max = 300, - hp_min = 300, - xp_min = 50, - xp_max = 50, - armor = {undead = 80, fleshy = 100}, - -- This deviates from MC Wiki's size, which makes no sense - collisionbox = {-0.9, 0.4, -0.9, 0.9, 2.45, 0.9}, - visual = "mesh", - mesh = "mobs_mc_wither.b3d", - textures = { - {"mobs_mc_wither.png"}, - }, - visual_size = {x=4, y=4}, - makes_footstep_sound = true, - view_range = 16, - fear_height = 4, - walk_velocity = 2, - run_velocity = 4, - sounds = { - shoot_attack = "mobs_mc_ender_dragon_shoot", - attack = "mobs_mc_ender_dragon_attack", - -- TODO: sounds - distance = 60, - }, - jump = true, - jump_height = 10, - fly = true, - makes_footstep_sound = false, - dogshoot_switch = 1, - dogshoot_count_max =1, - attack_animals = true, - can_despawn = false, - drops = { - {name = "mcl_mobitems:nether_star", - chance = 1, - min = 1, - max = 1}, - }, - lava_damage = 0, - fire_damage = 0, - attack_type = "dogshoot", - explosion_strength = 8, - dogshoot_stop = true, - arrow = "mobs_mc:wither_skull", - reach = 5, - shoot_interval = 0.5, - shoot_offset = -1, - animation = { - walk_speed = 12, run_speed = 12, stand_speed = 12, - stand_start = 0, stand_end = 20, - walk_start = 0, walk_end = 20, - run_start = 0, run_end = 20, - }, - harmed_by_heal = true, - do_custom = function(self) - if self.health < (self.hp_max / 2) then - self.base_texture = "mobs_mc_wither_half_health.png" - self.fly = false - self.object:set_properties({textures={self.base_texture}}) - self.armor = {undead = 80, fleshy = 80} - end - mcl_bossbars.update_boss(self.object, "Wither", "dark_purple") - end, - on_spawn = function(self) - minetest.sound_play("mobs_mc_wither_spawn", {object=self.object, gain=1.0, max_hear_distance=64}) - end, -}) - -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false - -mcl_mobs:register_arrow("mobs_mc:wither_skull", { - visual = "sprite", - visual_size = {x = 0.75, y = 0.75}, - -- TODO: 3D projectile, replace tetxture - textures = {"mobs_mc_TEMP_wither_projectile.png"}, - velocity = 6, - - -- direct hit - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 0.5, - damage_groups = {fleshy = 8}, - }, nil) - mcl_mobs:boom(self, self.object:get_pos(), 1) - end, - - hit_mob = function(self, mob) - mob:punch(self.object, 1.0, { - full_punch_interval = 0.5, - damage_groups = {fleshy = 8}, - }, nil) - mcl_mobs:boom(self, self.object:get_pos(), 1) - end, - - -- node hit, explode - hit_node = function(self, pos, node) - mcl_mobs:boom(self, pos, 1) - end -}) --- TODO: Add blue wither skull - ---Spawn egg -mcl_mobs:register_egg("mobs_mc:wither", S("Wither"), "mobs_mc_spawn_icon_wither.png", 0, true) - -mcl_wip.register_wip_item("mobs_mc:wither") diff --git a/mods/ENTITIES/mobs_mc/wolf.lua b/mods/ENTITIES/mobs_mc/wolf.lua deleted file mode 100644 index f2232c397..000000000 --- a/mods/ENTITIES/mobs_mc/wolf.lua +++ /dev/null @@ -1,267 +0,0 @@ ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - -local default_walk_chance = 50 - -local pr = PseudoRandom(os.time()*10) - --- Wolf -local wolf = { - description = S("Wolf"), - type = "animal", - spawn_class = "passive", - can_despawn = true, - hp_min = 8, - hp_max = 8, - xp_min = 1, - xp_max = 3, - passive = false, - group_attack = true, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.84, 0.3}, - visual = "mesh", - mesh = "mobs_mc_wolf.b3d", - textures = { - {"mobs_mc_wolf.png"}, - }, - visual_size = {x=3, y=3}, - makes_footstep_sound = true, - sounds = { - attack = "mobs_mc_wolf_bark", - war_cry = "mobs_mc_wolf_growl", - damage = {name = "mobs_mc_wolf_hurt", gain=0.6}, - death = {name = "mobs_mc_wolf_death", gain=0.6}, - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - pathfinding = 1, - floats = 1, - view_range = 16, - walk_chance = default_walk_chance, - walk_velocity = 2, - run_velocity = 3, - damage = 4, - reach = 2, - attack_type = "dogfight", - fear_height = 4, - follow = { "mcl_mobitems:bone" }, - on_rightclick = function(self, clicker) - -- Try to tame wolf (intentionally does NOT use mcl_mobs:feed_tame) - local tool = clicker:get_wielded_item() - - local dog, ent - if tool:get_name() == "mcl_mobitems:bone" then - - minetest.sound_play("mobs_mc_wolf_take_bone", {object=self.object, max_hear_distance=16}, true) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - tool:take_item() - clicker:set_wielded_item(tool) - end - -- 1/3 chance of getting tamed - if pr:next(1, 3) == 1 then - local yaw = self.object:get_yaw() - dog = minetest.add_entity(self.object:get_pos(), "mobs_mc:dog") - dog:set_yaw(yaw) - ent = dog:get_luaentity() - ent.owner = clicker:get_player_name() - -- cornfirm taming - minetest.sound_play("mobs_mc_wolf_bark", {object=dog, max_hear_distance=16}, true) - -- Replace wolf - self.object:remove() - end - end - end, - animation = { - speed_normal = 50, speed_run = 100, - stand_start = 40, stand_end = 45, - walk_start = 0, walk_end = 40, - run_start = 0, run_end = 40, - }, - jump = true, - attacks_monsters = true, - attack_animals = true, - specific_attack = { "player", "mobs_mc:sheep" }, -} - -mcl_mobs:register_mob("mobs_mc:wolf", wolf) - --- Tamed wolf - --- Collar colors -local colors = { - ["unicolor_black"] = "#000000", - ["unicolor_blue"] = "#0000BB", - ["unicolor_dark_orange"] = "#663300", -- brown - ["unicolor_cyan"] = "#01FFD8", - ["unicolor_dark_green"] = "#005B00", - ["unicolor_grey"] = "#C0C0C0", - ["unicolor_darkgrey"] = "#303030", - ["unicolor_green"] = "#00FF01", - ["unicolor_red_violet"] = "#FF05BB", -- magenta - ["unicolor_orange"] = "#FF8401", - ["unicolor_light_red"] = "#FF65B5", -- pink - ["unicolor_red"] = "#FF0000", - ["unicolor_violet"] = "#5000CC", - ["unicolor_white"] = "#FFFFFF", - ["unicolor_yellow"] = "#FFFF00", - - ["unicolor_light_blue"] = "#B0B0FF", -} - -local get_dog_textures = function(color) - if colors[color] then - return {"mobs_mc_wolf_tame.png^(mobs_mc_wolf_collar.png^[colorize:"..colors[color]..":192)"} - else - return nil - end -end - --- Tamed wolf (aka “dog”) -local dog = table.copy(wolf) -dog.can_despawn = false -dog.passive = true -dog.hp_min = 20 -dog.hp_max = 20 --- Tamed wolf texture + red collar -dog.textures = get_dog_textures("unicolor_red") -dog.owner = "" --- TODO: Start sitting by default -dog.order = "roam" -dog.owner_loyal = true -dog.follow_velocity = 3.2 --- Automatically teleport dog to owner -dog.do_custom = mobs_mc.make_owner_teleport_function(12) -dog.follow = { - "mcl_mobitems:rabbit", "mcl_mobitems:cooked_rabbit", - "mcl_mobitems:mutton", "mcl_mobitems:cooked_mutton", - "mcl_mobitems:beef", "mcl_mobitems:cooked_beef", - "mcl_mobitems:chicken", "mcl_mobitems:cooked_chicken", - "mcl_mobitems:porkchop", "mcl_mobitems:cooked_porkchop", - "mcl_mobitems:rotten_flesh", -} -dog.attack_animals = nil -dog.specific_attack = nil - -local is_food = function(itemstring) - return table.indexof(dog.follow, itemstring) ~= -1 -end - -dog.on_rightclick = function(self, clicker) - local item = clicker:get_wielded_item() - - if mcl_mobs:protect(self, clicker) then - return - elseif item:get_name() ~= "" and mcl_mobs:capture_mob(self, clicker, 0, 2, 80, false, nil) then - return - elseif is_food(item:get_name()) then - -- Feed to increase health - local hp = self.health - local hp_add = 0 - -- Use eatable group to determine health boost - local eatable = minetest.get_item_group(item, "eatable") - if eatable > 0 then - hp_add = eatable - elseif item:get_name() == "mcl_mobitems:rotten_flesh" then - hp_add = 4 - else - hp_add = 4 - end - local new_hp = hp + hp_add - if new_hp > self.hp_max then - new_hp = self.hp_max - end - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - self.health = new_hp - return - elseif minetest.get_item_group(item:get_name(), "dye") == 1 then - -- Dye (if possible) - for group, _ in pairs(colors) do - -- Check if color is supported - if minetest.get_item_group(item:get_name(), group) == 1 then - -- Dye collar - local tex = get_dog_textures(group) - if tex then - self.base_texture = tex - self.object:set_properties({ - textures = self.base_texture - }) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - break - end - end - end - else - -- Toggle sitting order - - if not self.owner or self.owner == "" then - -- Huh? This wolf has no owner? Let's fix this! This should never happen. - self.owner = clicker:get_player_name() - end - - local pos = self.object:get_pos() - local particle - if not self.order or self.order == "" or self.order == "sit" then - particle = "mobs_mc_wolf_icon_roam.png" - self.order = "roam" - self.walk_chance = default_walk_chance - self.jump = true - -- TODO: Add sitting model - else - particle = "mobs_mc_wolf_icon_sit.png" - self.order = "sit" - self.walk_chance = 0 - self.jump = false - end - -- Display icon to show current order (sit or roam) - minetest.add_particle({ - pos = vector.add(pos, {x=0,y=1,z=0}), - velocity = {x=0,y=0.2,z=0}, - expirationtime = 1, - size = 4, - texture = particle, - playername = self.owner, - glow = minetest.LIGHT_MAX, - }) - end -end - -mcl_mobs:register_mob("mobs_mc:dog", dog) - --- Spawn -mcl_mobs:spawn_specific( -"mobs_mc:wolf", -"overworld", -"ground", -{ -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"ColdTaiga", -"SunflowerPlains", -"RoofedForest", -"MesaPlateauFM_grasstop", -"ExtremeHillsM", -"BirchForestM", -}, -0, -minetest.LIGHT_MAX+1, -30, -9000, -7, -mobs_mc.water_level+3, -mcl_vars.mg_overworld_max) - -mcl_mobs:register_egg("mobs_mc:wolf", S("Wolf"), "mobs_mc_spawn_icon_wolf.png", 0) diff --git a/mods/ENTITIES/mobs_mc/zombie.lua b/mods/ENTITIES/mobs_mc/zombie.lua deleted file mode 100644 index 640b2ed11..000000000 --- a/mods/ENTITIES/mobs_mc/zombie.lua +++ /dev/null @@ -1,368 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### ZOMBIE ---################### - -local drops_common = { - {name = "mcl_mobitems:rotten_flesh", - chance = 1, - min = 0, - max = 2, - looting = "common",}, - {name = "mcl_core:iron_ingot", - chance = 120, -- 2.5% / 3 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 3,}, - {name = "mcl_farming:carrot_item", - chance = 120, -- 2.5% / 3 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 3,}, - {name = "mcl_farming:potato_item", - chance = 120, -- 2.5% / 3 - min = 1, - max = 1, - looting = "rare", - looting_factor = 0.01 / 3,}, -} - -local drops_zombie = table.copy(drops_common) -table.insert(drops_zombie, { - -- Zombie Head - -- TODO: Only drop if killed by charged creeper - name = "mcl_heads:zombie", - chance = 200, -- 0.5% - min = 1, - max = 1, -}) - -local zombie = { - description = S("Zombie"), - type = "monster", - spawn_class = "hostile", - hp_min = 20, - hp_max = 20, - xp_min = 5, - xp_max = 5, - breath_max = -1, - armor = {undead = 90, fleshy = 90}, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, - visual = "mesh", - mesh = "mobs_mc_zombie.b3d", - textures = { - { - "mobs_mc_empty.png", -- armor - "mobs_mc_zombie.png", -- texture - "mobs_mc_empty.png", -- wielded_item - } - }, - visual_size = {x=3, y=3}, - makes_footstep_sound = true, - sounds = { - random = "mobs_mc_zombie_growl", - war_cry = "mobs_mc_zombie_growl", - death = "mobs_mc_zombie_death", - damage = "mobs_mc_zombie_hurt", - distance = 16, - }, - walk_velocity = .8, - run_velocity = 1.6, - damage = 3, - reach = 2, - fear_height = 4, - pathfinding = 1, - jump = true, - jump_height = 4, - group_attack = { "mobs_mc:zombie", "mobs_mc:baby_zombie", "mobs_mc:husk", "mobs_mc:baby_husk" }, - drops = drops_zombie, - animation = { - speed_normal = 25, speed_run = 50, - stand_start = 40, stand_end = 80, - walk_start = 0, walk_end = 40, - run_start = 0, run_end = 40, - }, - ignited_by_sunlight = true, - sunlight_damage = 2, - view_range = 16, - attack_type = "dogfight", - harmed_by_heal = true, -} - -mcl_mobs:register_mob("mobs_mc:zombie", zombie) - --- Baby zombie. --- A smaller and more dangerous variant of the zombie - -local baby_zombie = table.copy(zombie) -baby_zombie.description = S("Baby Zombie") -baby_zombie.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} -baby_zombie.xp_min = 12 -baby_zombie.xp_max = 12 -baby_zombie.visual_size = {x=zombie.visual_size.x/2, y=zombie.visual_size.y/2} -baby_zombie.walk_velocity = 1.2 -baby_zombie.run_velocity = 2.4 -baby_zombie.child = 1 - -mcl_mobs:register_mob("mobs_mc:baby_zombie", baby_zombie) - --- Husk. --- Desert variant of the zombie -local husk = table.copy(zombie) -husk.description = S("Husk") -husk.textures = { - { - "mobs_mc_empty.png", -- armor - "mobs_mc_husk.png", -- texture - "mobs_mc_empty.png", -- wielded_item - } - } -husk.ignited_by_sunlight = false -husk.sunlight_damage = 0 -husk.drops = drops_common --- TODO: Husks avoid water - -mcl_mobs:register_mob("mobs_mc:husk", husk) - --- Baby husk. --- A smaller and more dangerous variant of the husk -local baby_husk = table.copy(husk) -baby_husk.description = S("Baby Husk") -baby_husk.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} -baby_husk.xp_min = 12 -baby_husk.xp_max = 12 -baby_husk.visual_size = {x=zombie.visual_size.x/2, y=zombie.visual_size.y/2} -baby_husk.walk_velocity = 1.2 -baby_husk.run_velocity = 2.4 -baby_husk.child = 1 - -mcl_mobs:register_mob("mobs_mc:baby_husk", baby_husk) - - --- Spawning - -mcl_mobs:spawn_specific( -"mobs_mc:zombie", -"overworld", -"ground", -{ -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -}, -0, -7, -30, -6000, -4, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) --- Baby zombie is 20 times less likely than regular zombies -mcl_mobs:spawn_specific( -"mobs_mc:baby_zombie", -"overworld", -"ground", -{ -"FlowerForest_underground", -"JungleEdge_underground", -"StoneBeach_underground", -"MesaBryce_underground", -"Mesa_underground", -"RoofedForest_underground", -"Jungle_underground", -"Swampland_underground", -"MushroomIsland_underground", -"BirchForest_underground", -"Plains_underground", -"MesaPlateauF_underground", -"ExtremeHills_underground", -"MegaSpruceTaiga_underground", -"BirchForestM_underground", -"SavannaM_underground", -"MesaPlateauFM_underground", -"Desert_underground", -"Savanna_underground", -"Forest_underground", -"SunflowerPlains_underground", -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", -"Mesa", -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"Jungle", -"Savanna", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"ColdTaiga", -"MushroomIsland", -"IcePlainsSpikes", -"SunflowerPlains", -"IcePlains", -"RoofedForest", -"ExtremeHills+_snowtop", -"MesaPlateauFM_grasstop", -"JungleEdgeM", -"ExtremeHillsM", -"JungleM", -"BirchForestM", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -"JungleEdge", -"SavannaM", -"FlowerForest_beach", -"Forest_beach", -"StoneBeach", -"ColdTaiga_beach_water", -"Taiga_beach", -"Savanna_beach", -"Plains_beach", -"ExtremeHills_beach", -"ColdTaiga_beach", -"Swampland_shore", -"MushroomIslandShore", -"JungleM_shore", -"Jungle_shore", -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", -}, -0, -7, -30, -60000, -4, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - - -mcl_mobs:spawn_specific( -"mobs_mc:husk", -"overworld", -"ground", -{ -"Desert", -}, -0, -7, -30, -6500, -4, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) -mcl_mobs:spawn_specific( -"mobs_mc:baby_husk", -"overworld", -"ground", -{ -"Desert", -}, -0, -7, -30, -65000, -4, -mcl_vars.mg_overworld_min, -mcl_vars.mg_overworld_max) - --- Spawn eggs -mcl_mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0) -mcl_mobs:register_egg("mobs_mc:zombie", S("Zombie"), "mobs_mc_spawn_icon_zombie.png", 0) diff --git a/mods/ENTITIES/mobs_mc/zombiepig.lua b/mods/ENTITIES/mobs_mc/zombiepig.lua deleted file mode 100644 index 3d0b4f183..000000000 --- a/mods/ENTITIES/mobs_mc/zombiepig.lua +++ /dev/null @@ -1,150 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("mobs_mc") - ---################### ---################### ZOMBIE PIGMAN ---################### - - -local pigman = { - description = S("Zombie Pigman"), - -- type="animal", passive=false: This combination is needed for a neutral mob which becomes hostile, if attacked - type = "animal", - passive = false, - spawn_class = "passive", - hp_min = 20, - hp_max = 20, - xp_min = 6, - xp_max = 6, - armor = {undead = 90, fleshy = 90}, - attack_type = "dogfight", - group_attack = { "mobs_mc:pigman", "mobs_mc:baby_pigman" }, - damage = 9, - reach = 2, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, - visual = "mesh", - mesh = "mobs_mc_zombie_pigman.b3d", - textures = { { - "blank.png", --baby - "default_tool_goldsword.png", --sword - "mobs_mc_zombie_pigman.png", --pigman - } }, - visual_size = {x=3, y=3}, - sounds = { - random = "mobs_mc_zombiepig_random", - war_cry = "mobs_mc_zombiepig_war_cry", - death = "mobs_mc_zombiepig_death", - damage = "mobs_mc_zombiepig_hurt", - distance = 16, - }, - jump = true, - makes_footstep_sound = true, - walk_velocity = .8, - run_velocity = 2.6, - pathfinding = 1, - drops = { - {name = "mcl_mobitems:rotten_flesh", - chance = 1, - min = 1, - max = 1, - looting = "common"}, - {name = "mcl_core:gold_nugget", - chance = 1, - min = 0, - max = 1, - looting = "common"}, - {name = "mcl_core:gold_ingot", - chance = 40, -- 2.5% - min = 1, - max = 1, - looting = "rare"}, - {name = "mcl_tools:sword_gold", - chance = 100 / 8.5, - min = 1, - max = 1, - looting = "rare"}, - }, - animation = { - stand_speed = 25, - walk_speed = 25, - run_speed = 50, - stand_start = 40, - stand_end = 80, - walk_start = 0, - walk_end = 40, - run_start = 0, - run_end = 40, - punch_start = 90, - punch_end = 130, - }, - lava_damage = 0, - fire_damage = 0, - fear_height = 4, - view_range = 16, - harmed_by_heal = true, - fire_damage_resistant = true, -} - -mcl_mobs:register_mob("mobs_mc:pigman", pigman) - --- Baby pigman. --- A smaller and more dangerous variant of the pigman - -local baby_pigman = table.copy(pigman) -baby_pigman.description = S("Baby Zombie Pigman") -baby_pigman.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} -baby_pigman.xp_min = 13 -baby_pigman.xp_max = 13 -baby_pigman.visual_size = {x=pigman.visual_size.x/2, y=pigman.visual_size.y/2} -baby_pigman.textures = { { - "mobs_mc_zombie_pigman.png", --baby - "default_tool_goldsword.png", --sword - "mobs_mc_zombie_pigman.png", --pigman -} } -baby_pigman.walk_velocity = 1.2 -baby_pigman.run_velocity = 2.4 -baby_pigman.light_damage = 0 -baby_pigman.child = 1 - -mcl_mobs:register_mob("mobs_mc:baby_pigman", baby_pigman) - --- Regular spawning in the Nether -mcl_mobs:spawn_specific( -"mobs_mc:pigman", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -6000, -3, -mcl_vars.mg_nether_min, -mcl_vars.mg_nether_max) --- Baby zombie is 20 times less likely than regular zombies -mcl_mobs:spawn_specific( -"mobs_mc:baby_pigman", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -100000, -4, -mcl_vars.mg_nether_min, -mcl_vars.mg_nether_max) - --- Spawning in Nether portals in the Overworld ---mobs:spawn_specific("mobs_mc:pigman", {"mcl_portals:portal"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mcl_vars.mg_overworld_min, mcl_vars.mg_overworld_max) - --- spawn eggs -mcl_mobs:register_egg("mobs_mc:pigman", S("Zombie Pigman"), "mobs_mc_spawn_icon_zombie_pigman.png", 0) diff --git a/mods/ENTITIES/modpack.conf b/mods/ENTITIES/modpack.conf deleted file mode 100644 index 07731c775..000000000 --- a/mods/ENTITIES/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = ENTITIES -description = Meta-modpack containing entity-related mods for MineClone 2 diff --git a/mods/ENVIRONMENT/lightning/API.md b/mods/ENVIRONMENT/lightning/API.md deleted file mode 100644 index ad4f0a3b4..000000000 --- a/mods/ENVIRONMENT/lightning/API.md +++ /dev/null @@ -1,31 +0,0 @@ -# lightning -Lightning mod for MineClone2 with the following API: - -## lightning.register_on_strike(function(pos, pos2, objects)) -Custom function called when a lightning strikes. - -* `pos`: impact position -* `pos2`: rounded node position where fire is placed -* `objects`: table with ObjectRefs of all objects within a radius of 3.5 around pos2 - -## lightning.strike(pos) -Let a lightning strike. - -* `pos`: optional, if not given a random pos will be chosen -* `returns`: bool - success if a strike happened - - -### Examples: - -``` -lightning.register_on_strike(function(pos, pos2, objects) - for _, obj in pairs(objects) do - obj:remove() - end - minetest.add_entity(pos, "mobs_mc:sheep") -end) - -minetest.register_on_respawnplayer(function(player) - lightning.strike(player:get_pos()) -end) -``` \ No newline at end of file diff --git a/mods/ENVIRONMENT/lightning/README.md b/mods/ENVIRONMENT/lightning/README.md deleted file mode 100644 index 73782edba..000000000 --- a/mods/ENVIRONMENT/lightning/README.md +++ /dev/null @@ -1,21 +0,0 @@ - -Lightning mod for minetest - - -Copyright (C) 2016 - Auke Kok - -"lightning" 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. - - -Textures: CC-BY-SA-4.0 by sofar - lightning_1.png - lightning_2.png - lightning_3.png - -Sounds: - thunder.1.ogg - CC-BY-SA - hantorio - http://www.freesound.org/people/hantorio/sounds/121945/ - thunder.2.ogg - CC-BY-SA - juskiddink - http://www.freesound.org/people/juskiddink/sounds/101948/ - thunder.3.ogg - CC-BY-SA - IllusiaProductions - http://www.freesound.org/people/IllusiaProductions/sounds/249950/ diff --git a/mods/ENVIRONMENT/lightning/init.lua b/mods/ENVIRONMENT/lightning/init.lua deleted file mode 100644 index 3579316e8..000000000 --- a/mods/ENVIRONMENT/lightning/init.lua +++ /dev/null @@ -1,268 +0,0 @@ ---[[ - -Copyright (C) 2016 - Auke Kok -Adapted by MineClone2 contributors - -"lightning" 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. - ---]] - -local S = minetest.get_translator(minetest.get_current_modname()) - -local get_connected_players = minetest.get_connected_players -local line_of_sight = minetest.line_of_sight -local get_node = minetest.get_node -local set_node = minetest.set_node -local sound_play = minetest.sound_play -local add_particlespawner = minetest.add_particlespawner -local after = minetest.after -local add_entity = minetest.add_entity -local get_objects_inside_radius = minetest.get_objects_inside_radius -local get_item_group = minetest.get_item_group - -lightning = { - interval_low = 17, - interval_high = 503, - range_h = 100, - range_v = 50, - size = 100, - -- disable this to stop lightning mod from striking - auto = true, - on_strike_functions = {}, -} - -local rng = PcgRandom(32321123312123) - -local ps = {} -local ttl = -1 - -local function revertsky(dtime) - if ttl == 0 then - return - end - ttl = ttl - dtime - if ttl > 0 then - return - end - - mcl_weather.skycolor.remove_layer("lightning") - - ps = {} -end - -minetest.register_globalstep(revertsky) - --- lightning strike API - --- See API.md ---[[ - lightning.register_on_strike(function(pos, pos2, objects) - -- code - end) -]] -function lightning.register_on_strike(func) - table.insert(lightning.on_strike_functions, func) -end - --- select a random strike point, midpoint -local function choose_pos(pos) - if not pos then - local playerlist = get_connected_players() - local playercount = table.getn(playerlist) - - -- nobody on - if playercount == 0 then - return nil, nil - end - - local r = rng:next(1, playercount) - local randomplayer = playerlist[r] - pos = randomplayer:get_pos() - - -- avoid striking underground - if pos.y < -20 then - return nil, nil - end - - pos.x = math.floor(pos.x - (lightning.range_h / 2) + rng:next(1, lightning.range_h)) - pos.y = pos.y + (lightning.range_v / 2) - pos.z = math.floor(pos.z - (lightning.range_h / 2) + rng:next(1, lightning.range_h)) - end - - local b, pos2 = line_of_sight(pos, { x = pos.x, y = pos.y - lightning.range_v, z = pos.z }, 1) - - -- nothing but air found - if b then - return nil, nil - end - - local n = get_node({ x = pos2.x, y = pos2.y - 1/2, z = pos2.z }) - if n.name == "air" or n.name == "ignore" then - return nil, nil - end - - return pos, pos2 -end - --- * pos: optional, if not given a random pos will be chosen --- * returns: bool - success if a strike happened -function lightning.strike(pos) - if lightning.auto then - after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike) - end - - local pos2 - pos, pos2 = choose_pos(pos) - - if not pos then - return false - end - local objects = get_objects_inside_radius(pos2, 3.5) - if lightning.on_strike_functions then - for _, func in pairs(lightning.on_strike_functions) do - func(pos, pos2, objects) - end - end -end - -lightning.register_on_strike(function(pos, pos2, objects) - local particle_pos = vector.offset(pos2, 0, (lightning.size / 2) + 0.5, 0) - local particle_size = lightning.size * 10 - local time = 0.2 - add_particlespawner({ - amount = 1, - time = time, - -- make it hit the top of a block exactly with the bottom - minpos = particle_pos, - maxpos = particle_pos, - minexptime = time, - maxexptime = time, - minsize = particle_size, - maxsize = particle_size, - collisiondetection = true, - vertical = true, - -- to make it appear hitting the node that will get set on fire, make sure - -- to make the texture lightning bolt hit exactly in the middle of the - -- texture (e.g. 127/128 on a 256x wide texture) - texture = "lightning_lightning_" .. rng:next(1,3) .. ".png", - glow = minetest.LIGHT_MAX, - }) - - sound_play({ name = "lightning_thunder", gain = 10 }, { pos = pos, max_hear_distance = 500 }, true) - - -- damage nearby objects, transform mobs - for _, obj in pairs(objects) do - local lua = obj:get_luaentity() - if lua and lua._on_strike then - lua._on_strike(lua, pos, pos2, objects) - end - -- remove this when mob API is done - if lua and lua.name == "mobs_mc:pig" then - mcl_util.replace_mob(obj, "mobs_mc:pigman") - elseif lua and lua.name == "mobs_mc:mooshroom" then - if lua.base_texture[1] == "mobs_mc_mooshroom.png" then - lua.base_texture = { "mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } - else - lua.base_texture = { "mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png" } - end - obj:set_properties({ textures = lua.base_texture }) - elseif lua and lua.name == "mobs_mc:villager" then - mcl_util.replace_mob(obj, "mobs_mc:witch") - elseif lua and lua.name == "mobs_mc:creeper" then - mcl_util.replace_mob(obj, "mobs_mc:creeper_charged") - else - mcl_util.deal_damage(obj, 5, { type = "lightning_bolt" }) - end - end - - local playerlist = get_connected_players() - for i = 1, #playerlist do - local player = playerlist[i] - local sky = {} - - sky.bgcolor, sky.type, sky.textures = player:get_sky() - - local name = player:get_player_name() - if ps[name] == nil then - ps[name] = {p = player, sky = sky} - mcl_weather.skycolor.add_layer("lightning", { { r = 255, g = 255, b = 255 } }, true) - mcl_weather.skycolor.active = true - end - end - - -- trigger revert of skybox - ttl = 0.1 - - -- Events caused by the lightning strike: Fire, damage, mob transformations, rare skeleton spawn - - pos2.y = pos2.y + 1/2 - local skeleton_lightning = false - if rng:next(1,100) <= 3 then - skeleton_lightning = true - end - if get_item_group(get_node({ x = pos2.x, y = pos2.y - 1, z = pos2.z }).name, "liquid") < 1 then - if get_node(pos2).name == "air" then - -- Low chance for a lightning to spawn skeleton horse + skeletons - if skeleton_lightning then - add_entity(pos2, "mobs_mc:skeleton_horse") - - local angle, posadd - angle = math.random(0, math.pi*2) - for i=1,3 do - posadd = { x=math.cos(angle),y=0,z=math.sin(angle) } - posadd = vector.normalize(posadd) - local mob = add_entity(vector.add(pos2, posadd), "mobs_mc:skeleton") - if mob then - mob:set_yaw(angle-math.pi/2) - end - angle = angle + (math.pi*2) / 3 - end - - -- Cause a fire - else - set_node(pos2, { name = "mcl_fire:fire" }) - end - end - end -end) - --- if other mods disable auto lightning during initialization, don't trigger the first lightning. -after(5, function(dtime) - if lightning.auto then - after(rng:next(lightning.interval_low, - lightning.interval_high), lightning.strike) - end -end) - -minetest.register_chatcommand("lightning", { - params = "[ ]", - description = S("Let lightning strike at the specified position or yourself"), - privs = { maphack = true }, - func = function(name, param) - local pos = {} - pos.x, pos.y, pos.z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") - pos.x = tonumber(pos.x) - pos.y = tonumber(pos.y) - pos.z = tonumber(pos.z) - if not (pos.x and pos.y and pos.z) then - pos = nil - end - if name == "" and pos == nil then - return false, "No position specified and unknown player" - end - if pos then - lightning.strike(pos) - else - local player = minetest.get_player_by_name(name) - if player then - lightning.strike(player:get_pos()) - else - return false, S("No position specified and unknown player") - end - end - return true - end, -}) diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.de.tr b/mods/ENVIRONMENT/lightning/locale/lightning.de.tr deleted file mode 100644 index a76c6809e..000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.de.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 wurde vom Blitz getroffen. -Let lightning strike at the specified position or yourself=Lassen Sie einen Blitz an die gegebene Position oder auf sich selbst einschlagen. -No position specified and unknown player=Keine Position angegeben und Spieler nicht bekannt diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.es.tr b/mods/ENVIRONMENT/lightning/locale/lightning.es.tr deleted file mode 100644 index 5d207a5c6..000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@ 1 fue alcanzado por un rayo. -Let lightning strike at the specified position or yourself=Deje que un rayo golpee en la posición especificada o sobre usted mismo. -No position specified and unknown player=Ninguna posición especificada y jugador desconocido diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.fr.tr b/mods/ENVIRONMENT/lightning/locale/lightning.fr.tr deleted file mode 100644 index 18c61d51c..000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 a été frappé par la foudre. -Let lightning strike at the specified position or yourself=Laissez la foudre frapper à la position spécifiée ou sur vous-même -No position specified and unknown player=Aucune position spécifiée et joueur inconnu diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr b/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr deleted file mode 100644 index 1b0edbd1f..000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 została trafiona przez piorun. -Let lightning strike at the specified position or yourself=Pozwala by piorun uderzył we wskazaną pozycję lub ciebie -No position specified and unknown player=Nie wskazano pozycji i nieznany gracz diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.ru.tr b/mods/ENVIRONMENT/lightning/locale/lightning.ru.tr deleted file mode 100644 index 68bcf3555..000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 убило молнией. -Let lightning strike at the specified position or yourself=Позволяет молнии бить в заданную позицию или в вас -No position specified and unknown player=Позиция не задана и игрок неизвестен diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.zh_TW.tr b/mods/ENVIRONMENT/lightning/locale/lightning.zh_TW.tr deleted file mode 100644 index 0667e8dc8..000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.zh_TW.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 被閃電擊斃。 -Let lightning strike at the specified position or yourself=讓閃電擊中指定位置或自己 -No position specified and unknown player=未指定位置且玩家未知 diff --git a/mods/ENVIRONMENT/lightning/locale/template.txt b/mods/ENVIRONMENT/lightning/locale/template.txt deleted file mode 100644 index 2c07393f6..000000000 --- a/mods/ENVIRONMENT/lightning/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.= -Let lightning strike at the specified position or yourself= -No position specified and unknown player= diff --git a/mods/ENVIRONMENT/lightning/mod.conf b/mods/ENVIRONMENT/lightning/mod.conf deleted file mode 100644 index 346a4a0b9..000000000 --- a/mods/ENVIRONMENT/lightning/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = lightning -author = sofar -description = A mod that adds thunder and lightning effects. -depends = mcl_fire - diff --git a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.1.ogg b/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.1.ogg deleted file mode 100644 index 18e011957..000000000 Binary files a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.1.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.2.ogg b/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.2.ogg deleted file mode 100644 index c9e1b0d4f..000000000 Binary files a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.2.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.3.ogg b/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.3.ogg deleted file mode 100644 index 3690d200b..000000000 Binary files a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.3.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_1.png b/mods/ENVIRONMENT/lightning/textures/lightning_lightning_1.png deleted file mode 100644 index 37af59e04..000000000 Binary files a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_2.png b/mods/ENVIRONMENT/lightning/textures/lightning_lightning_2.png deleted file mode 100644 index 7bab36b74..000000000 Binary files a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_3.png b/mods/ENVIRONMENT/lightning/textures/lightning_lightning_3.png deleted file mode 100644 index f090529ec..000000000 Binary files a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_3.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_moon/API.md b/mods/ENVIRONMENT/mcl_moon/API.md deleted file mode 100644 index 553df0de6..000000000 --- a/mods/ENVIRONMENT/mcl_moon/API.md +++ /dev/null @@ -1,15 +0,0 @@ -# `mcl_moon` API -This API has one function: - -## `mcl_moon.get_moon_phase()` - -Returns current moon phase (0-7). - -* 0 = Full Moon -* 1 = Waning Gibbous -* 2 = Last Quarter -* 3 = Waning Crescent -* 4 = New Moon -* 5 = Waxing Crescent -* 6 = First Quarter -* 7 = Waxing Gibbous diff --git a/mods/ENVIRONMENT/mcl_moon/init.lua b/mods/ENVIRONMENT/mcl_moon/init.lua deleted file mode 100644 index 200c6ca41..000000000 --- a/mods/ENVIRONMENT/mcl_moon/init.lua +++ /dev/null @@ -1,62 +0,0 @@ -local MOON_PHASES = 8 -local MOON_PHASES_HALF = MOON_PHASES / 2 -local SHEET_W = 4 -local SHEET_H = 2 - --- Randomize initial moon phase, based on map seed -local mg_seed = minetest.get_mapgen_setting("seed") -local rand = PseudoRandom(mg_seed) -local phase_offset = rand:next(0, MOON_PHASES - 1) - -minetest.log("info", "[mcl_moon] Moon phase offset of this world: "..phase_offset) - -mcl_moon = {} -mcl_moon.MOON_PHASES = MOON_PHASES - -function mcl_moon.get_moon_phase() - local after_midday = 0 - -- Moon phase changes after midday - local tod = minetest.get_timeofday() - if tod > 0.5 then - after_midday = 1 - end - return (minetest.get_day_count() + phase_offset + after_midday) % MOON_PHASES -end - -local function get_moon_texture() - local phase = mcl_moon.get_moon_phase() - local x = phase % MOON_PHASES_HALF - local y - if phase >= MOON_PHASES_HALF then - y = 1 - else - y = 0 - end - return "mcl_moon_moon_phases.png^[sheet:"..SHEET_W.."x"..SHEET_H..":"..x..","..y -end - -local timer = 0 -local last_reported_phase = nil -minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < 8 then - return - end - timer = 0 - local phase = mcl_moon.get_moon_phase() - -- No-op when moon phase didn't change yet - if last_reported_phase == phase then - return - end - minetest.log("info", "[mcl_moon] New moon phase: "..phase) - last_reported_phase = phase - local moon_arg = {texture = get_moon_texture()} - local players = minetest.get_connected_players() - for p=1, #players do - players[p]:set_moon(moon_arg) - end -end) - -minetest.register_on_joinplayer(function(player) - player:set_moon({texture = get_moon_texture(), scale=3.75}) -end) diff --git a/mods/ENVIRONMENT/mcl_moon/mod.conf b/mods/ENVIRONMENT/mcl_moon/mod.conf deleted file mode 100644 index 92541d72c..000000000 --- a/mods/ENVIRONMENT/mcl_moon/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_moon -author = Wuzzy -description = Adds moon phases to the game diff --git a/mods/ENVIRONMENT/mcl_moon/textures/mcl_moon_moon_phases.png b/mods/ENVIRONMENT/mcl_moon/textures/mcl_moon_moon_phases.png deleted file mode 100644 index d2ee963a9..000000000 Binary files a/mods/ENVIRONMENT/mcl_moon/textures/mcl_moon_moon_phases.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_void_damage/init.lua b/mods/ENVIRONMENT/mcl_void_damage/init.lua deleted file mode 100644 index 084028dd1..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/init.lua +++ /dev/null @@ -1,87 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) ---local enable_damage = minetest.settings:get_bool("enable_damage") - -local pos_to_dim = mcl_worlds.pos_to_dimension -local dim_change = mcl_worlds.dimension_change -local is_in_void = mcl_worlds.is_in_void -local get_spawn_pos = mcl_spawn.get_player_spawn_pos -local send_chat = minetest.chat_send_player -local get_connected = minetest.get_connected_players - -local voidtimer = 0 -local VOID_DAMAGE_FREQ = 0.5 -local VOID_DAMAGE = 4 - --- Remove entities that fall too deep into the void -minetest.register_on_mods_loaded(function() - -- We do this by overwriting on_step of all entities - for entitystring, def in pairs(minetest.registered_entities) do - local on_step_old = def.on_step - if not on_step_old then - on_step_old = function() end - end - local on_step = function(self, dtime, moveresult) - on_step_old(self, dtime, moveresult) - local obj = self.object - local pos = obj:get_pos() - -- Old on_step function might have deleted object, - -- so we delete it - if not pos then - return - end - - if not self._void_timer then - self._void_timer = 0 - end - self._void_timer = self._void_timer + dtime - if self._void_timer <= VOID_DAMAGE_FREQ then - return - end - self._void_timer = 0 - - local _, void_deadly = is_in_void(pos) - if void_deadly then - --local ent = obj:get_luaentity() - obj:remove() - return - end - end - def.on_step = on_step - minetest.register_entity(":"..entitystring, def) - end -end) - --- Hurt players or teleport them back to spawn if they are too deep in the void -minetest.register_globalstep(function(dtime) - voidtimer = voidtimer + dtime - if voidtimer > VOID_DAMAGE_FREQ then - voidtimer = 0 - local enable_damage = minetest.settings:get_bool("enable_damage") - local players = get_connected() - for p=1, #players do - local player = players[p] - local pos = player:get_pos() - local _, void_deadly = is_in_void(pos) - if void_deadly then - local immortal_val = player:get_armor_groups().immortal - local is_immortal = false - if immortal_val and immortal_val > 0 then - is_immortal = true - end - if is_immortal or not enable_damage then - -- If damage is disabled, we can't kill players. - -- So we just teleport the player back to spawn. - local spawn = get_spawn_pos(player) - player:set_pos(spawn) - dim_change(player, pos_to_dim(spawn)) - send_chat(player:get_player_name(), S("The void is off-limits to you!")) - elseif enable_damage and not is_immortal then - -- Damage enabled, not immortal: Deal void damage (4 HP / 0.5 seconds) - if player:get_hp() > 0 then - mcl_util.deal_damage(player, VOID_DAMAGE, {type = "out_of_world"}) - end - end - end - end - end -end) diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.de.tr b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.de.tr deleted file mode 100644 index 19ef90653..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_void_damage -The void is off-limits to you!=Die Leere ist für Sie tabu! -@1 fell into the endless void.=@1 fiel in die endlose Leere. diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.es.tr b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.es.tr deleted file mode 100644 index 73d7d065b..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_void_damage -The void is off-limits to you!=¡El vacío está fuera de tus límites! -@1 fell into the endless void.=@1 cayó en el vacío infinito. diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.fr.tr b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.fr.tr deleted file mode 100644 index 515d1c999..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.fr.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_void_damage -The void is off-limits to you!=Le vide vous est interdit! -@1 fell into the endless void.=@1 est tombé dans le vide sans fin. diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.pl.tr b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.pl.tr deleted file mode 100644 index c943d3e67..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.pl.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_void_damage -The void is off-limits to you!=Otchłań jest poza twoim zasięgiem! -@1 fell into the endless void.=@1 spadła w bezkresną otchłań. diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.ru.tr b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.ru.tr deleted file mode 100644 index 35feb9684..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.ru.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_void_damage -The void is off-limits to you!=Пустота запрещена для вас! -@1 fell into the endless void.=@1 упал(а) в бесконечную пустоту. diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.zh_TW.tr b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.zh_TW.tr deleted file mode 100644 index 515e83fcc..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.zh_TW.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_void_damage -The void is off-limits to you!=你不可以進入虛空! -@1 fell into the endless void.=@1 掉到世界外面了。 diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/template.txt b/mods/ENVIRONMENT/mcl_void_damage/locale/template.txt deleted file mode 100644 index db9050e2f..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/locale/template.txt +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_void_damage -The void is off-limits to you!= -@1 fell into the endless void.= diff --git a/mods/ENVIRONMENT/mcl_void_damage/mod.conf b/mods/ENVIRONMENT/mcl_void_damage/mod.conf deleted file mode 100644 index 1358e5217..000000000 --- a/mods/ENVIRONMENT/mcl_void_damage/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_void_damage -author = Wuzzy -description = Deal damage to entities stuck in the deep void -depends = mcl_worlds diff --git a/mods/ENVIRONMENT/mcl_weather/README.md b/mods/ENVIRONMENT/mcl_weather/README.md deleted file mode 100644 index 08f748dfb..000000000 --- a/mods/ENVIRONMENT/mcl_weather/README.md +++ /dev/null @@ -1,47 +0,0 @@ -`mcl_weather` -======================= -Weather mod for MineClone 2. Forked from the `weather_pack` mod by xeranas. - -Weathers included ------------------------ -* rain -* snow -* thunder - -Commands ------------------------ -`weather `, requires `weather_manager` privilege. - -Dependencies ------------------------ -Thunder weather requres [lightning](https://github.com/minetest-mods/lightning) mod. - -Configuration prope, ties ------------------------ -Weather mod for indoor check depends on sunlight propogation check. Some nodes (e.g. glass block) propogates sunlight and thus weather particles will go through it. To change that set `weather_allow_override_nodes=true` in `minetest.conf` file. Be aware that just few nodes will be override and these blocks needs to be re-builded to take effect. Maybe in future other 'cheap' way to check indoor will be available. - -Weather mod mostly relies on particles generation however for some small things ABM may be used. Users which do not want it can disable ABM with property `weather_allow_abm=false`. - -License of source code: ------------------------ -LGPL 2.1+ - -Authors of media files: ------------------------ - -TeddyDesTodes: -Snowflakes licensed under CC-BY-SA 3.0 by from weather branch at https://github.com/TeddyDesTodes/minetest/tree/weather - - * `weather_pack_snow_snowflake1.png` - CC-BY-SA 3.0 - * `weather_pack_snow_snowflake2.png` - CC-BY-SA 3.0 - -xeranas: - - * `weather_pack_rain_raindrop_1.png` - CC-0 - * `weather_pack_rain_raindrop_2.png` - CC-0 - * `weather_pack_rain_raindrop_3.png` - CC-0 - -inchadney (http://freesound.org/people/inchadney/): - - * `weather_rain.ogg` - CC-BY-SA 3.0 (cut from http://freesound.org/people/inchadney/sounds/58835/) - diff --git a/mods/ENVIRONMENT/mcl_weather/init.lua b/mods/ENVIRONMENT/mcl_weather/init.lua deleted file mode 100644 index e13242996..000000000 --- a/mods/ENVIRONMENT/mcl_weather/init.lua +++ /dev/null @@ -1,17 +0,0 @@ -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -mcl_weather = {} - --- If not located then embeded skycolor mod version will be loaded. -if minetest.get_modpath("skycolor") == nil then - dofile(modpath.."/skycolor.lua") -end - -dofile(modpath.."/weather_core.lua") -dofile(modpath.."/snow.lua") -dofile(modpath.."/rain.lua") -dofile(modpath.."/nether_dust.lua") - -if minetest.get_modpath("lightning") then - dofile(modpath.."/thunder.lua") -end diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.de.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.de.tr deleted file mode 100644 index 0fc8330ad..000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Fähigkeit, das Wetter zu beeinflussen -Changes the weather to the specified parameter.=Ändert das Wetter. -Error: No weather specified.=Fehler: Kein Wetter angegeben. -Error: Invalid parameters.=Fehler: Ungültige Parameter. -Error: Duration can't be less than 1 second.=Fehler: Dauer darf nicht weniger als 1 Sekunde sein. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Fehler. Ungültiges Wetter. Benutzen Sie „clear“ (klar), „rain“ (Regen), „snow“ (Schnee) oder „thunder“ (Gewittersturm). -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Wechselt das Wetter zwischem klaren Wetter und Wetter mit Niederschlag (zufällig Regen, Gewittersturm oder Schnee) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.es.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.es.tr deleted file mode 100644 index 396b77f07..000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Da la capacidad de controlar el clima -Changes the weather to the specified parameter.=Cambia el clima al parámetro especificado. -Error: No weather specified.=Error: no se especificó el clima. -Error: Invalid parameters.=Error: parámetros no válidos. -Error: Duration can't be less than 1 second.=Error: la duración no puede ser inferior a 1 segundo. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Error: tiempo especificado no válido. Utilice "clear", "rain", "snow" o "thunder". -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Alterna entre clima despejado y clima con caída (lluvia al azar, tormenta o nieve) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.fr.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.fr.tr deleted file mode 100644 index 6fd0b4b53..000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Donne la capacité de contrôler la météo -Changes the weather to the specified parameter.=Modifie la météo au paramètre spécifié. -Error: No weather specified.=Erreur: Aucune météo spécifiée. -Error: Invalid parameters.=Erreur: Paramètres non valides. -Error: Duration can't be less than 1 second.=Erreur: La durée ne peut pas être inférieure à 1 seconde. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Erreur: Météo non valide spécifiée. Utilisez "clear" (clair), "rain" (pluie), "snow" (neige) ou "thunder" (tonnerre). -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Bascule entre temps clair et temps avec chute (au hasard entre pluie, orage ou neige) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr deleted file mode 100644 index fc4c72a31..000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Daje możliwość kontrolowania pogody -Changes the weather to the specified parameter.=Zmienia pogodę na wskazany parametr -Error: No weather specified.=Błąd: nie wskazano pogody. -Error: Invalid parameters.=Błąd: nieprawidłowy parametr. -Error: Duration can't be less than 1 second.=Błąd: Czas trwania nie może być mniejszy niż 1 sekunda. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Błąd: wskazano nieprawidłową pogodę. Użyj "clear", "rain", "snow" lub "thunder". -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Zmienia pomiędzy czystą pogodą i pogodą z opadami (losowo deszcz, burza lub śnieg) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.ru.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.ru.tr deleted file mode 100644 index 0c3773b7a..000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Предоставляет возможность управлять погодой -Changes the weather to the specified parameter.=Меняет погоду на заданное значение. -Error: No weather specified.=Ошибка: Не указана погода. -Error: Invalid parameters.=Ошибка: Недопустимые параметры. -Error: Duration can't be less than 1 second.=Ошибка: длительность не может быть менее 1 секунды. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Ошибка: Указана неправильная погода. Возможны варианты: “clear” (ясная), “rain” (дождь), “snow” (снег) или “thunder” (гроза). -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Переключает между ясной погодой и осадками (случайно выбирается дождь, грозовой шторм или снег) - diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.zh_TW.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.zh_TW.tr deleted file mode 100644 index 42be7481b..000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.zh_TW.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=賦予控制天氣的能力 -Changes the weather to the specified parameter.=將天氣改為指定的參數。 -Error: No weather specified.=錯誤:未指定天氣。 -Error: Invalid parameters.=錯誤:無效參數。 -Error: Duration can't be less than 1 second.=錯誤:延續時間不可以短於1秒。 -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=錯誤:不明天氣。請使用「clear」、「rain」、「snow」或「thunder」。 -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=在晴朗的天氣和降雨天氣之間切換(隨機選擇雨、雷暴或雪)。 diff --git a/mods/ENVIRONMENT/mcl_weather/locale/template.txt b/mods/ENVIRONMENT/mcl_weather/locale/template.txt deleted file mode 100644 index 03555e473..000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather= -Changes the weather to the specified parameter.= -Error: No weather specified.= -Error: Invalid parameters.= -Error: Duration can't be less than 1 second.= -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.= -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)= diff --git a/mods/ENVIRONMENT/mcl_weather/mod.conf b/mods/ENVIRONMENT/mcl_weather/mod.conf deleted file mode 100644 index 4f1102b7a..000000000 --- a/mods/ENVIRONMENT/mcl_weather/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_weather -author = xeranas -description = Weather and sky handling: Rain, snow, thunderstorm, End and Nether ambience -depends = mcl_init, mcl_worlds -optional_depends = lightning diff --git a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua deleted file mode 100644 index a90c8e96e..000000000 --- a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua +++ /dev/null @@ -1,66 +0,0 @@ -mcl_weather.nether_dust = {} -mcl_weather.nether_dust.particlespawners = {} - -local psdef= { - amount = 150, - time = 0, - minpos = vector.new(-15,-15,-15), - maxpos =vector.new(15,15,15), - minvel = vector.new(-0.3,-0.15,-1), - maxvel = vector.new(0.3,0.15,0.3), - minacc = vector.new(-1,-0.4,-1), - maxacc = vector.new(1,0.4,1), - minexptime = 1, - maxexptime = 10, - minsize = 0.2, - maxsize = 0.7, - collisiondetection = false, - collision_removal = false, - object_collision = false, - vertical = false -} - -local function check_player(player) - local name=player:get_player_name() - if mcl_worlds.has_dust(player:get_pos()) and not mcl_weather.nether_dust.particlespawners[name] then - return true - end -end - -mcl_weather.nether_dust.add_particlespawners = function(player) - local name=player:get_player_name() - mcl_weather.nether_dust.particlespawners[name]={} - psdef.playername = name - psdef.attached = player - psdef.glow = math.random(0,minetest.LIGHT_MAX) - for i=1,3 do - psdef.texture="mcl_particles_nether_dust"..i..".png" - mcl_weather.nether_dust.particlespawners[name][i]=minetest.add_particlespawner(psdef) - end -end - -mcl_weather.nether_dust.delete_particlespawners = function(player) - local name=player:get_player_name() - if mcl_weather.nether_dust.particlespawners[name] then - for i=1,3 do - minetest.delete_particlespawner(mcl_weather.nether_dust.particlespawners[name][i]) - end - mcl_weather.nether_dust.particlespawners[name]=nil - end -end - -mcl_worlds.register_on_dimension_change(function(player, dimension) - if check_player(player) then - return mcl_weather.nether_dust.add_particlespawners(player) - end - mcl_weather.nether_dust.delete_particlespawners(player) -end) - -minetest.register_on_joinplayer(function(player) - if check_player(player) then - mcl_weather.nether_dust.add_particlespawners(player) - end -end) -minetest.register_on_leaveplayer(function(player) - mcl_weather.nether_dust.delete_particlespawners(player) -end) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua deleted file mode 100644 index f0be39f6c..000000000 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ /dev/null @@ -1,274 +0,0 @@ -local PARTICLES_COUNT_RAIN = 800 -local PARTICLES_COUNT_THUNDER = 1200 - -local get_connected_players = minetest.get_connected_players - -mcl_weather.rain = { - -- max rain particles created at time - particles_count = PARTICLES_COUNT_RAIN, - - -- flag to turn on/off extinguish fire for rain - extinguish_fire = true, - - -- flag useful when mixing weathers - raining = false, - - -- keeping last timeofday value (rounded). - -- Defaulted to non-existing value for initial comparing. - sky_last_update = -1, - - init_done = false, -} -local update_sound={} -local vel=math.random(0,3) -local falling_speed=math.random(10,15) -local size = math.random(1,3) -local psdef= { - amount = mcl_weather.rain.particles_count, - time=0, - minpos = vector.new(-15,20,-15), - maxpos = vector.new(15,25,15), - minvel = vector.new(-2,-falling_speed-2,-2), - maxvel = vector.new(2,-falling_speed+2,2), - minacc = vector.new(0,0,0), - maxacc = vector.new(0,-0.5,0), - minexptime = 15, - maxexptime = 30, - minsize = size, - maxsize= size*2, - collisiondetection = true, - collision_removal = true, - vertical = true, -} - -local textures = {"weather_pack_rain_raindrop_1.png", "weather_pack_rain_raindrop_2.png"} - -function mcl_weather.rain.sound_handler(player) - return minetest.sound_play("weather_rain", { - to_player = player:get_player_name(), - loop = true, - }) -end - --- set skybox based on time (uses skycolor api) -function mcl_weather.rain.set_sky_box() - if mcl_weather.state == "rain" then - mcl_weather.skycolor.add_layer( - "weather-pack-rain-sky", - {{r=0, g=0, b=0}, - {r=85, g=86, b=98}, - {r=135, g=135, b=151}, - {r=85, g=86, b=98}, - {r=0, g=0, b=0}}) - mcl_weather.skycolor.active = true - for _, player in pairs(get_connected_players()) do - player:set_clouds({color="#5D5D5FE8"}) - end - end -end - --- no no no NO NO f*.. no. no manual particle creatin' PLS!! this sends EVERY particle over the net. -function mcl_weather.rain.add_rain_particles(player) - mcl_weather.rain.last_rp_count = mcl_weather.rain.particles_count - for k,v in pairs(textures) do - psdef.texture=v - mcl_weather.add_spawner_player(player,"rain"..k,psdef) - end - if l then - update_sound[player:get_player_name()]=true - end -end - --- register player for rain weather. --- basically needs for origin sky reference and rain sound controls. -function mcl_weather.rain.add_player(player) - if mcl_weather.players[player:get_player_name()] == nil then - local player_meta = {} - player_meta.origin_sky = {player:get_sky()} - mcl_weather.players[player:get_player_name()] = player_meta - update_sound[player:get_player_name()]=true - end -end - --- remove player from player list effected by rain. --- be sure to remove sound before removing player otherwise soundhandler reference will be lost. -function mcl_weather.rain.remove_player(player) - local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta and player_meta.origin_sky then - player:set_clouds({color="#FFF0F0E5"}) - mcl_weather.players[player:get_player_name()] = nil - update_sound[player:get_player_name()]=true - end -end - --- adds and removes rain sound depending how much rain particles around player currently exist. --- have few seconds delay before each check to avoid on/off sound too often --- when player stay on 'edge' where sound should play and stop depending from random raindrop appearance. -function mcl_weather.rain.update_sound(player) - if not update_sound[player:get_player_name()] then return end - local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta then - if player_meta.sound_updated and player_meta.sound_updated + 5 > minetest.get_gametime() then - return false - end - - if player_meta.sound_handler then - if mcl_weather.rain.last_rp_count == 0 then - minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) - player_meta.sound_handler = nil - end - elseif mcl_weather.rain.last_rp_count > 0 then - player_meta.sound_handler = mcl_weather.rain.sound_handler(player) - end - - player_meta.sound_updated = minetest.get_gametime() - end - update_sound[player:get_player_name()]=false -end - --- rain sound removed from player. -function mcl_weather.rain.remove_sound(player) - local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta and player_meta.sound_handler then - minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) - player_meta.sound_handler = nil - player_meta.sound_updated = nil - end -end - --- callback function for removing rain -function mcl_weather.rain.clear() - mcl_weather.rain.raining = false - mcl_weather.rain.sky_last_update = -1 - mcl_weather.rain.init_done = false - mcl_weather.rain.set_particles_mode("rain") - mcl_weather.skycolor.remove_layer("weather-pack-rain-sky") - for _, player in pairs(get_connected_players()) do - mcl_weather.rain.remove_sound(player) - mcl_weather.rain.remove_player(player) - mcl_weather.remove_spawners_player(player) - end -end - -minetest.register_globalstep(function(dtime) - if mcl_weather.state ~= "rain" then - return false - end - mcl_weather.rain.make_weather() -end) - -function mcl_weather.rain.make_weather() - if mcl_weather.rain.init_done == false then - mcl_weather.rain.raining = true - mcl_weather.rain.set_sky_box() - mcl_weather.rain.set_particles_mode(mcl_weather.mode) - mcl_weather.rain.init_done = true - end - - for _, player in pairs(get_connected_players()) do - local pos=player:get_pos() - if mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(pos) then - mcl_weather.rain.remove_sound(player) - mcl_weather.remove_spawners_player(player) - else - mcl_weather.rain.add_player(player) - mcl_weather.rain.add_rain_particles(player) - mcl_weather.rain.update_sound(player) - end - end -end - --- Switch the number of raindrops: "thunder" for many raindrops, otherwise for normal raindrops -function mcl_weather.rain.set_particles_mode(mode) - if mode == "thunder" then - psdef.amount=PARTICLES_COUNT_THUNDER - mcl_weather.rain.particles_count = PARTICLES_COUNT_THUNDER - else - psdef.amount=PARTICLES_COUNT_RAIN - mcl_weather.rain.particles_count = PARTICLES_COUNT_RAIN - end -end - -if mcl_weather.allow_abm then - -- ABM for extinguish fire - minetest.register_abm({ - label = "Rain extinguishes fire", - nodenames = {"mcl_fire:fire"}, - interval = 2.0, - chance = 2, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Fire is extinguished if in rain or one of 4 neighbors is in rain - if mcl_weather.rain.raining and mcl_weather.rain.extinguish_fire then - local around = { - { x = 0, y = 0, z = 0 }, - { x = -1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 0, z = -1 }, - { x = 0, y = 0, z = 1 }, - } - for a=1, #around do - local apos = vector.add(pos, around[a]) - if mcl_weather.is_outdoor(apos) then - minetest.remove_node(pos) - minetest.sound_play("fire_extinguish_flame", {pos = pos, max_hear_distance = 8, gain = 0.1}, true) - return - end - end - end - end, - }) - - -- Slowly fill up cauldrons - minetest.register_abm({ - label = "Rain fills cauldrons with water", - nodenames = {"mcl_cauldrons:cauldron", "mcl_cauldrons:cauldron_1", "mcl_cauldrons:cauldron_2"}, - interval = 56.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Rain is equivalent to a water bottle - if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then - if node.name == "mcl_cauldrons:cauldron" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_1"}) - elseif node.name == "mcl_cauldrons:cauldron_1" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_2"}) - elseif node.name == "mcl_cauldrons:cauldron_2" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3"}) - elseif node.name == "mcl_cauldrons:cauldron_1r" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_2r"}) - elseif node.name == "mcl_cauldrons:cauldron_2r" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3r"}) - end - end - end - }) - - -- Wetten the soil - minetest.register_abm({ - label = "Rain hydrates farmland", - nodenames = {"mcl_farming:soil"}, - interval = 22.0, - chance = 3, - action = function(pos, node, active_object_count, active_object_count_wider) - if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then - if node.name == "mcl_farming:soil" then - minetest.set_node(pos, {name="mcl_farming:soil_wet"}) - end - end - end - }) -end - -if mcl_weather.reg_weathers.rain == nil then - mcl_weather.reg_weathers.rain = { - clear = mcl_weather.rain.clear, - light_factor = 0.6, - -- 10min - 20min - min_duration = 600, - max_duration = 1200, - transitions = { - [65] = "none", - [70] = "snow", - [100] = "thunder", - } - } -end diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua deleted file mode 100644 index 7b6183d44..000000000 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ /dev/null @@ -1,255 +0,0 @@ -local mods_loaded = false -local NIGHT_VISION_RATIO = 0.45 - -mcl_weather.skycolor = { - -- Should be activated before do any effect. - active = true, - - -- To skip update interval - force_update = true, - - -- Update interval. - update_interval = 15, - - -- Main sky colors: starts from midnight to midnight. - -- Please do not set directly. Use add_layer instead. - colors = {}, - - -- min value which will be used in color gradient, usualy its first user given color in 'pure' color. - min_val = 0, - - -- number of colors while constructing gradient of user given colors - max_val = 1000, - - -- Table for tracking layer order - layer_names = {}, - - -- To layer to colors table - add_layer = function(layer_name, layer_color, instant_update) - mcl_weather.skycolor.colors[layer_name] = layer_color - table.insert(mcl_weather.skycolor.layer_names, layer_name) - mcl_weather.skycolor.force_update = true - end, - - current_layer_name = function() - return mcl_weather.skycolor.layer_names[#mcl_weather.skycolor.layer_names] - end, - - -- Retrieve layer from colors table - retrieve_layer = function() - local last_layer = mcl_weather.skycolor.current_layer_name() - return mcl_weather.skycolor.colors[last_layer] - end, - - -- Remove layer from colors table - remove_layer = function(layer_name) - for k, name in pairs(mcl_weather.skycolor.layer_names) do - if name == layer_name then - table.remove(mcl_weather.skycolor.layer_names, k) - mcl_weather.skycolor.force_update = true - return - end - end - end, - - -- Wrapper for updating day/night ratio that respects night vision - override_day_night_ratio = function(player, ratio) - local meta = player:get_meta() - local has_night_vision = meta:get_int("night_vision") == 1 - local arg - -- Apply night vision only for dark sky - local is_dark = minetest.get_timeofday() > 0.8 or minetest.get_timeofday() < 0.2 or mcl_weather.state ~= "none" - local pos = player:get_pos() - local dim = mcl_worlds.pos_to_dimension(pos) - if has_night_vision and is_dark and dim ~= "nether" and dim ~= "end" then - if ratio == nil then - arg = NIGHT_VISION_RATIO - else - arg = math.max(ratio, NIGHT_VISION_RATIO) - end - else - arg = ratio - end - player:override_day_night_ratio(arg) - end, - - -- Update sky color. If players not specified update sky for all players. - update_sky_color = function(players) - -- Override day/night ratio as well - players = mcl_weather.skycolor.utils.get_players(players) - for _, player in ipairs(players) do - local pos = player:get_pos() - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "overworld" then - if (mcl_weather.state == "none") then - -- Clear weather - player:set_sky({ - type = "regular", - sky_color = { - day_sky = "#92B9FF", - day_horizon = "#B4D0FF", - dawn_sky = "#B4BAFA", - dawn_horizon = "#BAC1F0", - night_sky = "#006AFF", - night_horizon = "#4090FF", - }, - clouds = true, - }) - player:set_sun({visible = true, sunrise_visible = true}) - player:set_moon({visible = true}) - player:set_stars({visible = true}) - mcl_weather.skycolor.override_day_night_ratio(player, nil) - else - -- Weather skies - local day_color = mcl_weather.skycolor.get_sky_layer_color(0.5) - local dawn_color = mcl_weather.skycolor.get_sky_layer_color(0.75) - local night_color = mcl_weather.skycolor.get_sky_layer_color(0) - player:set_sky({ type = "regular", - sky_color = { - day_sky = day_color, - day_horizon = day_color, - dawn_sky = dawn_color, - dawn_horizon = dawn_color, - night_sky = night_color, - night_horizon = night_color, - }, - clouds = true, - }) - player:set_sun({visible = false, sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - - local lf = mcl_weather.get_current_light_factor() - if mcl_weather.skycolor.current_layer_name() == "lightning" then - mcl_weather.skycolor.override_day_night_ratio(player, 1) - elseif lf then - local w = minetest.get_timeofday() - local light = (w * (lf*2)) - if light > 1 then - light = 1 - (light - 1) - end - light = (light * lf) + 0.15 - mcl_weather.skycolor.override_day_night_ratio(player, light) - else - mcl_weather.skycolor.override_day_night_ratio(player, nil) - end - end - elseif dim == "end" then - local t = "mcl_playerplus_end_sky.png" - player:set_sky({ type = "skybox", - base_color = "#000000", - textures = {t,t,t,t,t,t}, - clouds = false, - }) - player:set_sun({visible = false , sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - mcl_weather.skycolor.override_day_night_ratio(player, 0.5) - elseif dim == "nether" then - player:set_sky({ type = "plain", - base_color = "#300808", - clouds = false, - }) - player:set_sun({visible = false , sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - mcl_weather.skycolor.override_day_night_ratio(player, nil) - elseif dim == "void" then - player:set_sky({ type = "plain", - base_color = "#000000", - clouds = false, - }) - player:set_sun({visible = false, sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - end - end - end, - - -- Returns current layer color in {r, g, b} format - get_sky_layer_color = function(timeofday) - if #mcl_weather.skycolor.layer_names == 0 then - return nil - end - - -- min timeofday value 0; max timeofday value 1. So sky color gradient range will be between 0 and 1 * mcl_weather.skycolor.max_val. - local rounded_time = math.floor(timeofday * mcl_weather.skycolor.max_val) - local color = mcl_weather.skycolor.utils.convert_to_rgb(mcl_weather.skycolor.min_val, mcl_weather.skycolor.max_val, rounded_time, mcl_weather.skycolor.retrieve_layer()) - return color - end, - - utils = { - convert_to_rgb = function(minval, maxval, current_val, colors) - local max_index = #colors - 1 - local val = (current_val-minval) / (maxval-minval) * max_index + 1.0 - local index1 = math.floor(val) - local index2 = math.min(math.floor(val)+1, max_index + 1) - local f = val - index1 - local c1 = colors[index1] - local c2 = colors[index2] - return {r=math.floor(c1.r + f*(c2.r - c1.r)), g=math.floor(c1.g + f*(c2.g-c1.g)), b=math.floor(c1.b + f*(c2.b - c1.b))} - end, - - -- Simply getter. Ether returns user given players list or get all connected players if none provided - get_players = function(players) - if players == nil or #players == 0 then - if mods_loaded then - players = minetest.get_connected_players() - elseif players == nil then - players = {} - end - end - return players - end, - - -- Returns first player sky color. I assume that all players are in same color layout. - get_current_bg_color = function() - local players = mcl_weather.skycolor.utils.get_players(nil) - if players[1] then - return players[1]:get_sky() - end - return nil - end - }, - -} - -local timer = 0 -minetest.register_globalstep(function(dtime) - if mcl_weather.skycolor.active ~= true or #minetest.get_connected_players() == 0 then - return - end - - if mcl_weather.skycolor.force_update then - mcl_weather.skycolor.update_sky_color() - mcl_weather.skycolor.force_update = false - return - end - - -- regular updates based on iterval - timer = timer + dtime; - if timer >= mcl_weather.skycolor.update_interval then - mcl_weather.skycolor.update_sky_color() - timer = 0 - end - -end) - -local function initsky(player) - if (mcl_weather.skycolor.active) then - mcl_weather.skycolor.force_update = true - end - - player:set_clouds(mcl_worlds:get_cloud_parameters() or {height=mcl_worlds.layer_to_y(127), speed={x=-2, z=0}, thickness=4, color="#FFF0FEF"}) -end - -minetest.register_on_joinplayer(initsky) -minetest.register_on_respawnplayer(initsky) - -mcl_worlds.register_on_dimension_change(function(player) - mcl_weather.skycolor.update_sky_color({player}) -end) - -minetest.register_on_mods_loaded(function() - mods_loaded = true -end) diff --git a/mods/ENVIRONMENT/mcl_weather/snow.lua b/mods/ENVIRONMENT/mcl_weather/snow.lua deleted file mode 100644 index a55428996..000000000 --- a/mods/ENVIRONMENT/mcl_weather/snow.lua +++ /dev/null @@ -1,98 +0,0 @@ -local get_connected_players = minetest.get_connected_players - -mcl_weather.snow = {} - -mcl_weather.snow.particles_count = 15 -mcl_weather.snow.init_done = false - -local psdef= { - amount = 99, - time = 0, --stay on til we turn it off - minpos = vector.new(-25,20,-25), - maxpos =vector.new(25,25,25), - minvel = vector.new(-0.2,-1,-0.2), - maxvel = vector.new(0.2,-4,0.2), - minacc = vector.new(0,-1,0), - maxacc = vector.new(0,-4,0), - minexptime = 15, - maxexptime = 30, - minsize = 0.5, - maxsize = 5, - collisiondetection = true, - collision_removal = true, - object_collision = true, - vertical = true, - glow = 1 -} - -function mcl_weather.snow.set_sky_box() - mcl_weather.skycolor.add_layer( - "weather-pack-snow-sky", - {{r=0, g=0, b=0}, - {r=85, g=86, b=86}, - {r=135, g=135, b=135}, - {r=85, g=86, b=86}, - {r=0, g=0, b=0}}) - mcl_weather.skycolor.active = true - for _, player in pairs(get_connected_players()) do - player:set_clouds({color="#ADADADE8"}) - end - mcl_weather.skycolor.active = true -end - -function mcl_weather.snow.clear() - mcl_weather.skycolor.remove_layer("weather-pack-snow-sky") - mcl_weather.snow.init_done = false - mcl_weather.remove_all_spawners() -end - --- Simple random texture getter -function mcl_weather.snow.get_texture() - return "weather_pack_snow_snowflake"..math.random(1,2)..".png" -end - -local timer = 0 -minetest.register_globalstep(function(dtime) - if mcl_weather.state ~= "snow" then - return false - end - - timer = timer + dtime; - if timer >= 0.5 then - timer = 0 - else - return - end - - if mcl_weather.snow.init_done == false then - mcl_weather.snow.set_sky_box() - mcl_weather.snow.init_done = true - end - - for _, player in pairs(get_connected_players()) do - if mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(player:get_pos()) then - mcl_weather.remove_spawners_player(player) - else - for i=1,2 do - psdef.texture="weather_pack_snow_snowflake"..i..".png" - mcl_weather.add_spawner_player(player,"snow"..i,psdef) - end - end - end -end) - --- register snow weather -if mcl_weather.reg_weathers.snow == nil then - mcl_weather.reg_weathers.snow = { - clear = mcl_weather.snow.clear, - light_factor = 0.6, - -- 10min - 20min - min_duration = 600, - max_duration = 1200, - transitions = { - [65] = "none", - [80] = "rain", - [100] = "thunder", - } - } -end diff --git a/mods/ENVIRONMENT/mcl_weather/sounds/weather_rain.ogg b/mods/ENVIRONMENT/mcl_weather/sounds/weather_rain.ogg deleted file mode 100644 index 6216875df..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/sounds/weather_rain.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust1.png b/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust1.png deleted file mode 100644 index 25c71fba3..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust2.png b/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust2.png deleted file mode 100644 index 73135f3bb..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust3.png b/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust3.png deleted file mode 100644 index 876876d9f..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust3.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_1.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_1.png deleted file mode 100644 index ab18333b7..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_2.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_2.png deleted file mode 100644 index fb37100a3..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_3.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_3.png deleted file mode 100644 index 4432b355e..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_3.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake1.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake1.png deleted file mode 100644 index 8604f5dce..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake2.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake2.png deleted file mode 100644 index bea317ee8..000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/thunder.lua b/mods/ENVIRONMENT/mcl_weather/thunder.lua deleted file mode 100644 index f8e5a0371..000000000 --- a/mods/ENVIRONMENT/mcl_weather/thunder.lua +++ /dev/null @@ -1,61 +0,0 @@ -local get_connected_players = minetest.get_connected_players - --- turn off lightning mod 'auto mode' -lightning.auto = false - -mcl_weather.thunder = { - next_strike = 0, - min_delay = 3, - max_delay = 12, - init_done = false, -} - -minetest.register_globalstep(function(dtime) - if mcl_weather.get_weather() ~= "thunder" then - return false - end - - mcl_weather.rain.set_particles_mode("thunder") - mcl_weather.rain.make_weather() - - if mcl_weather.thunder.init_done == false then - mcl_weather.skycolor.add_layer("weather-pack-thunder-sky", { - {r=0, g=0, b=0}, - {r=40, g=40, b=40}, - {r=85, g=86, b=86}, - {r=40, g=40, b=40}, - {r=0, g=0, b=0}, - }) - mcl_weather.skycolor.active = true - for _, player in pairs(get_connected_players()) do - player:set_clouds({color="#3D3D3FE8"}) - end - mcl_weather.thunder.init_done = true - end - if (mcl_weather.thunder.next_strike <= minetest.get_gametime()) then - lightning.strike() - local delay = math.random(mcl_weather.thunder.min_delay, mcl_weather.thunder.max_delay) - mcl_weather.thunder.next_strike = minetest.get_gametime() + delay - end -end) - -function mcl_weather.thunder.clear() - mcl_weather.rain.clear() - mcl_weather.skycolor.remove_layer("weather-pack-thunder-sky") - mcl_weather.skycolor.remove_layer("lightning") - mcl_weather.thunder.init_done = false -end - --- register thunderstorm weather -if mcl_weather.reg_weathers.thunder == nil then - mcl_weather.reg_weathers.thunder = { - clear = mcl_weather.thunder.clear, - light_factor = 0.33333, - -- 10min - 20min - min_duration = 600, - max_duration = 1200, - transitions = { - [100] = "rain", - }, - } -end diff --git a/mods/ENVIRONMENT/mcl_weather/weather_core.lua b/mods/ENVIRONMENT/mcl_weather/weather_core.lua deleted file mode 100644 index f7316bcfb..000000000 --- a/mods/ENVIRONMENT/mcl_weather/weather_core.lua +++ /dev/null @@ -1,292 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math - --- weather states, 'none' is default, other states depends from active mods -mcl_weather.state = "none" - --- player list for saving player meta info -mcl_weather.players = {} - --- default weather check interval for global step -mcl_weather.check_interval = 5 - --- weather min duration -mcl_weather.min_duration = 600 - --- weather max duration -mcl_weather.max_duration = 9000 - --- weather calculated end time -mcl_weather.end_time = nil - --- registered weathers -mcl_weather.reg_weathers = {} - --- global flag to disable/enable ABM logic. -mcl_weather.allow_abm = true - -mcl_weather.reg_weathers["none"] = { - min_duration = mcl_weather.min_duration, - max_duration = mcl_weather.max_duration, - light_factor = nil, - transitions = { - [50] = "rain", - [100] = "snow", - }, - clear = function() end, -} - -local storage = minetest.get_mod_storage() --- Save weather into mod storage, so it can be loaded after restarting the server -local function save_weather() - if not mcl_weather.end_time then return end - storage:set_string("mcl_weather_state", mcl_weather.state) - storage:set_int("mcl_weather_end_time", mcl_weather.end_time) - minetest.log("verbose", "[mcl_weather] Weather data saved: state="..mcl_weather.state.." end_time="..mcl_weather.end_time) -end -minetest.register_on_shutdown(save_weather) - -local particlespawners={} -function mcl_weather.add_spawner_player(pl,id,ps) - local name=pl:get_player_name() - if not particlespawners[name] then - particlespawners[name] = {} - end - if not particlespawners[name][id] then - ps.playername =name - ps.attached = pl - particlespawners[name][id]=minetest.add_particlespawner(ps) - return particlespawners[name][id] - end -end -function mcl_weather.remove_spawners_player(pl) - local name=pl:get_player_name() - if not particlespawners[name] then return end - for k,v in pairs(particlespawners[name]) do - minetest.delete_particlespawner(v) - end - particlespawners[name] = nil - return true -end - -function mcl_weather.remove_all_spawners() - for k,v in pairs(minetest.get_connected_players()) do - mcl_weather.remove_spawners_player(v) - end -end - -function mcl_weather.get_rand_end_time(min_duration, max_duration) - local r - if min_duration and max_duration then - r = math.random(min_duration, max_duration) - else - r = math.random(mcl_weather.min_duration, mcl_weather.max_duration) - end - return minetest.get_gametime() + r -end - -function mcl_weather.get_current_light_factor() - if mcl_weather.state == "none" then - return nil - else - return mcl_weather.reg_weathers[mcl_weather.state].light_factor - end -end - --- Returns true if pos is outdoor. --- Outdoor is defined as any node in the Overworld under open sky. --- FIXME: Nodes below glass also count as “outdoor”, this should not be the case. -function mcl_weather.is_outdoor(pos) - local cpos = {x=pos.x, y=pos.y+1, z=pos.z} - local dim = mcl_worlds.pos_to_dimension(cpos) - if minetest.get_node_light(cpos, 0.5) == 15 and dim == "overworld" then - return true - end - return false -end - --- checks if player is undewater. This is needed in order to --- turn off weather particles generation. -function mcl_weather.is_underwater(player) - local ppos = player:get_pos() - local offset = player:get_eye_offset() - local player_eye_pos = {x = ppos.x + offset.x, - y = ppos.y + offset.y + 1.5, - z = ppos.z + offset.z} - local node_level = minetest.get_node_level(player_eye_pos) - if node_level == 8 or node_level == 7 then - return true - end - return false -end - -local t, wci = 0, mcl_weather.check_interval - -minetest.register_globalstep(function(dtime) - t = t + dtime - if t < wci then return end - t = 0 - - if mcl_weather.end_time == nil then - mcl_weather.end_time = mcl_weather.get_rand_end_time() - end - -- recalculate weather - if mcl_weather.end_time <= minetest.get_gametime() then - local changeWeather = minetest.settings:get_bool("mcl_doWeatherCycle") - if changeWeather == nil then - changeWeather = true - end - if changeWeather then - mcl_weather.set_random_weather(mcl_weather.state, mcl_weather.reg_weathers[mcl_weather.state]) - else - mcl_weather.end_time = mcl_weather.get_rand_end_time() - end - end -end) - --- Sets random weather (which could be 'none' (no weather)). -function mcl_weather.set_random_weather(weather_name, weather_meta) - if weather_meta == nil then return end - local transitions = weather_meta.transitions - local random_roll = math.random(0,100) - local new_weather - for v, weather in pairs(transitions) do - if random_roll < v then - new_weather = weather - break - end - end - if new_weather then - mcl_weather.change_weather(new_weather) - end -end - --- Change weather to new_weather. --- * explicit_end_time is OPTIONAL. If specified, explicitly set the --- gametime (minetest.get_gametime) in which the weather ends. --- * changer is OPTIONAL, for logging purposes. -function mcl_weather.change_weather(new_weather, explicit_end_time, changer_name) - local changer_name = changer_name or debug.getinfo(2).name.."()" - - if (mcl_weather.reg_weathers and mcl_weather.reg_weathers[new_weather]) then - if (mcl_weather.state and mcl_weather.reg_weathers[mcl_weather.state]) then - mcl_weather.reg_weathers[mcl_weather.state].clear() - end - - local old_weather = mcl_weather.state - - mcl_weather.state = new_weather - - if old_weather == "none" then - old_weather = "clear" - end - if new_weather == "none" then - new_weather = "clear" - end - minetest.log("action", "[mcl_weather] " .. changer_name .. " changed the weather from " .. old_weather .. " to " .. new_weather) - - local weather_meta = mcl_weather.reg_weathers[mcl_weather.state] - if explicit_end_time then - mcl_weather.end_time = explicit_end_time - else - mcl_weather.end_time = mcl_weather.get_rand_end_time(weather_meta.min_duration, weather_meta.max_duration) - end - mcl_weather.skycolor.update_sky_color() - save_weather() - return true - end - return false -end - -function mcl_weather.get_weather() - return mcl_weather.state -end - -minetest.register_privilege("weather_manager", { - description = S("Gives ability to control weather"), - give_to_singleplayer = false -}) - --- Weather command definition. Set -minetest.register_chatcommand("weather", { - params = "(clear | rain | snow | thunder) []", - description = S("Changes the weather to the specified parameter."), - privs = {weather_manager = true}, - func = function(name, param) - if (param == "") then - return false, S("Error: No weather specified.") - end - local new_weather, end_time - local parse1, parse2 = string.match(param, "(%w+) ?(%d*)") - if parse1 then - if parse1 == "clear" then - new_weather = "none" - else - new_weather = parse1 - end - else - return false, S("Error: Invalid parameters.") - end - if parse2 then - if type(tonumber(parse2)) == "number" then - local duration = tonumber(parse2) - if duration < 1 then - return false, S("Error: Duration can't be less than 1 second.") - end - end_time = minetest.get_gametime() + duration - end - end - - local success = mcl_weather.change_weather(new_weather, end_time, name) - if success then - return true - else - return false, S("Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.") - end - end -}) - -minetest.register_chatcommand("toggledownfall", { - params = "", - description = S("Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)"), - privs = {weather_manager = true}, - func = function(name, param) - -- Currently rain/thunder/snow: Set weather to clear - if mcl_weather.state ~= "none" then - return mcl_weather.change_weather("none", nil, name) - - -- Currently clear: Set weather randomly to rain/thunder/snow - else - local new = { "rain", "thunder", "snow" } - local r = math.random(1, #new) - return mcl_weather.change_weather(new[r], nil, name) - end - end -}) - --- Configuration setting which allows user to disable ABM for weathers (if they use it). --- Weather mods expected to be use this flag before registering ABM. -local weather_allow_abm = minetest.settings:get_bool("weather_allow_abm") -if weather_allow_abm == false then - mcl_weather.allow_abm = false -end - - -local function load_weather() - local weather = storage:get_string("mcl_weather_state") - if weather and weather ~= "" then - mcl_weather.state = weather - mcl_weather.end_time = storage:get_int("mcl_weather_end_time") - mcl_weather.change_weather(weather, mcl_weather.end_time) - if type(mcl_weather.end_time) ~= "number" then - -- Fallback in case of corrupted end time - mcl_weather.end_time = mcl_weather.min_duration - end - minetest.log("action", "[mcl_weather] Weather restored.") - else - minetest.log("action", "[mcl_weather] No weather data found. Starting with clear weather.") - end -end - -load_weather() diff --git a/mods/ENVIRONMENT/modpack.conf b/mods/ENVIRONMENT/modpack.conf deleted file mode 100644 index 8c40cfab8..000000000 --- a/mods/ENVIRONMENT/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = ENVIRONMENT -description = Meta-modpack containing environment and nature-related mods for MineClone 2 diff --git a/mods/HELP/doc/README.md b/mods/HELP/doc/README.md deleted file mode 100644 index c8fd1407d..000000000 --- a/mods/HELP/doc/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Help -MineClone 2 uses some of the mods found in the Help modpack by Wuzzy. - -The goal of this modpack is to make using Minetest and mods easier for both -newcomers and advanced users. -It makes it easier for newcomers by making help more accessible. -It makes life easier for advanced user by making it more convenient to use, by -centralizing the help where you most need it: Inside the game. This modpack -will also make the life of modder easier by allowing them to add help texts -directly into mods (via `doc_items`). - -More information is given in the respective mods. - -Overview of the mods used in MineClone 2: - -* `doc`: Documentation System. Core API and user interface. Mods can add arbitrary categories and entries -* `doc_items`: Item Help. Adds automatically generated help texts for items and an API -* `doc_identifier`: Lookup Tool. A tool to identify and show help texts for pointed things diff --git a/mods/HELP/doc/doc/API.md b/mods/HELP/doc/doc/API.md deleted file mode 100644 index 49afeb3aa..000000000 --- a/mods/HELP/doc/doc/API.md +++ /dev/null @@ -1,539 +0,0 @@ -# API documentation for the Documentation System -## Core concepts -As a modder, you are free to write basically about everything and are also -relatively free in the presentation of information. There are no -restrictions on content whatsoever. - -### Categories and entries -In the Documentation System, everything is built on categories and entries. -An entry is a single piece of documentation and is the basis of all actual -documentation. Categories group multiple entries of the same topic together. - -Categories also define a template function which is used to determine how the -final result in the tab “Entry list” looks like. Entries themselves have -a data field attached to them, this is a table containing arbitrary metadata -which is used to construct the final formspec in the Entry tab. It may also -be used for sorting entries in the entry list. - -## Advanced concepts -### Viewed and hidden entries -The mod keeps track of which entries have been viewed on a per-player basis. -Any entry which has been accessed by a player is immediately marked as -“viewed”. - -Entries can also be hidden. Hidden entries are not visible or otherwise -accessible to players until they become revealed by function calls. - -Marking an entry as viewed or revealed is not reversible with this API. -The viewed and hidden states are stored in the file `doc.mt` inside the -world directory. You can safely delete this file if you want to reset -the player states. - -### Entry aliases -Entry aliases are alternative identifiers for entry identifiers. With the -exception of the alias functions themselves, for functions demanding an -`entry_id` you can either supply the original `entry_id` or any alias of the -`entry_id`. - -## Possible use cases -This section shows some possible use cases to give you a rough idea what -this mod is capable of and how these use cases could be implemented. - -### Simple use case: Minetest basics -Let's say you want to write in free form short help texts about the basic -concepts of Minetest or your game. First you could define a category -called “Basics”, the data for each of its entry is just a free form text. -The template function simply creates a formspec where this free form -text is displayed. - -This is one of the most simple use cases and the mod `doc_basics` does -exactly that. - -### Complex use case: Blocks -You could create a category called “Blocks”, and this category is supposed to -contain entries for every single block (i.e. node) in the game. For this use -case, a free form approach would be very inefficient and error-prone, as a -lot of data can be reused. - -Here the template function comes in handy: The internal entry data -contain a lot of different things about a block, like block name, identifier, -custom description and most importantly, the definition table of the block. - -Finally, the template function takes all that data and turns it into -sentences which are just concatenated, telling as many useful facts about -this block as possible. - -## Functions -This is a list of all publicly available functions. - -### Overview -The most important functions are `doc.add_category` and `doc.ad_entry`. All other functions -are mostly used for utility and examination purposes. - -If not mentioned otherwise, the return value of all functions is `nil`. - -These functions are available: - -#### Core -* `doc.add_category`: Adds a new category -* `doc.add_entry`: Adds a new entry - -#### Display -* `doc.show_entry`: Shows a particular entry to a player -* `doc.show_category`: Shows the entry list of a category to a player -* `doc.show_doc`: Opens the main help form for a player - -#### Query -* `doc.get_category_definition`: Returns the definition table of a category -* `doc.get_entry_definition`: Returns the definition table of an entry -* `doc.entry_exists`: Checks whether an entry exists -* `doc.entry_viewed`: Checks whether an entry has been viewed/read by a player -* `doc.entry_revealed`: Checks whether an entry is visible and normally accessible to a player -* `doc.get_category_count`: Returns the total number of categories -* `doc.get_entry_count`: Returns the total number of entries in a category -* `doc.get_viewed_count`: Returns the number of entries a player has viewed in a category -* `doc.get_revealed_count`: Returns the number of entries a player has access to in a category -* `doc.get_hidden_count`: Returns the number of entries which are hidden from a player in a category -* `doc.get_selection`: Returns the currently viewed entry/category of a player - -#### Modify -* `doc.set_category_order`: Sets the order of categories in the category list -* `doc.mark_entry_as_viewed`: Manually marks an entry as viewed/read by a player -* `doc.mark_entry_as_revealed`: Make a hidden entry visible and accessible to a player -* `doc.mark_all_entries_as_revealed`: Make all hidden entries visible and accessible to a player - -#### Aliases -* `doc.add_entry_alias`: Add an alternative name which can be used to access an entry - -#### Special widgets -This API provides functions to add unique “widgets” for functionality -you may find useful when creating entry templates. You find these -functions in `doc.widgets`. -Currently there is a widget for scrollable multi-line text and a -widget providing an image gallery. - - - -### `doc.add_category(id, def)` -Adds a new category. You have to define an unique identifier, a name -and a template function to build the entry formspec from the entry -data. - -**Important**: You must call this function *before* any player joins. - -#### Parameters -* `id`: Unique category identifier as a string -* `def`: Definition table with the following fields: - * `name`: Category name to be shown in the interface - * `description`: (optional) Short description of the category, - will be shown as tooltip. Recommended style (in English): - First letter capitalized, no punctuation at the end, - max. 100 characters - * `build_formspec`: The template function (see below). Takes entry data - as its first parameter (has the data type of the entry data) and the - name of the player who views the entry as its second parameter. It must - return a formspec which is inserted in the Entry tab. - * `sorting`: (optional) Sorting algorithm for display order of entries - * `"abc"`: Alphabetical (default) - * `"nosort"`: Entries appear in no particular order - * `"custom"`: Manually define the order of entries in `sorting_data` - * `"function"`: Sort by function defined in `sorting_data` - * `sorting_data`: (optional) Additional data for special sorting methods. - * If `sorting=="custom"`, this field must contain a table (list form) in which - the entry IDs are specified in the order they are supposed to appear in the - entry list. All entries which are missing in this table will appear in no - particular order below the final specified one. - * If `sorting=="function"`, this field is a compare function to be used as - the `comp` parameter of `table.sort`. The parameters given are two entries. - * This field is not required if `sorting` has any other value - * `hide_entries_by_default` (optional): If `true`, all entries - added to this category will start as hidden, unless explicitly specified otherwise - (default: `false`) - -Note: For function-based sorting, the entries provided to the compare function -will have the following format: - - { - eid = e, -- unique entry identifier - name = n, -- entry name - data = d, -- arbitrary entry data - } - -#### Using `build_formspec` -For `build_formspec` you can either define your own function which -procedurally generates the entry formspec or you use one of the -following predefined convenience functions: - -* `doc.entry_builders.text`: Expects entry data to be a string. - It will be inserted directly into the entry. Useful for entries with - a free form text. -* `doc.entry_builders.text_and_gallery`: For entries with text and - an optional standard gallery (3 rows, 3:2 aspect ratio). Expects - entry data to be a table with these fields: - * `text`: The entry text - * `images`: The images of the gallery, the format is the same as the - `imagedata` parameter of `doc.widgets.gallery`. Can be `nil`, in - which case no gallery is shown for the entry -* `doc.entry_builders.formspec`: Entry data is expected to contain the - complete entry formspec as a string. Useful if your entries. Useful - if you expect your entries to differ wildly in layouts. - -##### Formspec restrictions -When building your formspec, you have to respect the size limitations. -The help form currently uses a size of 15×10.5 and you must make sure -all entry widgets are inside a boundary box. The remaining space is -reserved for widgets of the help form and should not be used to avoid -overlapping. -Read from the following variables to calculate the final formspec coordinates: - -* `doc.FORMSPEC.WIDTH`: Width of help formspec -* `doc.FORMSPEC.HEIGHT`: Height of help formspec -* `doc.FORMSPEC.ENTRY_START_X`: Leftmost X point of bounding box -* `doc.FORMSPEC.ENTRY_START_Y`: Topmost Y point of bounding box -* `doc.FORMSPEC.ENTRY_END_X`: Rightmost X point of bounding box -* `doc.FORMSPEC.ENTRY_END_Y`: Bottom Y point of bounding box -* `doc.FORMSPEC.ENTRY_WIDTH`: Width of the entry widgets bounding box -* `doc.FORMSPEC.ENTRY_HEIGHT`: Height of the entry widgets bounding box - -Finally, to avoid naming collisions, you must make sure that all identifiers -of your own formspec elements do *not* begin with “`doc_`”. - -##### Receiving formspec events -You can even use the formspec elements you have added with `build_formspec` to -receive formspec events, just like with any other formspec. For receiving, use -the standard function `minetest.register_on_player_receive_fields` to register -your event handling. The `formname` parameter will be `doc:entry`. Use -`doc.get_selection` to get the category ID and entry ID of the entry in question. - -### `doc.add_entry(category_id, entry_id, def)` -Adds a new entry into an existing category. You have to define the category -to which to insert the entry, the entry's identifier, a name and some -data which defines the entry. Note you do not directly define here how the -end result of an entry looks like, this is done by `build_formspec` from -the category definition. - -**Important**: You must call this function *before* any player joins. - -#### Parameters -* `category_id`: Identifier of the category to add the entry into -* `entry_id`: Unique identifier of the new entry, as a string -* `def`: Definition table, it has the following fields: - * `name`: Entry name to be shown in the interface - * `hidden`: (optional) If `true`, entry will not be displayed in entry list - initially (default: `false`); it can be revealed later - * `data`: Arbitrary data attached to the entry. Any data type is allowed; - The data in this field will be used to create the actual formspec - with `build_formspec` from the category definition - -### `doc.set_category_order(category_list)` -Sets the order of categories in the category list. -The help starts with this default order: - - {"basics", "nodes", "tools", "craftitems", "advanced"} - -This function can be called at any time, but it recommended to only call -this function once for the entire server session and to only call it -from game mods, to avoid contradictions. If this function is called a -second time by any mod, a warning is written into the log. - -#### Parameters -* `category_list`: List of category IDs in the order they should appear - in the category list. All unspecified categories will be appended to - the end - - -### `doc.show_doc(playername)` -Opens the main help formspec for the player (“Category list” tab). - -#### Parameters -* `playername`: Name of the player to show the formspec to - -### `doc.show_category(playername, category_id)` -Opens the help formspec for the player at the specified category -(“Entry list” tab). - -#### Parameters -* `playername`: Name of the player to show the formspec to -* `category_id`: Category identifier of the selected category - -### `doc.show_entry(playername, category_id, entry_id, ignore_hidden)` -Opens the help formspec for the player showing the specified entry -of a category (“Entry” tab). If the entry is hidden, an error message -is displayed unless `ignore_hidden==true`. - -#### Parameters -* `playername`: Name of the player to show the formspec to -* `category_id`: Category identifier of the selected category -* `entry_id`: Entry identifier of the entry to show -* `ignore_hidden`: (optional) If `true`, shows entry even if it is still hidden - to the player; this will automatically reveal the entry to this player for the - rest of the game - -### `doc.get_category_definition(category_id)` -Returns the definition of the specified category. - -#### Parameters -* `category_id`: Category identifier of the category to the the definition - for - -#### Return value -The category's definition table as specified in the `def` argument of -`doc.add_category`. The table fields are the same. - -### `doc.get_entry_definition(category_id, entry_id)` -Returns the definition of the specified entry. - -#### Parameters -* `category_id`: Category identifier of entry's category -* `entry_id`: Entry identifier of the entry to get the definition for - -#### Return value -The entry's definition table as specified in the `def` argument of -`doc.add_entry`. The table fields are the same. - -### `doc.entry_exists(category_id, entry_id)` -Checks whether the specified entry exists and returns `true` or `false`. -Entry aliases are taken into account. - -#### Parameters -* `category_id`: Category identifier of the category to check -* `entry_id`: Entry identifier of the entry to check for its existence - -#### Return value -Returns `true` if and only if: - -* The specified category exists -* It contains the specified entry - -Otherwise, returns `false`. - -### `doc.entry_viewed(playername, category_id, entry_id)` -Tells whether the specified entry is marked as “viewed” (or read) by -the player. - -#### Parameters -* `playername`: Name of the player to check -* `category_id`: Category identifier of the category to check -* `entry_id`: Entry identifier of the entry to check - -#### Return value -`true`, if entry is viewed, `false` otherwise. - -### `doc.entry_revealed(playername, category_id, entry_id)` -Tells whether the specified entry is marked as “revealed” to the player -and thus visible and accessible to the player. - -#### Parameters -* `playername`: Name of the player to check -* `category_id`: Category identifier of the category to check -* `entry_id`: Entry identifier of the entry to check - -#### Return value -`true`, if entry is revealed, `false` otherwise. - -### `doc.mark_entry_as_viewed(playername, category_id, entry_id)` -Marks a particular entry as “viewed” (or read) by a player. This will -also automatically reveal the entry to the player for the rest of -the game. - -#### Parameters -* `playername`: Name of the player for whom to mark an entry as “viewed” -* `category_id`: Category identifier of the category of the entry to mark -* `entry_id`: Entry identifier of the entry to mark - -### `doc.mark_entry_as_revealed(playername, category_id, entry_id)` -Marks a particular entry as “revealed” to a player. If the entry is -declared as hidden, it will become visible in the list of entries for -this player and will always be accessible with `doc.show_entry`. This -change remains for the rest of the game. - -For entries which are not normally hidden, this function has no direct -effect. - -#### Parameters -* `playername`: Name of the player for whom to reveal the entry -* `category_id`: Category identifier of the category of the entry to reveal -* `entry_id`: Entry identifier of the entry to reveal - -### `doc.mark_all_entries_as_revealed(playername)` -Marks all entries as “revealed” to a player. This change remains for the -rest of the game. - -#### Parameters -* `playername`: Name of the player for whom to reveal the entries - -### `doc.add_entry_alias(category_id_orig, entry_id_orig, category_id_alias, entry_id_alias)` -Adds a single alias for an entry. If an entry has an alias, supplying the -alias to a function which demand `category_id` and `entry_id` will work as expected. -When using this function, you must make sure the category already exists. - -This function could be useful for legacy support after changing an entry ID or -moving an entry to a different category. - -#### Parameters -* `category_id_orig`: Category identifier of the category of the entry in question -* `entry_id_orig`: The original (!) entry identifier of the entry to create an alias - for -* `category_id_alias`: The category ID of the alias -* `entry_id_alias`: The entry ID of the alias - -#### Example - - doc.add_entry_alias("nodes", "test", "craftitems", "test2") - -When calling a function with category ID “craftitems” and entry ID “test2”, it will -act as if you supplied “nodes” as category ID and “test” as entry ID. - -### `doc.get_category_count()` -Returns the number of registered categories. - -#### Return value -Number of registered categories. - -### `doc.get_entry_count(category_id)` -Returns the number of entries in a category. - -#### Parameters -* `category_id`: Category identifier of the category in which to count entries - -#### Return value -Number of entries in the specified category. - -### `doc.get_viewed_count(playername, category_id)` -Returns how many entries have been viewed by a player. - -#### Parameters -* `playername`: Name of the player to count the viewed entries for -* `category_id`: Category identifier of the category in which to count the - viewed entries - -#### Return value -Amount of entries the player has viewed in the specified category. If the -player does not exist, this function returns `nil`. - -### `doc.get_revealed_count(playername, category_id)` -Returns how many entries the player has access to (non-hidden entries) -in this category. - -#### Parameters -* `playername`: Name of the player to count the revealed entries for -* `category_id`: Category identifier of the category in which to count the - revealed entries - -#### Return value -Amount of entries the player has access to in the specified category. If the -player does not exist, this function returns `nil`. - -### `doc.get_hidden_count(playername, category_id)` -Returns how many entries are hidden from the player in this category. - -#### Parameters -* `playername`: Name of the player to count the hidden entries for -* `category_id`: Category identifier of the category in which to count the - hidden entries - -#### Return value -Amount of entries hidden from the player. If the player does not exist, -this function returns `nil`. - -### `doc.get_selection(playername)` -Returns the currently or last viewed entry and/or category of a player. - -#### Parameter -* `playername`: Name of the player to query - -#### Return value -It returns up to 2 values. The first one is the category ID, the second one -is the entry ID of the entry/category which the player is currently viewing -or is the last entry the player viewed in this session. If the player only -viewed a category so far, the second value is `nil`. If the player has not -viewed a category as well, both returned values are `nil`. - - -### `doc.widgets.text(data, x, y, width, height)` -This is a convenience function for creating a special formspec widget. It creates -a widget in which you can insert scrollable multi-line text. - -#### Parameters -* `data`: Text to be written inside the widget -* `x`: Formspec X coordinate (optional) -* `y`: Formspec Y coordinate (optional) -* `width`: Width of the widget in formspec units (optional) -* `height`: Height of the widget in formspec units (optional) - -The default values for the optional parameters result in a widget which fills -nearly the entire entry page. - -#### Return value -Two values are returned, in this order: - -* string: Contains a complete formspec definition building the widget -* string: Formspec element ID of the created widget - -#### Note -If you use this function to build a formspec string, do not use identifiers -beginning with `doc_widget_text` to avoid naming collisions, as this function -makes use of such identifiers internally. - - -### `doc.widgets.gallery(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top)` -This function creates an image gallery which allows you to display an -arbitrary amount of images aligned horizontally. It is possible to add more -images than the space of an entry would normally held, this is done by adding -“scroll” buttons to the left and right which allows the user to see more images -of the gallery. - -This function is useful for adding multiple illustration to your entry without -worrying about space too much. Adding illustrations can help you to create -entry templates which aren't just lengthy walls of text. ;-) - -You can define the position, image aspect ratio, total gallery width and the -number of images displayed at once. You can *not* directly define the image -size, nor the resulting height of the overall gallery, those values will -be derived from the parameters. - -You can only really use this function efficiently inside a *custom* -`build_formspec` function definition. This is because you need to pass a -`playername`. You can currently also only add up to one gallery per entry; -adding more galleries is not supported and will lead to bugs. - -### Parameters -* `imagedata`: List of images to be displayed in the specified order. All images must - have the same aspect ratio. It's a table of tables with this format: - * `imagetype`: Type of image to be used (optional): - * `"image"`: Texture file (default) - * `"item"`: Item image, specified as itemstring - * `image`: What to display. Depending on `imagetype`, a texture file or itemstring -* `playername`: Name of the player who is viewing the entry in question -* `x`: Formspec X coordinate of the top left corner (optional) -* `y`: Formspec Y coordinate of the top left corner (optional) -* `aspect_ratio`: Aspect ratio of all the images (width/height) -* `width`: Total gallery width in formspec units (optional) -* `rows`: Number of images which can be seen at once (optional) -* `align_left`: If `false`, gallery is aligned to the left instead of the right (optional) -* `align_right`: If `false`, gallery is aligned to the bottom instead of the top (optional) - -The default values for the optional parameters result in a gallery with -3 rows which is placed at the top left corner and spans the width of the -entry and assumes an aspect ratio of two thirds. - -If the number of images is greater than `rows`, “scroll” buttons will appear -at the left and right side of the images. - -#### Return values -Two values are returned, in this order: - -* string: Contains a complete formspec definition building the gallery -* number: The height the gallery occupies in the formspec - -## Extending this mod (naming conventions) -If you want to extend this mod with your own functionality, it is recommended -that you put all API functions into `doc.sub.`. -As a naming convention, if you mod *primarily* depends on `doc`, it is recommended -to use a short mod name which starts with “`doc_`”, like `doc_items`, -`doc_minetest_game`, or `doc_identifier`. - -One mod which uses this convention is `doc_items` which uses the `doc.sub.items` -table. - - diff --git a/mods/HELP/doc/doc/README.md b/mods/HELP/doc/doc/README.md deleted file mode 100644 index 72d2b85fb..000000000 --- a/mods/HELP/doc/doc/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Documentation System [`doc`] -This mod provides a simple and highly extensible form in which the user -can access help pages about various things and the modder can add those pages. -The mod itself does not provide any help texts, just the framework. -It is the heart of the Help modpack, on which the other Help mods depend. - -Current version: 1.2.1 - -## For players -### Accessing the help -To open the help, there are multiple ways: - -- Use the `/helpform` chat command. This works always. -- If you use one of these mods, there's a help button in the inventory menu: - - Unified Inventory [`unified_inventory`] - - Simple Fast Inventory Buttons [`sfinv_buttons`] - - Inventory++ [`inventory_plus`] - -The help itself should be more or less self-explanatory. - -This mod is useless on its own, you will only need this mod as a dependency -for mods which actually add some help entries. - -### Hidden entries -Some entries are initially hidden from you. You can't see them until you -unlocked them. Mods can decide for themselves how particular entries are -revealed. Normally you just have to proceed in the game to unlock more -entries. Hidden entries exist to avoid spoilers and give players a small -sense of progress. - -Players with the `help_reveal` privilege can use the `/help_reveal` chat -command to reveal all hidden entries instantly. - -### Maintenance -The information of which player has viewed and revealed which entries is -stored in the world directory in the file `doc.mt`. You can safely reset -the viewed/revealed state of all players by deleting this file. Players -then need to start over revealing all entries. - -## For modders and game authors -This mod helps you in creating extensive and flexible help entries for your -mods or game. You can write about basically anything in the presentation -you prefer. - -To get started, read `API.md` in the directory of this mod. - -Note: If you want to add help texts for items and nodes, refer to the API -documentation of `doc_items`, instead of manually adding entries. -For custom entities, you may also want to add support for `doc_identifier`. - -## License of everything -MIT License - -## Translation credits -French: Karamel -German: Wuzzy -Portuguese: BrunoMine diff --git a/mods/HELP/doc/doc/init.lua b/mods/HELP/doc/doc/init.lua deleted file mode 100644 index 304900753..000000000 --- a/mods/HELP/doc/doc/init.lua +++ /dev/null @@ -1,1219 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local F = function(f) return minetest.formspec_escape(S(f)) end - -local mod_central_messages = minetest.get_modpath("central_message") -local mod_inventory_plus = minetest.get_modpath("inventory_plus") - -local math = math -local colorize = minetest.colorize - -doc = {} - --- Some informational variables --- DO NOT CHANGE THEM AFTERWARDS AT RUNTIME! - --- Version number (follows the SemVer specification 2.0.0) -doc.VERSION = {} -doc.VERSION.MAJOR = 1 -doc.VERSION.MINOR = 2 -doc.VERSION.PATCH = 1 -doc.VERSION.STRING = doc.VERSION.MAJOR.."."..doc.VERSION.MINOR.."."..doc.VERSION.PATCH - --- Formspec information -doc.FORMSPEC = {} --- Width of formspec -doc.FORMSPEC.WIDTH = 15 -doc.FORMSPEC.HEIGHT = 10.5 - ---[[ Recommended bounding box coordinates for widgets to be placed in entry pages. Make sure -all entry widgets are completely inside these coordinates to avoid overlapping. ]] -doc.FORMSPEC.ENTRY_START_X = 0 -doc.FORMSPEC.ENTRY_START_Y = 0.5 -doc.FORMSPEC.ENTRY_END_X = doc.FORMSPEC.WIDTH -doc.FORMSPEC.ENTRY_END_Y = doc.FORMSPEC.HEIGHT - 0.5 -doc.FORMSPEC.ENTRY_WIDTH = doc.FORMSPEC.ENTRY_END_X - doc.FORMSPEC.ENTRY_START_X -doc.FORMSPEC.ENTRY_HEIGHT = doc.FORMSPEC.ENTRY_END_Y - doc.FORMSPEC.ENTRY_START_Y - ---TODO: Use container formspec element later - --- Internal helper variables -local DOC_INTRO = S("This is the help.") - -local COLOR_NOT_VIEWED = "#00FFFF" -- cyan -local COLOR_VIEWED = "#FFFFFF" -- white -local COLOR_HIDDEN = "#999999" -- gray -local COLOR_ERROR = "#FF0000" -- red - -local CATEGORYFIELDSIZE = { - WIDTH = math.ceil(doc.FORMSPEC.WIDTH / 4), - HEIGHT = math.floor(doc.FORMSPEC.HEIGHT-1), -} - -doc.data = {} -doc.data.categories = {} -doc.data.aliases = {} --- Default order (includes categories of other mods from the Docuentation System modpack) -doc.data.category_order = {"basics", "nodes", "tools", "craftitems", "advanced"} -doc.data.category_count = 0 -doc.data.players = {} - --- Space for additional APIs -doc.sub = {} - --- Status variables -local set_category_order_was_called = false - --- Returns the entry definition and true entry ID of an entry, taking aliases into account -local function get_entry(category_id, entry_id) - local category = doc.data.categories[category_id] - local entry - if category then - entry = category.entries[entry_id] - end - if category == nil or entry == nil then - local c_alias = doc.data.aliases[category_id] - if c_alias then - local alias = c_alias[entry_id] - if alias then - category_id = alias.category_id - entry_id = alias.entry_id - category = doc.data.categories[category_id] - if category then - entry = category.entries[entry_id] - else - return nil - end - else - return nil - end - else - return nil - end - end - return entry, category_id, entry_id -end - ---[[ Core API functions ]] - --- Add a new category -function doc.add_category(id, def) - if doc.data.categories[id] == nil and id then - doc.data.categories[id] = {} - doc.data.categories[id].entries = {} - doc.data.categories[id].entry_count = 0 - doc.data.categories[id].hidden_count = 0 - doc.data.categories[id].def = def - -- Determine order position - local order_id = nil - for i=1,#doc.data.category_order do - if doc.data.category_order[i] == id then - order_id = i - break - end - end - if order_id == nil then - table.insert(doc.data.category_order, id) - doc.data.categories[id].order_position = #doc.data.category_order - else - doc.data.categories[id].order_position = order_id - end - doc.data.category_count = doc.data.category_count + 1 - return true - else - return false - end -end - --- Add a new entry -function doc.add_entry(category_id, entry_id, def) - local cat = doc.data.categories[category_id] - if cat then - local hidden = def.hidden or (def.hidden == nil and cat.def.hide_entries_by_default) - if hidden then - cat.hidden_count = cat.hidden_count + 1 - def.hidden = hidden - end - cat.entry_count = doc.data.categories[category_id].entry_count + 1 - if def.name == nil or def.name == "" then - minetest.log("warning", "[doc] Nameless entry added. Entry ID: "..entry_id) - end - cat.entries[entry_id] = def - return true - else - return false - end -end - --- Marks a particular entry as viewed by a certain player, which also --- automatically reveals it -function doc.mark_entry_as_viewed(playername, category_id, entry_id) - local entry, category_id, entry_id = get_entry(category_id, entry_id) - if not entry then - return - end - if doc.data.players[playername].stored_data.viewed[category_id] == nil then - doc.data.players[playername].stored_data.viewed[category_id] = {} - doc.data.players[playername].stored_data.viewed_count[category_id] = 0 - end - if doc.entry_exists(category_id, entry_id) and doc.data.players[playername].stored_data.viewed[category_id][entry_id] ~= true then - doc.data.players[playername].stored_data.viewed[category_id][entry_id] = true - doc.data.players[playername].stored_data.viewed_count[category_id] = doc.data.players[playername].stored_data.viewed_count[category_id] + 1 - -- Needed because viewed entries get a different color - doc.data.players[playername].entry_textlist_needs_updating = true - end - doc.mark_entry_as_revealed(playername, category_id, entry_id) -end - --- Marks a particular entry as revealed/unhidden by a certain player -function doc.mark_entry_as_revealed(playername, category_id, entry_id) - local entry, category_id, entry_id = get_entry(category_id, entry_id) - if not entry then - return - end - if doc.data.players[playername].stored_data.revealed[category_id] == nil then - doc.data.players[playername].stored_data.revealed[category_id] = {} - doc.data.players[playername].stored_data.revealed_count[category_id] = doc.get_entry_count(category_id) - doc.data.categories[category_id].hidden_count - end - if doc.entry_exists(category_id, entry_id) and entry.hidden and doc.data.players[playername].stored_data.revealed[category_id][entry_id] ~= true then - doc.data.players[playername].stored_data.revealed[category_id][entry_id] = true - doc.data.players[playername].stored_data.revealed_count[category_id] = doc.data.players[playername].stored_data.revealed_count[category_id] + 1 - -- Needed because a new entry is added to the list of visible entries - doc.data.players[playername].entry_textlist_needs_updating = true - -- Notify player of entry revelation - if doc.data.players[playername].stored_data.notify_on_reveal == true then - if mod_central_messages then - local cat = doc.data.categories[category_id] - cmsg.push_message_player(minetest.get_player_by_name(playername), S("New help entry unlocked: @1 > @2", cat.def.name, entry.name)) - end - -- To avoid sound spamming, don't play sound more than once per second - local last_sound = doc.data.players[playername].last_reveal_sound - if last_sound == nil or os.difftime(os.time(), last_sound) >= 1 then - -- Play notification sound - minetest.sound_play({ name = "doc_reveal", gain = 0.2 }, { to_player = playername }, true) - doc.data.players[playername].last_reveal_sound = os.time() - end - end - end -end - --- Reveal -function doc.mark_all_entries_as_revealed(playername) - -- Has at least 1 new entry been revealed? - local reveal1 = false - for category_id, category in pairs(doc.data.categories) do - if doc.data.players[playername].stored_data.revealed[category_id] == nil then - doc.data.players[playername].stored_data.revealed[category_id] = {} - doc.data.players[playername].stored_data.revealed_count[category_id] = doc.get_entry_count(category_id) - doc.data.categories[category_id].hidden_count - end - for entry_id, _ in pairs(category.entries) do - if doc.data.players[playername].stored_data.revealed[category_id][entry_id] ~= true then - doc.data.players[playername].stored_data.revealed[category_id][entry_id] = true - doc.data.players[playername].stored_data.revealed_count[category_id] = doc.data.players[playername].stored_data.revealed_count[category_id] + 1 - reveal1 = true - end - end - end - - local msg - if reveal1 then - -- Needed because new entries are added to player's view on entry list - doc.data.players[playername].entry_textlist_needs_updating = true - - msg = S("All help entries revealed!") - - -- Play notification sound (ignore sound limit intentionally) - minetest.sound_play({ name = "doc_reveal", gain = 0.2 }, { to_player = playername }, true) - doc.data.players[playername].last_reveal_sound = os.time() - else - msg = S("All help entries are already revealed.") - end - -- Notify - if mod_central_messages then - cmsg.push_message_player(minetest.get_player_by_name(playername), msg) - else - minetest.chat_send_player(playername, msg) - end -end - --- Returns true if the specified entry has been viewed by the player -function doc.entry_viewed(playername, category_id, entry_id) - local _, category_id, entry_id = get_entry(category_id, entry_id) - if doc.data.players[playername].stored_data.viewed[category_id] == nil then - return false - else - return doc.data.players[playername].stored_data.viewed[category_id][entry_id] == true - end -end - --- Returns true if the specified entry is hidden from the player -function doc.entry_revealed(playername, category_id, entry_id) - local _, category_id, entry_id = get_entry(category_id, entry_id) - local hidden = doc.data.categories[category_id].entries[entry_id].hidden - if doc.data.players[playername].stored_data.revealed[category_id] == nil then - return not hidden - else - if hidden then - return doc.data.players[playername].stored_data.revealed[category_id][entry_id] == true - else - return true - end - end -end - --- Returns category definition -function doc.get_category_definition(category_id) - if doc.data.categories[category_id] == nil then - return nil - end - return doc.data.categories[category_id].def -end - --- Returns entry definition -function doc.get_entry_definition(category_id, entry_id) - if not doc.entry_exists(category_id, entry_id) then - return nil - end - local entry, _, _ = get_entry(category_id, entry_id) - return entry -end - --- Opens the main documentation formspec for the player -function doc.show_doc(playername) - if doc.get_category_count() <= 0 then - minetest.show_formspec(playername, "doc:error_no_categories", doc.formspec_error_no_categories()) - return - end - local formspec = doc.formspec_core()..doc.formspec_main(playername) - minetest.show_formspec(playername, "doc:main", formspec) -end - --- Opens the documentation formspec for the player at the specified category -function doc.show_category(playername, category_id) - if doc.get_category_count() <= 0 then - minetest.show_formspec(playername, "doc:error_no_categories", doc.formspec_error_no_categories()) - return - end - doc.data.players[playername].catsel = nil - doc.data.players[playername].category = category_id - doc.data.players[playername].entry = nil - local formspec = doc.formspec_core(2)..doc.formspec_category(category_id, playername) - minetest.show_formspec(playername, "doc:category", formspec) -end - --- Opens the documentation formspec for the player showing the specified entry in a category -function doc.show_entry(playername, category_id, entry_id, ignore_hidden) - if doc.get_category_count() <= 0 then - minetest.show_formspec(playername, "doc:error_no_categories", doc.formspec_error_no_categories()) - return - end - local _, category_id, entry_id = get_entry(category_id, entry_id) - if ignore_hidden or doc.entry_revealed(playername, category_id, entry_id) then - local playerdata = doc.data.players[playername] - playerdata.category = category_id - playerdata.entry = entry_id - - doc.mark_entry_as_viewed(playername, category_id, entry_id) - playerdata.entry_textlist_needs_updating = true - doc.generate_entry_list(category_id, playername) - - playerdata.catsel = playerdata.catsel_list[entry_id] - playerdata.galidx = 1 - - local formspec = doc.formspec_core(3)..doc.formspec_entry(category_id, entry_id, playername) - minetest.show_formspec(playername, "doc:entry", formspec) - else - minetest.show_formspec(playername, "doc:error_hidden", doc.formspec_error_hidden(category_id, entry_id)) - end -end - --- Returns true if and only if: --- * The specified category exists --- * This category contains the specified entry --- Aliases are taken into account -function doc.entry_exists(category_id, entry_id) - return get_entry(category_id, entry_id) ~= nil -end - --- Sets the order of categories in the category list -function doc.set_category_order(categories) - local reverse_categories = {} - for cid=1,#categories do - reverse_categories[categories[cid]] = cid - end - doc.data.category_order = categories - for cid, cat in pairs(doc.data.categories) do - if reverse_categories[cid] == nil then - table.insert(doc.data.category_order, cid) - end - end - reverse_categories = {} - for cid=1, #doc.data.category_order do - reverse_categories[categories[cid]] = cid - end - - for cid, cat in pairs(doc.data.categories) do - cat.order_position = reverse_categories[cid] - end - if set_category_order_was_called then - minetest.log("warning", "[doc] doc.set_category_order was called again!") - end - set_category_order_was_called = true -end - --- Adds an alias for an entry. Attempting to open an entry by an alias name --- results in opening the entry of the original name. -function doc.add_entry_alias(category_id_orig, entry_id_orig, category_id_alias, entry_id_alias) - if not doc.data.aliases[category_id_alias] then - doc.data.aliases[category_id_alias] = {} - end - doc.data.aliases[category_id_alias][entry_id_alias] = { category_id = category_id_orig, entry_id = entry_id_orig } -end - --- Returns number of categories -function doc.get_category_count() - return doc.data.category_count -end - --- Returns number of entries in category -function doc.get_entry_count(category_id) - return doc.data.categories[category_id].entry_count -end - --- Returns how many entries have been viewed by the player -function doc.get_viewed_count(playername, category_id) - local playerdata = doc.data.players[playername] - if playerdata == nil then - return nil - end - local count = playerdata.stored_data.viewed_count[category_id] - if count == nil then - playerdata.stored_data.viewed[category_id] = {} - count = 0 - playerdata.stored_data.viewed_count[category_id] = count - return count - else - return count - end -end - --- Returns how many entries have been revealed by the player -function doc.get_revealed_count(playername, category_id) - local playerdata = doc.data.players[playername] - if playerdata == nil then - return nil - end - local count = playerdata.stored_data.revealed_count[category_id] - if count == nil then - playerdata.stored_data.revealed[category_id] = {} - count = doc.get_entry_count(category_id) - doc.data.categories[category_id].hidden_count - playerdata.stored_data.revealed_count[category_id] = count - return count - else - return count - end -end - --- Returns how many entries are hidden from the player -function doc.get_hidden_count(playername, category_id) - local playerdata = doc.data.players[playername] - if playerdata == nil then - return nil - end - local total = doc.get_entry_count(category_id) - local rcount = playerdata.stored_data.revealed_count[category_id] - if rcount == nil then - return total - else - return total - rcount - end -end - --- Returns the currently viewed entry and/or category of the player -function doc.get_selection(playername) - local playerdata = doc.data.players[playername] - if playerdata then - local cat = playerdata.category - if cat then - local entry = playerdata.entry - if entry then - return cat, entry - else - return cat - end - else - return nil - end - else - return nil - end -end - --- Template function templates, to be used for build_formspec in doc.add_category -doc.entry_builders = {} - --- Scrollable freeform text -function doc.entry_builders.text(data) - local formstring = doc.widgets.text(data, doc.FORMSPEC.ENTRY_START_X, doc.FORMSPEC.ENTRY_START_Y, doc.FORMSPEC.ENTRY_WIDTH - 0.4, doc.FORMSPEC.ENTRY_HEIGHT) - return formstring -end - --- Scrollable freeform text with an optional standard gallery (3 rows, 3:2 aspect ratio) -function doc.entry_builders.text_and_gallery(data, playername) - -- How much height the image gallery “steals” from the text widget - local stolen_height = 0 - local formstring = "" - -- Only add the gallery if images are in the data, otherwise, the text widget gets all of the space - if data.images then - local gallery - gallery, stolen_height = doc.widgets.gallery(data.images, playername, nil, doc.FORMSPEC.ENTRY_END_Y + 0.2, nil, nil, nil, nil, false) - formstring = formstring .. gallery - end - formstring = formstring .. doc.widgets.text(data.text, - doc.FORMSPEC.ENTRY_START_X, - doc.FORMSPEC.ENTRY_START_Y, - doc.FORMSPEC.ENTRY_WIDTH - 0.4, - doc.FORMSPEC.ENTRY_HEIGHT - stolen_height) - - return formstring -end - -doc.widgets = {} - --- Scrollable freeform text -function doc.widgets.text(data, x, y, width, height) - if x == nil then - x = doc.FORMSPEC.ENTRY_START_X - end - -- Offset to table[], which was used for this in a previous version - local xfix = x + 0.35 - if y == nil then - y = doc.FORMSPEC.ENTRY_START_Y - end - if width == nil then - width = doc.FORMSPEC.ENTRY_WIDTH - end - if height == nil then - height = doc.FORMSPEC.ENTRY_HEIGHT - end - -- Weird offset for textarea[] - local heightfix = height + 1 - - -- Also add background box - local formstring = "box["..tostring(x-0.175)..","..tostring(y)..";"..tostring(width)..","..tostring(height)..";#000000]" .. - "textarea["..tostring(xfix)..","..tostring(y)..";"..tostring(width)..","..tostring(heightfix)..";;;"..minetest.formspec_escape(data).."]" - return formstring -end - --- Image gallery --- Currently, only one gallery per entry is supported. TODO: Add support for multiple galleries in an entry (low priority) -function doc.widgets.gallery(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top) - if playername == nil then return nil end -- emergency exit - - local formstring = "" - - -- Defaults - if x == nil then - if align_left == false then - x = doc.FORMSPEC.ENTRY_END_X - else - x = doc.FORMSPEC.ENTRY_START_X - end - end - if y == nil then - if align_top == false then - y = doc.FORMSPEC.ENTRY_END_Y - else - y = doc.FORMSPEC.ENTRY_START_Y - end - end - if width == nil then width = doc.FORMSPEC.ENTRY_WIDTH end - if rows == nil then rows = 3 end - - if align_left == false then - x = x - width - end - - local imageindex = doc.data.players[playername].galidx - doc.data.players[playername].maxgalidx = #imagedata - doc.data.players[playername].galrows = rows - - if aspect_ratio == nil then aspect_ratio = (2/3) end - local pos = 0 - local totalimagewidth, iw, ih - local bw = 0.5 - local buttonoffset = 0 - if #imagedata > rows then - totalimagewidth = width - bw*2 - iw = totalimagewidth / rows - ih = iw * aspect_ratio - if align_top == false then - y = y - ih - end - - local tt - if imageindex > 1 then - formstring = formstring .. "button["..x..","..y..";"..bw..","..ih..";doc_button_gallery_prev;"..F("<").."]" - if rows == 1 then - tt = F("Show previous image") - else - tt = F("Show previous gallery page") - end - formstring = formstring .. "tooltip[doc_button_gallery_prev;"..tt.."]" - end - if (imageindex + rows) <= #imagedata then - local rightx = buttonoffset + (x + rows * iw) - formstring = formstring .. "button["..rightx..","..y..";"..bw..","..ih..";doc_button_gallery_next;"..F(">").."]" - if rows == 1 then - tt = F("Show next image") - else - tt = F("Show next gallery page") - end - formstring = formstring .. "tooltip[doc_button_gallery_next;"..tt.."]" - end - buttonoffset = bw - else - totalimagewidth = width - iw = totalimagewidth / rows - ih = iw * aspect_ratio - if align_top == false then - y = y - ih - end - end - for i=imageindex, math.min(#imagedata, (imageindex-1)+rows) do - local xoffset = buttonoffset + (x + pos * iw) - local nx = xoffset - 0.2 - local ny = y - 0.05 - if imagedata[i].imagetype == "item" then - formstring = formstring .. "item_image["..xoffset..","..y..";"..iw..","..ih..";"..imagedata[i].image.."]" - else - formstring = formstring .. "image["..xoffset..","..y..";"..iw..","..ih..";"..imagedata[i].image.."]" - end - formstring = formstring .. "label["..nx..","..ny..";"..i.."]" - pos = pos + 1 - end - return formstring, ih -end - --- Direct formspec -function doc.entry_builders.formspec(data) - return data -end - ---[[ Internal stuff ]] - --- Loading and saving player data -do - local filepath = minetest.get_worldpath().."/doc.mt" - local file = io.open(filepath, "r") - if file then - minetest.log("action", "[doc] doc.mt opened.") - local string = file:read() - io.close(file) - if string then - local savetable = minetest.deserialize(string) - for name, players_stored_data in pairs(savetable.players_stored_data) do - doc.data.players[name] = {} - doc.data.players[name].stored_data = players_stored_data - end - minetest.log("action", "[doc] doc.mt successfully read.") - end - end -end - -function doc.save_to_file() - local savetable = {} - savetable.players_stored_data = {} - for name, playerdata in pairs(doc.data.players) do - savetable.players_stored_data[name] = playerdata.stored_data - end - - local savestring = minetest.serialize(savetable) - - local filepath = minetest.get_worldpath().."/doc.mt" - local file = io.open(filepath, "w") - if file then - file:write(savestring) - io.close(file) - minetest.log("action", "[doc] Wrote player data into "..filepath..".") - else - minetest.log("error", "[doc] Failed to write player data into "..filepath..".") - end -end - -minetest.register_on_leaveplayer(function(player) - doc.save_to_file() -end) - -minetest.register_on_shutdown(function() - minetest.log("action", "[doc] Server shuts down. Player data is about to be saved.") - doc.save_to_file() -end) - ---[[ Functions for internal use ]] - -function doc.formspec_core(tab) - if tab == nil then tab = 1 else tab = tostring(tab) end - return "size["..doc.FORMSPEC.WIDTH..","..doc.FORMSPEC.HEIGHT.."]".. - "tabheader[0,0;doc_header;".. - minetest.formspec_escape(S("Category list")) .. "," .. - minetest.formspec_escape(S("Entry list")) .. "," .. - minetest.formspec_escape(S("Entry")) .. ";" - ..tab..";false;false]" - -- Let the Game decide on the style, such as background, etc. -end - -function doc.formspec_main(playername) - local formstring = "textarea[0.35,0;"..doc.FORMSPEC.WIDTH..",1;;;"..minetest.formspec_escape(DOC_INTRO) .. "\n" - local notify_checkbox_x, notify_checkbox_y - if doc.get_category_count() >= 1 then - formstring = formstring .. F("Please select a category you wish to learn more about:").."]" - if doc.get_category_count() <= (CATEGORYFIELDSIZE.WIDTH * CATEGORYFIELDSIZE.HEIGHT) then - local y = 1 - local x = 1 - -- Show all categories in order - for c=1,#doc.data.category_order do - local id = doc.data.category_order[c] - local data = doc.data.categories[id] - local bw = doc.FORMSPEC.WIDTH / math.floor(((doc.data.category_count-1) / CATEGORYFIELDSIZE.HEIGHT)+1) - -- Skip categories which do not exist - if data then - -- Category buton - local button = "button["..((x-1)*bw)..","..y..";"..bw..",1;doc_button_category_"..id..";"..minetest.formspec_escape(data.def.name).."]" - local tooltip = "" - -- Optional description - if data.def.description then - tooltip = "tooltip[doc_button_category_"..id..";"..minetest.formspec_escape(data.def.description).."]" - end - formstring = formstring .. button .. tooltip - y = y + 1 - if y > CATEGORYFIELDSIZE.HEIGHT then - x = x + 1 - y = 1 - end - end - end - notify_checkbox_x = 0 - notify_checkbox_y = doc.FORMSPEC.HEIGHT-0.5 - else - formstring = formstring .. "textlist[0,1;"..(doc.FORMSPEC.WIDTH-0.2)..","..(doc.FORMSPEC.HEIGHT-2)..";doc_mainlist;" - for c=1,#doc.data.category_order do - local id = doc.data.category_order[c] - local data = doc.data.categories[id] - formstring = formstring .. minetest.formspec_escape(data.def.name) - if c < #doc.data.category_order then - formstring = formstring .. "," - end - end - local sel = doc.data.categories[doc.data.players[playername].category] - if sel then - formstring = formstring .. ";" - formstring = formstring .. doc.data.categories[doc.data.players[playername].category].order_position - end - formstring = formstring .. "]" - formstring = formstring .. "button[0,"..(doc.FORMSPEC.HEIGHT-1)..";3,1;doc_button_goto_category;"..F("Show category").."]" - notify_checkbox_x = 3.5 - notify_checkbox_y = doc.FORMSPEC.HEIGHT-1 - end - local text - if mod_central_messages then - text = F("Notify me when new help is available") - else - text = F("Play notification sound when new help is available") - end - formstring = formstring .. "checkbox["..notify_checkbox_x..","..notify_checkbox_y..";doc_setting_notify_on_reveal;"..text..";".. - tostring(doc.data.players[playername].stored_data.notify_on_reveal == true) .. "]" - else - formstring = formstring .. "]" - end - return formstring -end - -function doc.formspec_error_no_categories() - local formstring = "size[8,6]textarea[0.25,0;8,6;;" - formstring = formstring .. - minetest.formspec_escape( - colorize(COLOR_ERROR, S("Error: No help available.")) .. "\n\n" .. -S("No categories have been registered, but they are required to provide help.").."\n".. -S("The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.")) .. "\n\n" .. -S("Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.") - formstring = formstring .. ";]button_exit[3,5;2,1;okay;"..F("OK").."]" - return formstring -end - -function doc.formspec_error_hidden(category_id, entry_id) - local formstring = "size[8,6]textarea[0.25,0;8,6;;" - formstring = formstring .. minetest.formspec_escape( - colorize(COLOR_ERROR, S("Error: Access denied.")) .. "\n\n" .. - S("Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.")) - formstring = formstring .. ";]button_exit[3,5;2,1;okay;"..F("OK").."]" - return formstring -end - -function doc.generate_entry_list(cid, playername) - local formstring - if doc.data.players[playername].entry_textlist == nil - or doc.data.players[playername].catsel_list == nil - or doc.data.players[playername].category ~= cid - or doc.data.players[playername].entry_textlist_needs_updating == true then - local entry_textlist = "textlist[0,1;"..(doc.FORMSPEC.WIDTH-0.2)..","..(doc.FORMSPEC.HEIGHT-2)..";doc_catlist;" - local counter = 0 - doc.data.players[playername].entry_ids = {} - local entries = doc.get_sorted_entry_names(cid) - doc.data.players[playername].catsel_list = {} - for i=1, #entries do - local eid = entries[i] - local edata = doc.data.categories[cid].entries[eid] - if doc.entry_revealed(playername, cid, eid) then - table.insert(doc.data.players[playername].entry_ids, eid) - doc.data.players[playername].catsel_list[eid] = counter + 1 - -- Colorize entries based on viewed status - local viewedprefix = COLOR_NOT_VIEWED - local name = edata.name - if name == nil or name == "" then - name = S("Nameless entry (@1)", eid) - if doc.entry_viewed(playername, cid, eid) then - viewedprefix = "#FF4444" - else - viewedprefix = COLOR_ERROR - end - elseif doc.entry_viewed(playername, cid, eid) then - viewedprefix = COLOR_VIEWED - end - entry_textlist = entry_textlist .. viewedprefix .. minetest.formspec_escape(name) .. "," - counter = counter + 1 - end - end - if counter >= 1 then - entry_textlist = string.sub(entry_textlist, 1, #entry_textlist-1) - end - local catsel = doc.data.players[playername].catsel - if catsel then - entry_textlist = entry_textlist .. ";"..catsel - end - entry_textlist = entry_textlist .. "]" - doc.data.players[playername].entry_textlist = entry_textlist - formstring = entry_textlist - doc.data.players[playername].entry_textlist_needs_updating = false - else - formstring = doc.data.players[playername].entry_textlist - end - return formstring -end - -function doc.get_sorted_entry_names(cid) - local sort_table = {} - local entry_table = {} - local cat = doc.data.categories[cid] - local used_eids = {} - -- Helper function to extract the entry ID out of the output table - local function extract(entry_table) - local eids = {} - for k,v in pairs(entry_table) do - local eid = v.eid - table.insert(eids, eid) - end - return eids - end - -- Predefined sorting - if cat.def.sorting == "custom" then - for i=1,#cat.def.sorting_data do - local new_entry = table.copy(cat.entries[cat.def.sorting_data[i]]) - new_entry.eid = cat.def.sorting_data[i] - table.insert(entry_table, new_entry) - used_eids[cat.def.sorting_data[i]] = true - end - end - for eid,entry in pairs(cat.entries) do - local new_entry = table.copy(entry) - new_entry.eid = eid - if not used_eids[eid] then - table.insert(entry_table, new_entry) - end - table.insert(sort_table, entry.name) - end - if cat.def.sorting == "custom" then - return extract(entry_table) - else - table.sort(sort_table) - end - local reverse_sort_table = table.copy(sort_table) - for i=1, #sort_table do - reverse_sort_table[sort_table[i]] = i - end - local comp - if cat.def.sorting ~= "nosort" then - -- Sorting by user function - if cat.def.sorting == "function" then - comp = cat.def.sorting_data - -- Alphabetic sorting - elseif cat.def.sorting == "abc" or cat.def.sorting == nil then - comp = function(e1, e2) - if reverse_sort_table[e1.name] < reverse_sort_table[e2.name] then return true else return false end - end - end - table.sort(entry_table, comp) - end - - return extract(entry_table) -end - -function doc.formspec_category(id, playername) - local formstring - if id == nil then - formstring = "label[0,0;"..F("Help > (No Category)") .. "]" - formstring = formstring .. "label[0,0.5;"..F("You haven't chosen a category yet. Please choose one in the category list first.").."]" - formstring = formstring .. "button[0,1;3,1;doc_button_goto_main;"..F("Go to category list").."]" - else - formstring = "label[0,0;"..minetest.formspec_escape(S("Help > @1", doc.data.categories[id].def.name)).."]" - local total = doc.get_entry_count(id) - if total >= 1 then - local revealed = doc.get_revealed_count(playername, id) - if revealed == 0 then - formstring = formstring .. "label[0,0.5;"..minetest.formspec_escape(S("Currently all entries in this category are hidden from you.").."\n"..S("Unlock new entries by progressing in the game.")).."]" - formstring = formstring .. "button[0,1.5;3,1;doc_button_goto_main;"..F("Go to category list").."]" - else - formstring = formstring .. "label[0,0.5;"..F("This category has the following entries:").."]" - formstring = formstring .. doc.generate_entry_list(id, playername) - formstring = formstring .. "button[0,"..(doc.FORMSPEC.HEIGHT-1)..";3,1;doc_button_goto_entry;"..F("Show entry").."]" - formstring = formstring .. "label["..(doc.FORMSPEC.WIDTH-4)..","..(doc.FORMSPEC.HEIGHT-1)..";"..minetest.formspec_escape(S("Number of entries: @1", total)).."\n" - local viewed = doc.get_viewed_count(playername, id) - local hidden = total - revealed - local new = total - viewed - hidden - -- TODO/FIXME: Check if number of hidden/viewed entries is always correct - if viewed < total then - formstring = formstring .. colorize(COLOR_NOT_VIEWED, minetest.formspec_escape(S("New entries: @1", new))) - if hidden > 0 then - formstring = formstring .. "\n" - formstring = formstring .. colorize(COLOR_HIDDEN, minetest.formspec_escape(S("Hidden entries: @1", hidden))).."]" - else - formstring = formstring .. "]" - end - else - formstring = formstring .. F("All entries read.").."]" - end - end - else - formstring = formstring .. "label[0,0.5;"..F("This category is empty.").."]" - formstring = formstring .. "button[0,1.5;3,1;doc_button_goto_main;"..F("Go to category list").."]" - end - end - return formstring -end - -function doc.formspec_entry_navigation(category_id, entry_id) - if doc.get_entry_count(category_id) < 1 then - return "" - end - local formstring = "" - formstring = formstring .. "button["..(doc.FORMSPEC.WIDTH-2)..","..(doc.FORMSPEC.HEIGHT-0.5)..";1,1;doc_button_goto_prev;"..F("<").."]" - formstring = formstring .. "button["..(doc.FORMSPEC.WIDTH-1)..","..(doc.FORMSPEC.HEIGHT-0.5)..";1,1;doc_button_goto_next;"..F(">").."]" - formstring = formstring .. "tooltip[doc_button_goto_prev;"..F("Show previous entry").."]" - formstring = formstring .. "tooltip[doc_button_goto_next;"..F("Show next entry").."]" - return formstring -end - -function doc.formspec_entry(category_id, entry_id, playername) - local formstring - if category_id == nil then - formstring = "label[0,0;"..F("Help > (No Category)") .. "]" - formstring = formstring .. "label[0,0.5;"..F("You haven't chosen a category yet. Please choose one in the category list first.").."]" - formstring = formstring .. "button[0,1;3,1;doc_button_goto_main;"..F("Go to category list").."]" - elseif entry_id == nil then - formstring = "label[0,0;"..minetest.formspec_escape(S("Help > @1 > (No Entry)", doc.data.categories[category_id].def.name)) .. "]" - if doc.get_entry_count(category_id) >= 1 then - formstring = formstring .. "label[0,0.5;"..F("You haven't chosen an entry yet. Please choose one in the entry list first.").."]" - formstring = formstring .. "button[0,1.5;3,1;doc_button_goto_category;"..F("Go to entry list").."]" - else - formstring = formstring .. "label[0,0.5;"..F("This category does not have any entries.").."]" - formstring = formstring .. "button[0,1.5;3,1;doc_button_goto_main;"..F("Go to category list").."]" - end - else - - local category = doc.data.categories[category_id] - local entry = get_entry(category_id, entry_id) - local ename = entry.name - if ename == nil or ename == "" then - ename = S("Nameless entry (@1)", entry_id) - end - - formstring = "style_type[textarea;textcolor=#FFFFFF]" - formstring = formstring .. "label[0,0;"..minetest.formspec_escape(S("Help > @1 > @2", category.def.name, ename)).."]" - formstring = formstring .. category.def.build_formspec(entry.data, playername) - formstring = formstring .. doc.formspec_entry_navigation(category_id, entry_id) - end - return formstring -end - -function doc.process_form(player,formname,fields) - local playername = player:get_player_name() - --[[ process clicks on the tab header ]] - if(formname == "doc:main" or formname == "doc:category" or formname == "doc:entry") then - if fields.doc_header then - local tab = tonumber(fields.doc_header) - local formspec, subformname, contents - local cid, eid - cid = doc.data.players[playername].category - eid = doc.data.players[playername].entry - if(tab==1) then - contents = doc.formspec_main(playername) - subformname = "main" - elseif(tab==2) then - contents = doc.formspec_category(cid, playername) - subformname = "category" - elseif(tab==3) then - doc.data.players[playername].galidx = 1 - contents = doc.formspec_entry(cid, eid, playername) - if cid and eid then - doc.mark_entry_as_viewed(playername, cid, eid) - end - subformname = "entry" - end - formspec = doc.formspec_core(tab)..contents - minetest.show_formspec(playername, "doc:" .. subformname, formspec) - return - end - end - if(formname == "doc:main") then - for cid,_ in pairs(doc.data.categories) do - if fields["doc_button_category_"..cid] then - doc.data.players[playername].catsel = nil - doc.data.players[playername].category = cid - doc.data.players[playername].entry = nil - doc.data.players[playername].entry_textlist_needs_updating = true - local formspec = doc.formspec_core(2)..doc.formspec_category(cid, playername) - minetest.show_formspec(playername, "doc:category", formspec) - break - end - end - if fields["doc_mainlist"] then - local event = minetest.explode_textlist_event(fields["doc_mainlist"]) - local cid = doc.data.category_order[event.index] - if cid then - if event.type == "CHG" then - doc.data.players[playername].catsel = nil - doc.data.players[playername].category = cid - doc.data.players[playername].entry = nil - doc.data.players[playername].entry_textlist_needs_updating = true - elseif event.type == "DCL" then - doc.data.players[playername].catsel = nil - doc.data.players[playername].category = cid - doc.data.players[playername].entry = nil - doc.data.players[playername].entry_textlist_needs_updating = true - local formspec = doc.formspec_core(2)..doc.formspec_category(cid, playername) - minetest.show_formspec(playername, "doc:category", formspec) - end - end - end - if fields["doc_button_goto_category"] then - local cid = doc.data.players[playername].category - doc.data.players[playername].catsel = nil - doc.data.players[playername].entry = nil - doc.data.players[playername].entry_textlist_needs_updating = true - local formspec = doc.formspec_core(2)..doc.formspec_category(cid, playername) - minetest.show_formspec(playername, "doc:category", formspec) - end - if fields["doc_setting_notify_on_reveal"] then - doc.data.players[playername].stored_data.notify_on_reveal = fields["doc_setting_notify_on_reveal"] == "true" - end - elseif(formname == "doc:category") then - if fields["doc_button_goto_entry"] then - local cid = doc.data.players[playername].category - if cid then - local eid = nil - local eids, catsel = doc.data.players[playername].entry_ids, doc.data.players[playername].catsel - if eids and catsel then - eid = eids[catsel] - end - doc.data.players[playername].galidx = 1 - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) - minetest.show_formspec(playername, "doc:entry", formspec) - doc.mark_entry_as_viewed(playername, cid, eid) - end - end - if fields["doc_button_goto_main"] then - local formspec = doc.formspec_core(1)..doc.formspec_main(playername) - minetest.show_formspec(playername, "doc:main", formspec) - end - if fields["doc_catlist"] then - local event = minetest.explode_textlist_event(fields["doc_catlist"]) - if event.type == "CHG" then - doc.data.players[playername].catsel = event.index - doc.data.players[playername].entry = doc.data.players[playername].entry_ids[event.index] - doc.data.players[playername].entry_textlist_needs_updating = true - elseif event.type == "DCL" then - local cid = doc.data.players[playername].category - local eid = nil - local eids, catsel = doc.data.players[playername].entry_ids, event.index - if eids and catsel then - eid = eids[catsel] - end - doc.mark_entry_as_viewed(playername, cid, eid) - doc.data.players[playername].entry_textlist_needs_updating = true - doc.data.players[playername].galidx = 1 - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) - minetest.show_formspec(playername, "doc:entry", formspec) - end - end - elseif(formname == "doc:entry") then - if fields["doc_button_goto_main"] then - local formspec = doc.formspec_core(1)..doc.formspec_main(playername) - minetest.show_formspec(playername, "doc:main", formspec) - elseif fields["doc_button_goto_category"] then - local formspec = doc.formspec_core(2)..doc.formspec_category(doc.data.players[playername].category, playername) - minetest.show_formspec(playername, "doc:category", formspec) - elseif fields["doc_button_goto_next"] then - if doc.data.players[playername].catsel == nil then return end -- emergency exit - local eids = doc.data.players[playername].entry_ids - local cid = doc.data.players[playername].category - local new_catsel= doc.data.players[playername].catsel + 1 - local new_eid = eids[new_catsel] - if #eids > 1 and new_catsel <= #eids then - doc.mark_entry_as_viewed(playername, cid, new_eid) - doc.data.players[playername].catsel = new_catsel - doc.data.players[playername].entry = new_eid - doc.data.players[playername].galidx = 1 - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid, playername) - minetest.show_formspec(playername, "doc:entry", formspec) - end - elseif fields["doc_button_goto_prev"] then - if doc.data.players[playername].catsel == nil then return end -- emergency exit - local eids = doc.data.players[playername].entry_ids - local cid = doc.data.players[playername].category - local new_catsel= doc.data.players[playername].catsel - 1 - local new_eid = eids[new_catsel] - if #eids > 1 and new_catsel >= 1 then - doc.mark_entry_as_viewed(playername, cid, new_eid) - doc.data.players[playername].catsel = new_catsel - doc.data.players[playername].entry = new_eid - doc.data.players[playername].galidx = 1 - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid, playername) - minetest.show_formspec(playername, "doc:entry", formspec) - end - elseif fields["doc_button_gallery_prev"] then - local cid, eid = doc.get_selection(playername) - if doc.data.players[playername].galidx - doc.data.players[playername].galrows > 0 then - doc.data.players[playername].galidx = doc.data.players[playername].galidx - doc.data.players[playername].galrows - end - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) - minetest.show_formspec(playername, "doc:entry", formspec) - elseif fields["doc_button_gallery_next"] then - local cid, eid = doc.get_selection(playername) - if doc.data.players[playername].galidx + doc.data.players[playername].galrows <= doc.data.players[playername].maxgalidx then - doc.data.players[playername].galidx = doc.data.players[playername].galidx + doc.data.players[playername].galrows - end - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) - minetest.show_formspec(playername, "doc:entry", formspec) - end - else - if fields["doc_inventory_plus"] and mod_inventory_plus then - doc.show_doc(playername) - return - end - end -end - -minetest.register_on_player_receive_fields(doc.process_form) - -minetest.register_chatcommand("helpform", { - params = "", - description = S("Open a window providing help entries about Minetest and more"), - privs = {}, - func = function(playername, param) - doc.show_doc(playername) - end, - } -) - -minetest.register_on_joinplayer(function(player) - local playername = player:get_player_name() - local playerdata = doc.data.players[playername] - if playerdata == nil then - -- Initialize player data - doc.data.players[playername] = {} - playerdata = doc.data.players[playername] - -- Gallery index, stores current index of first displayed image in a gallery - playerdata.galidx = 1 - -- Maximum gallery index (index of last image in gallery) - playerdata.maxgalidx = 1 - -- Number of rows in an gallery of the current entry - playerdata.galrows = 1 - -- Table for persistant data - playerdata.stored_data = {} - -- Contains viewed entries - playerdata.stored_data.viewed = {} - -- Count viewed entries - playerdata.stored_data.viewed_count = {} - -- Contains revealed/unhidden entries - playerdata.stored_data.revealed = {} - -- Count revealed entries - playerdata.stored_data.revealed_count = {} - else - -- Completely rebuild viewed and revealed counts from scratch - for cid, cat in pairs(doc.data.categories) do - if playerdata.stored_data.viewed[cid] == nil then - playerdata.stored_data.viewed[cid] = {} - end - if playerdata.stored_data.revealed[cid] == nil then - playerdata.stored_data.revealed[cid] = {} - end - local vc = 0 - local rc = doc.get_entry_count(cid) - doc.data.categories[cid].hidden_count - for eid, entry in pairs(cat.entries) do - if playerdata.stored_data.viewed[cid][eid] then - vc = vc + 1 - playerdata.stored_data.revealed[cid][eid] = true - end - if playerdata.stored_data.revealed[cid][eid] and entry.hidden then - rc = rc + 1 - end - end - playerdata.stored_data.viewed_count[cid] = vc - playerdata.stored_data.revealed_count[cid] = rc - end - end - - -- Add button for Inventory++ - if mod_inventory_plus then - inventory_plus.register_button(player, "doc_inventory_plus", S("Help")) - end -end) - ----[[ Add buttons for inventory mods ]] -local function button_action(player) - doc.show_doc(player:get_player_name()) -end - --- Unified Inventory -if minetest.get_modpath("unified_inventory") then - unified_inventory.register_button("doc", { - type = "image", - image = "doc_button_icon_hires.png", - tooltip = S("Help"), - action = button_action, - }) -end - --- sfinv_buttons -if minetest.get_modpath("sfinv_buttons") then - sfinv_buttons.register_button("doc", { - image = "doc_button_icon_lores.png", - tooltip = S("Collection of help texts"), - title = S("Help"), - action = button_action, - }) -end - - -minetest.register_privilege("help_reveal", { - description = S("Allows you to reveal all hidden help entries with /help_reveal"), - give_to_singleplayer = false -}) - -minetest.register_chatcommand("help_reveal", { - params = "", - description = S("Reveal all hidden help entries to you"), - privs = { help_reveal = true }, - func = function(name, param) - doc.mark_all_entries_as_revealed(name) - end, -}) diff --git a/mods/HELP/doc/doc/locale/doc.de.tr b/mods/HELP/doc/doc/locale/doc.de.tr deleted file mode 100644 index 39fc72514..000000000 --- a/mods/HELP/doc/doc/locale/doc.de.tr +++ /dev/null @@ -1,51 +0,0 @@ -# textdomain:doc -<=< ->=> -Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=Der Zugriff auf den angeforderten Eintrag wurde verweigert; dieser Eintrag ist geheim. Sie können durch weiteren Spielfortschritt den Zugriff freischalten. Finden Sie selbst heraus, wie Sie diesen Eintrag freischalten können. -All entries read.=Alle Einträge gelesen. -All help entries revealed!=Alle Hilfseinträge aufgedeckt! -All help entries are already revealed.=Alle Hilfseinträge sind schon aufgedeckt. -Allows you to reveal all hidden help entries with /help_reveal=Ermöglicht es Ihnen, alle verborgenen Hilfseinträge mit /help_reveal freizuschalten -Category list=Kategorienliste -Currently all entries in this category are hidden from you.=Momentan sind alle Einträge in dieser Kategorie vor Ihnen verborgen. -Unlock new entries by progressing in the game.=Schalten Sie neue Einträge frei, indem Sie im Spiel fortschreiten. -Help=Hilfe -Entry=Eintrag -Entry list=Eintragsliste -Error: Access denied.=Fehler: Zugriff verweigert. -Error: No help available.=Fehler: Keine Hilfe verfügbar. -Go to category list=Zur Kategorienliste -Go to entry list=Zur Eintragsliste -Help > (No Category)=Hilfe > (Keine Kategorie) -Help > @1=Hilfe > @1 -Help > @1 > @2=Hilfe > @1 > @2 -Help > @1 > (No Entry)=Hilfe > @1 > (Kein Eintrag) -Hidden entries: @1=Verborgene Einträge: @1 -New entries: @1=Neue Einträge: @1 -New help entry unlocked: @1 > @2=Neuen Hilfseintrag freigeschaltet: @1 > @2 -No categories have been registered, but they are required to provide help.=Es wurden keine Kategorien registriert, aber sie werden benötigt, um die Hilfe anbieten zu können. -The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=Das Dokumentationssystem [doc] bringt von sich aus keine eigenen Hilfsinhalte mit, es benötigt zusätzliche Mods, um sie hinzuzufügen. Bitte stellen Sie sicher, dass solche Mods für diese Welt aktiviert sind und versuchen Sie es erneut. -Number of entries: @1=Anzahl der Einträge: @1 -OK=OK -Open a window providing help entries about Minetest and more=Ein Fenster mit Hilfseinträgen über Minetest und mehr öffnen -Please select a category you wish to learn more about:=Bitte wählen Sie eine Kategorie, über die Sie mehr erfahren möchten, aus: -Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Empfohlene Mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia. -Reveal all hidden help entries to you=Alle für Sie verborgenen Hilfseinträge freischalten -Show entry=Eintrag zeigen -Show category=Kategorie zeigen -Show next entry=Nächsten Eintrag zeigen -Show previous entry=Vorherigen Eintrag zeigen -This category does not have any entries.=Diese Kategorie hat keine Einträge. -This category has the following entries:=Diese Kategorie hat die folgenden Einträge: -This category is empty.=Diese Kategorie ist leer. -This is the help.=Dies ist die Hilfe. -You haven't chosen a category yet. Please choose one in the category list first.=Sie haben noch keine Kategorie gewählt, Bitte wählen Sie zuerst eine aus. -You haven't chosen an entry yet. Please choose one in the entry list first.=Sie haben noch keinen Eintrag gewählt. Bitte wählen Sie zuerst einen aus. -Nameless entry (@1)=Namenloser Eintrag (@1) -Collection of help texts=Sammlung von Hilfstexten -Notify me when new help is available=Benachrichtigen, wenn neue Hilfe verfügbar ist -Play notification sound when new help is available=Toneffekt abspielen, wenn neue Hilfe verfügbar ist -Show previous image=Vorheriges Bild zeigen -Show previous gallery page=Vorherige Galerieseite zeigen -Show next image=Nächstes Bild zeigen -Show next gallery page=Nächste Galerieseite zeigen diff --git a/mods/HELP/doc/doc/locale/doc.fr.tr b/mods/HELP/doc/doc/locale/doc.fr.tr deleted file mode 100644 index f7f33b0f5..000000000 --- a/mods/HELP/doc/doc/locale/doc.fr.tr +++ /dev/null @@ -1,52 +0,0 @@ -# textdomain:doc -<=< ->=> -Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=L'accès à cette page a été refusé; cette page est secrète. Vous pouvez débloquer l'accès en progressant dans le jeu. Trouvez comment débloquer cette page. -All entries read.=Toutes les pages sont lues. -All help entries revealed!=Toutes les pages d'aide ont été découvertes ! -All help entries are already revealed.=Toutes les pages d'aide sont déjà découvertes. -Allows you to reveal all hidden help entries with /help_reveal=Vous permet de découvrir toutes les pages d'aide cachées avec /help_reveal -Category list=Liste des catégories -Currently all entries in this category are hidden from you.=Toutes les pages de cette catégories vous sont cachées. -Unlock new entries by progressing in the game.=Débloquez de nouvelles pages en progressant dans le jeu. -Help=Aide -Entry=Page -Entry list=Liste des pages -Error: Access denied.=Erreur : Accès refusé. -Error: No help available.=Erreur : Aucune aide disponible. -# Affichage dans un bouton court -Go to category list=Voir les catégories -Go to entry list=Voir les pages -Help > @1=Aide > @1 -Help > @1 > @2=Aide > @1 > @2 -Help > @1 > (No Entry)=Aide > @1 > (Aucune page) -Help > (No Category)=Aide > (Aucune catégorie) -Hidden entries: @1=Pages cachées : @1 -Nameless entry (@1)=Pages sans nom (@1) -New entries: @1=Nouvelles pages : @1 -New help entry unlocked: @1 > @2=Nouvelles pages d'aide débloquées : @1 -No categories have been registered, but they are required to provide help.=Aucune catégorie n'a été enregistrée, mais elles sont nécessaires pour fournir l'aide. -The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=Le Système de Documentation [doc] n'est fourni avec aucun contenu d'aide, il a besoin d'autres mods pour ajouter le contenu de l'aide. Vérifiez que de tels mods sont activés pour ce monde, et réessayez. -Number of entries: @1=Nombre de pages : @1 -OK=OK -Open a window providing help entries about Minetest and more=Ouvrire une fenêtre contenant les pages d'aides à propos de Minetest. -Please select a category you wish to learn more about:=Veuillez choisir une catégorie pour laquelle vous souhaitez en savoir plus : -Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Mods recommandés : doc_basics, doc_items, doc_identifier, doc_encyclopedia. -Reveal all hidden help entries to you=Révéler toutes les pages d'aide cachées pour vous. -Show entry=Voir la page -Show category=Voir la catégorie -Show next entry=Voir la page suivante -Show previous entry=Voir la page précédente -This category does not have any entries.=Cette catégorie ne contient aucune page. -This category has the following entries:=Cette catégorie contient les pages suivantes : -This category is empty.=Cette catégorie est vide. -This is the help.=Ceci est l'aide. -You haven't chosen a category yet. Please choose one in the category list first.=Vous n'avez pas encore choisi de catégorie. Veulliez d'abord en choisir une dans la liste. -You haven't chosen an entry yet. Please choose one in the entry list first.=Vous n'avez pas encore choisi de page. Veuillez d'abord en choisir une dans la liste. -Collection of help texts=Collection des textes d'aide -Notify me when new help is available=Recevoir une notification quand une nouvelle page d'aide est disponible -Play notification sound when new help is available=Jouer un son de notification lorsqu'une nouvelle page d'aide est disponible -Show previous image=Voir l'image précédente -Show previous gallery page=Voir la page précédente de la galerie -Show next image=Voir l'image suivante -Show next gallery page=Voir la page suivante de la galerie diff --git a/mods/HELP/doc/doc/locale/doc.pl.tr b/mods/HELP/doc/doc/locale/doc.pl.tr deleted file mode 100644 index bd0f3dbaa..000000000 --- a/mods/HELP/doc/doc/locale/doc.pl.tr +++ /dev/null @@ -1,52 +0,0 @@ -# textdomain:doc -<=< ->=> -Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=Brak dostępu do zażądanego wpisu; ten wpis jest tajemnicą. Możesz odblokować do niego dostęp przez robienie postępów w grze. Wymyśl jak go odblokować. -All entries read.=Wszystkie wpisy przeczytane. -All help entries revealed!=Wszystkie wpisy pomocnicze odkryte! -All help entries are already revealed.=Wszystkie wpisy pomocnicze są już odkryte. -Allows you to reveal all hidden help entries with /help_reveal=Pozwala odkryć wszystkie wpisy pomocnicze przy użyciu /help_reveal -Category list=Lista kategorii -Currently all entries in this category are hidden from you.=Aktualnie wszystkie wpisy w tej kategorii są przed tobą ukryte. -Unlock new entries by progressing in the game.=Odblokuj nowe wpisy przez robienie postępów w grze. -Help=Pomoc -Entry=Wpis -Entry list=Lista wpisów -Error: Access denied.=Błąd: Odmowa dostępu. -Error: No help available.=Błąd: Brak dostępnej pomocy. -Go to category list=Idź do listy kategorii -Go to entry list=Idź do listy wpisów -Help > @1=Pomoc > @1 -Help > @1 > @2=Pomoc > @1 > @2 -Help > @1 > (No Entry)=Pomoc > @1 > (Brak wpisu) -Help > (No Category)=Pomoc > (Brak kategorii) -Hidden entries: @1=Ukryte wpisy: @1 -Nameless entry (@1)=Nienazwany wpis (@1) -New entries: @1=Nowe wpisy: @1 -New help entry unlocked: @1 > @2=Nowy wpis pomocniczy odblokowany: @1 > @2 -No categories have been registered, but they are required to provide help.=Nie zarejestrowano żadnych kategorii, ale są one wymagane do uzyskania pomocy. -The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=System dokumentacji [doc] nie ma sam z siebie żadnej zawartości, potrzebuje dodatkowych modów, które dodadzą zawartość. -Number of entries: @1=Liczba wpisów: @1 -OK=OK -Open a window providing help entries about Minetest and more=Otwórz okno aby zobaczyć wpisy pomocnicze na temat Minetest i innych rzeczy -Please select a category you wish to learn more about:=Wybierz kategorię o której chciałbyś się więcej dowiedzieć: -Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Rekomendowane mody: doc_basics, doc_items, doc_identifier, doc_encyclopedia. -Reveal all hidden help entries to you=Odkryj wszystkie ukryte wpisy pomocnicze -Show entry=Pokaż wpis -Show category=Pokaż kategorię -Show next entry=Pokaż następny wpis -Show previous entry=Pokaż poprzedni wpis -This category does not have any entries.=W tej kategorii nie ma żadnych wpisów. -This category has the following entries:=W tej kategorii są następujące wpisy: -This category is empty.=Ta kategoria jest pusta. -This is the help.=To jest pomoc. -You haven't chosen a category yet. Please choose one in the category list first.=Nie wybrano żadnej kategorii. Proszę wybrać jedną z listy kategorii. -You haven't chosen an entry yet. Please choose one in the entry list first.=Nie wybrano wpisu. Proszę wybrać jeden z listy wpisów. -Collection of help texts=Kolekcja tekstów pomocniczych. -Notify me when new help is available=Powiadom mnie gdy nowa pomoc jest dostępna. -Play notification sound when new help is available=Odegraj dźwięk powiadomienia gdy nowa pomoc jest dostępna -Show previous image=Pokaż poprzedni obrazek -Show previous gallery page=Pokaż poprzednią stronę galerii -Show next image=Pokaż następny obrazek -Show next gallery page=Pokaż następną stronę galerii - diff --git a/mods/HELP/doc/doc/locale/doc.pt.tr b/mods/HELP/doc/doc/locale/doc.pt.tr deleted file mode 100644 index 52d683632..000000000 --- a/mods/HELP/doc/doc/locale/doc.pt.tr +++ /dev/null @@ -1,43 +0,0 @@ -# textdomain:doc -<= ->= -Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=O acesso à entrada solicitada foi negado; essa entrada é secreta. Você pode desbloquear o acesso progredindo no jogo. Descobrir por conta própria como desbloquear essa entrada. -All entries read.=Todas as entradas lidas. -All help entries revealed!=Todas as entradas de ajuda reveladas! -All help entries are already revealed.=Todas as entradas de ajuda já foram reveladas. -Allows you to reveal all hidden help entries with /help_reveal=Permite revelar todas as entradas de ajuda ocultas com /help_reveal -Category list=Lista de Categorias -Currently all entries in this category are hidden from you.\\nUnlock new entries by progressing in the game.=Atualmente, todas as entradas nessa categoria estão ocultas a você.\\nDesbloqueie novas entradas progredindo no jogo. -Help=Ajuda -Entry=Entrada -Entry list=Lista de Entradas -Error: Access denied.=Erro: Acesso negado. -Error: No help available.=Erro: Nenhuma ajuda disponível. -Go to category list=Ver categorias -Go to entry list=Ir para a lista de entradas -Help > @1=Ajuda > @1 -Help > @1 > @2=Ajuda > @1 > @2 -Help > @1 > (No Entry)=Ajuda > @1 > (Nenhuma Entrada) -Help > (No Category)=Ajuda > (Nenhuma Categoria) -Hidden entries: @1=Entradas ocultas: @1 -Nameless entry (@1)=Entrada sem nome (@1) -New entries: @1=Novas entradas: (@1) -New help entry unlocked: @1 > @2=Nova entrada de ajuda desbloqueada: @1 > @2 -No categories have been registered, but they are required to provide help.\nThe Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=Nenhuma categoria foi registrada, mas é necessário fornecer ajuda.\nO Sistema de Documentação [doc] não vem com o conteúdo de ajuda, ele precisa de mods adicionais para adicionar conteúdo de ajuda. Por favor, certifique-se de que os mods estão habilitados para este mundo e tente novamente. -Number of entries: @1=Número de entradas: @1 -OK=OK -Open a window providing help entries about Minetest and more=Abra uma janela fornecendo entradas de ajuda sobre o Minetest e mais -Please select a category you wish to learn more about:=Por favor, selecione uma categoria sobre a qual você deseja saber mais: -Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Mods recomendados: doc_basics, doc_items, doc_identifier, doc_encyclopedia. -Reveal all hidden help entries to you=Revela todas as entradas de ajuda ocultas para você -Show entry=Ver entrada -Show category=Ver categoria -Show next entry=Ver próxima entrada -Show previous entry=Ver entrada anterior -This category does not have any entries.=Essa categoria não possui entradas. -This category has the following entries:=Essa categoria tem as seguintes entradas: -This category is empty.=Essa categoria está vazia. -This is the help.=Essa é a ajuda. -You haven't chosen a category yet. Please choose one in the category list first.=Você ainda não escolheu uma categoria. Por favor, escolha uma na lista de categorias primeiro. -You haven't chosen an entry yet. Please choose one in the entry list first.=Você ainda não escolheu uma entrada. Por favor, escolha uma na lista de entrada primeiro. -Collection of help texts=Coleção de textos de ajuda diff --git a/mods/HELP/doc/doc/locale/doc.pt_BR.tr b/mods/HELP/doc/doc/locale/doc.pt_BR.tr deleted file mode 100644 index 52d683632..000000000 --- a/mods/HELP/doc/doc/locale/doc.pt_BR.tr +++ /dev/null @@ -1,43 +0,0 @@ -# textdomain:doc -<= ->= -Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=O acesso à entrada solicitada foi negado; essa entrada é secreta. Você pode desbloquear o acesso progredindo no jogo. Descobrir por conta própria como desbloquear essa entrada. -All entries read.=Todas as entradas lidas. -All help entries revealed!=Todas as entradas de ajuda reveladas! -All help entries are already revealed.=Todas as entradas de ajuda já foram reveladas. -Allows you to reveal all hidden help entries with /help_reveal=Permite revelar todas as entradas de ajuda ocultas com /help_reveal -Category list=Lista de Categorias -Currently all entries in this category are hidden from you.\\nUnlock new entries by progressing in the game.=Atualmente, todas as entradas nessa categoria estão ocultas a você.\\nDesbloqueie novas entradas progredindo no jogo. -Help=Ajuda -Entry=Entrada -Entry list=Lista de Entradas -Error: Access denied.=Erro: Acesso negado. -Error: No help available.=Erro: Nenhuma ajuda disponível. -Go to category list=Ver categorias -Go to entry list=Ir para a lista de entradas -Help > @1=Ajuda > @1 -Help > @1 > @2=Ajuda > @1 > @2 -Help > @1 > (No Entry)=Ajuda > @1 > (Nenhuma Entrada) -Help > (No Category)=Ajuda > (Nenhuma Categoria) -Hidden entries: @1=Entradas ocultas: @1 -Nameless entry (@1)=Entrada sem nome (@1) -New entries: @1=Novas entradas: (@1) -New help entry unlocked: @1 > @2=Nova entrada de ajuda desbloqueada: @1 > @2 -No categories have been registered, but they are required to provide help.\nThe Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=Nenhuma categoria foi registrada, mas é necessário fornecer ajuda.\nO Sistema de Documentação [doc] não vem com o conteúdo de ajuda, ele precisa de mods adicionais para adicionar conteúdo de ajuda. Por favor, certifique-se de que os mods estão habilitados para este mundo e tente novamente. -Number of entries: @1=Número de entradas: @1 -OK=OK -Open a window providing help entries about Minetest and more=Abra uma janela fornecendo entradas de ajuda sobre o Minetest e mais -Please select a category you wish to learn more about:=Por favor, selecione uma categoria sobre a qual você deseja saber mais: -Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Mods recomendados: doc_basics, doc_items, doc_identifier, doc_encyclopedia. -Reveal all hidden help entries to you=Revela todas as entradas de ajuda ocultas para você -Show entry=Ver entrada -Show category=Ver categoria -Show next entry=Ver próxima entrada -Show previous entry=Ver entrada anterior -This category does not have any entries.=Essa categoria não possui entradas. -This category has the following entries:=Essa categoria tem as seguintes entradas: -This category is empty.=Essa categoria está vazia. -This is the help.=Essa é a ajuda. -You haven't chosen a category yet. Please choose one in the category list first.=Você ainda não escolheu uma categoria. Por favor, escolha uma na lista de categorias primeiro. -You haven't chosen an entry yet. Please choose one in the entry list first.=Você ainda não escolheu uma entrada. Por favor, escolha uma na lista de entrada primeiro. -Collection of help texts=Coleção de textos de ajuda diff --git a/mods/HELP/doc/doc/locale/doc.ru.tr b/mods/HELP/doc/doc/locale/doc.ru.tr deleted file mode 100644 index 105f92b11..000000000 --- a/mods/HELP/doc/doc/locale/doc.ru.tr +++ /dev/null @@ -1,51 +0,0 @@ -# textdomain:doc -<=< ->=> -Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=Доступ к запрошенной записи запрещён; эта запись засекречена. Вы можете получить доступ к ней, продвигаясь в игре. Найдите свой способ раскрыть эту запись. -All entries read.=Все записи прочитаны. -All help entries revealed!=Все подсказки открыты! -All help entries are already revealed.=Все подсказки уже открыты. -Allows you to reveal all hidden help entries with /help_reveal=Позволяет вам раскрыть все невидимые подсказки через /help_reveal -Category list=Список категорий -Currently all entries in this category are hidden from you.=Пока что все записи в этой категории скрыты от вас. -Unlock new entries by progressing in the game.=Разблокируйте новые записи, продвигаясь в игре. -Help=Помощь -Entry=Запись -Entry list=Список записей -Error: Access denied.=Ошибка: Доступ запрещён. -Error: No help available.=Ошибка: Помощь недоступна. -Go to category list=К списку категорий -Go to entry list=К списку записей -Help > @1=Помощь > @1 -Help > @1 > @2=Help > @1 > @2 -Help > @1 > (No Entry)=Помощь > @1 > (Нет записи) -Help > (No Category)=Помощь > (Нет категории) -Hidden entries: @1=Скрытые записи: @1 -Nameless entry (@1)=Безымянная запись (@1) -New entries: @1=Новые записи: @1 -New help entry unlocked: @1 > @2=Новая подсказка разблокирована: @1 > @2 -No categories have been registered, but they are required to provide help.=Для предоставления помощи требуются зарегистрированные категории, но они отсутствуют. -The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=Система документации [doc] не предоставляет помощи сама по себе, нужны дополнительные моды для добавления справочной информации. Пожалуйста, убедитесь, что моды включены для этого мира, после чего попробуйте снова. -Number of entries: @1=Количество записей: @1 -OK=О'кей -Open a window providing help entries about Minetest and more=Открыть окно с подсказками о игре Minetest и т. п. -Please select a category you wish to learn more about:=Пожалуйста, выберите категорию, о которой хотите узнать больше: -Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Рекомендованные моды: doc_basics, doc_items, doc_identifier, doc_encyclopedia. -Reveal all hidden help entries to you=Раскрыть все подсказки для вас -Show entry=Показать запись -Show category=Показать категорию -Show next entry=Следующая запись -Show previous entry=Предыдущая запись -This category does not have any entries.=Данная категория не содержит записей. -This category has the following entries:=Эта категория содержит такие записи: -This category is empty.=Эта категория пуста. -This is the help.=Это помощь. -You haven't chosen a category yet. Please choose one in the category list first.=Вы пока не выбрали категорию. Пожалуйста, выберите её из списка, чтобы начать. -You haven't chosen an entry yet. Please choose one in the entry list first.=Вы пока не выбрали запись. Пожалуйста, выберите её из списка, чтобы начать. -Collection of help texts=Собрание справочных текстов -Notify me when new help is available=Уведомить меня, когда новая помощь будет доступна -Play notification sound when new help is available=Воспроизвести предупредительный звук, когда новая помощь будет доступна -Show previous image=Предыдущее изображение -Show previous gallery page=Предыдущая страница галереи -Show next image=Следующее изображение -Show next gallery page=Следующая страница галереи diff --git a/mods/HELP/doc/doc/locale/template.txt b/mods/HELP/doc/doc/locale/template.txt deleted file mode 100644 index 517c4286d..000000000 --- a/mods/HELP/doc/doc/locale/template.txt +++ /dev/null @@ -1,51 +0,0 @@ -# textdomain:doc -<= ->= -Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.= -All entries read.= -All help entries revealed!= -All help entries are already revealed.= -Allows you to reveal all hidden help entries with /help_reveal= -Category list= -Currently all entries in this category are hidden from you.= -Unlock new entries by progressing in the game.= -Help= -Entry= -Entry list= -Error: Access denied.= -Error: No help available.= -Go to category list= -Go to entry list= -Help > @1= -Help > @1 > @2= -Help > @1 > (No Entry)= -Help > (No Category)= -Hidden entries: @1= -Nameless entry (@1)= -New entries: @1= -New help entry unlocked: @1 > @2= -No categories have been registered, but they are required to provide help.= -The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.= -Number of entries: @1= -OK= -Open a window providing help entries about Minetest and more= -Please select a category you wish to learn more about:= -Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.= -Reveal all hidden help entries to you= -Show entry= -Show category= -Show next entry= -Show previous entry= -This category does not have any entries.= -This category has the following entries:= -This category is empty.= -This is the help.= -You haven't chosen a category yet. Please choose one in the category list first.= -You haven't chosen an entry yet. Please choose one in the entry list first.= -Collection of help texts= -Notify me when new help is available= -Play notification sound when new help is available= -Show previous image= -Show previous gallery page= -Show next image= -Show next gallery page= diff --git a/mods/HELP/doc/doc/mod.conf b/mods/HELP/doc/doc/mod.conf deleted file mode 100644 index 0f65ddff7..000000000 --- a/mods/HELP/doc/doc/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = doc -author = Wuzzy -description = A simple in-game documentation system which enables mods to add help entries based on templates. -optional_depends = unified_inventory, sfinv_buttons, central_message, inventory_plus diff --git a/mods/HELP/doc/doc/sounds/doc_reveal.ogg b/mods/HELP/doc/doc/sounds/doc_reveal.ogg deleted file mode 100644 index 3fbe176b6..000000000 Binary files a/mods/HELP/doc/doc/sounds/doc_reveal.ogg and /dev/null differ diff --git a/mods/HELP/doc/doc/textures/doc_awards_icon_generic.png b/mods/HELP/doc/doc/textures/doc_awards_icon_generic.png deleted file mode 100644 index b33fa34ad..000000000 Binary files a/mods/HELP/doc/doc/textures/doc_awards_icon_generic.png and /dev/null differ diff --git a/mods/HELP/doc/doc/textures/doc_button_icon_hires.png b/mods/HELP/doc/doc/textures/doc_button_icon_hires.png deleted file mode 100644 index 25c9fe4e9..000000000 Binary files a/mods/HELP/doc/doc/textures/doc_button_icon_hires.png and /dev/null differ diff --git a/mods/HELP/doc/doc/textures/doc_button_icon_lores.png b/mods/HELP/doc/doc/textures/doc_button_icon_lores.png deleted file mode 100644 index 3df6195c7..000000000 Binary files a/mods/HELP/doc/doc/textures/doc_button_icon_lores.png and /dev/null differ diff --git a/mods/HELP/doc/doc/textures/inventory_plus_doc_inventory_plus.png b/mods/HELP/doc/doc/textures/inventory_plus_doc_inventory_plus.png deleted file mode 100644 index 3df6195c7..000000000 Binary files a/mods/HELP/doc/doc/textures/inventory_plus_doc_inventory_plus.png and /dev/null differ diff --git a/mods/HELP/doc/doc_identifier/API.md b/mods/HELP/doc/doc_identifier/API.md deleted file mode 100644 index fb7f88c3d..000000000 --- a/mods/HELP/doc/doc_identifier/API.md +++ /dev/null @@ -1,40 +0,0 @@ -# Minimal API for `doc_identifier` -## Introduction -The tool can identify blocks and players natively, and also handles falling -nodes (`__builtin:falling_node`) and dropped items (`__builtin:item`) on its -own. - -However, the identifier can't “identify” (=open the appropriate entry) custom -objects because the mod doesn't know which help entry to open (if there is -any). One example would be the boat object (`boats:boat`) from the boats mod -in Minetest Game. -If the player tries to use the tool on an unknown object, an error message is -shown. - -Because of this, this mod provides a minimal API for mods to assign a help -entry to an object type: `doc_identifier.register_object`. - -## `doc.sub.identifier.register_object(object_name, category_id, entry_id)` -Registers the object/entity with the internal name `object_name` to the -entry `entry_id` in the category `category_id`. -It is in the modder's responsibility to make sure that both the category and -entry already exist (use `doc.entry_exists` or depend (optionally or not) on -the respective mods) at the time of the function call, otherwise, stability can -not be guaranteed. - -Returns `nil`. - -### Example -From `doc_minetest_game`: - - if minetest.get_modpath("doc_identifier") ~= nil then - doc.sub.identifier.register_object("boats:boat", "craftitems", "boats:boat") - end - -This enables the tool to be used on the boat object itself. The conditional is -an idiom to check for the existence of this mod. - -## Note on dependencies -If you just need `doc.sub.identifier.register_object` using only an **optional** -dependency for your mod is probably enough. - diff --git a/mods/HELP/doc/doc_identifier/README.md b/mods/HELP/doc/doc_identifier/README.md deleted file mode 100644 index 7afe3b90c..000000000 --- a/mods/HELP/doc/doc_identifier/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Lookup Tool [`doc_identifier`] -Version: 1.2.2 - -## Description -The lookup tool is an useful little helper which can be used to quickly learn -more about about one's closer environment. It identifies blocks, dropped items -and other objects and it shows extensive information about the item on which it -is used, provided documentation is available. - -## How to use the lookup tool -Punch any block or item about you wish to learn more about. This will open up -the help entry of this particular item. -The tool comes in two modes which are changed by a right-click. In liquid mode -(blue) this tool points to liquids as well while in solid mode (red) this is not -the case. Liquid mode is required if you want to identify a liquid. - -## For modders -If you want the tool to identify nodes and (dropped) items, you probably don't -have to do anything, it is probably already supported. The only thing you have -to make sure is that all pointable blocks and items have a help entry, which -is already the case for most items, but you may want to do some testing on -“tricky” items. Consult the documentation of Documentation System [`doc`] -and Item Help [`doc_items`] for getting the item documentation right. - -For the lookup tool to be able to work on custom objects/entities, you have to -use the tiny API of this mod, see `API.md`. - -## License -Everything in this mod is licensed under the MIT License. diff --git a/mods/HELP/doc/doc_identifier/init.lua b/mods/HELP/doc/doc_identifier/init.lua deleted file mode 100644 index c1c2043d3..000000000 --- a/mods/HELP/doc/doc_identifier/init.lua +++ /dev/null @@ -1,211 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_doc_basics = minetest.get_modpath("doc_basics") - -local doc_identifier = {} - -doc_identifier.registered_objects = {} - --- API -doc.sub.identifier = {} - -function doc.sub.identifier.register_object(object_name, category_id, entry_id) - doc_identifier.registered_objects[object_name] = { category = category_id, entry = entry_id } -end - --- END OF API - -function doc_identifier.identify(itemstack, user, pointed_thing) - local username = user:get_player_name() - local function show_message(username, itype, param) - local vsize = 2 - local message - if itype == "error_item" then - message = S("No help entry for this item could be found.") - elseif itype == "error_node" then - message = S("No help entry for this block could be found.") - elseif itype == "error_unknown" then - vsize = vsize + 2 - local mod - if param then - local colon = string.find(param, ":") - if colon and colon > 1 then - mod = string.sub(param,1,colon-1) - end - end - message = S("Error: This node, item or object is undefined. This is always an error.").."\n".. - S("This can happen for the following reasons:").."\n".. - S("• The mod which is required for it is not enabled").."\n".. - S("• The author of the game or a mod has made a mistake") - message = message .. "\n\n" - - if mod then - if minetest.get_modpath(mod) then - message = message .. S("It appears to originate from the mod “@1”, which is enabled.", mod) - message = message .. "\n" - else - message = message .. S("It appears to originate from the mod “@1”, which is not enabled!", mod) - message = message .. "\n" - end - end - if param then - message = message .. S("Its identifier is “@1”.", param) - end - elseif itype == "error_ignore" then - message = S("This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.") - elseif itype == "error_object" or itype == "error_unknown_thing" then - message = S("No help entry for this object could be found.") - elseif itype == "player" then - message = S("This is a player.") - end - minetest.show_formspec( - username, - "doc_identifier:error_missing_item_info", - "size[10,"..vsize..";]" .. - "textarea[0.5,0.2;10,"..(vsize-0.2)..";;;"..minetest.formspec_escape(message).."]" .. - "button_exit[3.75,"..(-0.5+vsize)..";3,1;okay;"..minetest.formspec_escape(S("OK")).."]" - ) - end - if pointed_thing.type == "node" then - local pos = pointed_thing.under - local node = minetest.get_node(pos) - if minetest.registered_nodes[node.name] then - --local nodedef = minetest.registered_nodes[node.name] - if(node.name == "ignore") then - show_message(username, "error_ignore") - elseif doc.entry_exists("nodes", node.name) then - doc.show_entry(username, "nodes", node.name, true) - else - show_message(username, "error_node") - end - else - show_message(username, "error_unknown", node.name) - end - elseif pointed_thing.type == "object" then - local object = pointed_thing.ref - local le = object:get_luaentity() - if object:is_player() then - if mod_doc_basics and doc.entry_exists("basics", "players") then - doc.show_entry(username, "basics", "players", true) - else - -- Fallback message - show_message(username, "player") - end - -- luaentity exists - elseif le then - local ro = doc_identifier.registered_objects[le.name] - -- Dropped items - if le.name == "__builtin:item" then - local itemstring = ItemStack(minetest.deserialize(le:get_staticdata()).itemstring):get_name() - if doc.entry_exists("nodes", itemstring) then - doc.show_entry(username, "nodes", itemstring, true) - elseif doc.entry_exists("tools", itemstring) then - doc.show_entry(username, "tools", itemstring, true) - elseif doc.entry_exists("craftitems", itemstring) then - doc.show_entry(username, "craftitems", itemstring, true) - elseif minetest.registered_items[itemstring] == nil or itemstring == "unknown" then - show_message(username, "error_unknown", itemstring) - else - show_message(username, "error_item") - end - -- Falling nodes - elseif le.name == "__builtin:falling_node" then - local itemstring = minetest.deserialize(le:get_staticdata()).name - if doc.entry_exists("nodes", itemstring) then - doc.show_entry(username, "nodes", itemstring, true) - end - -- A known registered object - elseif ro then - doc.show_entry(username, ro.category, ro.entry, true) - -- Undefined object (error) - elseif minetest.registered_entities[le.name] == nil then - show_message(username, "error_unknown", le.name) - -- Other object (undocumented) - else - show_message(username, "error_object") - end - else - --show_message(username, "error_object") - show_message(username, "error_unknown") - end - elseif pointed_thing.type ~= "nothing" then - show_message(username, "error_unknown_thing") - end - return itemstack -end - -function doc_identifier.solid_mode(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - end - - return ItemStack("doc_identifier:identifier_solid") -end - -function doc_identifier.liquid_mode(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - end - - return ItemStack("doc_identifier:identifier_liquid") -end - -minetest.register_tool("doc_identifier:identifier_solid", { - description = S("Lookup Tool"), - _tt_help = S("Show help for pointed thing"), - _doc_items_longdesc = S("This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used."), - _doc_items_usagehelp = S("Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case."), - _doc_items_hidden = false, - tool_capabilities = {}, - range = 10, - wield_image = "doc_identifier_identifier.png", - inventory_image = "doc_identifier_identifier.png", - liquids_pointable = false, - on_use = doc_identifier.identify, - on_place = doc_identifier.liquid_mode, - on_secondary_use = doc_identifier.liquid_mode, -}) -minetest.register_tool("doc_identifier:identifier_liquid", { - description = S("Lookup Tool"), - _doc_items_create_entry = false, - tool_capabilities = {}, - range = 10, - groups = { not_in_creative_inventory = 1, not_in_craft_guide = 1, disable_repair = 1 }, - wield_image = "doc_identifier_identifier_liquid.png", - inventory_image = "doc_identifier_identifier_liquid.png", - liquids_pointable = true, - on_use = doc_identifier.identify, - on_place = doc_identifier.solid_mode, - on_secondary_use = doc_identifier.solid_mode, -}) - -minetest.register_craft({ - output = "doc_identifier:identifier_solid", - recipe = { {"group:stick", "group:stick" }, - {"", "group:stick"}, - {"group:stick", ""} } -}) - -if minetest.get_modpath("mcl_core") then - minetest.register_craft({ - output = "doc_identifier:identifier_solid", - recipe = { { "mcl_core:glass" }, - { "group:stick" } } - }) -end - -minetest.register_alias("doc_identifier:identifier", "doc_identifier:identifier_solid") - -doc.add_entry_alias("tools", "doc_identifier:identifier_solid", "tools", "doc_identifier:identifier_liquid") diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.de.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.de.tr deleted file mode 100644 index 26fa35528..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.de.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.=Fehler: Dieser Node, Gegenstand oder dieses Objekt ist nicht definiert. Das ist immer ein Fehler. -This can happen for the following reasons:=Dies kann aus folgenden Gründen passieren: -• The mod which is required for it is not enabled=• Die Mod, die dafür benötigt wird, ist nicht aktiv -• The author of the game or a mod has made a mistake=• Der Spiel-Autor oder ein Mod-Autor machte einen Fehler -It appears to originate from the mod “@1”, which is enabled.=Es scheint von der Mod „@1“ zu stammen. Sie ist aktiv. -It appears to originate from the mod “@1”, which is not enabled!=Es scheint von der Mod „@1“ zu stammen. Sie ist nicht aktiv! -Its identifier is “@1”.=Der Identifikator ist „@1“. -Lookup Tool=Nachschlagewerkzeug -No help entry for this block could be found.=Für diesen Block konnte kein Hilfseintrag gefunden werden. -No help entry for this item could be found.=Für diesen Gegenstand konnte kein Hilfseintrag gefunden werden. -No help entry for this object could be found.=Für dieses Objekt konnte kein Hilfseintrag gefunden werden. -OK=OK -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Schlagen Sie einen beliebigen Block, Gegenstand oder irgendwas, worüber Sie mehr erfahren wollen. Das wird den passenden Hilfseintrag öffnen. Das Werkzeug hat zwei Modi, welcher mit Benutzen gewechselt werden kann. Im Flüssigmodus zeigt das Werkzeug auch auf Flüssigkeiten. Im Festmodus ist das nicht der Fall. -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Dieser Block kann nicht identifiziert werden, weil sich die Welt an dieser Stelle noch nicht materialisiert hat. Versuchen Sie es in ein paar Sekunden erneut. -This is a player.=Dies ist ein Spieler. -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=Dieser nützliche kleine Helfer kann benutzt werden, um schnell etwas über die nähere Umgebung zu erfahren. Er identifiziert und analysiert Blöcke, Gegenstände und andere Dinge und zeigt ausführliche Informationen über all das, worauf man ihn anwendet. -Show help for pointed thing=Hilfe für gezeigtes Ding anzeigen diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.es.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.es.tr deleted file mode 100644 index 66c272f72..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.es.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.=Error: este nodo, elemento u objeto no está definido. Esto siempre es un error. -This can happen for the following reasons:=Esto puede suceder por los siguientes motivos: -• The mod which is required for it is not enabled=• El mod que se requiere para ello no está habilitado -• The author of the game or a mod has made a mistake=• El autor del juego o un mod ha cometido un error -It appears to originate from the mod “@1”, which is enabled.=Parece originarse del mod "@1", que está habilitado. -It appears to originate from the mod “@1”, which is not enabled!=¡Parece originarse del mod "@1", que no está habilitado! -Its identifier is “@1”.=Su identificador es "@1“. -Lookup Tool=Herramienta lupa -No help entry for this block could be found.=No se encontró ninguna entrada de ayuda para este bloque. -No help entry for this item could be found.=No se pudo encontrar ninguna entrada de ayuda para este artículo. -No help entry for this object could be found.=No se pudo encontrar ninguna entrada de ayuda para este objeto. -OK=Aceptar -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Perfore cualquier bloque, elemento u otra cosa sobre la que desee obtener más información. Esto abrirá la entrada de ayuda apropiada. La herramienta viene en dos modos que se cambian mediante el uso. En modo líquido, esta herramienta también apunta a líquidos, mientras que en modo sólido este no es el caso. -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Este bloque no se puede identificar porque el mundo aún no se ha materializado en este momento. Inténtalo de nuevo en unos segundos. -This is a player.=Este es un jugador. -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=Este útil pequeño ayudante se puede utilizar para aprender rápidamente sobre el entorno más cercano. Identifica y analiza bloques, elementos y otras cosas y muestra información extensa sobre la cosa en la que se utiliza. diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.fr.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.fr.tr deleted file mode 100644 index 2b1f37297..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.fr.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.=Erreur: ce nœud, élément ou objet n'est pas défini. C'est toujours une erreur. -This can happen for the following reasons:=Cela peut se produire pour les raisons suivantes: -• The mod which is required for it is not enabled=• Le mod qui lui est nécessaire n'est pas activé -• The author of the game or a mod has made a mistake=• L'auteur du jeu ou d'un mod a fait une erreur -It appears to originate from the mod “@1”, which is enabled.=Cela semble provenir du mod “@1”, qui est activé. -It appears to originate from the mod “@1”, which is not enabled!=Cela semble provenir du mod “@1”, qui n'est pas activé!. -Its identifier is “@1”.=Son identifiant est “@1” -Lookup Tool=Outil de recherche -No help entry for this block could be found.=Aucune entrée d'aide pour ce bloc n'a pu être trouvée. -No help entry for this item could be found.=Aucune entrée d'aide pour cet élément n'a pu être trouvée. -No help entry for this object could be found.=Aucune entrée d'aide pour cet objet n'a pu être trouvée. -OK=OK -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Frappez n'importe quel bloc, élément ou autre chose sur lequel vous souhaitez en savoir plus. Cela ouvrira l'entrée d'aide appropriée. L'outil est disponible en deux modes qui changent suivant l'usage. En mode liquide, cet outil pointe également sur les liquides tandis qu'en mode solide, ce n'est pas le cas. -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Ce bloc ne peut pas être identifié car le monde ne s'est pas encore matérialisé à ce stade. Réessayez dans quelques secondes. -This is a player.=Ceci est un joueur. -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=Ce pratique petit assistant peut être utilisé pour en savoir plus rapidement sur son environnement proche. Il identifie et analyse les blocs, articles et autres choses et il affiche des informations détaillées sur la chose sur laquelle il est utilisé. -Show help for pointed thing=Affiche l'aide des choses pointées diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.pl.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.pl.tr deleted file mode 100644 index 3af2c377d..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.pl.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.=Błąd: Ten węzeł, przedmiot lub obiekt nie jest zdefiniowany. To zawsze jest błąd. -This can happen for the following reasons:=To może się zdarzyć z następujących powodów: -• The mod which is required for it is not enabled=• Mod który jest do tego potrzebny nie jest włączony -• The author of the game or a mod has made a mistake=• Autor gry lub moda popełnił błąd -It appears to originate from the mod “@1”, which is enabled.=Wygląda na to, że powodem jest mod "@1", który jest włączony. -It appears to originate from the mod “@1”, which is not enabled!=Wygląda na to, że powodem jest mod "@1", który nie jest włączony! -Its identifier is “@1”.=Identyfikator to "@1". -Lookup Tool=Narzędzie rozpoznające -No help entry for this block could be found.=Nie znaleziono wpisu pomocniczego dla tego bloku. -No help entry for this item could be found.=Nie znaleziono wpisu pomocniczego dla tego przedmiotu. -No help entry for this object could be found.=Nie znaleziono wpisu pomocniczego dla tego obiektu. -OK=OK -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Uderz dowolny blok, przedmiot lub inną rzecz aby dowiedzieć się o niej czegoś. To otworzy odpowiedni wpis pomocniczy. Narzędzie jest dostępne w dwóch trybach które można zmienić przez kliknięcie Użyj. W trybie płynów narzędzie to wskazuje również na płyny, podczas gdy w trybie stałym tak nie jest. -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Ten blok nie może być zidentyfikowany, ponieważ świat jeszcze się nie zmaterializował. Spróbuj ponownie za kilka sekund. -This is a player.=To jest gracz. -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=To jest małe pomocnicze narzędzie, które może być użyte by szybko dowiedzieć się więcej na temat bliskiego otoczenia. Identyfikuje ono oraz analizuje bloki, przedmioty i inne rzeczy oraz pokazuje dokładne informacje na temat tego na czym zostanie użyte. -Show help for pointed thing=Pokaż pomoc dla wskazywanej rzeczy diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.pt.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.pt.tr deleted file mode 100644 index cb013c947..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.pt.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.\\nThis can happen for the following reasons:\\n• The mod which is required for it is not enabled\\n• The author of the game or a mod has made a mistake=Erro: Esse bloco, item ou objeto é indefinido. Isso é sempre um erro.\\n Isso pode ter acontecido pelas seguintes rasões:\\n• O mod o qual ele precisa não está habilitado\\n• O autor do jogo ou mod comoteu um erro -It appears to originate from the mod “%s”, which is enabled.=Parece originar do mod “%s”, que está habilitado. -It appears to originate from the mod “%s”, which is not enabled!=Parece originar do mod “%s”, que não está habilitado. -Its identifier is “%s”.=Seu identificador é “%s”. -Lookup tool=Ferramenta de Pesquisa -No help entry for this block could be found.=Nenhuma entrada de ajuda para esse bloco pode ser encontrada. -No help entry for this item could be found.=Nenhuma entrada de ajuda para esse item pode ser encontrada. -No help entry for this object could be found.=Nenhuma entrada de ajuda para esse objeto pode ser encontrada. -OK=OK -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by a rightclick. In liquid mode (blue) this tool points to liquids as well while in solid mode (red) this is not the case. Liquid mode is required if you want to identify a liquid.=Soque qualquer bloco, item ou outra coisa sobre a qual você deseja aprender mais. Isso abrirá a entrada de ajuda apropriada. A ferramenta vem em dois modos que são alterados por um clique direito. No modo líquido (azul), esta ferramenta também aponta para líquidos, enquanto no modo sólido (vermelho) não é esse o caso. O modo líquido é necessário se você quiser identificar um líquido. -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Este bloco não pode ser identificado porque o mundo ainda não se materializou neste momento. Tente novamente em alguns segundos. -This is a player.=Este é um jogador. -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=Esse pequeno e útil ajudante pode ser usado para aprender rapidamente sobre as coisas em sua volta. Ele identifica e analisa blocos, itens e outras coisas e mostra informações abrangentes sobre a coisa na qual é usado. diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.pt_BR.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.pt_BR.tr deleted file mode 100644 index cb013c947..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.pt_BR.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.\\nThis can happen for the following reasons:\\n• The mod which is required for it is not enabled\\n• The author of the game or a mod has made a mistake=Erro: Esse bloco, item ou objeto é indefinido. Isso é sempre um erro.\\n Isso pode ter acontecido pelas seguintes rasões:\\n• O mod o qual ele precisa não está habilitado\\n• O autor do jogo ou mod comoteu um erro -It appears to originate from the mod “%s”, which is enabled.=Parece originar do mod “%s”, que está habilitado. -It appears to originate from the mod “%s”, which is not enabled!=Parece originar do mod “%s”, que não está habilitado. -Its identifier is “%s”.=Seu identificador é “%s”. -Lookup tool=Ferramenta de Pesquisa -No help entry for this block could be found.=Nenhuma entrada de ajuda para esse bloco pode ser encontrada. -No help entry for this item could be found.=Nenhuma entrada de ajuda para esse item pode ser encontrada. -No help entry for this object could be found.=Nenhuma entrada de ajuda para esse objeto pode ser encontrada. -OK=OK -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by a rightclick. In liquid mode (blue) this tool points to liquids as well while in solid mode (red) this is not the case. Liquid mode is required if you want to identify a liquid.=Soque qualquer bloco, item ou outra coisa sobre a qual você deseja aprender mais. Isso abrirá a entrada de ajuda apropriada. A ferramenta vem em dois modos que são alterados por um clique direito. No modo líquido (azul), esta ferramenta também aponta para líquidos, enquanto no modo sólido (vermelho) não é esse o caso. O modo líquido é necessário se você quiser identificar um líquido. -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Este bloco não pode ser identificado porque o mundo ainda não se materializou neste momento. Tente novamente em alguns segundos. -This is a player.=Este é um jogador. -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=Esse pequeno e útil ajudante pode ser usado para aprender rapidamente sobre as coisas em sua volta. Ele identifica e analisa blocos, itens e outras coisas e mostra informações abrangentes sobre a coisa na qual é usado. diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.ru.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.ru.tr deleted file mode 100644 index 1080a3186..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.ru.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.=Ошибка: Данный узел, предмет или объект не определён. Это всегда вызывает ошибку. -This can happen for the following reasons:=Это может произойти по одной из причин: -• The mod which is required for it is not enabled=• Не включён мод, требуемый для этого -• The author of the game or a mod has made a mistake=• Автор игры или мода допустил ошибку -It appears to originate from the mod “@1”, which is enabled.=Это, вероятно, случилось в моде “@1”, который включён. -It appears to originate from the mod “@1”, which is not enabled!=Это, вероятно, случилось в моде “@1”, который не включён! -Its identifier is “@1”.=Его идентификатор: “@1”. -Lookup Tool=Инструмент просмотра -No help entry for this block could be found.=Не удаётся найти справочной записи для этого блока. -No help entry for this item could be found.=Не удаётся найти справочной записи для этого предмета. -No help entry for this object could be found.=Не удаётся найти справочной записи для этого объекта. -OK=О'кей -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Стукните любой блок, предмет или другую вещь, про которую хотите узнать больше. Откроется соответствующая справочная запись. Инструмент работает в двух режимах, меняющихся при использовании. В жидком режиме инструмент указывает на жидкости, в твёрдом режиме нет. -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Этот блок не может быть идентифицирован, потому что мир не ещё материализовался в этой точке. -This is a player.=Это игрок. -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=Этот маленький помощник выдаст вам быструю справку о чём-то из ближайшего окружения. Он идентифицирует и анализирует блоки, предметы и другие вещи и показывает подробную информацию о вещах, к которым они применимы. -Show help for pointed thing=Справка по выбранной вещи diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.zh_TW.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.zh_TW.tr deleted file mode 100644 index 727887db9..000000000 --- a/mods/HELP/doc/doc_identifier/locale/doc_identifier.zh_TW.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.=錯誤:該方塊、物品或實體未定義。這總是一個錯誤。 -This can happen for the following reasons:=發生這種情況的原因有機會是: -• The mod which is required for it is not enabled=• 未啟用所需的MOD -• The author of the game or a mod has made a mistake=• 遊戲或mod的作者犯了一個錯誤 -It appears to originate from the mod “@1”, which is enabled.=它似乎來自以啟用的mod「@1」。 -It appears to originate from the mod “@1”, which is not enabled!=它似乎來自沒啟用的mod「@1」! -Its identifier is “@1”.=其標識符為「@1」。 -Lookup Tool=幫助工具 -No help entry for this block could be found.=找不到此方塊的幫助條目。 -No help entry for this item could be found.=找不到此物品的幫助條目。 -No help entry for this object could be found.=找不到此實體的幫助條目。 -OK=OK -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=擊打任何你想了解更多的方塊、物品或其他事情。這將打開相應的幫助條目。該工具有兩種模式,可以通過使用來改變。在液體模式下,這個工具也會指向液體,而在固體模式下則不會這樣。 -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=方塊所在的區塊未加載,請等一下在試一次。 -This is a player.=這是一個玩家。 -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=這個有用的小幫手可以用來快速了解自己所處的近距離環境。它可以識別和分析區塊、物品和其他事物。當你對着一個方塊、物品或實體使用它時,可以顯示出那個事物的大量信息。 -Show help for pointed thing=顯示選中方塊的資訊 diff --git a/mods/HELP/doc/doc_identifier/locale/template.txt b/mods/HELP/doc/doc_identifier/locale/template.txt deleted file mode 100644 index 104f0ea1a..000000000 --- a/mods/HELP/doc/doc_identifier/locale/template.txt +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain:doc_identifier -Error: This node, item or object is undefined. This is always an error.= -This can happen for the following reasons:= -• The mod which is required for it is not enabled= -• The author of the game or a mod has made a mistake= -It appears to originate from the mod “@1”, which is enabled.= -It appears to originate from the mod “@1”, which is not enabled!= -Its identifier is “@1”.= -Lookup Tool= -No help entry for this block could be found.= -No help entry for this item could be found.= -No help entry for this object could be found.= -OK= -Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.= -This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.= -This is a player.= -This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.= -Show help for pointed thing= diff --git a/mods/HELP/doc/doc_identifier/mod.conf b/mods/HELP/doc/doc_identifier/mod.conf deleted file mode 100644 index 28a09d07e..000000000 --- a/mods/HELP/doc/doc_identifier/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = doc_identifier -author = Wuzzy -description = Adds a tool which shows help entries about almost anything which it punches. -depends = doc, doc_items -optional_depends = doc_basics, mcl_core diff --git a/mods/HELP/doc/doc_identifier/textures/doc_identifier_identifier.png b/mods/HELP/doc/doc_identifier/textures/doc_identifier_identifier.png deleted file mode 100644 index 00b3147a0..000000000 Binary files a/mods/HELP/doc/doc_identifier/textures/doc_identifier_identifier.png and /dev/null differ diff --git a/mods/HELP/doc/doc_identifier/textures/doc_identifier_identifier_liquid.png b/mods/HELP/doc/doc_identifier/textures/doc_identifier_identifier_liquid.png deleted file mode 100644 index d3689ec6b..000000000 Binary files a/mods/HELP/doc/doc_identifier/textures/doc_identifier_identifier_liquid.png and /dev/null differ diff --git a/mods/HELP/doc/doc_items/API.md b/mods/HELP/doc/doc_items/API.md deleted file mode 100644 index ca795956c..000000000 --- a/mods/HELP/doc/doc_items/API.md +++ /dev/null @@ -1,364 +0,0 @@ -# API documentation for `doc_items` -## Introduction -This document explains the API of `doc_items`. It contains a reference of -all functions. - -## Quick start -The most common use case for using this API requires only to set some -hand-written help texts for your items. - -The preferred way is to add the following optional fields to the -item definition when using `minetest.register_node`, etc.: - -* `_doc_items_longdesc`: Long description of this item. - Describe here what this item is, what it is for, its purpose, etc. -* `_doc_items_usagehelp`: Description of *how* this item can be used. - Only set this if needed, e.g. standard mining tools don't need this. - -Example: - - minetest.register_node("example:dice", { - description = "Dice", - _doc_items_longdesc = "A decorative dice which shows the numbers 1-6 on its sides.", - _doc_items_usagehelp = "Right-click the dice to roll it.", - tiles = { "example_dice.png" }, - is_ground_content = false, - --[[ and so on … ]] - }) - -When using this method, your mod does not need additional dependencies. - -See below for some recommendations on writing good help texts. - -If you need more customization, read ahead. ;-) - -## New item fields -This mod adds support for new fields of the item definition. They allow for -easy and quick manipulation of the item help entries. All fields are optional. - -* `_doc_items_longdesc`: Long description -* `_doc_items_usagehelp`: Usage help -* `_doc_items_image`: Entry image (default: inventory image) -* `_doc_items_hidden`: Whether entry is hidden (default: `false` for air and hand, `true` for everything else) -* `_doc_items_create_entry`: Whether to create an entry for this item (default: `true`) -* `_doc_items_entry_name`: The title of the entry. By default, this is the same as the `description` field - of the item (discarding text after the first newline). This field is required if the `description` is empty -* `_doc_items_durability`: This field is for describing how long a tool can be used before it breaks. Choose one data type: - * It it is a `number`: Fixed number of uses before it breaks - * If it is a `string`: Free-form text which explains how the durability works. Try to keep it short and only use it if the other types won't work - -A full explanation of these fields is provided below. - -## Concepts -This section explains the core concepts of an item help entry in-depth. - -### Factoids -Basically, a factoid is usually a single sentence telling the player a specific -fact about the item. The task of each factoid is to basically convert parts -of the item definition to useful, readable, understandable text. - -Example: It's a fact that `default:sand` has the group `falling_node=1`. -A factoid for this is basically just a simple conditional which puts the -the sentence “This block is affected to gravity and can fall.” into the -text if the node is member of said group. - -Factoids can be more complex than that. The factoid for node drops needs to -account for different drop types and probabilities, etc. - -`doc_items` has many predefined factoids already. This includes all “special” -groups (like `falling_node`), drops, mining capabilities, punch interval, -and much more. - -Custom factoids can be added with `doc.sub.items.register_factoid`. - -The idea behind factoids is to generate as much information as possible -automatically to reduce redundancy, inconsistencies and the workload of hand- -written descriptions. - -### Long description and usage help -Factoids are not always sufficient to describe an item. This is the case -for facts where the item definition can not be used to automatically -generate texts. Examples: Custom formspecs, ABMs, special tool action -on right-click. - -That's where the long description and usage help comes into play. -Those are two texts which are written manually for a specific item. - -Roughly, the long description is for describing **what** the item is, how it -acts, what it is for. The usage help is for explaining **how** the -item can be used. It is less important for standard mining tools and weapons. - -There is no hard length limit for the long description and the usage help. - -#### Recommendations for long description -The long description should roughly contain the following info: - -* What the item does -* What it is good for -* How it may be generated in the world -* Maybe some background info if you're in a funny mood -* Notable information which doesn't fit elsewhere - -The description should normally **not** contain: - -* Information which is already covered by factoids, like digging groups, - damage, group memberships, etc. -* How the item can be used -* Direct information about other items -* Any other redundant information -* Crafting recipes - -One exception from the rule may be for highlighting the most important -purpose of a simple item, like that coal lumps are primarily used as fuel. - -Sometimes, a long description is not necessary because the item is already -exhaustively explained by factoids. - -For very simple items, consider using one of the template texts (see below). - -Minimal style guide: Use complete sentences. - -#### Recommendations for usage help -The usage help should only be set for items which are in some way special -in their usage. Standard tools and weapons should never have an usage help. - -The rule of thumb is this: If a new player who already knows the Minetest -basics, but not this item, will not directly know how to use this item, -then the usage help should be added. If basic Minetest knowledge or -existing factoids are completely sufficient, usage help should not be added. - -The recommendations for what not to put into the usage help is the same -as for long descriptions. - -#### Template texts -For your convenience, a few template texts are provided for common texts -to avoid redundancy and to increase consistency for simple things. Read -`init.lua` to see the actual texts. - -##### Long description -* `doc.sub.items.temp.build`: For building blocks like the brick block in Minetest Game -* `doc.sub.items.temp.deco`: For other decorational blocks. -* `doc.sub.items.temp.craftitem`: For items solely or almost solely used for crafting - -##### Usage help -* `doc.sub.items.temp.eat`: For eatable items using the `on_use=minetest.item_eat(1)` idiom -* `doc.sub.items.temp.eat_bad`: Same as above, but eating them is considered a bad idea -* `doc.sub.items.temp.rotate_node`: For nodes with `on_place=minetest.rotate_node`, - explains placement and rotation - -### Entry creation -By default, an entry for each item is added automatically, except for items -without a description (`description == nil`). This behaviour can be changed -on a per-item basis. - -By setting the item definition's field `_doc_items_create_entry` to `true` -or `false`you can explicitly define whether this item should get its own -entry. - -Suppressing an entry is useful for items which aren't supposed to be directly -seen or obtained by the player or if they are only used for technical -and/or internal purposes. Another possible reason to suppress an entry is -to scrub the entry list of lots of very similar related items where the -difference is too small to justify two separate entries (e.g. -burning furnace vs inactive furnace, because the gameplay mechanics are -identical for both). - -### Hidden entries -Hidden entries are entries which are not visible in the list of entries. This -concept directly comes from the Documentation System. The entry will still be -created, it is just not selectable by normal means. Players might be able to -“unlock” an entry later. Refer to the API documentation of the Documentation -System to learn more. - -By default, all entries are hidden except air and the hand. - -To mark an entry as hidden, add the field `_doc_items_hidden=true` to its -item definition. To make sure an entry is never hidden, add -`_doc_items_hidden=false` instead (this rarely needs to be specified -explicitly). - -### Hand and air -The mod adds some default help texts for the hand and the air which are -written in a way that they probably are true for most games out of the -box, but especially the hand help text is kept intentionally vague. -If you want to change these help texts or the entry names or other -attributes, just add `_doc_items_*` fields to the item definition, either -by re-defining or overwriting these items (e.g. with -`minetest.override_item`). - -In the mod `doc_minetest_game`, the default hand help text is overwritten -to explain the hand in more detail, especially the hand behaviour in -Creative Mode. - -## Functions -This is the reference of all available functions in this API. - -### `doc.sub.items.register_factoid(category_id, factoid_type, factoid_generator)` -Add a custom factoid (see above) for the specified category. - -* `category_id`: The help category for which the factoid applies: - * `"nodes"`: Blocks - * `"tools"`: Tools and weapons - * `"craftitems"`: Misc. items - * `nil`: All of the above -* `factoid_type`: Rough categorization of the factoid's content, used to - optimize the final text display. This currently determines where in the - entry text the factoid appears. Possible values: - * For all items: - * `"use"`: It's about using the item in some way (written right after the fixed usage help) - * `"groups"`: Group-related factoid (very vague) - * `"misc"`: Factoid doesn't fit anywhere else, is shown near the end - * For nodes only: - * `damage`: Related to player/mob damage or health - * `movement`: Related to player movement on, in or at node - * `sound`: Related to node sounds - * `gravity`: Related to gravity (e.g. falling node) - * `drop_destroy`: Related to node being destroyed or node dropping as an item - * `light`: Related to node light (luminance) - * `mining`: Related to mining - * `drops`: Related to node drops -* `factoid_generator`: A function which turns item definition into a string - (see blow) - -#### `factoid_generator(itemstring, def)` -`itemstring` is the itemstring of the item to be documented, and `def` is the -complete item definition table (from Minetest). - -This function must return a helpful string which turns a part of the item's -definition into an useful sentence or text. The text can contain newlines, -but it must not end with a newline. - -This function must **always** return a string. If you don't want to add any text, -return the empty string. - -Style guide: Try to use complete sentences and avoid too many newlines. - -#### Example -This factoid will add the sentence “This block will extinguish nearby fire.” -to all blocks which are member of the group `puts_out_fire`. - - doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - if def.groups.puts_out_fire ~= nil then - return "This block will extinguish nearby fire." - else - return "" - end - end) - - -### `doc.sub.items.disable_core_factoid(factoid_name)` -This function removes a core (built-in) factoid entirely, its text will never be displayed in any -entry then. - -#### Parameter -`factoid_name` chooses the factoid you want to disable. The following core factoids can be disabled: - -* `"node_mining"`: Mining properties of nodes -* `"tool_capabilities"`: Tool capabilities such as digging times -* `"groups"`: Group memberships -* `"fuel"`: How long the item burns as a fuel and if there's a leftover -* `"itemstring"`: The itemstring -* `"drops"`: Node drops -* `"connects_to"`: Tells to which nodes the node connects to -* `"light"`: Light and transparency information for nodes -* `"drop_destroy"`: Information about when the node causes to create its “drop” and if it gets destroyed by flooding -* `"gravity"`: Factoid for `falling_node` group -* `"sounds"`: Infos about sound effects related to the item -* `"node_damage"`: Direct damage and drowning damage caused by nodes -* `"node_movement"`: Nodes affecting player movement -* `"liquid"`: Liquid-related infos of a node -* `"basics"`: Collection of many basic factoids: The custom help texts, pointability, collidability, range, stack size, `liquids_pointable`, “punches don't work as usual”. Be careful with this one! - -#### Background -Normally, the core factoids are written in a very general-purpose style, so this function might -not be needed at all. But it might be useful for games and mods which radically break with -some of the underlying core assumptions in Minetest. For example, if your mod completely changes -the digging system, the help texts provided by `doc_items` are probably incorrect, so you can -disable `node_mining` and register a custom factoid as a replacement. - -Please do not use this function lightly because it touches the very core of `doc_items`. Try to -understand a core factoid before you consider to disable it. If you think a core factoid is just -broken or buggy in general, please file a bug instead. - - -### `doc.sub.items.add_friendly_group_names(groupnames)` -Use this function so set some more readable group names to show them -in the formspec, since the internal group names are somewhat cryptic -to players. - -`groupnames` is a table where the keys are the “internal” group names and -the values are the group names which will be actually shown in the -Documentation System. - -***Note***: This function is mostly there to work around a problem in -Minetest as it does not support “friendly” group names, which means exposing -groups to an interface is not pretty. Therefore, this function may be -deprecated when Minetest supports such a thing. - -### `doc.sub.items.get_group_name(internal_group_name)` -Returns the group name of the specified group as displayed by this mod. -If the setting `doc_items_friendly_group_names` is `true`, this might -return a “friendly” group name (see above). If no friendly group name -exists, `internal_group_name` is returned. -If `doc_items_friendly_group_names` is `false`, the argument is always -returned. - -### `doc.sub.items.add_notable_groups(groupnames)` -Add a list of groups you think are notable enough to be mentioned in the -“This item belongs to the following groups: (…)” factoid. This factoid -is intended to give a quick rundown of misc. groups which don't fit -to other factoids, yet they are still somewhat relevant to gameplay. - -`groupnames` is a table of group names you wish to add. - -#### What groups should be added -What is “notable” is subjective, but there are some guidelines: - -Do add a group if: - -* It is used in an ABM -* It is used for a custom interaction with another item -* It is simple enough for the player to know an item is member of this group -* You want to refer to this group in help texts -* The “don'ts” below don't apply - -Do not add a group if: - -* It is *only* used for crafting, `connects_to`, mining times or damage groups -* A factoid covering this group already exists -* The group membership itself requires an explanation (consider writing a factoid instead) -* The group has no gameplay relevance -* Group rating is important to gameplay (consider writing a factoid instead) - -Groups which are used for crafting or in the `connects_to` field of item -definitions are already automatically added to this factoid. - -##### Examples for good additions - -* A group where its members can be placed in bookshelves. - so this group meets the “custom interaction” criterion -* `water` in Minetest Game: Used for water nodes in the obsidian ABM -* `sand` in Minetest Game: Used for the cactus growth ABM, but also crafting. - Since it is not *only* used for crafting, it is OK to be added - -##### Examples for bad additions - -* `stick` in Minetest Game: This group appears in many crafting recipes and - has no other use. It is already added automatically -* A group in which members turn into obsidian when they touch water (ABM): - This group is not trivial and should be introduced in a factoid instead -* `cracky` in Min -* `dig_immediate`: This group is already covered by the default factoids of this - mod - - -## Groups interpretations -Nodes which are technically a liquid will not be considered liquids by this mod -if the group `fake_liquid=1` is used. Useful for stuff like cobwebs. - - - -## Dependencies -If you only add the custom fields to your items, you do *not* need to depend -on this mod. If you use anything else from this mod (e.g. a function), you -probably *do* need to depend (optionally or mandatorily) on this mod. diff --git a/mods/HELP/doc/doc_items/README.md b/mods/HELP/doc/doc_items/README.md deleted file mode 100644 index f361adb16..000000000 --- a/mods/HELP/doc/doc_items/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# Item Help [`doc_items`] (Version 1.2.0) -## Description -Automatically generated help texts of blocks, tools, weapons, crafting -items and other items. - -The goal is to tell the player as much about basically almost all items as -possible, making it very convenient to look up simple things. - -The ultimate goal of this mod is that eventually all relevant items have -a complete in-game documentation so no item leaves you confused. - -This mod is useful to learn the hard facts about practically all items, like -how much damage weapon XYZ deals or whether you can dig that block. -This mod does *not* give you long explanations about how to use certain -nontrivial things, like the furnace from Minetest Game. This info might be -provided by other mods and insert it into the help. - -This mod provides 3 new help categories (using the -Documentation System [`doc`]): - -* Blocks (e.g. dirt, stone, wooden stair) -* Tools and weapons (e.g. wooden pickaxe, steel sword, screwdriver) -* Misc. items (e.g. dye, stick, flour) - -Entries are automatically added. The information in the entries is -mostly automatically generated. It contains information about a wide range -of topics: - -* Blocks - * Physics - * Digging properties - * Drops (including probabilities) - * Liquid information - * Pointability - * Luminance - * Much more -* Tools and weapons - * Mining capabilities - * Damage - * Durability - * More -* All items - * Range - * Stack size - * Group memberships - * Other information added by mods - -This mod also allows for mods to adding custom written description -and usage help texts in free-form and even custom automatically generated texts -for mod-specific information like flammability in Minetest Game. This is -one of the core features of this mod; the mod relies on other mods to -provide their custom help texts for a complete help. - -If you find a particular item which is lacking an explanation on usage, -request the mod author to add `doc_items` support. - -## API -This mod has an API so that modders can add their own custom help texts, -custom factoids (single pieces of information extracted from the -item definition) and more. - -For example, if your mods have some complex items which need -explanation, this mod can help you in adding help texts for them. - -Read `API.md` to learn more. - -## License -Everything in this mod is licensed under the MIT License. - -## Translation credits -French: Karamel -German: Wuzzy -Portuguese: BrunoMine diff --git a/mods/HELP/doc/doc_items/init.lua b/mods/HELP/doc/doc_items/init.lua deleted file mode 100644 index 325ad9abb..000000000 --- a/mods/HELP/doc/doc_items/init.lua +++ /dev/null @@ -1,1413 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local N = function(s) return s end - -local math = math -local string = string - -local tostring = tostring -local pairs = pairs - -doc.sub.items = {} - --- Template texts -doc.sub.items.temp = {} -doc.sub.items.temp.deco = S("This is a decorational block.") -doc.sub.items.temp.build = S("This block is a building block for creating various buildings.") -doc.sub.items.temp.craftitem = S("This item is primarily used for crafting other items.") - -doc.sub.items.temp.eat = S("Hold it in your hand, then leftclick to eat it.") -doc.sub.items.temp.eat_bad = S("Hold it in your hand, then leftclick to eat it. But why would you want to do this?") -doc.sub.items.temp.rotate_node = S("This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.") - -doc.sub.items.settings = {} -doc.sub.items.settings.friendly_group_names = minetest.settings:get_bool("doc_items_friendly_group_names", false) -doc.sub.items.settings.itemstring = minetest.settings:get_bool("doc_items_show_itemstrings", false) - --- Local stuff -local groupdefs = {} -local mininggroups = {} -local miscgroups = {} -local item_name_overrides = { - [""] = S("Hand"), - ["air"] = S("Air") -} -local suppressed = { - ["ignore"] = true, -} - --- This table contains which of the builtin factoids must NOT be displayed because --- they have been disabled by a mod -local forbidden_core_factoids = {} - --- Helper functions -local function yesno(bool) - if bool == true then - return S("Yes") - elseif bool == false then - return S("No") - else - return "N/A" - end -end - -local function groups_to_string(grouptable, filter) - local gstring = "" - local groups_count = 0 - for id, value in pairs(grouptable) do - if (filter == nil or filter[id] == true) then - -- Readable group name - if groups_count > 0 then - -- List seperator - gstring = gstring .. S(", ") - end - if groupdefs[id] and doc.sub.items.settings.friendly_group_names == true then - gstring = gstring .. groupdefs[id] - else - gstring = gstring .. id - end - groups_count = groups_count + 1 - end - end - if groups_count == 0 then - return nil, 0 - else - return gstring, groups_count - end -end - --- Removes all text after the first newline (including the newline) -local function scrub_newlines(text) - local spl = string.split(text, "\n") - if spl and #spl > 0 then - return spl[1] - else - return text - end -end - ---[[ Append a newline to text, unless it already ends with a newline. ]] -local function newline(text) - if string.sub(text, #text, #text) == "\n" or text == "" then - return text - else - return text .. "\n" - end -end - ---[[ Make sure the text ends with two newlines by appending any missing newlines at the end, if neccessary. ]] -local function newline2(text) - if string.sub(text, #text-1, #text) == "\n\n" or text == "" then - return text - elseif string.sub(text, #text, #text) == "\n" then - return text .. "\n" - else - return text .. "\n\n" - end -end - - --- Extract suitable item description for formspec -local function description_for_formspec(itemstring) - if minetest.registered_items[itemstring] == nil then - -- Huh? The item doesn't exist for some reason. Better give a dummy string - minetest.log("warning", "[doc] Unknown item detected: "..tostring(itemstring)) - return S("Unknown item (@1)", tostring(itemstring)) - end - local description = minetest.registered_items[itemstring].description - if description == nil or description == "" then - return minetest.formspec_escape(itemstring) - else - return minetest.formspec_escape(scrub_newlines(description)) - end -end - -local function get_entry_name(itemstring) - local def = minetest.registered_items[itemstring] - if def._doc_items_entry_name then - return def._doc_items_entry_name - elseif item_name_overrides[itemstring] then - return item_name_overrides[itemstring] - else - return def.description - end -end - -function doc.sub.items.get_group_name(groupname) - if groupdefs[groupname] and doc.sub.items.settings.friendly_group_names == true then - return groupdefs[groupname] - else - return groupname - end -end - -local function burntime_to_text(burntime) - if burntime == nil then - return S("unknown") - elseif burntime == 1 then - return S("1 second") - else - return S("@1 seconds", burntime) - end -end - ---[[ Convert tool capabilities to readable text. Extracted information: -* Mining capabilities -* Durability (when mining -* Full punch interval -* Damage groups -]] -local function factoid_toolcaps(tool_capabilities, check_uses) - if forbidden_core_factoids.tool_capabilities then - return "" - end - - local formstring = "" - if check_uses == nil then check_uses = false end - if tool_capabilities and tool_capabilities ~= {} then - local groupcaps = tool_capabilities.groupcaps - if groupcaps then - local miningcapstr = "" - local miningtimesstr = "" - local miningusesstr = "" - local caplines = 0 - local timelines = 0 - local useslines = 0 - for k,v in pairs(groupcaps) do - -- Mining capabilities - --[[local minrating, maxrating - if v.times then - for rating, time in pairs(v.times) do - if minrating == nil then minrating = rating else - if minrating > rating then minrating = rating end - end - if maxrating == nil then maxrating = rating else - if maxrating < rating then maxrating = rating end - end - end - else - minrating = 1 - maxrating = 1 - end]] - local maxlevel = v.maxlevel - if not maxlevel then - -- Default from tool.h - maxlevel = 1 - end - miningcapstr = miningcapstr .. S("• @1: @2", doc.sub.items.get_group_name(k), maxlevel) - miningcapstr = miningcapstr .. "\n" - caplines = caplines + 1 - - for rating=3, 1, -1 do - if v.times and v.times[rating] then - local maxtime = v.times[rating] - local mintime - local mintimestr, maxtimestr - local maxlevel_calc = maxlevel - if maxlevel_calc < 1 then - maxlevel_calc = 1 - end - mintime = maxtime / maxlevel_calc - mintimestr = string.format("%.1f", mintime) - maxtimestr = string.format("%.1f", maxtime) - if mintimestr ~= maxtimestr then - miningtimesstr = miningtimesstr .. - S("• @1, rating @2: @3 s - @4 s", - doc.sub.items.get_group_name(k), rating, - mintimestr, maxtimestr) - else - miningtimesstr = miningtimesstr .. - S("• @1, rating @2: @3 s", - doc.sub.items.get_group_name(k), rating, - mintimestr) - end - miningtimesstr = miningtimesstr.. "\n" - timelines = timelines + 1 - end - end - - -- Number of mining uses - local base_uses = v.uses - if not base_uses then - -- Default from tool.h - base_uses = 20 - end - if check_uses and base_uses > 0 then - for level=0, maxlevel do - local real_uses = base_uses * math.pow(3, maxlevel - level) - if real_uses < 65535 then - miningusesstr = miningusesstr .. S("• @1, level @2: @3 uses", doc.sub.items.get_group_name(k), level, real_uses) - else - miningusesstr = miningusesstr .. S("• @1, level @2: Unlimited", doc.sub.items.get_group_name(k), level) - end - miningusesstr = miningusesstr .. "\n" - useslines = useslines + 1 - end - end - end - if caplines > 0 then - formstring = formstring .. S("This tool is capable of mining.") .. "\n" - formstring = formstring .. S("Maximum toughness levels:") .. "\n" - formstring = formstring .. miningcapstr - formstring = newline(formstring) - end - if timelines > 0 then - formstring = formstring .. S("Mining times:") .. "\n" - formstring = formstring .. miningtimesstr - end - if useslines > 0 then - formstring = formstring .. S("Mining durability:") .. "\n" - formstring = formstring .. miningusesstr - end - if caplines > 0 or useslines > 0 or timelines > 0 then - formstring = newline2(formstring) - end - end - - -- Weapon data - local damage_groups = tool_capabilities.damage_groups - if damage_groups then - formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n" - -- Damage groups - formstring = formstring .. S("Maximum damage per hit:") .. "\n" - for k,v in pairs(damage_groups) do - formstring = formstring .. S("• @1: @2 HP", doc.sub.items.get_group_name(k), v) - formstring = formstring .. "\n" - end - - -- Full punch interval - local punch = 1.0 - if tool_capabilities.full_punch_interval then - punch = tool_capabilities.full_punch_interval - end - formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch)) - formstring = formstring .. "\n" - end - - end - return formstring -end - ---[[ Factoid for the mining times properties of a node. Extracted infos: -- dig_immediate group -- Digging times/groups -- level group -]] -local function factoid_mining_node(data) - if forbidden_core_factoids.node_mining then - return "" - end - - local datastring = "" - if data.def.pointable ~= false and (data.def.liquid_type == "none" or data.def.liquid_type == nil) then - -- Check if there are no mining groups at all - local nogroups = true - for groupname,_ in pairs(mininggroups) do - if data.def.groups[groupname] or groupname == "dig_immediate" then - nogroups = false - break - end - end - -- dig_immediate - if data.def.drop ~= "" then - if data.def.groups.dig_immediate == 2 then - datastring = datastring .. S("This block can be mined by any mining tool in half a second.").."\n" - elseif data.def.groups.dig_immediate == 3 then - datastring = datastring .. S("This block can be mined by any mining tool immediately.").."\n" - -- Note: “unbreakable” is an unofficial group for undiggable blocks - elseif data.def.diggable == false or nogroups or data.def.groups.immortal == 1 or data.def.groups.unbreakable == 1 then - datastring = datastring .. S("This block can not be mined by ordinary mining tools.").."\n" - end - else - if data.def.groups.dig_immediate == 2 then - datastring = datastring .. S("This block can be destroyed by any mining tool in half a second.").."\n" - elseif data.def.groups.dig_immediate == 3 then - datastring = datastring .. S("This block can be destroyed by any mining tool immediately.").."\n" - elseif data.def.diggable == false or nogroups or data.def.groups.immortal == 1 or data.def.groups.unbreakable == 1 then - datastring = datastring .. S("This block can not be destroyed by ordinary mining tools.").."\n" - end - end - -- Expose “ordinary” mining groups (crumbly, cracky, etc.) and level group - -- Skip this for immediate digging to avoid redundancy - if data.def.groups.dig_immediate ~= 3 then - local mstring = S("This block can be mined by mining tools which match any of the following mining ratings and its toughness level.").."\n" - mstring = mstring .. S("Mining ratings:").."\n" - local minegroupcount = 0 - for group,_ in pairs(mininggroups) do - local rating = data.def.groups[group] - if rating then - mstring = mstring .. S("• @1: @2", doc.sub.items.get_group_name(group), rating).."\n" - minegroupcount = minegroupcount + 1 - end - end - local level = data.def.groups.level - if not level then - level = 0 - end - mstring = mstring .. S("Toughness level: @1", level).."\n" - - if minegroupcount > 0 then - datastring = datastring .. mstring - end - end - end - return datastring -end - --- Pointing range of itmes -local function range_factoid(itemstring, def) - local handrange = minetest.registered_items[""].range - local itemrange = def.range - if itemstring == "" then - if handrange then - return S("Range: @1", itemrange) - else - return S("Range: 4") - end - else - if handrange == nil then handrange = 4 end - if itemrange then - return S("Range: @1", itemrange) - else - return S("Range: @1 (@2)", get_entry_name(""), handrange) - end - end -end - --- Smelting fuel factoid -local function factoid_fuel(itemstring, ctype) - if forbidden_core_factoids.fuel then - return "" - end - - local formstring = "" - local result, decremented = minetest.get_craft_result({method = "fuel", items = {itemstring}}) - if result and result.time > 0 then - local base - local burntext = burntime_to_text(result.time) - if ctype == "tools" then - base = S("This tool can serve as a smelting fuel with a burning time of @1.", burntext) - elseif ctype == "nodes" then - base = S("This block can serve as a smelting fuel with a burning time of @1.", burntext) - else - base = S("This item can serve as a smelting fuel with a burning time of @1.", burntext) - end - formstring = formstring .. base - local replaced = decremented.items[1]:get_name() - if not decremented.items[1]:is_empty() and replaced ~= itemstring then - formstring = formstring .. S(" Using it as fuel turns it into: @1.", description_for_formspec(replaced)) - end - formstring = newline(formstring) - end - return formstring -end - --- Shows the itemstring of an item -local function factoid_itemstring(itemstring, playername) - if forbidden_core_factoids.itemstring then - return "" - end - - local privs = minetest.get_player_privs(playername) - if doc.sub.items.settings.itemstring or (privs.give or privs.debug) then - return S("Itemstring: \"@1\"", itemstring) - else - return "" - end -end - -local function entry_image(data) - local formstring = "" - -- No image for air - if data.itemstring ~= "air" then - -- Hand - if data.itemstring == "" then - formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;".. - minetest.registered_items[""].wield_image.."]" - -- Other items - elseif data.image then - formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.image.."]" - else - formstring = formstring .. "item_image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.itemstring.."]" - end - end - return formstring -end - --- Stuff for factoids -local factoid_generators = {} -factoid_generators.nodes = {} -factoid_generators.tools = {} -factoid_generators.craftitems = {} - ---[[ Returns a list of all registered factoids for the specified category and type -* category_id: Identifier of the Documentation System category in which the factoid appears -* factoid_type: If set, oly returns factoid with a matching factoid_type. - If nil, all factoids for this category will be generated -* data: Entry data to parse ]] -local function factoid_custom(category_id, factoid_type, data) - local ftable = factoid_generators[category_id] - local datastring = "" - -- Custom factoids are inserted here - for i=1,#ftable do - if factoid_type == nil or ftable[i].ftype == factoid_type then - datastring = datastring .. ftable[i].fgen(data.itemstring, data.def) - if datastring ~= "" then - datastring = newline(datastring) - end - end - end - return datastring -end - --- Shows core information shared by all items, to be inserted at the top -local function factoids_header(data, ctype) - local datastring = "" - if not forbidden_core_factoids.basics then - - local longdesc = data.longdesc - local usagehelp = data.usagehelp - if longdesc then - datastring = datastring .. S("Description: @1", longdesc) - datastring = newline2(datastring) - end - if usagehelp then - datastring = datastring .. S("Usage help: @1", usagehelp) - datastring = newline2(datastring) - end - datastring = datastring .. factoid_custom(ctype, "use", data) - datastring = newline2(datastring) - - if data.itemstring ~= "" then - datastring = datastring .. S("Maximum stack size: @1", data.def.stack_max) - datastring = newline(datastring) - end - datastring = datastring .. range_factoid(data.itemstring, data.def) - - datastring = newline2(datastring) - - if data.def.liquids_pointable == true then - if ctype == "nodes" then - datastring = datastring .. S("This block points to liquids.").."\n" - elseif ctype == "tools" then - datastring = datastring .. S("This tool points to liquids.").."\n" - elseif ctype == "craftitems" then - datastring = datastring .. S("This item points to liquids.").."\n" - end - end - if data.def.on_use then - if ctype == "nodes" then - datastring = datastring .. S("Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.").."\n" - elseif ctype == "tools" then - datastring = datastring .. S("Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.").."\n" - elseif ctype == "craftitems" then - datastring = datastring .. S("Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.").."\n" - end - end - - end - - datastring = newline(datastring) - - -- Show tool capability stuff, including durability if not overwritten by custom field - local check_uses = false - if ctype == "tools" then - check_uses = data.def._doc_items_durability == nil - end - datastring = datastring .. factoid_toolcaps(data.def.tool_capabilities, check_uses) - datastring = newline2(datastring) - - return datastring -end - --- Shows less important information shared by all items, to be inserted at the bottom -local function factoids_footer(data, playername, ctype) - local datastring = "" - datastring = datastring .. factoid_custom(ctype, "groups", data) - datastring = newline2(datastring) - - -- Show other “exposable” groups - if not forbidden_core_factoids.groups then - local gstring, gcount = groups_to_string(data.def.groups, miscgroups) - if gstring then - if gcount == 1 then - if ctype == "nodes" then - datastring = datastring .. S("This block belongs to the @1 group.", gstring) .. "\n" - elseif ctype == "tools" then - datastring = datastring .. S("This tool belongs to the @1 group.", gstring) .. "\n" - elseif ctype == "craftitems" then - datastring = datastring .. S("This item belongs to the @1 group.", gstring) .. "\n" - end - else - if ctype == "nodes" then - datastring = datastring .. S("This block belongs to these groups: @1.", gstring) .. "\n" - elseif ctype == "tools" then - datastring = datastring .. S("This tool belongs to these groups: @1.", gstring) .. "\n" - elseif ctype == "craftitems" then - datastring = datastring .. S("This item belongs to these groups: @1.", gstring) .. "\n" - end - end - end - end - datastring = newline2(datastring) - - -- Show fuel recipe - datastring = datastring .. factoid_fuel(data.itemstring, ctype) - datastring = newline2(datastring) - - -- Other custom factoids - datastring = datastring .. factoid_custom(ctype, "misc", data) - datastring = newline2(datastring) - - -- Itemstring - datastring = datastring .. factoid_itemstring(data.itemstring, playername) - - return datastring -end - -function doc.sub.items.register_factoid(category_id, factoid_type, factoid_generator) - local ftable = { fgen = factoid_generator, ftype = factoid_type } - if category_id == "nodes" or category_id == "tools" or category_id == "craftitems" then - table.insert(factoid_generators[category_id], ftable) - return true - elseif category_id == nil then - table.insert(factoid_generators.nodes, ftable) - table.insert(factoid_generators.tools, ftable) - table.insert(factoid_generators.craftitems, ftable) - return false - end -end - -function doc.sub.items.disable_core_factoid(factoid_name) - forbidden_core_factoids[factoid_name] = true -end - -doc.add_category("nodes", { - hide_entries_by_default = true, - name = S("Blocks"), - description = S("Item reference of blocks and other things which are capable of occupying space"), - build_formspec = function(data, playername) - if data then - local formstring = entry_image(data) - local datastring = factoids_header(data, "nodes") - - local liquid = data.def.liquidtype ~= "none" and minetest.get_item_group(data.itemstring, "fake_liquid") == 0 - if not forbidden_core_factoids.basics then - datastring = datastring .. S("Collidable: @1", yesno(data.def.walkable)) .. "\n" - if data.def.pointable == true then - datastring = datastring .. S("Pointable: Yes") .. "\n" - elseif liquid then - datastring = datastring .. S("Pointable: Only by special items") .. "\n" - else - datastring = datastring .. S("Pointable: No") .. "\n" - end - end - datastring = newline2(datastring) - if not forbidden_core_factoids.liquid and liquid then - datastring = newline(datastring, false) - datastring = datastring .. S("This block is a liquid with these properties:") .. "\n" - local range, renew, viscos - if data.def.liquid_range then range = data.def.liquid_range else range = 8 end - if data.def.liquid_renewable then renew = data.def.liquid_renewable else renew = true end - if data.def.liquid_viscosity then viscos = data.def.liquid_viscosity else viscos = 0 end - if renew then - datastring = datastring .. S("• Renewable") .. "\n" - else - datastring = datastring .. S("• Not renewable") .. "\n" - end - if range == 0 then - datastring = datastring .. S("• No flowing") .. "\n" - else - datastring = datastring .. S("• Flowing range: @1", range) .. "\n" - end - datastring = datastring .. S("• Viscosity: @1", viscos) .. "\n" - end - datastring = newline2(datastring) - - -- Global factoids - --- Direct interaction with the player - ---- Damage (very important) - if not forbidden_core_factoids.node_damage then - if data.def.damage_per_second and data.def.damage_per_second > 1 then - datastring = datastring .. S("This block causes a damage of @1 hit points per second.", data.def.damage_per_second) .. "\n" - elseif data.def.damage_per_second == 1 then - datastring = datastring .. S("This block causes a damage of @1 hit point per second.", data.def.damage_per_second) .. "\n" - end - if data.def.drowning then - if data.def.drowning > 1 then - datastring = datastring .. S("This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.", data.def.drowning) .. "\n" - elseif data.def.drowning == 1 then - datastring = datastring .. S("This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.", data.def.drowning) .. "\n" - end - end - local fdap = data.def.groups.fall_damage_add_percent - if fdap and fdap ~= 0 then - if fdap > 0 then - datastring = datastring .. S("The fall damage on this block is increased by @1%.", fdap) .. "\n" - elseif fdap <= -100 then - datastring = datastring .. S("This block negates all fall damage.") .. "\n" - else - datastring = datastring .. S("The fall damage on this block is reduced by @1%.", math.abs(fdap)) .. "\n" - end - end - end - datastring = datastring .. factoid_custom("nodes", "damage", data) - datastring = newline2(datastring) - - ---- Movement - if not forbidden_core_factoids.node_movement then - if data.def.groups.disable_jump == 1 then - datastring = datastring .. S("You can not jump while standing on this block.").."\n" - end - if data.def.climbable == true then - datastring = datastring .. S("This block can be climbed.").."\n" - end - local bouncy = data.def.groups.bouncy - if bouncy and bouncy ~= 0 then - datastring = datastring .. S("This block will make you bounce off with an elasticity of @1%.", bouncy).."\n" - end - local slippery = data.def.groups.slippery - if slippery and slippery ~= 0 then - datastring = datastring .. S("This block is slippery.") .. "\n" - end - datastring = datastring .. factoid_custom("nodes", "movement", data) - datastring = newline2(datastring) - end - - ---- Sounds - if not forbidden_core_factoids.sounds then - local function is_silent(def, soundtype) - return type(def.sounds) ~= "table" or def.sounds[soundtype] == nil or def.sounds[soundtype] == "" or (type(data.def.sounds[soundtype]) == "table" and (data.def.sounds[soundtype].name == nil or data.def.sounds[soundtype].name == "")) - end - local silentstep, silentdig, silentplace = false, false, false - if data.def.walkable and is_silent(data.def, "footstep") then - silentstep = true - end - if data.def.diggable and is_silent(data.def, "dig") and is_silent(data.def, "dug") then - silentdig = true - end - if is_silent(data.def, "place") and is_silent(data.def, "place_failed") and data.itemstring ~= "air" then - silentplace = true - end - if silentstep and silentdig and silentplace then - datastring = datastring .. S("This block is completely silent when walked on, mined or built.").."\n" - elseif silentdig and silentplace then - datastring = datastring .. S("This block is completely silent when mined or built.").."\n" - else - if silentstep then - datastring = datastring .. S("Walking on this block is completely silent.").."\n" - end - if silentdig then - datastring = datastring .. S("Mining this block is completely silent.").."\n" - end - if silentplace then - datastring = datastring .. S("Building this block is completely silent.").."\n" - end - end - end - datastring = datastring .. factoid_custom("nodes", "sound", data) - datastring = newline2(datastring) - - -- Block activity - --- Gravity - if not forbidden_core_factoids.gravity then - if data.def.groups.falling_node == 1 then - datastring = datastring .. S("This block is affected by gravity and can fall.").."\n" - end - end - datastring = datastring .. factoid_custom("nodes", "gravity", data) - datastring = newline2(datastring) - - --- Dropping and destruction - if not forbidden_core_factoids.drop_destroy then - if data.def.buildable_to == true then - datastring = datastring .. S("Building another block at this block will place it inside and replace it.").."\n" - if data.def.walkable then - datastring = datastring .. S("Falling blocks can go through this block; they destroy it when doing so.").."\n" - end - end - if data.def.walkable == false then - if data.def.buildable_to == false and data.def.drop ~= "" then - datastring = datastring .. S("This block will drop as an item when a falling block ends up inside it.").."\n" - else - datastring = datastring .. S("This block is destroyed when a falling block ends up inside it.").."\n" - end - end - if data.def.groups.attached_node == 1 then - if data.def.paramtype2 == "wallmounted" then - datastring = datastring .. S("This block will drop as an item when it is not attached to a surrounding block.").."\n" - else - datastring = datastring .. S("This block will drop as an item when no collidable block is below it.").."\n" - end - end - if data.def.floodable == true then - datastring = datastring .. S("Liquids can flow into this block and destroy it.").."\n" - end - end - datastring = datastring .. factoid_custom("nodes", "drop_destroy", data) - datastring = newline2(datastring) - - -- Block appearance - --- Light - if not forbidden_core_factoids.light and data.def.light_source then - if data.def.light_source > 3 then - datastring = datastring .. S("This block is a light source with a light level of @1.", data.def.light_source).."\n" - elseif data.def.light_source > 0 then - datastring = datastring .. S("This block glows faintly with a light level of @1.", data.def.light_source).."\n" - end - if data.def.paramtype == "light" and data.def.sunlight_propagates then - datastring = datastring .. S("This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.").."\n" - elseif data.def.paramtype == "light" then - datastring = datastring .. S("This block allows light to propagate with a small loss of brightness.").."\n" - elseif data.def.sunlight_propagates then - datastring = datastring .. S("This block allows sunlight to propagate without loss in brightness.").."\n" - end - end - datastring = datastring .. factoid_custom("nodes", "light", data) - datastring = newline2(datastring) - - --- List nodes/groups to which this node connects to - if not forbidden_core_factoids.connects_to and data.def.connects_to then - local nodes = {} - local groups = {} - for c=1,#data.def.connects_to do - local itemstring = data.def.connects_to[c] - if string.sub(itemstring,1,6) == "group:" then - groups[string.sub(itemstring,7,#itemstring)] = 1 - else - table.insert(nodes, itemstring) - end - end - - local nstring = "" - for n=1,#nodes do - local name - if item_name_overrides[nodes[n]] then - name = item_name_overrides[nodes[n]] - else - name = description_for_formspec(nodes[n]) - end - if n > 1 then - nstring = nstring .. S(", ") - end - if name then - nstring = nstring .. name - else - nstring = nstring .. S("Unknown Node") - end - end - if #nodes == 1 then - datastring = datastring .. S("This block connects to this block: @1.", nstring) .. "\n" - elseif #nodes > 1 then - datastring = datastring .. S("This block connects to these blocks: @1.", nstring) .. "\n" - end - - local gstring, gcount = groups_to_string(groups) - if gcount == 1 then - datastring = datastring .. S("This block connects to blocks of the @1 group.", gstring) .. "\n" - elseif gcount > 1 then - datastring = datastring .. S("This block connects to blocks of the following groups: @1.", gstring) .. "\n" - end - end - - datastring = newline2(datastring) - - -- Mining groups - datastring = datastring .. factoid_custom("nodes", "mining", data) - - datastring = newline(datastring) - - datastring = datastring .. factoid_mining_node(data) - datastring = newline2(datastring) - - -- Non-default drops - if not forbidden_core_factoids.drops and data.def.drop and data.def.drop ~= data.itemstring and data.itemstring ~= "air" then - -- TODO: Calculate drop probabilities of max > 1 like for max == 1 - local function get_desc(stack) - return description_for_formspec(stack:get_name()) - end - if data.def.drop == "" then - datastring = datastring .. S("This block won't drop anything when mined.").."\n" - elseif type(data.def.drop) == "string" then - local dropstack = ItemStack(data.def.drop) - if dropstack:get_name() ~= data.itemstring and dropstack:get_name() ~= 1 then - local desc = get_desc(dropstack) - local count = dropstack:get_count() - if count > 1 then - datastring = datastring .. S("This block will drop the following when mined: @1×@2.", count, desc).."\n" - else - datastring = datastring .. S("This block will drop the following when mined: @1.", desc).."\n" - end - end - elseif type(data.def.drop) == "table" and data.def.drop.items then - local max = data.def.drop.max_items - local dropstring = "" - local dropstring_base - if max == nil then - dropstring_base = N("This block will drop the following items when mined: @1.") - elseif max == 1 then - if #data.def.drop.items == 1 then - dropstring_base = N("This block will drop the following when mined: @1.") - else - dropstring_base = N("This block will randomly drop one of the following when mined: @1.") - end - else - dropstring_base = N("This block will randomly drop up to @1 drops of the following possible drops when mined: @2.") - end - -- Save calculated probabilities into a table for later output - local probtables = {} - local probtable - local rarity_history = {} - for i=1,#data.def.drop.items do - local local_rarity = data.def.drop.items[i].rarity - local chance - local rarity = 1 - if local_rarity == nil then - local_rarity = 1 - end - if max == 1 then - -- Chained probability - table.insert(rarity_history, local_rarity) - chance = 1 - for r=1, #rarity_history do - local chance_factor - if r > 1 and rarity_history[r-1] == 1 then - chance = 0 - break - end - if r == #rarity_history then - chance_factor = 1/rarity_history[r] - else - chance_factor = (rarity_history[r]-1)/rarity_history[r] - end - chance = chance * chance_factor - end - if chance > 0 then - rarity = 1/chance - end - else - rarity = local_rarity - chance = 1/rarity - end - -- Exclude impossible drops - if chance > 0 then - probtable = {} - probtable.items = {} - for j = 1, #data.def.drop.items[i].items do - local dropstack = ItemStack(data.def.drop.items[i].items[j]) - local itemstring = dropstack:get_name() - local desc = get_desc(dropstack) - local count = dropstack:get_count() - if not(itemstring == nil or itemstring == "" or count == 0) then - if probtable.items[itemstring] == nil then - probtable.items[itemstring] = {desc = desc, count = count} - else - probtable.items[itemstring].count = probtable.items[itemstring].count + count - end - end - end - probtable.rarity = rarity - if #data.def.drop.items[i].items > 0 then - table.insert(probtables, probtable) - end - end - end - -- Do some cleanup of the probability table - if max == 1 or max == nil then - -- Sort by rarity - local function comp(p1, p2) - return p1.rarity < p2.rarity - end - table.sort(probtables, comp) - end - -- Output probability table - local pcount = 0 - for i=1, #probtables do - if pcount > 0 then - -- List seperator - dropstring = dropstring .. S(", ") - end - local probtable = probtables[i] - local icount = 0 - local dropstring_this = "" - for _, itemtable in pairs(probtable.items) do - if icount > 0 then - -- Final list seperator - dropstring_this = dropstring_this .. S(" and ") - end - local desc = itemtable.desc - local count = itemtable.count - if count ~= 1 then - desc = S("@1×@2", count, desc) - end - dropstring_this = dropstring_this .. desc - icount = icount + 1 - end - - local rarity = probtable.rarity - -- No percentage if there's only one possible guaranteed drop - if not(rarity == 1 and #data.def.drop.items == 1) then - local chance = (1/rarity)*100 - if rarity > 200 then -- <0.5% - -- For very low percentages - dropstring_this = S("@1 (<0.5%)", dropstring_this) - else - -- Add circa indicator for percentages with decimal point - local fchance = string.format("%.0f", chance) - if math.fmod(chance, 1) > 0 then - dropstring_this = S("@1 (ca. @2%)", dropstring_this, fchance) - else - dropstring_this = S("@1 (@2%)", dropstring_this, fchance) - end - end - end - dropstring = dropstring .. dropstring_this - pcount = pcount + 1 - end - if max and max > 1 then - datastring = datastring .. S(dropstring_base, max, dropstring) - else - datastring = datastring .. S(dropstring_base, dropstring) - end - datastring = newline(datastring) - end - end - datastring = datastring .. factoid_custom("nodes", "drops", data) - datastring = newline2(datastring) - - datastring = datastring .. factoids_footer(data, playername, "nodes") - - formstring = formstring .. doc.widgets.text(datastring, nil, nil, doc.FORMSPEC.ENTRY_WIDTH - 1.2) - - return formstring - else - return "label[0,1;NO DATA AVALIABLE!]" - end - end -}) - -doc.add_category("tools", { - hide_entries_by_default = true, - name = S("Tools and weapons"), - description = S("Item reference of all wieldable tools and weapons"), - sorting = "function", - -- Roughly sort tools based on their capabilities. Tools which dig the same stuff end up in the same group - sorting_data = function(entry1, entry2) - local entries = { entry1, entry2 } - -- Hand beats all - if entries[1].eid == "" then return true end - if entries[2].eid == "" then return false end - - local comp = {} - for e = 1, 2 do - comp[e] = {} - end - -- No tool capabilities: Instant loser - if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities then return false end - if entries[2].data.def.tool_capabilities == nil and entries[1].data.def.tool_capabilities then return true end - -- No tool capabilities for both: Compare by uses - if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities == nil then - for e = 1, 2 do - if type(entries[e].data.def._doc_items_durability) == "number" then - comp[e].uses = entries[e].data.def._doc_items_durability - else - comp[e].uses = 0 - end - end - return comp[1].uses > comp[2].uses - end - for e=1, 2 do - comp[e].gc = entries[e].data.def.tool_capabilities.groupcaps - end - -- No group capabilities = instant loser - if comp[1].gc == nil then return false end - if comp[2].gc == nil then return true end - for e=1, 2 do - local groups = {} - local gc = comp[e].gc - local group = nil - local mintime = nil - local groupcount = 0 - local realuses = nil - for k,v in pairs(gc) do - local maxlevel = v.maxlevel - if maxlevel == nil then - -- Default from tool.h - maxlevel = 1 - end - if groupcount == 0 then - group = k - local uses = v.uses - if v.uses == nil then - -- Default from tool.h - uses = 20 - end - realuses = uses * math.pow(3, maxlevel) - end - if v.times and #v.times > 1 then - for rating, time in pairs(v.times) do - local realtime = time / maxlevel - if mintime == nil or realtime < mintime then - mintime = realtime - end - end - else - mintime = 0 - end - if groups[k] ~= true then - groupcount = groupcount + 1 - groups[k] = true - end - end - comp[e].count = groupcount - comp[e].group = group - comp[e].mintime = mintime - if realuses then - comp[e].uses = realuses - elseif type(entries[e].data.def._doc_items_durability) == "number" then - comp[e].uses = entries[e].data.def._doc_items_durability - else - comp[e].uses = 0 - end - end - - -- We want to sort out digging tools with multiple capabilities - if comp[1].count > 1 and comp[1].count > comp[2].count then - return false - elseif comp[1].group == comp[2].group then - -- Tiebreaker 1: Minimum digging time - if comp[1].mintime == comp[2].mintime then - -- Tiebreaker 2: Use count - return comp[1].uses > comp[2].uses - else - return comp[1].mintime < comp[2].mintime - end - -- Final tiebreaker: Sort by group name - else - if comp[1].group and comp[2].group then - return comp[1].group < comp[2].group - else - return false - end - end - end, - build_formspec = function(data, playername) - if data then - local formstring = entry_image(data) - local datastring = factoids_header(data, "tools") - - -- Overwritten durability info - if type(data.def._doc_items_durability) == "number" then - -- Fixed number of uses - datastring = datastring .. S("Durability: @1 uses", data.def._doc_items_durability) - datastring = newline2(datastring) - elseif type(data.def._doc_items_durability) == "string" then - -- Manually described durability - datastring = datastring .. S("Durability: @1", data.def._doc_items_durability) - datastring = newline2(datastring) - end - - datastring = datastring .. factoids_footer(data, playername, "tools") - - formstring = formstring .. doc.widgets.text(datastring, nil, nil, doc.FORMSPEC.ENTRY_WIDTH - 1.2) - - return formstring - else - return "label[0,1;NO DATA AVALIABLE!]" - end - end -}) - -doc.add_category("craftitems", { - hide_entries_by_default = true, - name = S("Miscellaneous items"), - description = S("Item reference of items which are neither blocks, tools or weapons (esp. crafting items)"), - build_formspec = function(data, playername) - if data then - local formstring = entry_image(data) - local datastring = factoids_header(data, "craftitems") - datastring = datastring .. factoids_footer(data, playername, "craftitems") - - formstring = formstring .. doc.widgets.text(datastring, nil, nil, doc.FORMSPEC.ENTRY_WIDTH - 1.2) - - return formstring - else - return "label[0,1;NO DATA AVALIABLE!]" - end - end -}) - --- Register group definition stuff --- More (user-)friendly group names to replace the rather technical names --- for better understanding -function doc.sub.items.add_friendly_group_names(groupnames) - for internal, real in pairs(groupnames) do - groupdefs[internal] = real - end -end - --- Adds groups to be displayed in the generic “misc.” groups --- factoid. Those groups should be neither be used as mining --- groups nor as damage groups and should be relevant to the --- player in someway. -function doc.sub.items.add_notable_groups(groupnames) - for g=1,#groupnames do - miscgroups[groupnames[g]] = true - end -end - --- Collect information about all items -local function gather_descs() - -- Internal help texts for default items - local help = { - longdesc = {}, - usagehelp = {}, - } - - -- 1st pass: Gather groups of interest - for id, def in pairs(minetest.registered_items) do - -- Gather all groups used for mining - if def.tool_capabilities then - local groupcaps = def.tool_capabilities.groupcaps - if groupcaps then - for k,v in pairs(groupcaps) do - if mininggroups[k] ~= true then - mininggroups[k] = true - end - end - end - end - - -- ... and gather all groups which appear in crafting recipes - local crafts = minetest.get_all_craft_recipes(id) - if crafts then - for c=1,#crafts do - for k,v in pairs(crafts[c].items) do - if string.sub(v,1,6) == "group:" then - local groupstring = string.sub(v,7,-1) - local groups = string.split(groupstring, ",") - for g=1, #groups do - miscgroups[groups[g]] = true - end - end - end - end - end - - -- ... and gather all groups used in connects_to - if def.connects_to then - for c=1, #def.connects_to do - if string.sub(def.connects_to[c],1,6) == "group:" then - local group = string.sub(def.connects_to[c],7,-1) - miscgroups[group] = true - end - end - end - end - - -- 2nd pass: Add entries - - -- Set default air text - -- Custom longdesc and usagehelp may be set by mods through the add_helptexts function - if minetest.registered_items["air"]._doc_items_longdesc then - help.longdesc["air"] = minetest.registered_items["air"]._doc.items_longdesc - else - help.longdesc["air"] = S("A transparent block, basically empty space. It is usually left behind after digging something.") - end - if minetest.registered_items["ignore"]._doc_items_create_entry then - suppressed["ignore"] = minetest.registered_items["ignore"]._doc_items_create_entry == true - end - - -- Add entry for the default tool (“hand”) - -- Custom longdesc and usagehelp may be set by mods through the add_helptexts function - local handdef = minetest.registered_items[""] - if handdef._doc_items_create_entry ~= false then - if handdef._doc_items_longdesc then - help.longdesc[""] = handdef._doc_items_longdesc - else - -- Default text - help.longdesc[""] = S("Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.") - end - if handdef._doc_items_entry_name then - item_name_overrides[""] = handdef._doc_items_entry_name - end - doc.add_entry("tools", "", { - name = item_name_overrides[""], - hidden = handdef._doc_items_hidden == true, - data = { - longdesc = help.longdesc[""], - usagehelp = help.usagehelp[""], - itemstring = "", - def = handdef, - } - }) - end - - local function add_entries(deftable, category_id) - for id, def in pairs(deftable) do - local name, ld, uh, im - local forced = false - if def._doc_items_create_entry == true and def then forced = true end - name = get_entry_name(id) - if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or (def._doc_items_create_entry == false) or (suppressed[id] == true)) or forced then - if def._doc_items_longdesc then - ld = def._doc_items_longdesc - end - if help.longdesc[id] then - ld = help.longdesc[id] - end - if def._doc_items_usagehelp then - uh = def._doc_items_usagehelp - end - if help.usagehelp[id] then - uh = help.usagehelp[id] - end - if def._doc_items_image then - im = def._doc_items_image - end - local hidden - if id == "air" or id == "" then hidden = false end - if type(def._doc_items_hidden) == "boolean" then - hidden = def._doc_items_hidden - end - name = scrub_newlines(name) - local infotable = { - name = name, - hidden = hidden, - data = { - longdesc = ld, - usagehelp = uh, - image = im, - itemstring = id, - def = def, - } - } - doc.add_entry(category_id, id, infotable) - end - end - end - - -- Add node entries - add_entries(minetest.registered_nodes, "nodes") - - -- Add tool entries - add_entries(minetest.registered_tools, "tools") - - -- Add craftitem entries - add_entries(minetest.registered_craftitems, "craftitems") -end - ---[[ Reveal items as the player progresses through the game. -Items are revealed by: -* Digging, punching or placing node, -* Crafting -* Having item in inventory (not instantly revealed) ]] - -local function reveal_item(playername, itemstring) - local category_id - if itemstring == nil or itemstring == "" or playername == nil or playername == "" then - return false - end - if minetest.registered_nodes[itemstring] then - category_id = "nodes" - elseif minetest.registered_tools[itemstring] then - category_id = "tools" - elseif minetest.registered_craftitems[itemstring] then - category_id = "craftitems" - elseif minetest.registered_items[itemstring] then - category_id = "craftitems" - else - return false - end - doc.mark_entry_as_revealed(playername, category_id, itemstring) - return true -end - -local function reveal_items_in_inventory(player) - local inv = player:get_inventory() - local list = inv:get_list("main") - for l=1, #list do - reveal_item(player:get_player_name(), list[l]:get_name()) - end -end - -minetest.register_on_dignode(function(pos, oldnode, digger) - if digger == nil then return end - local playername = digger:get_player_name() - if playername and playername ~= "" and oldnode then - reveal_item(playername, oldnode.name) - reveal_items_in_inventory(digger) - end -end) - -minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) - if puncher == nil then return end - local playername = puncher:get_player_name() - if playername and playername ~= "" and node then - reveal_item(playername, node.name) - end -end) - -minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing) - if placer == nil then return end - local playername = placer:get_player_name() - if playername and playername ~= "" and itemstack and not itemstack:is_empty() then - reveal_item(playername, itemstack:get_name()) - end -end) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if player == nil then return end - local playername = player:get_player_name() - if playername and playername ~= "" and itemstack and not itemstack:is_empty() then - reveal_item(playername, itemstack:get_name()) - end -end) - -minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info) - if player == nil then return end - local playername = player:get_player_name() - local itemstack - if action == "take" or action == "put" then - itemstack = inventory_info.stack - end - if itemstack and playername and playername ~= "" and (not itemstack:is_empty()) then - reveal_item(playername, itemstack:get_name()) - end -end) - -minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) - if user == nil then return end - local playername = user:get_player_name() - if playername and playername ~= "" and itemstack and not itemstack:is_empty() then - reveal_item(playername, itemstack:get_name()) - if replace_with_item then - reveal_item(playername, replace_with_item) - end - end -end) - -minetest.register_on_joinplayer(function(player) - reveal_items_in_inventory(player) -end) - ---[[ -Periodically check all items in player inventory and reveal them all. -TODO: Check whether there's a serious performance impact on servers with many players. -TODO: If possible, try to replace this functionality by updating the revealed items as soon the player obtained a new item (probably needs new Minetest callbacks). -]] - -local checktime = 8 -local timer = 0 -minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer > checktime then - local players = minetest.get_connected_players() - for p=1, #players do - reveal_items_in_inventory(players[p]) - end - - timer = math.fmod(timer, checktime) - end -end) - -minetest.register_on_mods_loaded(gather_descs) diff --git a/mods/HELP/doc/doc_items/locale/doc_items.de.tr b/mods/HELP/doc/doc_items/locale/doc_items.de.tr deleted file mode 100644 index f14c99314..000000000 --- a/mods/HELP/doc/doc_items/locale/doc_items.de.tr +++ /dev/null @@ -1,142 +0,0 @@ -# textdomain:doc_items - Using it as fuel turns it into: @1.= Wird dieser Gegenstand als Brennstoff verwendet, verwandelt er sich zu: @1. -@1 seconds=@1 Sekunden -# Item count times item name -@1×@2=@1×@2 -# Itemname (25%) -@1 (@2%)=@1 (@2%) -# Itemname (<0.5%) -@1 (<0.5%)=@1 (<0,5%) -# Itemname (ca. 25%) -@1 (ca. @2%)=@1 (ca. @2%) -# List separator (e.g. “one, two, three”) -, =, -# Final list separator (e.g. “One, two and three”) - and = und -1 second=1 Sekunde -A transparent block, basically empty space. It is usually left behind after digging something.=Ein transparenter Block, praktisch leerer Raum. Er wird üblicherweise hinterlassen, nachdem man etwas ausgegraben hat. -Air=Luft -Blocks=Blöcke -Building another block at this block will place it inside and replace it.=Wird ein anderer Block an diesem Block gebaut, wird dieser andere Block seine Stelle einnehmen. -Building this block is completely silent.=Das Bauen dieses Blocks ist völlig lautlos. -Collidable: @1=Kollidiert: @1 -Description: @1=Beschreibung: @1 -Falling blocks can go through this block; they destroy it when doing so.=Fallende Blöcke können diesen Block durchdringen; sie zerstören ihn dabei. -Full punch interval: @1 s=Schlagintervall: @1 s -Hand=Hand -Hold it in your hand, then leftclick to eat it.=Halten Sie es in Ihrer Hand, dann klicken Sie mit der linken Maustaste, um es zu essen. -Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Halten Sie es in Ihrer Hand, dann klicken Sie mit der linken Maustaste, um es zu essen. Aber warum sollten Sie das tun wollen? -Item reference of all wieldable tools and weapons=Gegenstandsreferenz aller tragbaren Werkzeugen und Waffen -Item reference of blocks and other things which are capable of occupying space=Gegenstandsreferenz aller Blöcke und anderen Dingen, die Raum belegen -Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Gegenstandsreferenz aller Gegenstände, welche weder Blöcke, Werkzeuge oder Waffen sind (insb. Fertigungsgegenstände) -Liquids can flow into this block and destroy it.=Flüssigkeiten können in diesen Block hereinfließen und ihn zerstören. -Maximum stack size: @1=Maximale Stapelgröße: @1 -Mining level: @1=Grabestufe: @1 -Mining ratings:=Grabewertungen: -• @1, rating @2: @3 s - @4 s=• @1, Wertung @2: @3 s - @4 s -• @1, rating @2: @3 s=• @1, Wertung @2: @3 s -Mining times:=Grabezeiten: -Mining this block is completely silent.=Das Abbauen dieses Blocks ist völlig lautlos. -Miscellaneous items=Sonstige Gegenstände -No=Nein -Pointable: No=Zeigbar: Nein -Pointable: Only by special items=Zeigbar: Nur von besonderen Gegenständen -Pointable: Yes=Zeigbar: Ja -Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Schläge mit diesem Block funktionieren nicht auf die übliche Weise; Nahkampf und Graben sind damit entweder nicht möglich oder funktionieren auf andere Weise. -Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Schläge mit diesem Gegenstand funktionieren nicht auf die übliche Weise; Nahkampf und Graben sind damit entweder nicht möglich oder funktionieren auf andere Weise. -Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Schläge mit diesem Werkzeug funktionieren nicht auf die übliche Weise; Nahkampf und Graben sind damit entweder nicht möglich oder funktionieren auf andere Weise. -Range: @1=Reichweite: @1 -# Range: () -Range: @1 (@2)=Reichweite: @1 (@2) -Range: 4=Reichweite: 4 -# Rating used for digging times -Rating @1=Wertung @1 -Rating @1-@2=Wertung @1-@2 -The fall damage on this block is increased by @1%.=Der Fallschaden auf diesem Block ist um @1% erhöht. -The fall damage on this block is reduced by @1%.=Der Fallschaden auf diesem Block ist um @1% reduziert. -This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Dieser Block ist lichtdurchlässig mit einen geringfügigen Helligkeitsverlust; Sonnenlicht passiert jedoch ohne Verlust. -This block allows light to propagate with a small loss of brightness.=Dieser Block ist lichtdurchlässig mit einen geringfügigen Helligkeitsverlust. -This block allows sunlight to propagate without loss in brightness.=Dieser Block ist vollkommen durchlässig für Sonnenlicht. -This block belongs to the @1 group.=Dieser Block gehört zur Gruppe „@1“. -This block belongs to these groups: @1.=Dieser Block gehört zu den folgenden Gruppen: @1. -This block can be climbed.=Dieser Block kann beklettert werden. -This block can be destroyed by any mining tool immediately.=Dieser Block kann von einem beliebigen Grabewerkzeug sofort zerstört werden. -This block can be destroyed by any mining tool in half a second.=Dieser Block kann von einem beliebigen Grabewerkzeug in einer halben Sekunde zerstört werden. -This block can be mined by any mining tool immediately.=Dieser Block kann von einem beliebigen Grabewerkzeug sofort abgebaut werden. -This block can be mined by any mining tool in half a second.=Dieser Block kann von einem beliebigen Grabewerkzeug in einer halben Sekunde abgebaut werden. -This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Dieser Block kann von Grabewerkzeugen abgebaut werden, falls sie auf eine der folgenden Grabewertungen sowie seinem Härtegrad passen. -This block can not be destroyed by ordinary mining tools.=Dieser Block kann nicht von Grabewerkzeugen zerstört werden. -This block can not be mined by ordinary mining tools.=Dieser Block kann nicht von gewöhnlichen Grabewerkzeugen abgebaut werden. -This block can serve as a smelting fuel with a burning time of @1.=Dieser Block kann als Brennstoff mit einer Brenndauer von @1 dienen. -This block causes a damage of @1 hit point per second.=Dieser Block richtet einen Schaden von @1 Trefferpunkt pro Sekunde an. -This block causes a damage of @1 hit points per second.=Dieser Block richtet einen Schaden von @1 Trefferpunkten pro Sekunde an. -This block connects to blocks of the @1 group.=Dieser Block verbindet sich mit Blöcken der Gruppe „@1“. -This block connects to blocks of the following groups: @1.=Dieser Block verbindet sich mit Blöcken der folgenden Gruppen: @1. -This block connects to these blocks: @1.=Dieser Block verbindet sich mit den folgenden Blöcken: @1. -This block connects to this block: @1.=Dieser Block verbindet sich mit diesem Block: @1. -This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Dieser Block reduziert Ihren Atem und verursacht beim Ertrinken einen Schaden von @1 Trefferpunkt alle 2 Sekunden. -This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Dieser Block reduziert Ihren Atem und verursacht beim Ertrinken einen Schaden von @1 Trefferpunkten alle 2 Sekunden. -This block is a light source with a light level of @1.=Dieser Block ist eine Lichtquelle mit einer Helligkeitsstufe von @1. -This block glows faintly with a light level of @1.=Dieser Block leuchtet schwach mit einer Helligkeitsstufe von @1. -This block is a building block for creating various buildings.=Dieser Block ist für den Bau diverser Gebäude vorgesehen. -This block is a liquid with these properties:=Dieser Block ist eine Flüssigkeit mit folgenden Eigenschaften: -This block is affected by gravity and can fall.=Dieser Block wird von der Schwerkraft beeinflusst und kann fallen. -This block is completely silent when mined or built.=Dieser Block kann vollkommen lautlos gebaut oder abgebaut werden. -This block is completely silent when walked on, mined or built.=Es ist vollkommen lautlos, wenn man auf diesen Block geht, ihn baut oder abbaut. -This block is destroyed when a falling block ends up inside it.=Dieser Block wird zerstört, wenn ein fallender Block in ihm landet. -This block negates all fall damage.=Auf diesem Block gibt es keinen Fallschaden. -This block points to liquids.=Mit diesem Block zeigt man auf Flüssigkeiten. -This block will drop as an item when a falling block ends up inside it.=Dieser Block wird sich als Gegenstand abwerfen, wenn ein fallender Block in ihn landet. -This block will drop as an item when it is not attached to a surrounding block.=Dieser Block wird sich als Gegenstand abwerfen, wenn er nicht an einen benachbarten Block befestigt ist. -This block will drop as an item when no collidable block is below it.=Dieser Block wird sich als Gegenstand abwerfen, wenn kein kollidierender Block unter ihn liegt. -This block will drop the following items when mined: @1.=Dieser Block wird nach dem Abbauen die folgenden Gegenstände abwerfen: @1. -This block will drop the following when mined: @1×@2.=Dieser Block wird nach dem Abbauen folgendes abwerfen: @1×@2. -This block will drop the following when mined: @1.=Dieser Block wird nach dem Abbauen folgendes abwerfen: @1. -This block will drop the following when mined: @1.=Dieser Block wird nach dem Abbauen folgendes abwerfen: @1. -This block will make you bounce off with an elasticity of @1%.=Dieser Block wird Sie mit einer Elastizität von @1% abprallen lassen. -This block will randomly drop one of the following when mined: @1.=Dieser Block wird nach dem Abbauen zufällig eines von den folgenden Dingen abwerfen: @1. -This block will randomly drop up to @1 drops of the following possible drops when mined: @2.=Dieser Block nach dem Abbauen wird zufällig bis zu @1 Abwürfe von den folgenden möglichen Abwürfen abwerfen: @2. -This block won't drop anything when mined.=Dieser Block wird nach dem Abbauen nichts abwerfen. -This is a decorational block.=Dieser Block dient zur Dekoration. -This is a melee weapon which deals damage by punching.=Dies ist eine Nahkampfwaffe, welche Schaden durch Schläge verursacht. -Maximum damage per hit:=Maximaler Schaden pro Treffer: -This item belongs to the @1 group.=Dieser Gegenstand gehört zur Gruppe „@1“. -This item belongs to these groups: @1.=Dieser Gegenstand gehört zu den folgenden Gruppen: @1. -This item can serve as a smelting fuel with a burning time of @1.=Dieser Gegenstand kann als Brennstoff mit einer Brenndauer von @1 dienen. -This item is primarily used for crafting other items.=Dieser Gegenstand wird primär für die Fertigung von anderen Gegenständen benutzt. -This item points to liquids.=Mit diesem Gegenstand zeigt man auf Flüssigkeiten. -This tool belongs to the @1 group.=Dieses Werkzeug gehört zur Gruppe „@1“. -This tool belongs to these groups: @1.=Dieses Werkzeug gehört zu den folgenden Gruppen: @1. -This tool can serve as a smelting fuel with a burning time of @1.=Dieses Werkzeug kann als Brennstoff mit einer Brenndauer von @1 dienen. -This tool is capable of mining.=Dies ist ein Grabewerkzeug. -Maximum toughness levels:=Maximale Härtegrade: -This tool points to liquids.=Mit diesem Werkzeug zeigt man auf Flüssigkeiten. -Tools and weapons=Werkzeuge und Waffen -Unknown Node=Unbekannter Node -Usage help: @1=Benutzung: @1 -Walking on this block is completely silent.=Auf diesem Block sind Schritte lautlos. -Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Wenn Sie keinen Gegenstand halten, benutzen Sie die Hand, welches als ein Werkzeug mit seinen eigenen Fägihkeiten dient. Wenn Sie einen Gegenstand halten, der kein Grabewerkzeug oder eine Waffe ist, wird er sich verhalten als wäre er die Hand. -Yes=Ja -You can not jump while standing on this block.=Man kann von diesem Block nicht abspringen. -any level=beliebige Stufe -level 0=Stufe 0 -level 0-@1=Stufen 0-@1 -unknown=unbekannt -Unknown item (@1)=Unbekannter Gegenstand (@1) -• @1: @2=• @1: @2 -• @1: @2 HP=• @1: @2 TP -• @1: @2, @3=• @1: @2, @3 -• Flowing range: @1=• Fließweite: @1 -• No flowing=• Kein Fließen -• Not renewable=• Nicht erneuerbar -• Renewable=• Erneuerbar -• Viscosity: @1=• Zähflüssigkeit: @1 -Itemstring: "@1"=Itemstring: „@1“ -Durability: @1 uses=Haltbarkeit: @1 Benutzungen -Durability: @1=Haltbarkeit: @1 -Mining durability:=Grabehaltbarkeit: -• @1, level @2: @3 uses=• @1, Stufe @2: @3 Benutzungen -• @1, level @2: Unlimited=• @1, Stufe @2: Unbegrenzt -This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.=Die Rotation dieses Blocks hängt davon ab, wie sie ihn platzieren: Platzieren Sie ihn auf den Boden oder an die Decke, um ihn vertikal aufzustellen; platzieren Sie in an der Seite für eine horizontale Ausrichtung. Wenn Sie während des Bauens schleichen, wird der Block stattdessen senkrecht zur üblichen Ausrichtung rotiert. -Toughness level: @1=Härtegrad: @1 -This block is slippery.=Dieser Block ist rutschig. diff --git a/mods/HELP/doc/doc_items/locale/doc_items.fr.tr b/mods/HELP/doc/doc_items/locale/doc_items.fr.tr deleted file mode 100644 index 824ceeeba..000000000 --- a/mods/HELP/doc/doc_items/locale/doc_items.fr.tr +++ /dev/null @@ -1,143 +0,0 @@ -# textdomain:doc_items -Using it as fuel turns it into: @1.=L'utiliser comme combustible le transforme en : @1. -@1 seconds=@1 secondes -# Item count times item name -@1×@2=@1×@ -# Itemname (25%) -@1 (@2%)=@1 (@2%) -# Itemname (<0.5%) -@1 (<0.5%)=@1 (<0.5%) -# Itemname (ca. 25%) -@1 (ca. @2%)=@1 (ca. @2%) -# List separator (e.g. “one, two, three”) -, =, -# Final list separator (e.g. “One, two and three”) - and = et -1 second=1 seconde -A transparent block, basically empty space. It is usually left behind after digging something.=Un bloc transparent, tout simplement un espace vide. Il apparaît généralement après avoir creusé quelque chose. -Air=Air -Blocks=Blocs -Building another block at this block will place it inside and replace it.=Construire un autre bloc sur ce bloc le placera à l'intérieur et le remplacera. -Building this block is completely silent.=Construire ce bloc est complètement silentieux -Collidable: @1=Percutable : @1 -Description: @1=Description : @1 -Falling blocks can go through this block; they destroy it when doing so.=Les blocs en chute peuvent traverser ce bloc; ils le détruisent en faisant cela. -Full punch interval: @1 s=Intervalle de frappe : @1 -Hand=Main -Hold it in your hand, then leftclick to eat it.=Tenez-le en main, puis cliquez-gauche pour le manger. -Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Tenez-le en main, puis cliquez-gauche pour le manger. Mais pourquoi feriez-vous cela ? -Item reference of all wieldable tools and weapons=L'index des outils et armes manipulables -Item reference of blocks and other things which are capable of occupying space=L'index des blocs et autres choses qui peuvent occuper l'espace -Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=L'index des choses qui ne sont ni des blocs, ni des outils ou armes (particulièrement les objets d'assemblage) -Liquids can flow into this block and destroy it.=Les liquides peuvent couler sur ce bloc et le détruire. -Maximum stack size: @1=Taille maximum de pile : @1 -Mining level: @1=Niveau de minage : @1 -Mining ratings:=Notes de minage : -• @1, rating @2: @3 s - @4 s=• @1, note @2 : @3s - @4s -• @1, rating @2: @3 s=• @1, note @2 : @3s -Mining times:=Temps de minage : -Mining this block is completely silent.=Miner ce bloc est complètement silencieux. -Miscellaneous items=Objets divers -No=Non -Pointable: No=Pointable : Non -Pointable: Only by special items=Pointable : Seulement avec des objets spéciaux -Pointable: Yes=Pointable : Oui -Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Les frappes avec ce bloc ne fonctionnent pas de la manière usuelle ; le combat au corps à corps et le minage ne sont soit pas possible ou fonctionnent différemment. -Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Les frappes avec cet objet ne fonctionnent pas de la manière usuelle ; le combat au corps à corps et le minage ne sont soit pas possible ou fonctionnent différemment. -Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Les frappes avec cet outil ne fonctionnent pas de la manière usuelle ; le combat au corps à corps et le minage ne sont soit pas possible ou fonctionnent différemment. -Range: @1=Portée : @1 -# Range: () -Range: @1 (@2)=Portée : @1 (@2) -Range: 4=Portée : 4 -# Rating used for digging times -Rating @1=Note @1 -# @1 is minimal rating, @2 is maximum rating -Rating @1-@2=Note @1-@2 -The fall damage on this block is increased by @1%.=Les domages de chute sur ce bloc sont augmentés de @1%. -The fall damage on this block is reduced by @1%.=Les domages de chute sur ce bloc sont réduits de @1%. -This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Ce bloc laisse passer la lumière avec une petite perte de luminosité, et la lumière du soleil peut la traverser sans perte. -This block allows light to propagate with a small loss of brightness.=Ce bloc laisse passer la lumière avec une petite perte de luminosité. -This block allows sunlight to propagate without loss in brightness.=The bloc laisse passer la lumière du soleil sans perte de luminosité. -This block belongs to the @1 group.=Ce bloc appartient au groupe @1. -This block belongs to these groups: @1.=Ce bloc appartient aux groupes : @1. -This block can be climbed.=Ce bloc peut être escaladé. -This block can be destroyed by any mining tool immediately.=Ce bloc peut être détruit pas n'importe quel outil de minage instantanément. -This block can be destroyed by any mining tool in half a second.=Ce bloc peut être détruit pas n'importe quel outil de minage en une demi-seconde. -This block can be mined by any mining tool immediately.=Ce bloc peut être miné avec n'importe quel outil de minage instantanément. -This block can be mined by any mining tool in half a second.=Ce bloc peut être miné avec n'importe quel outil de minage en une demi-seconde. -This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Ce bloc peut être miné avec les outils de minages qui ont les notes de minage et les niveaux de robustesse suivants : -This block can not be destroyed by ordinary mining tools.=Ce bloc ne peut pas être détruit avec les outils de minage ordinaires. -This block can not be mined by ordinary mining tools.=Ce bloc ne peut pas être miné avec les outils de minage ordinaires. -This block can serve as a smelting fuel with a burning time of @1.=Ce bloc peut servir de combustible pendant @1. -This block causes a damage of @1 hit point per second.=Ce bloc cause des domages de @1 point de vie par seconde. -This block causes a damage of @1 hit points per second.=Ce bloc cause des domages de @1 points de vie par seconde. -This block connects to blocks of the @1 group.=Ce bloc se connecte aux blocs du groupe @1. -This block connects to blocks of the following groups: @1.=Ce bloc se connecte aux blocs des groupes suivants : @1 -This block connects to these blocks: @1.=Ce bloc se connecte à ces blocs : @1 -This block connects to this block: @1.=Ce bloc se connecte à ce bloc : @1. -This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Ce bloc réduit votre souffle et cause des domages de noyade de @1 point de vie toutes les 2 secondes. -This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Ce bloc réduit votre souffle et cause des domages de noyade de @1 points de vie toutes les 2 secondes. -This block is a light source with a light level of @1.=Ce bloc est une source de lumière de niveau @1. -This block glows faintly with a light level of @1.=Ce bloc brille xxx avec une lumière de niveau @1. -This block is a building block for creating various buildings.=Ce bloc est un bloc de construction pour créer différentes bâtisses. -This block is a liquid with these properties:=Ce bloc est un liquide aux proprités suivantes : -This block is affected by gravity and can fall.=Ce bloc est affecté par la gravité et peut tomber. -This block is completely silent when mined or built.=Ce bloc ne fait pas de bruit lorsque l'on le mine ou le construit. -This block is completely silent when walked on, mined or built.=Ce bloc ne fait pas de bruit lorsque l'on marche dessus, le mine ou le construit. -This block is destroyed when a falling block ends up inside it.=Ce bloc est détruit lorsqu'un autre bloc tombe dessus. -This block negates all fall damage.=Ce bloc annule tous les domages de chute. -This block points to liquids.=Ce bloc peut pointer les liquides. -This block will drop as an item when a falling block ends up inside it.=Ce bloc se transformera en objet lorsqu'un autre bloc tombe dessus. -This block will drop as an item when it is not attached to a surrounding block.=Ce bloc se transformera en objet lorsqu'il n'est plus rattaché à un bloc alentour. -This block will drop as an item when no collidable block is below it.=Ce bloc se transformera en objet lorsqu'il n'y aura plus de bloc percutable en dessous. -This block will drop the following items when mined: @1.=Ce bloc donnera les objets suivant lorsque miné : @1. -This block will drop the following when mined: @1×@2.=Ce bloc donnera les objets suivant lorsque miné : @1×@2. -This block will drop the following when mined: @1.=Ce bloc donnera les objets suivant lorsque miné : @1. -This block will drop the following when mined: @1.=Ce bloc donnera les objets suivant lorsque miné : @1. -This block will make you bounce off with an elasticity of @1%.=Ce bloc vous fera rebondir avec une élasticité de @1%. -This block will randomly drop one of the following when mined: @1.=Ce bloc laissera tomber de manière aléatoire un des éléments suivants lorsque miné : @1. -This block will randomly drop up to @1 drops of the following possible drops when mined: @2.=Ce bloc laissera tomber de manière aléatoire jusqu'à @1 des éléments suivants lorque miné : -This block won't drop anything when mined.=Ce bloc ne donnera rien lorsque miné. -This is a decorational block.=C'est un bloc de décoration. -This is a melee weapon which deals damage by punching.=C'est une arme de mêlée qui inflige des dommages en frappant. -Maximum damage per hit:=Dommages maximaux par frappe : -This item belongs to the @1 group.=Cet objet appartient au groupe @1. -This item belongs to these groups: @1.=Cet objet appartient aux groupes suivants : @1 -This item can serve as a smelting fuel with a burning time of @1.=Cet objet peut servir de combustible pendant @1. -This item is primarily used for crafting other items.=Cet objet est principalement utilisé pour fabriquer d'autres objets. -This item points to liquids.=Cet objet peut pointer les liquides. -This tool belongs to the @1 group.=Cet outil appartient au groupe @1. -This tool belongs to these groups: @1.=Cet outil appartient aux groupes suivants : @1. -This tool can serve as a smelting fuel with a burning time of @1.=Cet outil peut servir de combustible pendant @1. -This tool is capable of mining.=Cet outil peut miner. -Maximum toughness levels:=Niveau de robustesse maximum : -This tool points to liquids.=Cet outil peut pointer les liquides. -Tools and weapons=Outils et armes -Unknown Node=Nœud inconnu -Usage help: @1=Aide d'utilisation : @1 -Walking on this block is completely silent.=Marcher sur ce bloc est silencieux. -Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Quand vous ne maniez aucun objet, vous utilisez la main qui se comporte comme un outil avec ses propres capacités. Lorsque vous maniez un objet qui n'est pas un outil ou une arme il se comportera comme si c'était la main. -Yes=Oui -You can not jump while standing on this block.=Vous ne pouvez pas sauter en étant sur ce bloc. -any level=Tous les niveaux -level 0=Niveau 0 -level 0-@1=Niveau 0-@1 -unknown=inconnu -Unknown item (@1)=Objet inconnu (@1) -• @1: @2=• @1 : @2 -• @1: @2 HP=• @1 : @2 PV -• @1: @2, @3=• @1 : @2, @3 -• Flowing range: @1=• Distance de flux : @1 -• No flowing=• Ne coule pas -• Not renewable=• Ne se renouvelle pas -• Renewable=• Renouvelable -• Viscosity: @1=• Viscosité : @1 -Itemstring: "@1"=Identifiant d'objet : "@1" -Durability: @1 uses=Durabilité : @1 utilisations -Durability: @1=Durabilité : @1 -Mining durability:=Durabilité de minage : -• @1, level @2: @3 uses=• @1, niveau @2 : @3 utilisations -• @1, level @2: Unlimited=• @1, niveau @2 : Illimité -This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.=La manière dont vous placez ce bloc affecte sa rotation : placez-le au sol ou au plafond pour une orientation verticale ; placez-le sur un coté pour une orientation horizontale. Pour le placer de manière perpendiculaire, utilisez la touche déplacement discrêt en le plaçant. -Toughness level: @1=Niveau de robustesse : @1 -This block is slippery.=Ce bloc est glissant. diff --git a/mods/HELP/doc/doc_items/locale/doc_items.pl.tr b/mods/HELP/doc/doc_items/locale/doc_items.pl.tr deleted file mode 100644 index 8ff945368..000000000 --- a/mods/HELP/doc/doc_items/locale/doc_items.pl.tr +++ /dev/null @@ -1,144 +0,0 @@ -# textdomain:doc_items -Using it as fuel turns it into: @1.=Używanie tego jako paliwa zamienia to w: @1. -@1 seconds=@1 sekund(y) -# Item count times item name -@1×@2=@1×@2 -# Itemname (25%) -@1 (@2%)=@1 (@2%) -# Itemname (<0.5%) -@1 (<0.5%)=@1 (<0.5%) -# Itemname (ca. 25%) -@1 (ca. @2%)=@1 (ca. @2%) -# List separator (e.g. “one, two, three”) -, =, -# Final list separator (e.g. “One, two and three”) - and = oraz -1 second=1 sekunda -A transparent block, basically empty space. It is usually left behind after digging something.=Przezroczysty blok, praktycznie puste miejsce. Jest zwykle pozostawiany po wykopaniu czegoś. -Air=Powietrze -Blocks=Bloki -Building another block at this block will place it inside and replace it.=Postawienie innego bloku w tym bloku postawi ich wewnątrz i zastąpi go. -Building this block is completely silent.=Budowanie tego bloku jest bezgłośne. -Collidable: @1=Zderzalne: @1 -Description: @1=Opis: @1 -Falling blocks can go through this block; they destroy it when doing so.=Spadające bloki mogą przelecieć przez ten blok; niszczą go gdy tak robią. -Full punch interval: @1 s=Pełny okres uderzenia: @1 s -Hand=Ręka -Hold it in your hand, then leftclick to eat it.=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść. -Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść. Ale dlaczego chciałabyś to zrobić? -Item reference of all wieldable tools and weapons=Informacje na temat wszystkich narzędzi i broni możliwych do trzymania. -Item reference of blocks and other things which are capable of occupying space=Informacje na temat wszystkich bloków i innych obiektów, które są w stanie zajmować miejsce -Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Informacje na temat wszystkich rzeczy, które nie są blokami, narzędziami i broniami (głównie materiały do wytwarzania) -Liquids can flow into this block and destroy it.=Płyny mogą wpłynąć na ten blok i go zniszczyć. -Maximum stack size: @1=Maksymalny rozmiar grupy: @1 -Mining level: @1=Poziom kopania: @1 -Mining ratings:=Klasyfikacja kopania -• @1, rating @2: @3 s - @4 s=• @1, klasyfikacja @2: @3 s - @4 s -• @1, rating @2: @3 s=• @1, klasyfikacja @2: @3 s -Mining times:=Czas wykopania: -Mining this block is completely silent.=Wykopanie tego bloku jet bezgłośne. -Miscellaneous items=Różne rzeczy -No=Nie -Pointable: No=Wskazywalne: Nie -Pointable: Only by special items=Wskazywalne: Tylko przez specjalne przedmioty -Pointable: Yes=Wskazywalne: Tak -Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym blokiem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej. -Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym przedmiotem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej. -Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym narzędziem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej. -Range: @1=Zasięg: @1 -# Range: () -Range: @1 (@2)=Zasięg @1 (@2) -Range: 4=Zasięg: 4 -# Rating used for digging times -Rating @1=Klasyfikacja @1 -# @1 is minimal rating, @2 is maximum rating -Rating @1-@2=Klasyfikacja od @1 do @2 -The fall damage on this block is increased by @1%.=Obrażenia od upadku na tym bloku są zwiększone o @1%. -The fall damage on this block is reduced by @1%.=Obrażenia od upadku na tym bloku są zmniejszone o @1%. -This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Ten blok przepuszcza światło z niewielką stratą jasności, a światło słoneczne przepuszcza bezstratnie. -This block allows light to propagate with a small loss of brightness.=Ten blok przepuszcza światło z niewielką stratą jasności. -This block allows sunlight to propagate without loss in brightness.=Ten blok przepuszcza światło słoneczne bez straty jasności. -This block belongs to the @1 group.=Ten blok należy do grupy @1. -This block belongs to these groups: @1.=Ten blok należy do tych grup: @1. -This block can be climbed.=Na ten blok można się wspiąć. -This block can be destroyed by any mining tool immediately.=Ten blok może być zniszczony przez dowolne narzędzie do kopania natychmiastowo. -This block can be destroyed by any mining tool in half a second.=Ten blok może być zniszczony przez dowolne narzędzie do kopania w pół sekundy. -This block can be mined by any mining tool immediately.=Ten blok może być wykopany przez dowolne narzędzie do kopania natychmiastowo. -This block can be mined by any mining tool in half a second.=Ten blok może być wykopany przez dowolne narzędzie do kopania w pół sekundy. -This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Ten blok może zostać wykopany przez narzędzia do kopania, które pasują do którychkolwiek klasyfikacji kopania i poziomu twardości. -This block can not be destroyed by ordinary mining tools.=Ten blok nie może być zniszczony przez typowe narzędzia do kopania. -This block can not be mined by ordinary mining tools.=Ten blok nie może być wykopany przez typowe narzędzia do kopania. -This block can serve as a smelting fuel with a burning time of @1.=Ten blok może być wykorzystany jako paliwo do przetapiania z czasem palenia @1. -This block causes a damage of @1 hit point per second.=Ten blok zadaje @1 obrażenie na sekundę. -This block causes a damage of @1 hit points per second.=Ten blok zadaje @1 obrażeń na sekundę. -This block connects to blocks of the @1 group.=Ten blok łączy się do bloków z grupy @1. -This block connects to blocks of the following groups: @1.=Ten blok łączy się z blokami z następujących grup: @1. -This block connects to these blocks: @1.=Ten blok łączy się z tymi blokami: @1. -This block connects to this block: @1.=Ten blok łączy się z tym blokiem: @1. -This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażenie co 2 sekundy. -This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażeń co 2 sekundy. -This block is a light source with a light level of @1.=Ten blok jest źródłem światła z poziomem oświetlenia @1. -This block glows faintly with a light level of @1.=Ten blok ma poświatę o poziomie oświetlenia @1. -This block is a building block for creating various buildings.=Ten blok jest blokiem budowlanym do tworzenia różnych budowli. -This block is a liquid with these properties:=Ten blok jest płynem z tymi własnościami: -This block is affected by gravity and can fall.=Na ten blok wpływa grawitacja i może upaść. -This block is completely silent when mined or built.=Ten blok jest bezgłośny przy kopaniu i budowaniu. -This block is completely silent when walked on, mined or built.=Ten blok jest bezgłośny gdy się po nim chodzi, kopie lub buduje. -This block is destroyed when a falling block ends up inside it.=Ten blok jest zniszczony gdy upadający blok upadnie w niego. -This block negates all fall damage.=Ten blok neguje wszystkie obrażenia od upadku. -This block points to liquids.=Ten blok wskazuje na płyny. -This block will drop as an item when a falling block ends up inside it.=Ten blok wypadnie jako przedmiot gdy blok upadnie na niego. -This block will drop as an item when it is not attached to a surrounding block.=Ten blok wypadnie jako przedmiot gdy nie jest połączony z sąsiadującym blokiem. -This block will drop as an item when no collidable block is below it.=Ten blok wypadnie jako przedmiot gdy nie będzie pod nim zderzalnego bloku. -This block will drop the following items when mined: @1.=Z tego bloku wypadną następujące przedmioty po wykopaniu: @1. -This block will drop the following when mined: @1×@2.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1×@2. -This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1. -This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1. -This block will make you bounce off with an elasticity of @1%.=Od tego bloku odbijesz się z elastycznością @1%. -This block will randomly drop one of the following when mined: @1.=Z tego bloku wypadnie losowo jedna z następujących rzeczy po wykopaniu: @1. -This block will randomly drop up to @1 drops of the following possible drops when mined: @2.=Z tego bloku losowo wypadnie maksymalnie @1 rzeczy spośród tego zbioru: @2. -This block won't drop anything when mined.=Z tego bloku nic nie wypadnie po wykopaniu. -This is a decorational block.=Ten blok jest dekoracyjny. -This is a melee weapon which deals damage by punching.=To jest broń do walki wręcz, która zadaje obrażenia przy uderzaniu. -Maximum damage per hit:=Maksymalne obrażenia przy uderzeniu: -This item belongs to the @1 group.=Ten przedmiot należy do grupy @1. -This item belongs to these groups: @1.=Ten przedmiot należy do tych grup: @1. -This item can serve as a smelting fuel with a burning time of @1.=Ten przedmiot może być wykorzystany jako paliwo do przetapiania z czasem palenia @1. -This item is primarily used for crafting other items.=Ten przedmiot jest głównie wykorzystywany do wytwarzania innych przedmiotów. -This item points to liquids.=Ten przedmiot wskazuje na płyny. -This tool belongs to the @1 group.=To narzędzie należy do grupy @1. -This tool belongs to these groups: @1.=To narzędzie należy do tych grup: @1. -This tool can serve as a smelting fuel with a burning time of @1.=To narzędzie może być wykorzystany jako paliwo do przetapiania z czasem palenia @1. -This tool is capable of mining.=Tym narzędziem można kopać. -Maximum toughness levels:=Maksymalna poziom twardości: -This tool points to liquids.=To narzędzie wskazuje na płyny. -Tools and weapons=Narzędzia i bronie -Unknown Node=Nieznany węzeł -Usage help: @1=Sposób użycia: @1 -Walking on this block is completely silent.=Chodzenie po tym bloku jest bezgłośne. -Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Gdy nie trzymasz żadnego przedmiotu używasz swojej ręki która działa jak narzędzie ze swoimi własnościami. Gdy trzymasz przedmiot, który nie jest narzędziem do kopania lub bronią, będzie się ono zachowywało jakby było ręką. -Yes=Tak -You can not jump while standing on this block.=Nie możesz skakać gdy stoisz na tym bloku. -any level=dowolny poziom -level 0=poziom 0 -level 0-@1=poziom 0-@1 -unknown=nieznane -Unknown item (@1)=Nieznany przedmiot (@1) -• @1: @2=• @1: @2 -• @1: @2 HP=• @1: @2 HP -• @1: @2, @3=• @1: @2, @3 -• Flowing range: @1=• Zasięg płynięcia: @1 -• No flowing=• Brak płynięcia -• Not renewable=• Nieodnawialne -• Renewable=• Odnawialne -• Viscosity: @1=• Lepkość: @1 -Itemstring: "@1"=Id przedmiotu: "@1" -Durability: @1 uses=Wytrzymałość: @1 użyć -Durability: @1=Wytrzymałość: @1 -Mining durability:=Wytrzymałość kopania: -• @1, level @2: @3 uses=• @1, poziom @2: @3 użyć -• @1, level @2: Unlimited=• @1, poziom @2: Nielimitowane -This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.=Na rotację tego bloku wpływa sposób postawienia: Postaw go na podłodze lub suficie aby uzyskać pionową orientację; postaw go na boku by uzyskać poziomą orientację. Skradanie się podczas postawiania sprawia, że zostanie postawiony prostopadle. -Toughness level: @1=Poziom twardości: @1 -This block is slippery.=Ten blok jest śliski. - diff --git a/mods/HELP/doc/doc_items/locale/doc_items.pt.tr b/mods/HELP/doc/doc_items/locale/doc_items.pt.tr deleted file mode 100644 index 648e14569..000000000 --- a/mods/HELP/doc/doc_items/locale/doc_items.pt.tr +++ /dev/null @@ -1,141 +0,0 @@ -# textdomain:doc_items - Using it as fuel turns it into: @1.= Usar isso como combustivel o transforma em: @1. -@1 seconds=@1 segundos -# Item count times item name -%@1×@2=%@1×@2 -# Itemname (25%) -@1 (@2%)=@1 (@2%) -# Itemname (<0.5%) -@1 (<0.5%)=@1 (<0.5%) -# Itemname (ca. 25%) -@1 (ca. @2%)= -# List separator (e.g. “one, two, three”) -, =, -# Final list separator (e.g. “One, two and three”) - and = e -1 second=1 segundo -A transparent block, basically empty space. It is usually left behind after digging something.=Um bloco transparente, basicamente um vazio. Isso geralmente fica no lugar de um bloco removido. -Air=Ár -Blocks=Blocos -Building another block at this block will place it inside and replace it.=Construir outro bloco nesse bloco vai subistitui-lo. -Building this block is completely silent.=Construir esse bloco é completamente silencioso. -Collidable: @1=Coledível: @1 -Description: @1=Descrição: @1 -Falling blocks can go through this block; they destroy it when doing so.=Blocos caindo podem atravessar esse bloco destruindo-o. -Full punch interval: @1 s=Intervalo completo de golpe: @1 s -Hand=Mão -Hold it in your hand, then leftclick to eat it.=Segure-o na sua mão, depois clique com o botão esquerdo para comer. -Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Segure-o na sua mão, depois clique com o botão esquerdo para comer. Mas por que você quer fazer isso? -Item reference of all wieldable tools and weapons=Referência de item de todas as ferramentas e armas que podem ser usadas -Item reference of blocks and other things which are capable of occupying space=Referência de item de blocos e outras coisas que são capazes de ocupar espaço -Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Referência de itens que não são blocos, ferramentas ou armas (especialmente itens de criação) -Liquids can flow into this block and destroy it.=Líquidos podem fluir por esse bloco destruindo-o. -Maximum stack size: @1=Tamanho máximo de empilhamento: @1 -Mining level: @1=Nível de mineração: @1 -Mining ratings:=Classificações de mineração: -• @1, rating @2: @3 s - @4 s= -• @1, rating @2: @3 s= -Mining times:=Tempos de mineração: -Mining this block is completely silent.=Minerar esse bloco é completamente silencioso. -Miscellaneous items=Itens variados -No=Não -Pointable: No=Apontável: Não -Pointable: Only by special items=Apontável: Apenas por itens especiais -Pointable: Yes=Apontável: Sim -Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Socos com esse bloco não funcionam de forma comum; Combate corpo a corpo e mineração não são possíveis ou funcionam de forma diferente. -Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Socos com esse item não funcionam de forma comum; Combate corpo a corpo e mineração não são possíveis ou funcionam de forma diferente. -Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Socos com essa ferramenta não funcionam de forma comum; Combate corpo a corpo e mineração não são possíveis ou funcionam de forma diferente. -Range: @1=Alcance: @1 -# Range: () -Range: @1 (@2)=Alcance: @1 (@2) -Range: 4=Range: 4 -# Rating used for digging times -Rating @1=Classificação @1 -# @1 is minimal rating, @2 is maximum rating -Rating @1-@2=Classificação @1-@2 -The fall damage on this block is increased by @1%.=O dano por queda nesse bloco é aumentado em @ 1%. -The fall damage on this block is reduced by @1%.=O dano por queda nesse bloco é reduzido em @ 1%. -This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Esse bloco permite que a luz se propague com uma pequena perda de brilho, e a luz solar pode até passar sem perdas. -This block allows light to propagate with a small loss of brightness.=Esse bloco permite que a luz se propague com uma pequena perda de brilho. -This block allows sunlight to propagate without loss in brightness.=Esse bloco permite que a luz solar se propague sem perda de brilho. -This block belongs to the @1 group.=Esse bloco pertence ao grupo @1. -This block belongs to these groups: @1.=Esse bloco pertence a estes grupos: @1. -This block can be climbed.=Esse bloco pode ser escalado. -This block can be destroyed by any mining tool immediately.=Esse bloco pode ser destruído de forma imediata por qualquer ferramenta de mineração. -This block can be destroyed by any mining tool in half a second.=Esse bloco pode ser destruído em meio segundo por qualquer ferramenta de mineração. -This block can be mined by any mining tool immediately.=Esse bloco pode ser extraído de forma imediata por qualquer ferramenta de mineração. -This block can be mined by any mining tool in half a second.=Esse bloco pode ser extraído em meio segundo por qualquer ferramenta de mineração. -This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Esse bloco pode ser extraído por ferramentas de mineração que correspondem a qualquer uma das seguintes classificações de mineração e seu nível de resistência. -This block can not be destroyed by ordinary mining tools.=Esse bloco não pode ser destruído por ferramentas de mineração comuns. -This block can not be mined by ordinary mining tools.=Esse bloco não pode ser extraído por ferramentas de mineração comuns. -This block can serve as a smelting fuel with a burning time of @1.=Esse bloco pode servir como combustível de fundição com um tempo de queima de @1. -This block causes a damage of @1 hit point per second.=Esse bloco causa um dano de @1 ponto de impacto por segundo. -This block causes a damage of @1 hit points per second.=Esse bloco causa um dano de @1 pontos de impacto por segundo. -This block connects to blocks of the @1 group.=Esse bloco se conecta a blocos do grupo @1. -This block connects to blocks of the following groups: @1.=Esse bloco se conecta a dos seguintes grupos: @1. -This block connects to these blocks: @1.=Esse bloco se conecta aos seguintes blocos: @1. -This block connects to this block: @1.=Esse bloco se conecta a esse bloco: @1. -This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Esse bloco diminui a sua respiração e causa um dano por afogamento de @1 ponto de vida a cada 2 segundos. -This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Esse bloco diminui a sua respiração e causa um dano por afogamento de @1 pontos de vida a cada 2 segundos. -This block is a light source with a light level of @1.=Esse bloco é uma fonte de luz com um nível de luz de @1. -This block glows faintly with a light level of @1.=Esse bloco tem um brilho fraco com um nível de luz de @ 1. -This block is a building block for creating various buildings.=Esse bloco é um bloco de construção para criar vários edifícios. -This block is a liquid with these properties:=Esse bloco é um líquido com as seguintes propriedades: -This block is affected by gravity and can fall.=Esse bloco é afetado pela gravidade e pode cair. -This block is completely silent when mined or built.=Esse bloco é completamente silencioso quando extraído ou construído. -This block is completely silent when walked on, mined or built.=Esse bloco é completamente silencioso quando pisado, extraído ou construído. -This block is destroyed when a falling block ends up inside it.=Esse bloco é destruído quando um bloco em queda acaba dentro dele. -This block negates all fall damage.=Esse bloco nega todos os danos por queda. -This block points to liquids.=Esse bloco pode ser apontado para líquidos. -This block will drop as an item when a falling block ends up inside it.=Esse bloco vai cair como um item quando um bloco caindo acaba dentro dele. -This block will drop as an item when it is not attached to a surrounding block.=Esse bloco irá cair como um item quando não estiver anexado a um bloco adjacente. -This block will drop as an item when no collidable block is below it.=Esse bloco irá cair como um item quando nenhum bloco colidível estiver abaixo dele. -This block will drop the following items when mined: %s.=Esse bloco soltará os seguintes itens quando minerados: %s. -This block will drop the following when mined: @1×@2.=Esse bloco irá deixar cair o seguinte quando extraído: @1×@2. -This block will drop the following when mined: @1.=Esse bloco irá deixar cair o seguinte quando extraído: @1. -This block will drop the following when mined: %s.=Esse bloco irá deixar cair o seguinte quando extraído: %s. -This block will make you bounce off with an elasticity of @1%.=Esse bloco fará você saltar com uma elasticidade de @1%. -This block will randomly drop one of the following when mined: %s.=Esse bloco irá deixar cair aleatoriamente um dos seguintes quando extraído: %s. -This block will randomly drop up to %d drops of the following possible drops when mined: %s.=Esse bloco irá cair aleatoriamente %d vezes das seguintes possíveis formas quando extraído: %s. -This block won't drop anything when mined.=Esse bloco não vai deixar cair nada quando extraído. -This is a decorational block.=Esse é um bloco decorativo. -This is a melee weapon which deals damage by punching.=Essa é uma arma corpo-a-corpo que causa dano ao socar. -Maximum damage per hit:=Dano máximo por acerto: -This item belongs to the @1 group.=Esse item pertence ao grupo @1. -This item belongs to these groups: @1.=Esse item pertence aos seguintes grupos: @1. -This item can serve as a smelting fuel with a burning time of @1.=Esse item pode servir como combustível de fundição com um tempo de queima de @1. -This item is primarily used for crafting other items.=Esse item é usado principalmente para criar outros itens. -This item points to liquids.=Esse item pode ser apontado para líquidos. -This tool belongs to the @1 group.=Essa ferramenta pertence ao grupo @1. -This tool belongs to these groups: @1.=Essa ferramenta pertence aos seguintes grupos: @1. -This tool can serve as a smelting fuel with a burning time of @1.=Essa ferramenta pode servir como combustível de fundição com um tempo de queima de @1. -This tool is capable of mining.=Essa ferramenta é capaz de minerar. -Maximum toughness levels:=Níveis máximos de dureza: -This tool points to liquids.=Essa ferramenta pode ser apontada para líquidos. -Tools and weapons=Ferramentas e armas -Unknown Node=Bloco Desconhecido -Usage help: @1=Como usar: @1 -Walking on this block is completely silent.= -Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Sempre que você não estiver empunhando nenhum item, você usa a mão que atua como uma ferramentacom caracteristicas próprias. Quando você está empunhando um item que não é uma ferramenta de mineração ou uma arma, ele se comportará como se fosse a mão. -Yes=Sim -You can not jump while standing on this block.= Você não pode pular enquanto estiver neste bloco. -any level=qualquer nível -level 0=nível 0 -level 0-@1=nivel 0-@1 -unknown=desconhecido -Unknown item (@1)=Item desconhecido -• @1: @2= -• @1: @2 HP= -• @1: @2, @3= -• Flowing range: @1= -• No flowing= -• Not renewable= -• Renewable= -• Viscosity: @1= -Itemstring: "@1"= -Durability: @1 uses= -Durability: @1= -Mining durability:= -• @1, level @2: @3 uses= -• @1, level @2: Unlimited= -This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.= diff --git a/mods/HELP/doc/doc_items/locale/doc_items.pt_BR.tr b/mods/HELP/doc/doc_items/locale/doc_items.pt_BR.tr deleted file mode 100644 index 648e14569..000000000 --- a/mods/HELP/doc/doc_items/locale/doc_items.pt_BR.tr +++ /dev/null @@ -1,141 +0,0 @@ -# textdomain:doc_items - Using it as fuel turns it into: @1.= Usar isso como combustivel o transforma em: @1. -@1 seconds=@1 segundos -# Item count times item name -%@1×@2=%@1×@2 -# Itemname (25%) -@1 (@2%)=@1 (@2%) -# Itemname (<0.5%) -@1 (<0.5%)=@1 (<0.5%) -# Itemname (ca. 25%) -@1 (ca. @2%)= -# List separator (e.g. “one, two, three”) -, =, -# Final list separator (e.g. “One, two and three”) - and = e -1 second=1 segundo -A transparent block, basically empty space. It is usually left behind after digging something.=Um bloco transparente, basicamente um vazio. Isso geralmente fica no lugar de um bloco removido. -Air=Ár -Blocks=Blocos -Building another block at this block will place it inside and replace it.=Construir outro bloco nesse bloco vai subistitui-lo. -Building this block is completely silent.=Construir esse bloco é completamente silencioso. -Collidable: @1=Coledível: @1 -Description: @1=Descrição: @1 -Falling blocks can go through this block; they destroy it when doing so.=Blocos caindo podem atravessar esse bloco destruindo-o. -Full punch interval: @1 s=Intervalo completo de golpe: @1 s -Hand=Mão -Hold it in your hand, then leftclick to eat it.=Segure-o na sua mão, depois clique com o botão esquerdo para comer. -Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Segure-o na sua mão, depois clique com o botão esquerdo para comer. Mas por que você quer fazer isso? -Item reference of all wieldable tools and weapons=Referência de item de todas as ferramentas e armas que podem ser usadas -Item reference of blocks and other things which are capable of occupying space=Referência de item de blocos e outras coisas que são capazes de ocupar espaço -Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Referência de itens que não são blocos, ferramentas ou armas (especialmente itens de criação) -Liquids can flow into this block and destroy it.=Líquidos podem fluir por esse bloco destruindo-o. -Maximum stack size: @1=Tamanho máximo de empilhamento: @1 -Mining level: @1=Nível de mineração: @1 -Mining ratings:=Classificações de mineração: -• @1, rating @2: @3 s - @4 s= -• @1, rating @2: @3 s= -Mining times:=Tempos de mineração: -Mining this block is completely silent.=Minerar esse bloco é completamente silencioso. -Miscellaneous items=Itens variados -No=Não -Pointable: No=Apontável: Não -Pointable: Only by special items=Apontável: Apenas por itens especiais -Pointable: Yes=Apontável: Sim -Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Socos com esse bloco não funcionam de forma comum; Combate corpo a corpo e mineração não são possíveis ou funcionam de forma diferente. -Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Socos com esse item não funcionam de forma comum; Combate corpo a corpo e mineração não são possíveis ou funcionam de forma diferente. -Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Socos com essa ferramenta não funcionam de forma comum; Combate corpo a corpo e mineração não são possíveis ou funcionam de forma diferente. -Range: @1=Alcance: @1 -# Range: () -Range: @1 (@2)=Alcance: @1 (@2) -Range: 4=Range: 4 -# Rating used for digging times -Rating @1=Classificação @1 -# @1 is minimal rating, @2 is maximum rating -Rating @1-@2=Classificação @1-@2 -The fall damage on this block is increased by @1%.=O dano por queda nesse bloco é aumentado em @ 1%. -The fall damage on this block is reduced by @1%.=O dano por queda nesse bloco é reduzido em @ 1%. -This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Esse bloco permite que a luz se propague com uma pequena perda de brilho, e a luz solar pode até passar sem perdas. -This block allows light to propagate with a small loss of brightness.=Esse bloco permite que a luz se propague com uma pequena perda de brilho. -This block allows sunlight to propagate without loss in brightness.=Esse bloco permite que a luz solar se propague sem perda de brilho. -This block belongs to the @1 group.=Esse bloco pertence ao grupo @1. -This block belongs to these groups: @1.=Esse bloco pertence a estes grupos: @1. -This block can be climbed.=Esse bloco pode ser escalado. -This block can be destroyed by any mining tool immediately.=Esse bloco pode ser destruído de forma imediata por qualquer ferramenta de mineração. -This block can be destroyed by any mining tool in half a second.=Esse bloco pode ser destruído em meio segundo por qualquer ferramenta de mineração. -This block can be mined by any mining tool immediately.=Esse bloco pode ser extraído de forma imediata por qualquer ferramenta de mineração. -This block can be mined by any mining tool in half a second.=Esse bloco pode ser extraído em meio segundo por qualquer ferramenta de mineração. -This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Esse bloco pode ser extraído por ferramentas de mineração que correspondem a qualquer uma das seguintes classificações de mineração e seu nível de resistência. -This block can not be destroyed by ordinary mining tools.=Esse bloco não pode ser destruído por ferramentas de mineração comuns. -This block can not be mined by ordinary mining tools.=Esse bloco não pode ser extraído por ferramentas de mineração comuns. -This block can serve as a smelting fuel with a burning time of @1.=Esse bloco pode servir como combustível de fundição com um tempo de queima de @1. -This block causes a damage of @1 hit point per second.=Esse bloco causa um dano de @1 ponto de impacto por segundo. -This block causes a damage of @1 hit points per second.=Esse bloco causa um dano de @1 pontos de impacto por segundo. -This block connects to blocks of the @1 group.=Esse bloco se conecta a blocos do grupo @1. -This block connects to blocks of the following groups: @1.=Esse bloco se conecta a dos seguintes grupos: @1. -This block connects to these blocks: @1.=Esse bloco se conecta aos seguintes blocos: @1. -This block connects to this block: @1.=Esse bloco se conecta a esse bloco: @1. -This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Esse bloco diminui a sua respiração e causa um dano por afogamento de @1 ponto de vida a cada 2 segundos. -This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Esse bloco diminui a sua respiração e causa um dano por afogamento de @1 pontos de vida a cada 2 segundos. -This block is a light source with a light level of @1.=Esse bloco é uma fonte de luz com um nível de luz de @1. -This block glows faintly with a light level of @1.=Esse bloco tem um brilho fraco com um nível de luz de @ 1. -This block is a building block for creating various buildings.=Esse bloco é um bloco de construção para criar vários edifícios. -This block is a liquid with these properties:=Esse bloco é um líquido com as seguintes propriedades: -This block is affected by gravity and can fall.=Esse bloco é afetado pela gravidade e pode cair. -This block is completely silent when mined or built.=Esse bloco é completamente silencioso quando extraído ou construído. -This block is completely silent when walked on, mined or built.=Esse bloco é completamente silencioso quando pisado, extraído ou construído. -This block is destroyed when a falling block ends up inside it.=Esse bloco é destruído quando um bloco em queda acaba dentro dele. -This block negates all fall damage.=Esse bloco nega todos os danos por queda. -This block points to liquids.=Esse bloco pode ser apontado para líquidos. -This block will drop as an item when a falling block ends up inside it.=Esse bloco vai cair como um item quando um bloco caindo acaba dentro dele. -This block will drop as an item when it is not attached to a surrounding block.=Esse bloco irá cair como um item quando não estiver anexado a um bloco adjacente. -This block will drop as an item when no collidable block is below it.=Esse bloco irá cair como um item quando nenhum bloco colidível estiver abaixo dele. -This block will drop the following items when mined: %s.=Esse bloco soltará os seguintes itens quando minerados: %s. -This block will drop the following when mined: @1×@2.=Esse bloco irá deixar cair o seguinte quando extraído: @1×@2. -This block will drop the following when mined: @1.=Esse bloco irá deixar cair o seguinte quando extraído: @1. -This block will drop the following when mined: %s.=Esse bloco irá deixar cair o seguinte quando extraído: %s. -This block will make you bounce off with an elasticity of @1%.=Esse bloco fará você saltar com uma elasticidade de @1%. -This block will randomly drop one of the following when mined: %s.=Esse bloco irá deixar cair aleatoriamente um dos seguintes quando extraído: %s. -This block will randomly drop up to %d drops of the following possible drops when mined: %s.=Esse bloco irá cair aleatoriamente %d vezes das seguintes possíveis formas quando extraído: %s. -This block won't drop anything when mined.=Esse bloco não vai deixar cair nada quando extraído. -This is a decorational block.=Esse é um bloco decorativo. -This is a melee weapon which deals damage by punching.=Essa é uma arma corpo-a-corpo que causa dano ao socar. -Maximum damage per hit:=Dano máximo por acerto: -This item belongs to the @1 group.=Esse item pertence ao grupo @1. -This item belongs to these groups: @1.=Esse item pertence aos seguintes grupos: @1. -This item can serve as a smelting fuel with a burning time of @1.=Esse item pode servir como combustível de fundição com um tempo de queima de @1. -This item is primarily used for crafting other items.=Esse item é usado principalmente para criar outros itens. -This item points to liquids.=Esse item pode ser apontado para líquidos. -This tool belongs to the @1 group.=Essa ferramenta pertence ao grupo @1. -This tool belongs to these groups: @1.=Essa ferramenta pertence aos seguintes grupos: @1. -This tool can serve as a smelting fuel with a burning time of @1.=Essa ferramenta pode servir como combustível de fundição com um tempo de queima de @1. -This tool is capable of mining.=Essa ferramenta é capaz de minerar. -Maximum toughness levels:=Níveis máximos de dureza: -This tool points to liquids.=Essa ferramenta pode ser apontada para líquidos. -Tools and weapons=Ferramentas e armas -Unknown Node=Bloco Desconhecido -Usage help: @1=Como usar: @1 -Walking on this block is completely silent.= -Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Sempre que você não estiver empunhando nenhum item, você usa a mão que atua como uma ferramentacom caracteristicas próprias. Quando você está empunhando um item que não é uma ferramenta de mineração ou uma arma, ele se comportará como se fosse a mão. -Yes=Sim -You can not jump while standing on this block.= Você não pode pular enquanto estiver neste bloco. -any level=qualquer nível -level 0=nível 0 -level 0-@1=nivel 0-@1 -unknown=desconhecido -Unknown item (@1)=Item desconhecido -• @1: @2= -• @1: @2 HP= -• @1: @2, @3= -• Flowing range: @1= -• No flowing= -• Not renewable= -• Renewable= -• Viscosity: @1= -Itemstring: "@1"= -Durability: @1 uses= -Durability: @1= -Mining durability:= -• @1, level @2: @3 uses= -• @1, level @2: Unlimited= -This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.= diff --git a/mods/HELP/doc/doc_items/locale/doc_items.ru.tr b/mods/HELP/doc/doc_items/locale/doc_items.ru.tr deleted file mode 100644 index 08d038592..000000000 --- a/mods/HELP/doc/doc_items/locale/doc_items.ru.tr +++ /dev/null @@ -1,143 +0,0 @@ -# textdomain:doc_items -Using it as fuel turns it into: @1.=Использование в качестве топлива превращает его в: @1. -@1 seconds=@1 секунд(ы) -# Item count times item name -%@1×@2=%@1×@2 -# Itemname (25%) -@1 (@2%)=@1 (@2%) -# Itemname (<0.5%) -@1 (<0.5%)=@1 (<0.5%) -# Itemname (ca. 25%) -@1 (ca. @2%)=@1 (прибл. @2%) -# List separator (e.g. “one, two, three”) -, =, -# Final list separator (e.g. “One, two and three”) - and = и -1 second=1 секунда -A transparent block, basically empty space. It is usually left behind after digging something.=Один прозрачный блок, основное пустое пространство. Обычно оно остаётся, если выкопать что-то. -Air=Воздух -Blocks=Блоки -Building another block at this block will place it inside and replace it.=Возведение другого блока на этом блоке поместит его внутрь и заменит. -Building this block is completely silent.=Строительство этого блока абсолютно бесшумное. -Collidable: @1=Непроходимый: @1 -Description: @1=Описание: @1 -Falling blocks can go through this block; they destroy it when doing so.=Падающие блоки могут пройти сквозь этот блок; при этом они уничтожат его. -Full punch interval: @1 s=Интервал полного удара: @1 с -Hand=Рука -Hold it in your hand, then leftclick to eat it.=Возьмите это в руку и кликните левой, чтобы съесть. -Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Возьмите это в руку и кликните левой, чтобы съесть. Но вам правда этого хочется? -Item reference of all wieldable tools and weapons=Справка по всем носимым инструментам и оружию -Item reference of blocks and other things which are capable of occupying space=Справка по всем блокам и другим вещам, способным занимать место -Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Справка по остальным предметам (не блокам, не инструментам и не оружию) -Liquids can flow into this block and destroy it.=Жидкости могут затекать в этот блок, уничтожая его. -Maximum stack size: @1=Максимальный размер стека: @1 -Mining level: @1=Уровень добываемости: @1 -Mining ratings:=Рейтинг добываемости: -• @1, rating @2: @3 s - @4 s=• @1, рейтинг @2: @3 с - @4 с -• @1, rating @2: @3 s=• @1, рейтинг @2: @3 с -Mining times:=Время добывания: -Mining this block is completely silent.=Добывание этого блока происходит абсолютно бесшумно. -Miscellaneous items=Дополнительные предметы -No=Нет -Pointable: No=Ориентируемый: Нет -Pointable: Only by special items=Ориентируемый: Только специальными предметами -Pointable: Yes=Ориентируемый: Да -Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Удар этого блока не работает так, как это обычно бывает; рукопашный бой и майнинг либо невозможны, либо работают по-другому. -Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Удар этого предмета не работает так, как это обычно бывает; рукопашный бой и майнинг либо невозможны, либо работают по-другому. -Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Удар этого инструмента не работает так, как это обычно бывает; рукопашный бой и майнинг либо невозможны, либо работают по-другому. -Range: @1=Дальность: @1 -# Range: () -Range: @1 (@2)=Дальность: @1 (@2) -Range: 4=Дальность: 4 -# Rating used for digging times -Rating @1=Скорость копания @1 -# @1 is minimal rating, @2 is maximum rating -Rating @1-@2=Скорость копания @1-@2= -The fall damage on this block is increased by @1%.=Повреждение при падении на этот блок увеличивается на @1%. -The fall damage on this block is reduced by @1%.=Повреждение при падении на этот блок уменьшается на @1%. -This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Этот блок позволяет свету распространяться с небольшой потерей яркости, а солнечный свет может проходить без потерь. -This block allows light to propagate with a small loss of brightness.=Этот блок позволяет свету распространяться с небольшой потерей яркости. -This block allows sunlight to propagate without loss in brightness.=Этот блок позволяет солнечному свету распространяться без потери яркости. -This block belongs to the @1 group.=Этот блок принадлежит группе @1. -This block belongs to these groups: @1.=Этот блок принадлежит группам: @1. -This block can be climbed.=На этот блок можно залезть. -This block can be destroyed by any mining tool immediately.=Этот блок можно мгновенно уничтожить любым добывающим инструментом. -This block can be destroyed by any mining tool in half a second.=Этот блок можно уничтожить любым добывающим инструментом за полсекунды. -This block can be mined by any mining tool immediately.=Этот блок можно мгновенно добыть любым добывающим инструментом. -This block can be mined by any mining tool in half a second.=Этот блок можно добыть любым добывающим инструментом за полсекунды. -This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Этот блок можно добыть любым инструментами добычи, соответствующим одному из следующих рейтингов и уровней жёсткости. -This block can not be destroyed by ordinary mining tools.=Этот блок нельзя уничтожить обычным инструментом добычи. -This block can not be mined by ordinary mining tools.=Этот блок нельзя добыть обычным инструментом добычи. -This block can serve as a smelting fuel with a burning time of @1.=Этот блок может служить плавящимся топливом с временем горения @1. -This block causes a damage of @1 hit point per second.=Этот блок вызывает повреждение на @1 HP в секунду. -This block causes a damage of @1 hit points per second.=Этот блок вызывает повреждения на @1 HP в секунду. -This block connects to blocks of the @1 group.=Этот блок соединяется с блоками группы @1. -This block connects to blocks of the following groups: @1.=Этот блок соединяется с блоками групп: @1. -This block connects to these blocks: @1.=Этот блок соединяется со следующими блоками: @1. -This block connects to this block: @1.=Этот блок соединяется с этим блоком: @1. -This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Этот блок уменьшает ваш кислород и вызывает повреждение от погружения на @1 HP каждые 2 секунды. -This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Этот блок уменьшает ваш кислород и вызывает повреждения от погружения на @1 HP каждые 2 секунды. -This block is a light source with a light level of @1.=Этот блок является источником света уровня @1. -This block glows faintly with a light level of @1.=Этот блок мерцает с уровнем света: @1. -This block is a building block for creating various buildings.=Это строительный блок для создания разных конструкций и зданий. -This block is a liquid with these properties:=Это жидкий блок с такими свойствами: -This block is affected by gravity and can fall.=На этот блок действует гравитация, он может падать. -This block is completely silent when mined or built.=Этот блок абсолютно бесшумно добывается и устанавливается при строительстве. -This block is completely silent when walked on, mined or built.=Этот блок абсолютно тихий, он не шумит, если вы идёте по нему, добываете его или строите что-либо из него. -This block is destroyed when a falling block ends up inside it.=Этот блок уничтожается, когда падающий блок попадает в него. -This block negates all fall damage.=Этот блок отменяет весь урон от падения. -This block points to liquids.=Этот блок указывает на жидкости. -This block will drop as an item when a falling block ends up inside it.=Этот блок выпадет как предмет, когда падающий блок попадёт в него. -This block will drop as an item when it is not attached to a surrounding block.=Этот блок выпадет как предмет, если он не прикреплён к окружающим блокам. -This block will drop as an item when no collidable block is below it.=Этот блок выпадет как предмет, если нет непроходимого блока прямо под ним. -This block will drop the following items when mined: @1.=Этот блок будет выдавать следующие предметы при его добыче: @1. -This block will drop the following when mined: @1×@2.=Этот блок будет выдавать при его добыче: @1×@2. -This block will drop the following when mined: @1.=Этот блок будет выдавать при его добыче: @1. -This block will drop the following when mined: @1.=Этот блок будет выдавать при его добыче: @1. -This block will make you bounce off with an elasticity of @1%.=Этот блок заставит вас отскакивать с упругостью @1%. -This block will randomly drop one of the following when mined: @1.=При добыче этот блок случайным образом выдаёт что-то из списка: @1. -This block will randomly drop up to @1 drops of the following possible drops when mined: @2.=Этот блок случайным образом выдаст до @1 из следующих возможных выдач при добыче: @2. -This block won't drop anything when mined.=Этот блок ничего не выдаст при его добыче. -This is a decorational block.=Это декоративный блок. -This is a melee weapon which deals damage by punching.=Это орудие ближнего боя, наносящее урон при ударе. -Maximum damage per hit:=Максимальный урон за один удар: -This item belongs to the @1 group.=Этот предмет относится к группе @1. -This item belongs to these groups: @1.=Этот предмет относится к группам: @1. -This item can serve as a smelting fuel with a burning time of @1.=Этот предмет может служить плавящимся топливом с временем горения @1. -This item is primarily used for crafting other items.=Этот предмет в основном используется для создания других предметов. -This item points to liquids.=Этот предмет указывает на жидкости. -This tool belongs to the @1 group.=Этот инструмент относится к группе @1. -This tool belongs to these groups: @1.=Этот инструмент относится к группам: @1. -This tool can serve as a smelting fuel with a burning time of @1.=Этот инструмент может служить плавящимся топливом с временем горения @1. -This tool is capable of mining.=Этот инструмент используется для добычи. -Maximum toughness levels:=Максимальный уровень жёсткости: -This tool points to liquids.=Этот инструмент указывает на жидкости. -Tools and weapons=Инструменты и оружие -Unknown Node=Неизвестный узел -Usage help: @1=Использование помощи: @1 -Walking on this block is completely silent.=Хождение по этому блоку абсолютно бесшумное. -Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Даже если вы не держите никакого предмета, ваша рука - сама по себе инструмент, обладающий определёнными свойствами. Когда в вашей руке предмет, не являющийся инструментом добычи или оружием, он будет иметь свойства вашей пустой руки. -Yes=Да -You can not jump while standing on this block.=Вы не можете прыгать, стоя на этом блоке. -any level=любой уровень -level 0=уровень 0 -level 0-@1=уровень 0-@1 -unknown=неизвестно -Unknown item (@1)=Неизвестный предмет (@1) -• @1: @2=• @1: @2 -• @1: @2 HP=• @1: @2 HP -• @1: @2, @3=• @1: @2, @3 -• Flowing range: @1=• Дальность потока: @1 -• No flowing=• Не текучее -• Not renewable=• Необновляемое -• Renewable=• Обновляемое -• Viscosity: @1=• Вязкость: @1 -Itemstring: "@1"=Айтемстринг: "@1" -Durability: @1 uses=Долговечность: @1 раз(а) -Durability: @1=Долговечность: @1 -Mining durability:=Долговечность при майнинге: -• @1, level @2: @3 uses=• @1, уровень @2: @3 раз(а) -• @1, level @2: Unlimited=• @1, уровень @2: Неограниченно -This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.=Вращение этого блока зависит от способа размещения: положите его на пол или потолок для вертикальной ориентации; поместите на стену для горизонтальной ориентации. Удерживайте [Красться] при размещении для перпендикулярной ориентации. -Toughness level: @1=Уровень жёсткости: @1 -This block is slippery.=Этот блок скользкий. diff --git a/mods/HELP/doc/doc_items/locale/template.txt b/mods/HELP/doc/doc_items/locale/template.txt deleted file mode 100644 index 77f107863..000000000 --- a/mods/HELP/doc/doc_items/locale/template.txt +++ /dev/null @@ -1,143 +0,0 @@ -# textdomain:doc_items -Using it as fuel turns it into: @1.= -@1 seconds= -# Item count times item name -@1×@2= -# Itemname (25%) -@1 (@2%)= -# Itemname (<0.5%) -@1 (<0.5%)= -# Itemname (ca. 25%) -@1 (ca. @2%)= -# List separator (e.g. “one, two, three”) -, = -# Final list separator (e.g. “One, two and three”) - and = -1 second= -A transparent block, basically empty space. It is usually left behind after digging something.= -Air= -Blocks= -Building another block at this block will place it inside and replace it.= -Building this block is completely silent.= -Collidable: @1= -Description: @1= -Falling blocks can go through this block; they destroy it when doing so.= -Full punch interval: @1 s= -Hand= -Hold it in your hand, then leftclick to eat it.= -Hold it in your hand, then leftclick to eat it. But why would you want to do this?= -Item reference of all wieldable tools and weapons= -Item reference of blocks and other things which are capable of occupying space= -Item reference of items which are neither blocks, tools or weapons (esp. crafting items)= -Liquids can flow into this block and destroy it.= -Maximum stack size: @1= -Mining level: @1= -Mining ratings:= -• @1, rating @2: @3 s - @4 s= -• @1, rating @2: @3 s= -Mining times:= -Mining this block is completely silent.= -Miscellaneous items= -No= -Pointable: No= -Pointable: Only by special items= -Pointable: Yes= -Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.= -Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.= -Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.= -Range: @1= -# Range: () -Range: @1 (@2)= -Range: 4= -# Rating used for digging times -Rating @1= -# @1 is minimal rating, @2 is maximum rating -Rating @1-@2= -The fall damage on this block is increased by @1%.= -The fall damage on this block is reduced by @1%.= -This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.= -This block allows light to propagate with a small loss of brightness.= -This block allows sunlight to propagate without loss in brightness.= -This block belongs to the @1 group.= -This block belongs to these groups: @1.= -This block can be climbed.= -This block can be destroyed by any mining tool immediately.= -This block can be destroyed by any mining tool in half a second.= -This block can be mined by any mining tool immediately.= -This block can be mined by any mining tool in half a second.= -This block can be mined by mining tools which match any of the following mining ratings and its toughness level.= -This block can not be destroyed by ordinary mining tools.= -This block can not be mined by ordinary mining tools.= -This block can serve as a smelting fuel with a burning time of @1.= -This block causes a damage of @1 hit point per second.= -This block causes a damage of @1 hit points per second.= -This block connects to blocks of the @1 group.= -This block connects to blocks of the following groups: @1.= -This block connects to these blocks: @1.= -This block connects to this block: @1.= -This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.= -This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.= -This block is a light source with a light level of @1.= -This block glows faintly with a light level of @1.= -This block is a building block for creating various buildings.= -This block is a liquid with these properties:= -This block is affected by gravity and can fall.= -This block is completely silent when mined or built.= -This block is completely silent when walked on, mined or built.= -This block is destroyed when a falling block ends up inside it.= -This block negates all fall damage.= -This block points to liquids.= -This block will drop as an item when a falling block ends up inside it.= -This block will drop as an item when it is not attached to a surrounding block.= -This block will drop as an item when no collidable block is below it.= -This block will drop the following items when mined: @1.= -This block will drop the following when mined: @1×@2.= -This block will drop the following when mined: @1.= -This block will drop the following when mined: @1.= -This block will make you bounce off with an elasticity of @1%.= -This block will randomly drop one of the following when mined: @1.= -This block will randomly drop up to @1 drops of the following possible drops when mined: @2.= -This block won't drop anything when mined.= -This is a decorational block.= -This is a melee weapon which deals damage by punching.= -Maximum damage per hit:= -This item belongs to the @1 group.= -This item belongs to these groups: @1.= -This item can serve as a smelting fuel with a burning time of @1.= -This item is primarily used for crafting other items.= -This item points to liquids.= -This tool belongs to the @1 group.= -This tool belongs to these groups: @1.= -This tool can serve as a smelting fuel with a burning time of @1.= -This tool is capable of mining.= -Maximum toughness levels:= -This tool points to liquids.= -Tools and weapons= -Unknown Node= -Usage help: @1= -Walking on this block is completely silent.= -Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.= -Yes= -You can not jump while standing on this block.= -any level= -level 0= -level 0-@1= -unknown= -Unknown item (@1)= -• @1: @2= -• @1: @2 HP= -• @1: @2, @3= -• Flowing range: @1= -• No flowing= -• Not renewable= -• Renewable= -• Viscosity: @1= -Itemstring: "@1"= -Durability: @1 uses= -Durability: @1= -Mining durability:= -• @1, level @2: @3 uses= -• @1, level @2: Unlimited= -This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.= -Toughness level: @1= -This block is slippery.= diff --git a/mods/HELP/doc/doc_items/mod.conf b/mods/HELP/doc/doc_items/mod.conf deleted file mode 100644 index 65d6e8366..000000000 --- a/mods/HELP/doc/doc_items/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = doc_items -author = Wuzzy -description = Adds automatically generated help texts for items. -depends = doc diff --git a/mods/HELP/doc/doc_items/settingtypes.txt b/mods/HELP/doc/doc_items/settingtypes.txt deleted file mode 100644 index 43e66436a..000000000 --- a/mods/HELP/doc/doc_items/settingtypes.txt +++ /dev/null @@ -1,16 +0,0 @@ -#This feature is experimental! -#If enabled, the mod will show alternative group names which are a bit -#more readable than the internally used (but canonical) group names. For -#example, the group “wood” may be rendered as “Wood”, “leaves” as -#“Leaves and Needles”, “oddly_breakable_by_hand” as “Hand-breakable”, -#and so on. Note that these alternative names are only used for better -#understanding, they are not official. -#This feature might be removed in later versions if it becomes obsolete. -doc_items_friendly_group_names (Show “friendly” group names) bool false - -#If enabled, the mod will show the itemstring of the entry for each item to -#all players. If disabled, the itemstring will only be shown to players -#with the “give” or “debug” privilege. -#The itemstring is useful to power users and programmers and -#is used e.g. for the /give and /giveme commands. -doc_items_show_itemstrings (Always show itemstrings) bool false diff --git a/mods/HELP/doc/modpack.conf b/mods/HELP/doc/modpack.conf deleted file mode 100644 index f1268957d..000000000 --- a/mods/HELP/doc/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = doc -description = Provides an extensible in-game help with texts about gameplay basics (such a crafting), items and advanced usage. diff --git a/mods/HELP/mcl_craftguide/.luacheckrc b/mods/HELP/mcl_craftguide/.luacheckrc deleted file mode 100644 index 5a495c7af..000000000 --- a/mods/HELP/mcl_craftguide/.luacheckrc +++ /dev/null @@ -1,12 +0,0 @@ -unused_args = false -allow_defined_top = true - -read_globals = { - "minetest", - "default", - "sfinv", - "sfinv_buttons", - "vector", - "string", - "table", -} diff --git a/mods/HELP/mcl_craftguide/API.md b/mods/HELP/mcl_craftguide/API.md deleted file mode 100644 index 17b42ee7b..000000000 --- a/mods/HELP/mcl_craftguide/API.md +++ /dev/null @@ -1,171 +0,0 @@ -## API - -### Custom recipes - -#### Registering a custom crafting type (example) - -```Lua -mcl_craftguide.register_craft_type("digging", { - description = "Digging", - icon = "default_tool_steelpick.png", -}) -``` - -#### Registering a custom crafting recipe (example) - -```Lua -mcl_craftguide.register_craft({ - type = "digging", - width = 1, - output = "default:cobble 2", - items = {"default:stone"}, -}) -``` - ---- - -### Recipe filters - -Recipe filters can be used to filter the recipes shown to players. Progressive -mode is implemented as a recipe filter. - -#### `mcl_craftguide.add_recipe_filter(name, function(recipes, player))` - -Adds a recipe filter with the given name. The filter function should return the -recipes to be displayed, given the available recipes and an `ObjectRef` to the -user. Each recipe is a table of the form returned by -`minetest.get_craft_recipe`. - -Example function to hide recipes for items from a mod called "secretstuff": - -```lua -mcl_craftguide.add_recipe_filter("Hide secretstuff", function(recipes) - local filtered = {} - for _, recipe in ipairs(recipes) do - if recipe.output:sub(1,12) ~= "secretstuff:" then - filtered[#filtered + 1] = recipe - end - end - - return filtered -end) -``` - -#### `mcl_craftguide.remove_recipe_filter(name)` - -Removes the recipe filter with the given name. - -#### `mcl_craftguide.set_recipe_filter(name, function(recipe, player))` - -Removes all recipe filters and adds a new one. - -#### `mcl_craftguide.get_recipe_filters()` - -Returns a map of recipe filters, indexed by name. - ---- - -### Search filters - -Search filters are used to perform specific searches inside the search field. -They can be used like so: `+=,,<...>` - -Examples: - -- `+groups=cracky,crumbly`: search for groups `cracky` and `crumbly` in all items. -- `sand+groups=falling_node`: search for group `falling_node` for items which contain `sand` in their names. - -Notes: -- If `optional name` is omitted, the search filter will apply to all items, without pre-filtering. -- Filters can be combined. -- The `groups` filter is currently implemented by default. - -#### `mcl_craftguide.add_search_filter(name, function(item, values))` - -Adds a search filter with the given name. -The search function should return a boolean value (whether the given item should be listed or not). - -Example function to show items which contain at least a recipe of given width(s): - -```lua -mcl_craftguide.add_search_filter("widths", function(item, widths) - local has_width - local recipes = recipes_cache[item] - - if recipes then - for i = 1, #recipes do - local recipe_width = recipes[i].width - for j = 1, #widths do - local width = tonumber(widths[j]) - if width == recipe_width then - has_width = true - break - end - end - end - end - - return has_width -end) -``` - -#### `mcl_craftguide.remove_search_filter(name)` - -Removes the search filter with the given name. - -#### `mcl_craftguide.get_search_filters()` - -Returns a map of search filters, indexed by name. - ---- - -### Custom formspec elements - -#### `mcl_craftguide.add_formspec_element(name, def)` - -Adds a formspec element to the current formspec. -Supported types: `box`, `label`, `image`, `button`, `tooltip`, `item_image`, `image_button`, `item_image_button` - -Example: - -```lua -mcl_craftguide.add_formspec_element("export", { - type = "button", - element = function(data) - -- Should return a table of parameters according to the formspec element type. - -- Note: for all buttons, the 'name' parameter *must not* be specified! - if data.recipes then - return { - data.iX - 3.7, -- X - sfinv_only and 7.9 or 8, -- Y - 1.6, -- W - 1, -- H - ESC(S("Export")) -- label - } - end - end, - -- Optional. - action = function(player, data) - -- When the button is pressed. - print("Exported!") - end -}) -``` - -#### `mcl_craftguide.remove_formspec_element(name)` - -Removes the formspec element with the given name. - -#### `mcl_craftguide.get_formspec_elements()` - -Returns a map of formspec elements, indexed by name. - ---- - -### Miscellaneous - -#### `mcl_craftguide.show(player_name, item, show_usages)` - -Opens the Crafting Guide with the current filter applied. - - * `player_name`: string param. diff --git a/mods/HELP/mcl_craftguide/README.md b/mods/HELP/mcl_craftguide/README.md deleted file mode 100644 index f02ad3462..000000000 --- a/mods/HELP/mcl_craftguide/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Crafting Guide (MineClone 2 edition) - -#### `mcl_craftguide` is based on, `craftguide` the most comprehensive crafting guide on Minetest. -#### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details. - -This crafting guide can be accessed from the invenotory menu (book icon). - -Crafting guide starts out empty and will be filled with more recipes whenever you hold on -to a new items that you can use to new recipes. - -For developers, there's a modding API (see `API.md`). diff --git a/mods/HELP/mcl_craftguide/init.lua b/mods/HELP/mcl_craftguide/init.lua deleted file mode 100644 index 5e3686047..000000000 --- a/mods/HELP/mcl_craftguide/init.lua +++ /dev/null @@ -1,1175 +0,0 @@ -mcl_craftguide = {} - -local M = minetest -local player_data = {} - --- Caches -local init_items = {} -local searches = {} -local recipes_cache = {} -local usages_cache = {} -local fuel_cache = {} - -local progressive_mode = M.settings:get_bool("mcl_craftguide_progressive_mode", true) -local sfinv_only = false - -local colorize = M.colorize -local reg_items = M.registered_items -local get_result = M.get_craft_result -local show_formspec = M.show_formspec -local get_player_by_name = M.get_player_by_name -local serialize, deserialize = M.serialize, M.deserialize - -local ESC = M.formspec_escape -local S = M.get_translator("mcl_craftguide") - -local maxn, sort, concat, insert, copy = - table.maxn, table.sort, table.concat, table.insert, - table.copy - -local fmt, find, gmatch, match, sub, split, lower = - string.format, string.find, string.gmatch, string.match, - string.sub, string.split, string.lower - -local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil -local pairs, next, unpack = pairs, next, unpack - -local DEFAULT_SIZE = 10 -local MIN_LIMIT, MAX_LIMIT = 10, 12 -DEFAULT_SIZE = min(MAX_LIMIT, max(MIN_LIMIT, DEFAULT_SIZE)) - -local GRID_LIMIT = 5 -local POLL_FREQ = 0.25 - -local FMT = { - box = "box[%f,%f;%f,%f;%s]", - label = "label[%f,%f;%s]", - image = "image[%f,%f;%f,%f;%s]", - button = "button[%f,%f;%f,%f;%s;%s]", - tooltip = "tooltip[%s;%s]", - item_image = "item_image[%f,%f;%f,%f;%s]", - image_button = "image_button[%f,%f;%f,%f;%s;%s;%s]", - item_image_button = "item_image_button[%f,%f;%f,%f;%s;%s;%s]", -} - -local group_stereotypes = { - wood = "mcl_core:wood", - stone = "mcl_core:stone", - sand = "mcl_core:sand", - wool = "mcl_wool:white", - carpet = "mcl_wool:white_carpet", - dye = "mcl_dye:red", - water_bucket = "mcl_buckets:bucket_water", - flower = "mcl_flowers:dandelion", - mushroom = "mcl_mushrooms:mushroom_brown", - wood_slab = "mcl_stairs:slab_wood", - wood_stairs = "mcl_stairs:stairs_wood", - coal = "mcl_core:coal_lump", - shulker_box = "mcl_chests:violet_shulker_box", - quartz_block = "mcl_nether:quartz_block", - banner = "mcl_banners:banner_item_white", - mesecon_conductor_craftable = "mesecons:wire_00000000_off", - purpur_block = "mcl_end:purpur_block", - normal_sandstone = "mcl_core:sandstone", - red_sandstone = "mcl_core:redsandstone", - compass = mcl_compass.stereotype, - clock = mcl_clock.sterotype, -} - -local group_names = { - shulker_box = S("Any shulker box"), - wool = S("Any wool"), - wood = S("Any wood planks"), - tree = S("Any wood"), - sand = S("Any sand"), - normal_sandstone = S("Any normal sandstone"), - red_sandstone = S("Any red sandstone"), - carpet = S("Any carpet"), - dye = S("Any dye"), - water_bucket = S("Any water bucket"), - flower = S("Any flower"), - mushroom = S("Any mushroom"), - wood_slab = S("Any wooden slab"), - wood_stairs = S("Any wooden stairs"), - coal = S("Any coal"), - quartz_block = S("Any kind of quartz block"), - purpur_block = S("Any kind of purpur block"), - stonebrick = S("Any stone bricks"), - stick = S("Any stick"), -} - - - -local item_lists = { - "main", - "craft", - "craftpreview", -} - -local function table_merge(t, t2) - t, t2 = t or {}, t2 or {} - local c = #t - - for i = 1, #t2 do - c = c + 1 - t[c] = t2[i] - end - - return t -end - -local function table_replace(t, val, new) - for k, v in pairs(t) do - if v == val then - t[k] = new - end - end -end - -local function table_diff(t, t2) - local hash = {} - - for i = 1, #t do - local v = t[i] - hash[v] = true - end - - for i = 1, #t2 do - local v = t2[i] - hash[v] = nil - end - - local diff, c = {}, 0 - - for i = 1, #t do - local v = t[i] - if hash[v] then - c = c + 1 - diff[c] = v - end - end - - return diff -end - -local custom_crafts, craft_types = {}, {} - -function mcl_craftguide.register_craft_type(name, def) - local func = "mcl_craftguide.register_craft_type(): " - assert(name, func .. "'name' field missing") - assert(def.description, func .. "'description' field missing") - assert(def.icon, func .. "'icon' field missing") - - craft_types[name] = def -end - -function mcl_craftguide.register_craft(def) - local func = "mcl_craftguide.register_craft(): " - assert(def.type, func .. "'type' field missing") - assert(def.width, func .. "'width' field missing") - assert(def.output, func .. "'output' field missing") - assert(def.items, func .. "'items' field missing") - - custom_crafts[#custom_crafts + 1] = def -end - -local recipe_filters = {} - -function mcl_craftguide.add_recipe_filter(name, f) - local func = "mcl_craftguide.add_recipe_filter(): " - assert(name, func .. "filter name missing") - assert(f and type(f) == "function", func .. "filter function missing") - - recipe_filters[name] = f -end - -function mcl_craftguide.remove_recipe_filter(name) - recipe_filters[name] = nil -end - -function mcl_craftguide.set_recipe_filter(name, f) - local func = "mcl_craftguide.set_recipe_filter(): " - assert(name, func .. "filter name missing") - assert(f and type(f) == "function", func .. "filter function missing") - - recipe_filters = {[name] = f} -end - -function mcl_craftguide.get_recipe_filters() - return recipe_filters -end - -local function apply_recipe_filters(recipes, player) - for _, filter in pairs(recipe_filters) do - recipes = filter(recipes, player) - end - - return recipes -end - -local search_filters = {} - -function mcl_craftguide.add_search_filter(name, f) - local func = "mcl_craftguide.add_search_filter(): " - assert(name, func .. "filter name missing") - assert(f and type(f) == "function", func .. "filter function missing") - - search_filters[name] = f -end - -function mcl_craftguide.remove_search_filter(name) - search_filters[name] = nil -end - -function mcl_craftguide.get_search_filters() - return search_filters -end - -local formspec_elements = {} - -function mcl_craftguide.add_formspec_element(name, def) - local func = "mcl_craftguide.add_formspec_element(): " - assert(def.element, func .. "'element' field not defined") - assert(def.type, func .. "'type' field not defined") - assert(FMT[def.type], func .. "'" .. def.type .. "' type not supported by the API") - - formspec_elements[name] = { - type = def.type, - element = def.element, - action = def.action, - } -end - -function mcl_craftguide.remove_formspec_element(name) - formspec_elements[name] = nil -end - -function mcl_craftguide.get_formspec_elements() - return formspec_elements -end - -local function item_has_groups(item_groups, groups) - for i = 1, #groups do - local group = groups[i] - if not item_groups[group] then - return - end - end - - return true -end - -local function extract_groups(str) - return split(sub(str, 7), ",") -end - -local function item_in_recipe(item, recipe) - for _, recipe_item in pairs(recipe.items) do - if recipe_item == item then - return true - end - end -end - -local function groups_item_in_recipe(item, recipe) - local item_groups = reg_items[item].groups - for _, recipe_item in pairs(recipe.items) do - if sub(recipe_item, 1, 6) == "group:" then - local groups = extract_groups(recipe_item) - if item_has_groups(item_groups, groups) then - local usage = copy(recipe) - table_replace(usage.items, recipe_item, item) - return usage - end - end - end -end - -local function get_item_usages(item) - local usages, c = {}, 0 - - for _, recipes in pairs(recipes_cache) do - for i = 1, #recipes do - local recipe = recipes[i] - if item_in_recipe(item, recipe) then - c = c + 1 - usages[c] = recipe - else - recipe = groups_item_in_recipe(item, recipe) - if recipe then - c = c + 1 - usages[c] = recipe - end - end - end - end - - if fuel_cache[item] then - usages[#usages + 1] = {type = "fuel", width = 1, items = {item}} - end - - return usages -end - -local function get_filtered_items(player) - local items, c = {}, 0 - - for i = 1, #init_items do - local item = init_items[i] - local recipes = recipes_cache[item] - local usages = usages_cache[item] - - if recipes and #apply_recipe_filters(recipes, player) > 0 or - usages and #apply_recipe_filters(usages, player) > 0 then - c = c + 1 - items[c] = item - end - end - - return items -end - -local function cache_recipes(output) - local recipes = M.get_all_craft_recipes(output) or {} - local c = 0 - - for i = 1, #custom_crafts do - local custom_craft = custom_crafts[i] - if match(custom_craft.output, "%S*") == output then - c = c + 1 - recipes[c] = custom_craft - end - end - - if #recipes > 0 then - recipes_cache[output] = recipes - return true - end -end - -local function get_recipes(item, data, player) - local recipes = recipes_cache[item] - local usages = usages_cache[item] - - if recipes then - recipes = apply_recipe_filters(recipes, player) - end - - local no_recipes = not recipes or #recipes == 0 - if no_recipes and not usages then - return - elseif usages and no_recipes then - data.show_usages = true - end - - if data.show_usages then - recipes = apply_recipe_filters(usages_cache[item], player) - if #recipes == 0 then - return - end - end - - return recipes -end - -local function get_burntime(item) - return get_result({method = "fuel", width = 1, items = {item}}).time -end - -local function cache_fuel(item) - local burntime = get_burntime(item) - if burntime > 0 then - fuel_cache[item] = burntime - return true - end -end - -local function groups_to_item(groups) - if #groups == 1 then - local group = groups[1] - local def_gr = "mcl_core:" .. group - - if group_stereotypes[group] then - return group_stereotypes[group] - elseif reg_items[def_gr] then - return def_gr - end - end - - for name, def in pairs(reg_items) do - if item_has_groups(def.groups, groups) then - return name - end - end - - return "" -end - -local function get_tooltip(item, groups, cooktime, burntime) - local tooltip - - if groups then - local gcol = mcl_colors.LIGHT_PURPLE - if #groups == 1 then - local g = group_names[groups[1]] - local groupstr - -- Treat the groups “compass” and “clock” as fake groups - -- and just print the normal item name without special formatting - if groups[1] == "compass" or groups[1] == "clock" then - groupstr = reg_items[item].description - elseif g then - -- Use the special group name string - groupstr = minetest.colorize(gcol, g) - else - --[[ Fallback: Generic group explanation: This always - works, but the internally used group name (which - looks ugly) is exposed to the user. ]] - groupstr = minetest.colorize(gcol, groups[1]) - groupstr = S("Any item belonging to the @1 group", groupstr) - end - tooltip = groupstr - else - - local groupstr, c = {}, 0 - for i = 1, #groups do - c = c + 1 - groupstr[c] = colorize(gcol, groups[i]) - end - - groupstr = concat(groupstr, ", ") - tooltip = S("Any item belonging to the groups: @1", groupstr) - end - else - tooltip = reg_items[item].description - end - - if not groups and cooktime then - tooltip = tooltip .. "\n" .. - S("Cooking time: @1", colorize(mcl_colors.YELLOW, cooktime)) - end - - if not groups and burntime then - tooltip = tooltip .. "\n" .. - S("Burning time: @1", colorize(mcl_colors.YELLOW, burntime)) - end - - return fmt(FMT.tooltip, item, ESC(tooltip)) -end - -local function get_recipe_fs(data, iY) - local fs = {} - local recipe = data.recipes[data.rnum] - local width = recipe.width - local xoffset = data.iX / 2.15 - local cooktime, shapeless - - if recipe.type == "cooking" then - cooktime, width = width, 1 - elseif width == 0 then - shapeless = true - if #recipe.items <= 4 then - width = 2 - else - width = min(3, #recipe.items) - end - end - - local rows = ceil(maxn(recipe.items) / width) - local rightest, btn_size, s_btn_size = 0, 1.1 - - local btn_lab = data.show_usages and - ESC(S("Usage @1 of @2", data.rnum, #data.recipes)) or - ESC(S("Recipe @1 of @2", data.rnum, #data.recipes)) - - fs[#fs + 1] = fmt(FMT.button, - sfinv_only and 5.8 or data.iX - 2.6, - sfinv_only and 7.9 or iY + 3.3, - 2.2, - 1, - "alternate", - btn_lab) - - if width > GRID_LIMIT or rows > GRID_LIMIT then - fs[#fs + 1] = fmt(FMT.label, - (data.iX / 2) - 2, - iY + 2.2, - ESC(S("Recipe is too big to be displayed (@1×@2)", width, rows))) - - return concat(fs) - end - - for i, item in pairs(recipe.items) do - local X = ceil((i - 1) % width + xoffset - width) - - (sfinv_only and 0 or 0.2) - local Y = ceil(i / width + (iY + 2) - min(2, rows)) - - if width > 3 or rows > 3 then - btn_size = width > 3 and 3 / width or 3 / rows - s_btn_size = btn_size - X = btn_size * (i % width) + xoffset - 2.65 - Y = btn_size * floor((i - 1) / width) + (iY + 3) - min(2, rows) - end - - if X > rightest then - rightest = X - end - - local groups - if sub(item, 1, 6) == "group:" then - groups = extract_groups(item) - item = groups_to_item(groups) - end - - local label = "" - if groups and (#groups >= 1 and groups[1] ~= "compass" and groups[1] ~= "clock") then - label = "\nG" - end - - fs[#fs + 1] = fmt(FMT.item_image_button, - X, - Y + (sfinv_only and 0.7 or 0.2), - btn_size, - btn_size, - item, - match(item, "%S*"), - ESC(label)) - - local burntime = fuel_cache[item] - - if groups or cooktime or burntime then - fs[#fs + 1] = get_tooltip(item, groups, cooktime, burntime) - end - end - - local custom_recipe = craft_types[recipe.type] - - if custom_recipe or shapeless or recipe.type == "cooking" then - local icon = custom_recipe and custom_recipe.icon or - shapeless and "shapeless" or "furnace" - - if recipe.type == "cooking" then - icon = "craftguide_furnace.png" - elseif not custom_recipe then - icon = fmt("craftguide_%s.png", icon) - end - - fs[#fs + 1] = fmt(FMT.image, - rightest + 1.2, - sfinv_only and 6.2 or iY + 1.7, - 0.5, - 0.5, - icon) - - local tooltip = custom_recipe and custom_recipe.description or - shapeless and S("Shapeless") or S("Cooking") - - fs[#fs + 1] = fmt("tooltip[%f,%f;%f,%f;%s]", - rightest + 1.2, - sfinv_only and 6.2 or iY + 1.7, - 0.5, - 0.5, - ESC(tooltip)) - end - - local arrow_X = rightest + (s_btn_size or 1.1) - local output_X = arrow_X + 0.9 - - fs[#fs + 1] = fmt(FMT.image, - arrow_X, - sfinv_only and 6.85 or iY + 2.35, - 0.9, - 0.7, - "craftguide_arrow.png") - - if recipe.type == "fuel" then - fs[#fs + 1] = fmt(FMT.image, - output_X, - sfinv_only and 6.68 or iY + 2.18, - 1.1, - 1.1, - "mcl_craftguide_fuel.png") - else - local output_name = match(recipe.output, "%S+") - local burntime = fuel_cache[output_name] - - fs[#fs + 1] = fmt(FMT.item_image_button, - output_X, - sfinv_only and 6.7 or iY + 2.2, - 1.1, - 1.1, - recipe.output, - ESC(output_name), - "") - - if burntime then - fs[#fs + 1] = get_tooltip(output_name, nil, nil, burntime) - - fs[#fs + 1] = fmt(FMT.image, - output_X + 1, - sfinv_only and 6.83 or iY + 2.33, - 0.6, - 0.4, - "craftguide_arrow.png") - - fs[#fs + 1] = fmt(FMT.image, - output_X + 1.6, - sfinv_only and 6.68 or iY + 2.18, - 0.6, - 0.6, - "mcl_craftguide_fuel.png") - end - end - - return concat(fs) -end - -local function make_formspec(name) - local data = player_data[name] - local iY = sfinv_only and 4 or data.iX - 5 - local ipp = data.iX * iY - - data.pagemax = max(1, ceil(#data.items / ipp)) - - local fs = {} - - if not sfinv_only then - fs[#fs + 1] = fmt("size[%f,%f;]", data.iX - 0.35, iY + 4) - - fs[#fs + 1] = "background9[1,1;1,1;mcl_base_textures_background9.png;true;7]" - - fs[#fs + 1] = fmt([[ tooltip[size_inc;%s] - tooltip[size_dec;%s] ]], - ESC(S("Increase window size")), - ESC(S("Decrease window size"))) - - fs[#fs + 1] = fmt([[ - image_button[%f,0.12;0.8,0.8;craftguide_zoomin_icon.png;size_inc;] - image_button[%f,0.12;0.8,0.8;craftguide_zoomout_icon.png;size_dec;] ]], - data.iX * 0.47, - data.iX * 0.47 + 0.6) - end - - fs[#fs + 1] = [[ - image_button[2.4,0.12;0.8,0.8;craftguide_search_icon.png;search;] - image_button[3.05,0.12;0.8,0.8;craftguide_clear_icon.png;clear;] - field_close_on_enter[filter;false] - ]] - - fs[#fs + 1] = fmt([[ tooltip[search;%s] - tooltip[clear;%s] - tooltip[prev;%s] - tooltip[next;%s] ]], - ESC(S("Search")), - ESC(S("Reset")), - ESC(S("Previous page")), - ESC(S("Next page"))) - - fs[#fs + 1] = fmt("label[%f,%f;%s]", - sfinv_only and 6.3 or data.iX - 2.2, - 0.22, - ESC(colorize("#383838", fmt("%s / %u", data.pagenum, data.pagemax)))) - - fs[#fs + 1] = fmt([[ - image_button[%f,0.12;0.8,0.8;craftguide_prev_icon.png;prev;] - image_button[%f,0.12;0.8,0.8;craftguide_next_icon.png;next;] ]], - sfinv_only and 5.5 or data.iX - 3.1, - sfinv_only and 7.3 or (data.iX - 1.2) - (data.iX >= 11 and 0.08 or 0)) - - fs[#fs + 1] = fmt("field[0.3,0.32;2.5,1;filter;;%s]", ESC(data.filter)) - - if #data.items == 0 then - local no_item = S("No item to show") - local pos = (data.iX / 2) - 1 - - if next(recipe_filters) and #init_items > 0 and data.filter == "" then - no_item = S("Collect items to reveal more recipes") - pos = pos - 1 - end - - fs[#fs + 1] = fmt(FMT.label, pos, 2, ESC(no_item)) - end - - local first_item = (data.pagenum - 1) * ipp - for i = first_item, first_item + ipp - 1 do - local item = data.items[i + 1] - if not item then - break - end - - local X = i % data.iX - local Y = (i % ipp - X) / data.iX + 1 - - fs[#fs + 1] = fmt("item_image_button[%f,%f;%f,%f;%s;%s_inv;]", - X - (sfinv_only and 0 or (X * 0.05)), - Y, - 1.1, - 1.1, - item, - item) - end - - if data.recipes and #data.recipes > 0 then - fs[#fs + 1] = get_recipe_fs(data, iY) - end - - for elem_name, def in pairs(formspec_elements) do - local element = def.element(data) - if element then - if find(def.type, "button") then - insert(element, #element, elem_name) - end - - fs[#fs + 1] = fmt(FMT[def.type], unpack(element)) - end - end - - return concat(fs) -end - -local function show_fs(player, name) - if sfinv_only then - sfinv.set_player_inventory_formspec(player) - else - show_formspec(name, "mcl_craftguide", make_formspec(name)) - end -end - -mcl_craftguide.add_search_filter("groups", function(item, groups) - local itemdef = reg_items[item] - local has_groups = true - - for i = 1, #groups do - local group = groups[i] - if not itemdef.groups[group] then - has_groups = nil - break - end - end - - return has_groups -end) - -local function search(data) - local filter = data.filter - - if searches[filter] then - data.items = searches[filter] - return - end - - local filtered_list, c = {}, 0 - local extras = "^(.-)%+([%w_]+)=([%w_,]+)" - local search_filter = next(search_filters) and match(filter, extras) - local filters = {} - - if search_filter then - for filter_name, values in gmatch(filter, sub(extras, 6, -1)) do - if search_filters[filter_name] then - values = split(values, ",") - filters[filter_name] = values - end - end - end - - for i = 1, #data.items_raw do - local item = data.items_raw[i] - local def = reg_items[item] - local desc = lower(def.description) - local search_in = item .. desc - local to_add - - if search_filter then - for filter_name, values in pairs(filters) do - local func = search_filters[filter_name] - to_add = func(item, values) and (search_filter == "" or - find(search_in, search_filter, 1, true)) - end - else - to_add = find(search_in, filter, 1, true) - end - - if to_add then - c = c + 1 - filtered_list[c] = item - end - end - - if not next(recipe_filters) then - -- Cache the results only if searched 2 times - if searches[filter] == nil then - searches[filter] = false - else - searches[filter] = filtered_list - end - end - - data.items = filtered_list -end - -local function get_inv_items(player) - local inv = player:get_inventory() - local stacks = {} - - for i = 1, #item_lists do - local list = inv:get_list(item_lists[i]) - table_merge(stacks, list) - end - - local inv_items, c = {}, 0 - - for i = 1, #stacks do - local stack = stacks[i] - if not stack:is_empty() then - local name = stack:get_name() - if reg_items[name] then - c = c + 1 - inv_items[c] = name - end - end - end - - return inv_items -end - -local function init_data(name) - player_data[name] = { - filter = "", - pagenum = 1, - iX = sfinv_only and 8 or DEFAULT_SIZE, - items = init_items, - items_raw = init_items, - } -end - -local function reset_data(data) - data.filter = "" - data.pagenum = 1 - data.rnum = 1 - data.query_item = nil - data.show_usages = nil - data.recipes = nil - data.items = data.items_raw -end - -local function cache_usages() - for i = 1, #init_items do - local item = init_items[i] - usages_cache[item] = get_item_usages(item) - end -end - -local function get_init_items() - local c = 0 - for name, def in pairs(reg_items) do - local is_fuel = cache_fuel(name) - if not (def.groups.not_in_craft_guide == 1) and - def.description and def.description ~= "" and - (cache_recipes(name) or is_fuel) then - c = c + 1 - init_items[c] = name - end - end - - sort(init_items) - cache_usages() -end - -local function on_receive_fields(player, fields) - local name = player:get_player_name() - local data = player_data[name] - - for elem_name, def in pairs(formspec_elements) do - if fields[elem_name] and def.action then - return def.action(player, data) - end - end - - if fields.clear then - reset_data(data) - show_fs(player, name) - - elseif fields.alternate then - if #data.recipes == 1 then - return - end - - local num_next = data.rnum + 1 - data.rnum = data.recipes[num_next] and num_next or 1 - show_fs(player, name) - - elseif (fields.key_enter_field == "filter" or fields.search) and - fields.filter ~= "" then - local fltr = lower(fields.filter) - if data.filter == fltr then - return - end - - data.filter = fltr - data.pagenum = 1 - search(data) - show_fs(player, name) - - elseif fields.prev or fields.next then - if data.pagemax == 1 then - return - end - - data.pagenum = data.pagenum - (fields.prev and 1 or -1) - - if data.pagenum > data.pagemax then - data.pagenum = 1 - elseif data.pagenum == 0 then - data.pagenum = data.pagemax - end - - show_fs(player, name) - - elseif (fields.size_inc and data.iX < MAX_LIMIT) or - (fields.size_dec and data.iX > MIN_LIMIT) then - data.pagenum = 1 - data.iX = data.iX + (fields.size_inc and 1 or -1) - show_fs(player, name) - else - local item - for field in pairs(fields) do - if find(field, ":") then - item = field - break - end - end - - if not item then - return - elseif sub(item, -4) == "_inv" then - item = sub(item, 1, -5) - end - - if item ~= data.query_item then - data.show_usages = nil - else - data.show_usages = not data.show_usages - end - - local recipes = get_recipes(item, data, player) - if not recipes then - return - end - - data.query_item = item - data.recipes = recipes - data.rnum = 1 - - show_fs(player, name) - end -end - -M.register_on_mods_loaded(get_init_items) - --- TODO: Remove sfinv support -if sfinv_only then - sfinv.register_page("craftguide:craftguide", { - title = "Craft Guide", - - get = function(self, player, context) - local name = player:get_player_name() - local formspec = make_formspec(name) - - return sfinv.make_formspec(player, context, formspec) - end, - - on_enter = function(self, player, context) - if next(recipe_filters) then - local name = player:get_player_name() - local data = player_data[name] - - data.items_raw = get_filtered_items(player) - search(data) - end - end, - - on_player_receive_fields = function(self, player, context, fields) - on_receive_fields(player, fields) - end, - }) -else - M.register_on_player_receive_fields(function(player, formname, fields) - if formname == "mcl_craftguide" then - on_receive_fields(player, fields) - elseif fields.__mcl_craftguide then - mcl_craftguide.show(player:get_player_name()) - end - end) - - --[[local function on_use(user) - local name = user:get_player_name() - - if next(recipe_filters) then - local data = player_data[name] - data.items_raw = get_filtered_items(user) - search(data) - end - - show_formspec(name, "mcl_craftguide", make_formspec(name)) - end]] - -end - -if progressive_mode then - local function item_in_inv(item, inv_items) - local inv_items_size = #inv_items - - if sub(item, 1, 6) == "group:" then - local groups = extract_groups(item) - for i = 1, inv_items_size do - local inv_item = reg_items[inv_items[i]] - if inv_item then - local item_groups = inv_item.groups - if item_has_groups(item_groups, groups) then - return true - end - end - end - else - for i = 1, inv_items_size do - if inv_items[i] == item then - return true - end - end - end - end - - local function recipe_in_inv(recipe, inv_items) - for _, item in pairs(recipe.items) do - if not item_in_inv(item, inv_items) then - return - end - end - - return true - end - - local function progressive_filter(recipes, player) - local name = player:get_player_name() - local data = player_data[name] - - if #data.inv_items == 0 then - return {} - end - - local filtered, c = {}, 0 - for i = 1, #recipes do - local recipe = recipes[i] - if recipe_in_inv(recipe, data.inv_items) then - c = c + 1 - filtered[c] = recipe - end - end - - return filtered - end - - -- Workaround. Need an engine call to detect when the contents - -- of the player inventory changed, instead. - local function poll_new_items() - local players = M.get_connected_players() - for i = 1, #players do - local player = players[i] - local name = player:get_player_name() - local data = player_data[name] - local inv_items = get_inv_items(player) - local diff = table_diff(inv_items, data.inv_items) - - if #diff > 0 then - data.inv_items = table_merge(diff, data.inv_items) - end - end - - M.after(POLL_FREQ, poll_new_items) - end - - M.register_on_mods_loaded(function() - M.after(1, poll_new_items) - end) - - mcl_craftguide.add_recipe_filter("Default progressive filter", progressive_filter) - - M.register_on_joinplayer(function(player) - local name = player:get_player_name() - init_data(name) - local meta = player:get_meta() - local data = player_data[name] - - data.inv_items = deserialize(meta:get_string("inv_items")) or {} - end) - - local function save_meta(player) - local meta = player:get_meta() - local name = player:get_player_name() - local data = player_data[name] - - if not data then - return - end - - local inv_items = data.inv_items or {} - - meta:set_string("inv_items", serialize(inv_items)) - end - - M.register_on_leaveplayer(function(player) - save_meta(player) - local name = player:get_player_name() - player_data[name] = nil - end) - - M.register_on_shutdown(function() - local players = M.get_connected_players() - for i = 1, #players do - local player = players[i] - save_meta(player) - end - end) -else - M.register_on_joinplayer(function(player) - local name = player:get_player_name() - init_data(name) - end) - - M.register_on_leaveplayer(function(player) - local name = player:get_player_name() - player_data[name] = nil - end) -end - -function mcl_craftguide.show(name) - local player = get_player_by_name(name) - if next(recipe_filters) then - local data = player_data[name] - data.items_raw = get_filtered_items(player) - search(data) - end - show_formspec(name, "mcl_craftguide", make_formspec(name)) -end - ---[[ Custom recipes (>3x3) test code - -M.register_craftitem(":secretstuff:custom_recipe_test", { - description = "Custom Recipe Test", -}) - -local cr = {} -for x = 1, 6 do - cr[x] = {} - for i = 1, 10 - x do - cr[x][i] = {} - for j = 1, 10 - x do - cr[x][i][j] = "group:wood" - end - end - - M.register_craft({ - output = "secretstuff:custom_recipe_test", - recipe = cr[x] - }) -end -]] diff --git a/mods/HELP/mcl_craftguide/license.txt b/mods/HELP/mcl_craftguide/license.txt deleted file mode 100644 index 57174d4d6..000000000 --- a/mods/HELP/mcl_craftguide/license.txt +++ /dev/null @@ -1,58 +0,0 @@ -License of source code ----------------------- - -The MIT License (MIT) - -Copyright (c) 2015-2019 Jean-Patrick Guerrero and contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -Licenses of media (textures) ----------------------------- - -Copyright © Diego Martínez (kaeza): craftguide_*_icon.png (CC BY-SA 3.0) - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.de.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.de.tr deleted file mode 100644 index 5d8ea21b1..000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.de.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Beliebige Schulkerkiste -Any wool=Beliebige Wolle -Any wood planks=Beliebige Holzplanken -Any wood=Beliebiges Holz -Any sand=Beliebiger Sand -Any normal sandstone=Beliebiger normaler Sandstein -Any red sandstone=Beliebiger roter Sandstein -Any carpet=Beliebiger Teppich -Any dye=Beliebiger Farbstoff -Any water bucket=Beliebiger Wassereimer -Any flower=Beliebige Blume -Any mushroom=Beliebiger Pilz -Any wooden slab=Beliebige Holzplatte -Any wooden stairs=Beliebgie Holztreppe -Any coal=Beliebige Kohle -Any kind of quartz block=Beliebiger Quarzblock -Any kind of purpur block=Beliebiger Purpurblock -Any stone bricks=Beliebige Steinziegel -Any stick=Beliebiger Stock -Any item belonging to the @1 group=Beliebiger Gegenstand aus Gruppe: @1 -Any item belonging to the groups: @1=Beliebiger Gegenstand aus den Gruppen: @1 -Search=Suche -Reset=Zurücksetzen -Previous page=Vorherige Seite -Next page=Nächste Seite -Usage @1 of @2=Verwendung @1 von @2 -Recipe @1 of @2=Rezept @1 von @2 -Burning time: @1=Brennzeit: @1 -Cooking time: @1=Kochzeit: @1 -Recipe is too big to be displayed (@1×@2)=Rezept ist zu groß für die Anzeige (@1×@2) -Shapeless=Formlos -Cooking=Kochen -Increase window size=Fenster vergrößern -Decrease window size=Fenster verkleinern -No item to show=Nichts anzuzeigen -Collect items to reveal more recipes=Gegenstände aufsammeln, um mehr Rezepte aufzudecken diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.fr.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.fr.tr deleted file mode 100644 index cf35d788b..000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.fr.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Toutes boîtes shulker -Any wool=Toutes laines -Any wood planks=Toutes planches de bois -Any wood=Tout bois -Any sand=Tout sable -Any normal sandstone=Tout grès normal -Any red sandstone=Tout grès rouge -Any carpet=Tout tapis -Any dye=Tout colorant -Any water bucket=Tout seau d'eau -Any flower=Toute fleur -Any mushroom=Tout Champignon -Any wooden slab=Toute dalle de bois -Any wooden stairs=Tout escalier de bois -Any coal=Tout charbon -Any kind of quartz block=Toute sorte de bloc de quartz -Any kind of purpur block=Toute sorte de bloc de purpur -Any stone bricks=Tout brique de pierre -Any stick=Tout bâton -Any item belonging to the @1 group=Tout élément appartenant au groupe @1 -Any item belonging to the groups: @1=Tout élément appartenant aux groupes: @1 -Search=Rechercher -Reset=Réinitialiser -Previous page=Page précédente -Next page=Page suivante -Usage @1 of @2=Usage @1 de @2 -Recipe @1 of @2=Recette @1 de @2 -Burning time: @1=Temps de combustion : @1 -Cooking time: @1=Temps de cuisson : @1 -Recipe is too big to be displayed (@1×@2)=La recette est trop grande pour être affichée (@1x@2) -Shapeless=Sans forme -Cooking=Cuisson -Increase window size=Agrandir la fenêtre -Decrease window size=Réduire la fenêtre -No item to show=Aucun item à afficher -Collect items to reveal more recipes=Collecte des items pour révéler plus de recettes diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr deleted file mode 100644 index 064fd90d3..000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr +++ /dev/null @@ -1,38 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Dowolna skrzynia shulkerowa -Any wool=Dowolna wełna -Any wood planks=Dowolne deski -Any wood=Dowolne drewno -Any sand=Dowolny piasek -Any normal sandstone=Dowolny zwykły piaskowiec -Any red sandstone=Dowolny czerwony piaskowiec -Any carpet=Dowolny dywan -Any dye=Dowolna farba -Any water bucket=Dowolne wiadro wody -Any flower=Dowolny kwiat -Any mushroom=Dowolny grzyb -Any wooden slab=Dowolny drewniana płyta -Any wooden stairs=Dowolne drewniane schody -Any coal=Dowolny węgiel -Any kind of quartz block=Dowolny typ bloku kwarcu -Any kind of purpur block=Dowolny typ bloku purpury -Any stone bricks=Dowolne kamienne cegły -Any stick=Dowolny patyk -Any item belonging to the @1 group=Dowolny przedmiot z grupy @1 -Any item belonging to the groups: @1=Dowolny przedmiot należący do grup: @1 -Search=Wyszukaj -Reset=Zresetuj -Previous page=Poprzednia strona -Next page=Następna strona -Usage @1 of @2=Użycie @1 z @2 -Recipe @1 of @2=Receptura @1 z @2 -Burning time: @1=Czas wypalenia: @1 -Cooking time: @1=Czas pieczenia: @1 -Recipe is too big to be displayed (@1×@2)=Receptura jest zbyt długa do wyświetlenia (@1×@2) -Shapeless=Bezkształtne -Cooking=Pieczenie -Increase window size=Zwiększ rozmiar okna -Decrease window size=Zmniejsz rozmiar okna -No item to show=Brak przedmiotów do pokazania -Collect items to reveal more recipes=Zbierz przedmioty by odkryć więcej receptur - diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.ru.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.ru.tr deleted file mode 100644 index ae2f28a9c..000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.ru.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Любой ящик шалкера -Any wool=Любая шерсть -Any wood planks=Любые доски -Any wood=Любое дерево -Any sand=Любой песок -Any normal sandstone=Любой обычный песчаник -Any red sandstone=Любой красный песчаник -Any carpet=Любое покрытие -Any dye=Любой краситель -Any water bucket=Любое ведро воды -Any flower=Любой цветок -Any mushroom=Любой гриб -Any wooden slab=Любая деревянная плита -Any wooden stairs=Любые деревянные ступеньки -Any coal=Любой уголь -Any kind of quartz block=Любой кварцевый блок -Any kind of purpur block=Любой фиолетовый блок -Any stone bricks=Любые каменные блоки -Any stick=Любая палка -Any item belonging to the @1 group=Любой предмет, относящийся к группе @1 -Any item belonging to the groups: @1=Любой предмет, относящийся к группам: @1 -Search=Поиск -Reset=Сброс -Previous page=Предыдущая страница -Next page=Следующая страница -Usage @1 of @2=Использование @1 из @2 -Recipe @1 of @2=Рецепт @1 из @2 -Burning time: @1=Время горения: @1 -Cooking time: @1=Время приготовления: @1 -Recipe is too big to be displayed (@1×@2)=Рецепт слишком большой для отображения (@1×@2) -Shapeless=Бесформенный -Cooking=Приготовление -Increase window size=Увеличить окно -Decrease window size=Уменьшить окно -No item to show=Нет элемента для показа -Collect items to reveal more recipes=Для рецептов нужны предметы diff --git a/mods/HELP/mcl_craftguide/locale/template.txt b/mods/HELP/mcl_craftguide/locale/template.txt deleted file mode 100644 index 66c5adcac..000000000 --- a/mods/HELP/mcl_craftguide/locale/template.txt +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: craftguide -Any shulker box= -Any wool= -Any wood planks= -Any wood= -Any sand= -Any normal sandstone= -Any red sandstone= -Any carpet= -Any dye= -Any water bucket= -Any flower= -Any mushroom= -Any wooden slab= -Any wooden stairs= -Any coal= -Any kind of quartz block= -Any kind of purpur block= -Any stone bricks= -Any stick= -Any item belonging to the @1 group= -Any item belonging to the groups: @1= -Search= -Reset= -Previous page= -Next page= -Usage @1 of @2= -Recipe @1 of @2= -Burning time: @1= -Cooking time: @1= -Recipe is too big to be displayed (@1×@2)= -Shapeless= -Cooking= -Increase window size= -Decrease window size= -No item to show= -Collect items to reveal more recipes= diff --git a/mods/HELP/mcl_craftguide/mod.conf b/mods/HELP/mcl_craftguide/mod.conf deleted file mode 100644 index ce99c0e32..000000000 --- a/mods/HELP/mcl_craftguide/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_craftguide -author = kilbith -description = The most comprehensive Crafting Guide on Minetest. -depends = mcl_core, mcl_compass, mcl_clock, doc, mcl_colors -optional_depends = sfinv, sfinv_buttons diff --git a/mods/HELP/mcl_craftguide/settingtypes.txt b/mods/HELP/mcl_craftguide/settingtypes.txt deleted file mode 100644 index dd3a5915e..000000000 --- a/mods/HELP/mcl_craftguide/settingtypes.txt +++ /dev/null @@ -1,4 +0,0 @@ -# If enabled, the recipe book will progressively be filled with new recipes that can be crafted from all items you ever have had in your inventory. -# Recommended for new players and for a spoiler-free gameplay experience. -# If disabled, all recipes will be shown. -mcl_craftguide_progressive_mode (Learn crafting recipes progressively) bool true diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_arrow.png b/mods/HELP/mcl_craftguide/textures/craftguide_arrow.png deleted file mode 100644 index cde70b1ce..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_arrow.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_book.png b/mods/HELP/mcl_craftguide/textures/craftguide_book.png deleted file mode 100644 index 509f2350a..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_book.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_clear_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_clear_icon.png deleted file mode 100644 index 9244264ad..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_clear_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_furnace.png b/mods/HELP/mcl_craftguide/textures/craftguide_furnace.png deleted file mode 100644 index c425604d2..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_furnace.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_next_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_next_icon.png deleted file mode 100644 index 82cf3d361..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_next_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_prev_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_prev_icon.png deleted file mode 100644 index b26cd157f..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_prev_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_search_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_search_icon.png deleted file mode 100644 index aace8044a..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_search_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_shapeless.png b/mods/HELP/mcl_craftguide/textures/craftguide_shapeless.png deleted file mode 100644 index 2b4edc4c1..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_shapeless.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_zoomin_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_zoomin_icon.png deleted file mode 100644 index 5b8ecc2cb..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_zoomin_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_zoomout_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_zoomout_icon.png deleted file mode 100644 index 7db747fda..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_zoomout_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/mcl_craftguide_fuel.png b/mods/HELP/mcl_craftguide/textures/mcl_craftguide_fuel.png deleted file mode 100644 index 2e3cc8f47..000000000 Binary files a/mods/HELP/mcl_craftguide/textures/mcl_craftguide_fuel.png and /dev/null differ diff --git a/mods/HELP/mcl_doc/init.lua b/mods/HELP/mcl_doc/init.lua deleted file mode 100644 index 4ba387e12..000000000 --- a/mods/HELP/mcl_doc/init.lua +++ /dev/null @@ -1,427 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Disable built-in factoids; it is planned to add custom ones as replacements -doc.sub.items.disable_core_factoid("node_mining") -doc.sub.items.disable_core_factoid("tool_capabilities") - --- Help button callback -minetest.register_on_player_receive_fields(function(player, formname, fields) - if fields.__mcl_doc then - doc.show_doc(player:get_player_name()) - end -end) - --- doc_items factoids - --- dig_by_water -doc.sub.items.register_factoid("nodes", "drop_destroy", function(itemstring, def) - if def.groups.dig_by_water then - return S("Water can flow into this block and cause it to drop as an item.") - end - return "" -end) - --- usable by hoes -doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - if def.groups.cultivatable == 1 then - return S("This block can be turned into dirt with a hoe.") - elseif def.groups.cultivatable == 2 then - return S("This block can be turned into farmland with a hoe.") - end - return "" -end) - --- usable by shovels -doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - if def.groups.path_creation_possible then - return S("This block can be turned into grass path with a shovel.") - end - return "" -end) - --- soil -doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - local datastring = "" - if def.groups.soil_sapling == 2 then - datastring = datastring .. S("This block acts as a soil for all saplings.") .. "\n" - elseif def.groups.soil_sapling == 1 then - datastring = datastring .. S("This block acts as a soil for some saplings.") .. "\n" - end - if def.groups.soil_sugarcane then - datastring = datastring .. S("Sugar canes will grow on this block.") .. "\n" - end - if def.groups.soil_nether_wart then - datastring = datastring .. S("Nether wart will grow on this block.") .. "\n" - end - return datastring -end) - -doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - local formstring = "" - if def.groups.leafdecay then - if def.drop ~= "" and def.drop and def.drop ~= itemstring then - formstring = S("This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.", def.groups.leafdecay) - else - formstring = S("This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.", def.groups.leafdecay) - end - end - return formstring -end) - --- nodes which have flower placement rules -doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - if def.groups.place_flowerlike == 1 then - return S("This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.") - elseif def.groups.place_flowerlike == 2 then - return S("This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.") - end - return "" -end) - --- flammable -doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - if def.groups.flammable then - return S("This block is flammable.") - end - return "" -end) - --- destroys_items -doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - if def.groups.destroys_items then - return S("This block destroys any item it touches.") - end - return "" -end) - - --- Comestibles -doc.sub.items.register_factoid(nil, "use", function(itemstring, def) - local s = "" - if def.groups.eatable and not def._doc_items_usagehelp then - if def.groups.food == 2 then - s = s .. S("To eat it, wield it, then rightclick.") - if def.groups.can_eat_when_full == 1 then - s = s .. "\n" .. S("You can eat this even when your hunger bar is full.") - else - s = s .. "\n" .. S("You cannot eat this when your hunger bar is full.") - end - elseif def.groups.food == 3 then - s = s .. S("To drink it, wield it, then rightclick.") - if def.groups.can_eat_when_full ~= 1 then - s = s .. "\n" .. S("You cannot drink this when your hunger bar is full.") - end - else - s = s .. S("To consume it, wield it, then rightclick.") - if def.groups.can_eat_when_full ~= 1 then - s = s .. "\n" .. S("You cannot consume this when your hunger bar is full.") - end - end - if def.groups.no_eat_delay ~= 1 then - s = s .. "\n" .. S("You have to wait for about 2 seconds before you can eat or drink again.") - end - end - return s -end) - -doc.sub.items.register_factoid(nil, "groups", function(itemstring, def) - local s = "" - if def.groups.eatable and def.groups.eatable > 0 then - s = s .. S("Hunger points restored: @1", def.groups.eatable) - end - if def._mcl_saturation and def._mcl_saturation > 0 then - s = s .. "\n" .. S("Saturation points restored: @1%.1f", string.format("%.1f", def._mcl_saturation)) - end - return s -end) - --- Armor -doc.sub.items.register_factoid(nil, "use", function(itemstring, def) - --local def = minetest.registered_items[itemstring] - local s = "" - local head = minetest.get_item_group(itemstring, "armor_head") - local torso = minetest.get_item_group(itemstring, "armor_torso") - local legs = minetest.get_item_group(itemstring, "armor_legs") - local feet = minetest.get_item_group(itemstring, "armor_feet") - if head > 0 then - s = s .. S("It can be worn on the head.") - s = s .. "\n" - end - if torso > 0 then - s = s .. S("It can be worn on the torso.") - s = s .. "\n" - end - if legs > 0 then - s = s .. S("It can be worn on the legs.") - s = s .. "\n" - end - if feet > 0 then - s = s .. S("It can be worn on the feet.") - s = s .. "\n" - end - return s -end) -doc.sub.items.register_factoid(nil, "groups", function(itemstring, def) - --local def = minetest.registered_items[itemstring] - local s = "" - local use = minetest.get_item_group(itemstring, "mcl_armor_uses") - local pts = minetest.get_item_group(itemstring, "mcl_armor_points") - if pts > 0 then - s = s .. S("Armor points: @1", pts) - s = s .. "\n" - end - if use > 0 then - s = s .. S("Armor durability: @1", use) - end - return s -end) - --- TODO: Move this info to the crafting guide -doc.sub.items.register_factoid(nil, "groups", function(itemstring, def) - if def._repair_material then - local mdef = minetest.registered_items[def._repair_material] - if mdef and mdef.description and mdef.description ~= "" then - return S("This item can be repaired at an anvil with: @1.", mdef.description) - elseif def._repair_material == "group:wood" then - return S("This item can be repaired at an anvil with any wooden planks.") - elseif string.sub(def._repair_material, 1, 6) == "group:" then - local group = string.sub(def._repair_material, 7) - return S("This item can be repaired at an anvil with any item in the “@1” group.", group) - end - end - return "" -end) - -doc.sub.items.register_factoid(nil, "groups", function(itemstring, def) - if minetest.get_item_group(itemstring, "no_rename") == 1 then - return S("This item cannot be renamed at an anvil.") - else - return "" - end -end) - -doc.sub.items.register_factoid("nodes", "gravity", function(itemstring, def) - local s = "" - if minetest.get_item_group(itemstring, "crush_after_fall") == 1 then - s = s .. S("This block crushes any block it falls into.") - end - return s -end) - -doc.sub.items.register_factoid("nodes", "gravity", function(itemstring, def) - local s = "" - if minetest.get_item_group(itemstring, "crush_after_fall") == 1 then - s = s .. S("When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B = number of blocks fallen. The damage can never be more than 40 HP.") - end - return s -end) - --- Mining, hardness and all that -doc.sub.items.register_factoid("nodes", "mining", function(itemstring, def) - local pickaxey = { S("Diamond Pickaxe"), S("Iron Pickaxe"), S("Stone Pickaxe"), S("Golden Pickaxe"), S("Wooden Pickaxe") } - local axey = { S("Diamond Axe"), S("Iron Axe"), S("Stone Axe"), S("Golden Axe"), S("Wooden Axe") } - local shovely = { S("Diamond Shovel"), S("Iron Shovel"), S("Stone Shovel"), S("Golden Shovel"), S("Wooden Shovel") } - - local datastring = "" - local groups = def.groups - if groups then - if groups.dig_immediate == 3 then - datastring = datastring .. S("This block can be mined by any tool instantly.") .. "\n" - else - local tool_minable = false - - if groups.pickaxey then - for g=1, 6-groups.pickaxey do - datastring = datastring .. "• " .. pickaxey[g] .. "\n" - end - tool_minable = true - end - if groups.axey then - for g=1, 6-groups.axey do - datastring = datastring .. "• " .. axey[g] .. "\n" - end - tool_minable = true - end - if groups.shovely then - for g=1, 6-groups.shovely do - datastring = datastring .. "• " .. shovely[g] .. "\n" - end - tool_minable = true - end - if groups.shearsy or groups.shearsy_wool then - datastring = datastring .. S("• Shears") .. "\n" - tool_minable = true - end - if groups.swordy or groups.swordy_cobweb then - datastring = datastring .. S("• Sword") .. "\n" - tool_minable = true - end - if groups.handy then - datastring = datastring .. S("• Hand") .. "\n" - tool_minable = true - end - - if tool_minable then - datastring = S("This block can be mined by:") .. "\n" .. datastring .. "\n" - end - end - end - local hardness = def._mcl_hardness - if not hardness then - hardness = 0 - end - if hardness == -1 then - datastring = datastring .. S("Hardness: ∞") - else - datastring = datastring .. S("Hardness: @1", string.format("%.2f", hardness)) - end - local blast = def._mcl_blast_resistance - if not blast then - blast = 0 - end - -- TODO: Blast resistance as number - if blast >= 1000 then - datastring = datastring .. "\n" .. S("This block will not be destroyed by TNT explosions.") - end - return datastring -end) - --- Special drops when mined by shears -doc.sub.items.register_factoid("nodes", "drops", function(itemstring, def) - if def._mcl_shears_drop == true then - return S("This block drops itself when mined by shears.") - elseif type(def._mcl_shears_drop) == "table" then - local drops = {} - for d=1, #def._mcl_shears_drop do - local item = ItemStack(def._mcl_shears_drop[d]) - local itemname = item:get_name() - local itemcount = item:get_count() - local idef = minetest.registered_items[itemname] - local text - if idef.description and idef.description ~= "" then - text = idef.description - else - text = itemname - end - if itemcount > 1 then - text = S("@1×@2", itemcount, text) - end - table.insert(drops, text) - end - local ret = S("This blocks drops the following when mined by shears: @1", table.concat(drops, S(", "))) - return ret - end - return "" -end) - --- Digging capabilities of tool -doc.sub.items.register_factoid("tools", "misc", function(itemstring, def) - if not def.tool_capabilities then - return "" - end - local groupcaps = def.tool_capabilities.groupcaps - if not groupcaps then - return "" - end - local formstring = "" - local capstr = "" - local caplines = 0 - for k,v in pairs(groupcaps) do - local speedstr = "" - local miningusesstr = "" - -- Mining capabilities - caplines = caplines + 1 - local maxlevel = v.maxlevel - if not maxlevel then - -- Default from tool.h - maxlevel = 1 - end - - -- Digging speed - local speed_class = def.groups and def.groups.dig_speed_class - if speed_class == 1 then - speedstr = S("Painfully slow") - elseif speed_class == 2 then - speedstr = S("Very slow") - elseif speed_class == 3 then - speedstr = S("Slow") - elseif speed_class == 4 then - speedstr = S("Fast") - elseif speed_class == 5 then - speedstr = S("Very fast") - elseif speed_class == 6 then - speedstr = S("Extremely fast") - elseif speed_class == 7 then - speedstr = S("Instantaneous") - end - - -- Number of mining uses - local base_uses = v.uses - if not base_uses then - -- Default from tool.h - base_uses = 20 - end - if def._doc_items_durability == nil and base_uses > 0 then - local real_uses = base_uses * math.pow(3, maxlevel) - if real_uses < 65535 then - miningusesstr = S("@1 uses", real_uses) - else - miningusesstr = S("Unlimited uses") - end - end - - if speedstr ~= "" then - capstr = capstr .. S("Mining speed: @1", speedstr) .. "\n" - end - if miningusesstr ~= "" then - capstr = capstr .. S("Mining durability: @1", miningusesstr) .. "\n" - end - - -- Only show one group at max - break - end - if caplines > 0 then - formstring = formstring .. S("This tool is capable of mining.") .. "\n" - -- Capabilities - formstring = formstring .. capstr - -- Max. drop level - local mdl = def.tool_capabilities.max_drop_level - if not def.tool_capabilities.max_drop_level then - mdl = 0 - end - formstring = formstring .. S("Block breaking strength: @1", mdl) .. "\n" - end - if caplines > 0 then - formstring = formstring .. "\n\n" - end - return formstring -end) - --- Melee damage -doc.sub.items.register_factoid("tools", "misc", function(itemstring, def) - local tool_capabilities = def.tool_capabilities - if not tool_capabilities then - return "" - end - - local formstring = "" - -- Weapon data - local damage_groups = tool_capabilities.damage_groups - if damage_groups and damage_groups.fleshy then - formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n" - - -- Damage groups - local dmg = damage_groups.fleshy - formstring = formstring .. S("Maximum damage: @1 HP", dmg) .. "\n" - - -- Full punch interval - local punch = 1.0 - if tool_capabilities.full_punch_interval then - punch = tool_capabilities.full_punch_interval - end - formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch)) - formstring = formstring .. "\n" - end - return formstring -end) - diff --git a/mods/HELP/mcl_doc/locale/mcl_doc.de.tr b/mods/HELP/mcl_doc/locale/mcl_doc.de.tr deleted file mode 100644 index e929f9aec..000000000 --- a/mods/HELP/mcl_doc/locale/mcl_doc.de.tr +++ /dev/null @@ -1,79 +0,0 @@ -# textdomain: mcl_doc -Water can flow into this block and cause it to drop as an item.=Wasser kann in diesen Block fließen und ihn als Gegenstand fallen lassen. -This block can be turned into dirt with a hoe.=Dieser Block kann mit einer Hacke zu Erde gemacht werden. -This block can be turned into farmland with a hoe.=Dieser Block kann mit einer Hacke zu Ackerboden gemacht werden. -This block acts as a soil for all saplings.=Dieser Block eignet sich als Nährboden für alle Setzlinge. -This block acts as a soil for some saplings.=Dieser Block eignet sich als Nährboden für einige Setzlinge. -Sugar canes will grow on this block.=Zuckerrohr wird auf diesem Block wachsen. -Nether wart will grow on this block.=Netherwurz wird auf diesem Block wachsen. -This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.=Dieser Block wird rasch absterben, wenn sich kein Holzblock irgendeiner Art innerhalb einer Entfernung von @1 befindet. Beim Absterben wird er verschwinden und wirft dabei vielleicht etwas ab. Der Block wird nicht absterben, wenn er von einem Spieler platziert wurde. -This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.=Dieser Block wird schnell absterben und verschwinden, wenn sich kein Holzblock irgendeiner Art innerhalb einer Entfernung von @1 befindet. Der Block wird nicht absterben, wenn er von einem Spieler platziert wurde. -This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Diese Pflanze kann nur auf Grasblöcken und Erde wachsen. Zum Überleben muss sie sich direkt unter dem Himmel befinden oder einer Lichtstärke von 8 oder höher ausgesetzt sein. -This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Diese Pflanze wächst auf Grasblöcken, Podsol, Erde und grobe Erde. Zum Überleben muss sie sich direkt unter dem Himmel befinden oder einer Lichtstärke von mindestens 8 ausgesetzt sein. -This block is flammable.=Dieser Block ist entzündlich. -This block destroys any item it touches.=Dieser Block zerstört jeden Gegenstand, der in ihn fällt. -To eat it, wield it, then rightclick.=Um dies zu essen, halten Sie es in der Hand und rechtsklicken Sie. -You can eat this even when your hunger bar is full.=Sie können dies essen, auch wenn Ihre Hungerleiste voll ist. -You cannot eat this when your hunger bar is full.=Sie können dies nicht essen, wenn Ihre Hungerleiste voll ist. -To drink it, wield it, then rightclick.=Um dies zu trinken, halten Sie es, dann rechtklicken Sie. -You cannot drink this when your hunger bar is full.=Sie können dies nicht trinken, wenn Ihre Hungerleiste voll ist. -To consume it, wield it, then rightclick.=Um dies zu konsumieren, halten Sie es, dann rechtsklicken Sie. -You cannot consume this when your hunger bar is full.=Sie können dies nicht konsumieren, wenn Ihre Hungerleiste voll ist. -You have to wait for about 2 seconds before you can eat or drink again.=Sie müssen für etwa 2 Sekunden warten, bevor Sie erneut essen oder trinken können. -Hunger points restored: @1=Erhaltene Hungerpunkte: @1 -Saturation points restored: @1%.1f=Erhaltene Sättigungspunkte: @1 -This item can be repaired at an anvil with: @1.=Dieser Gegenstand kann an einem Amboss repariert werden mit: @1 -This item can be repaired at an anvil with any wooden planks.=Dieser Gegenstand kann an einem Amboss mit beliebigen Holzplanken repariert werden. -This item can be repaired at an anvil with any item in the “@1” group.=Dieser Gegenstand kann an einem Amboss in der „@1“-Gruppe repariert werden. -This item cannot be renamed at an anvil.=Dieser Gegenstand kann an einem Amboss nicht umbenannt werden. -This block crushes any block it falls into.=Dieser Block zertrümmert jeden Block, in den er hereinfällt. -When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.=Wenn dieser Block um mehr als 1 Block tief fällt, richtet er für jeden Spieler, den er trifft, Schaden an. Der Schaden ist B×2-2 Trefferpunkte, wobei B = die Anahl der gefallenen Blöcke. Der Schaden ist nie größer als 40 TP. -Diamond Pickaxe=Diamantspitzhacke -Iron Pickaxe=Eisenspitzhacke -Stone Pickaxe=Steinspitzhacke -Golden Pickaxe=Goldspitzhacke -Wooden Pickaxe=Holzspitzhacke -Diamond Axe=Diamantaxt -Iron Axe=Eisenaxt -Stone Axe=Steinaxt -Golden Axe=Goldaxt -Wooden Axe=Holzaxt -Diamond Shovel=Diamantschaufel -Iron Shovel=Eisenschaufel -Stone Shovel=Steinschaufel -Golden Shovel=Goldschaufel -Wooden Shovel=Holzschaufel -This block can be mined by any tool instantly.=Dieser Block kann mit jedem Werkzeug sofort abgebaut werden. -This block can be mined by:=Dieser Block kann abgebaut werden mit: -Hardness: ∞=Härte: ∞ -Hardness: @1=Härte: @1 -This block will not be destroyed by TNT explosions.=Dieser Block wird von TNT-Explosionen nicht zerstört. -This block drops itself when mined by shears.=Dieser Block wirft sich selbst ab, wenn er mit einer Schere abgebaut wird. -@1×@2=@1×@2 -This blocks drops the following when mined by shears: @1=Dieser Block wird folgendes abwerfen, wenn er mit einer Schere abgebaut wird: @ -, =, -• Shears=• Schere -• Sword=• Schwert -• Hand=• Hand -This is a melee weapon which deals damage by punching.=Dies ist eine Nahkampfwaffe, die Schaden durch Schläge verursacht. -Maximum damage: @1 HP=Maximalschaden: @1 HP -Full punch interval: @1 s=Ausholintervall: @1 s -This tool is capable of mining.=Dieses Werkzeug kann Blöcke abbauen. -Mining speed: @1=Grabegeschwindigkeit: @1 -Painfully slow=Furchtbar langsam -Very slow=Sehr langsam -Slow=Langsam -Fast=Schnell -Very fast=Sehr schnell -Extremely fast=Extrem schnell -Instantaneous=Unmittelbar -@1 uses=@1 Verwendungen -Unlimited uses=Unbegrenzte Verwendungen -Block breaking strength: @1=Blockbruchstärke: @1 -Mining durability: @1=Grabehaltbarkeit: @1 -Armor points: @1=Rüstungspunkte: @1 -Armor durability: @1=Rüstungshaltbarkeit: @1 -It can be worn on the head.=Es kann auf dem Kopf getragen werden. -It can be worn on the torso.=Es kann am Torso getragen werden. -It can be worn on the legs.=Es kann an den Beinen getragen werden. -It can be worn on the feet.=Es kann an den Füßen getragen werden. diff --git a/mods/HELP/mcl_doc/locale/mcl_doc.fr.tr b/mods/HELP/mcl_doc/locale/mcl_doc.fr.tr deleted file mode 100644 index 90e0c9b0e..000000000 --- a/mods/HELP/mcl_doc/locale/mcl_doc.fr.tr +++ /dev/null @@ -1,79 +0,0 @@ -# textdomain: mcl_doc -Water can flow into this block and cause it to drop as an item.=L'eau peut s'écouler dans ce bloc et provoquer sa chute en tant qu'élément. -This block can be turned into dirt with a hoe.=Ce bloc peut être transformé en terre avec une houe. -This block can be turned into farmland with a hoe.=Ce bloc peut être transformé en terres agricoles avec une houe. -This block acts as a soil for all saplings.=Ce bloc agit comme un sol pour tous les pousses arbres. -This block acts as a soil for some saplings.=Ce bloc agit comme un sol pour certains pousses arbres. -Sugar canes will grow on this block.=Les cannes à sucre pousseront sur ce bloc. -Nether wart will grow on this block.=La verrue du Néant se développera sur ce bloc. -This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.=Ce bloc se désintègre rapidement lorsqu'il n'y a aucun bloc de bois de n'importe quel espèce à une distance de @1. En décomposition, il disparaît et peut lâcher un des ses objets habituels. Le bloc ne se désintègre pas lorsque le bloc a été placé par un joueur. -This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.=Ce bloc se désintègre rapidement et disparaît lorsqu'il n'y a aucun bloc de bois de n'importe quel espèce à une distance de @1. Le bloc ne se désintègre pas lorsque le bloc a été placé par un joueur. -This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Cette plante ne peut pousser que sur des blocs d'herbe et de terre. Pour survivre, il doit avoir une vue dégagée sur le ciel au-dessus ou être exposé à un niveau de lumière de 8 ou plus. -This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Cette plante peut pousser sur des blocs d'herbe, du podzol, de la terre et de la terre grossière. Pour survivre, il doit avoir une vue dégagée sur le ciel au-dessus ou être exposé à un niveau de lumière de 8 ou plus. -This block is flammable.=Ce bloc est inflammable. -This block destroys any item it touches.=Ce bloc détruit tout élément qu'il touche. -To eat it, wield it, then rightclick.=Pour le manger, maniez-le, puis faites un clic droit. -You can eat this even when your hunger bar is full.=Vous pouvez le manger même lorsque votre barre de faim est pleine. -You cannot eat this when your hunger bar is full.=Vous ne pouvez pas manger cela lorsque votre barre de faim est pleine. -To drink it, wield it, then rightclick.=Pour le boire, maniez-le, puis faites un clic droit. -You cannot drink this when your hunger bar is full.=Vous ne pouvez pas boire cela lorsque votre barre de faim est pleine. -To consume it, wield it, then rightclick.=Pour le consommer, maniez-le, puis faites un clic droit. -You cannot consume this when your hunger bar is full.=Vous ne pouvez pas consommer cela lorsque votre barre de faim est pleine. -You have to wait for about 2 seconds before you can eat or drink again.=Vous devez attendre environ 2 secondes avant de pouvoir à nouveau manger ou boire. -Hunger points restored: @1=Points de faim restaurés: @1 -Saturation points restored: @1%.1f=Points de saturation restaurés: @1%.1f -This item can be repaired at an anvil with: @1.=Cet article peut être réparé sur une enclume avec: @1. -This item can be repaired at an anvil with any wooden planks.=Cet article peut être réparé sur une enclume avec n'importe quelle planche de bois. -This item can be repaired at an anvil with any item in the “@1” group.=Cet article peut être réparé sur une enclume avec n'importe quel article du groupe “@1”. -This item cannot be renamed at an anvil.=Cet objet ne peut pas être renommé sur une enclume. -This block crushes any block it falls into.=Ce bloc écrase tout bloc dans lequel il tombe. -When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.=Lorsque ce bloc tombe plus profondément que 1 bloc, il inflige des dégâts à tout joueur qu'il frappe. Les dégâts infligés sont B×2−2 points de vie avec B @= nombre de blocs tombés. Les dégâts ne peuvent jamais dépasser 40 PV. -Diamond Pickaxe=Pioche en Diamant -Iron Pickaxe=Pioche en Fer -Stone Pickaxe=Pioche en Pierre -Golden Pickaxe=Pioche en Or -Wooden Pickaxe=Pioche en Bois -Diamond Axe=Hache en Diamant -Iron Axe=Hache en Fer -Stone Axe=Hache en Pierre -Golden Axe=Hache en Or -Wooden Axe=Hache en Bois -Diamond Shovel=Pelle en Diamant -Iron Shovel=Pelle en Fer -Stone Shovel=Pelle en Pierre -Golden Shovel=Pelle en Or -Wooden Shovel=Pelle de Bois -This block can be mined by any tool instantly.=Ce bloc peut être miné par n'importe quel outil instantanément. -This block can be mined by:=Ce bloc peut être miné par: -Hardness: ∞=Dureté: ∞ -Hardness: @1=Dureté: @1 -This block will not be destroyed by TNT explosions.=Ce bloc ne sera pas détruit par les explosions de TNT. -This block drops itself when mined by shears.=Ce bloc se laisse tomber lorsqu'il est exploité par cisaille. -@1×@2=@1×@2 -This blocks drops the following when mined by shears: @1=Ce bloc laisse tomber les choses suivantes lorsqu'il est exploité par cisaille: -, =, -• Shears=• Cisailles -• Sword=• Epées -• Hand=• Mains -This is a melee weapon which deals damage by punching.=Il s'agit d'une arme de mêlée qui inflige des dégâts en frappant. -Maximum damage: @1 HP=Dégâts maximum: @1 -Full punch interval: @1 s=Interval de coup: @1 s -This tool is capable of mining.=Cet outil est capable d'exploiter. -Mining speed: @1=Vitesse de minage: @1 -Painfully slow=Péniblement lent -Very slow=Très lent -Slow=Lent -Fast=Rapide -Very fast=Très rapide -Extremely fast=Extrêmenent rapide -Instantaneous=Instantané -@1 uses=@1 utilisations -Unlimited uses=Utilisations illimitées -Block breaking strength: @1=Résistance de rupture de bloc: @1 -Mining durability: @1=Durabilité de minage: @1 -Armor points: @1=Point d'armure: @1 -Armor durability: @1=Durabilité de l'armure: @1 -It can be worn on the head.=Il peut être porté sur la tête. -It can be worn on the torso.=Il peut être porté au torse. -It can be worn on the legs.=Il peut être porté aux jambes. -It can be worn on the feet.=Il peut être porté aux pieds. diff --git a/mods/HELP/mcl_doc/locale/mcl_doc.pl.tr b/mods/HELP/mcl_doc/locale/mcl_doc.pl.tr deleted file mode 100644 index c451c8c39..000000000 --- a/mods/HELP/mcl_doc/locale/mcl_doc.pl.tr +++ /dev/null @@ -1,80 +0,0 @@ -# textdomain: mcl_doc -Water can flow into this block and cause it to drop as an item.=Woda może wpłynąć na ten blok i sprawić, że on wypadnie. -This block can be turned into dirt with a hoe.=Ten blok może być zamieniony w ziemię za pomocą motyki. -This block can be turned into farmland with a hoe.=Ten blok może być zamieniony w ziemię uprawną za pomocą motyki. -This block acts as a soil for all saplings.=Ten blok może być glebą dla wszystkich sadzonek. -This block acts as a soil for some saplings.=Ten blok może być glebą dla niektórych sadzonek. -Sugar canes will grow on this block.=Trzcina cukrowa będzie rosnąć na tym bloku. -Nether wart will grow on this block.=Netherowa brodawka będzie rosnąć na tym bloku. -This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Gdy zanika może wyrzucić z siebie jeden z przedmiotów typowo wyrzucanych. -This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Ten blok nie zanika gdy został postawiony przez gracza. -This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć tylko na blokach trawy i ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym. -This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć na blokach trawy, bielicy, ziemi i twardej ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym. -This block is flammable.=Ten blok jest łatwopalny. -This block destroys any item it touches.=Ten blok niszczy się gdy dowolny przedmiot go dotyka. -To eat it, wield it, then rightclick.=Aby to zjeść, weź to, następnie kliknij prawy przycisk myszy. -You can eat this even when your hunger bar is full.=Możesz to zjeść nawet gdy twój pasek nasycenia jest pełny. -You cannot eat this when your hunger bar is full.=Nie możesz tego jeść gdy twój pasek nasycenia jest pełny. -To drink it, wield it, then rightclick.=Aby to wypić, weź to, następnie kliknij prawy przycisk myszy. -You cannot drink this when your hunger bar is full.=Nie możesz tego pić gdy twój pasek nasycenia jest pełny. -To consume it, wield it, then rightclick.=Aby to skonsumować, weź to, następnie kliknij prawy przycisk myszy. -You cannot consume this when your hunger bar is full.=Nie możesz tego skonsumować gdy twój pasek nasycenia jest pełny. -You have to wait for about 2 seconds before you can eat or drink again.=Musisz poczekać przez 2 sekundy zanim znów będziesz mogła jeść lub pić. -Hunger points restored: @1=Przywrócone punkty głodu: @1 -Saturation points restored: @1%.1f=Przywrócone punkty nasycenia: @1%.1f -This item can be repaired at an anvil with: @1.=Ten przedmiot może być naprawiony przy kowadle przy użyciu: @1. -This item can be repaired at an anvil with any wooden planks.=Ten przedmiot może być naprawiony przy kowadle przy użyciu desek. -This item can be repaired at an anvil with any item in the “@1” group.=Ten przedmiot może być naprawiony przy kowadle przy użyciu dowolnego przedmiotu z grupy "@1". -This item cannot be renamed at an anvil.=Ten przedmiot nie może być przemianowany przy kowadle. -This block crushes any block it falls into.=Ten blok rozbija dowolny blok na który spadnie. -When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.=Gdy ten blok spada więcej niż o 1 blok, zadaje on obrażenia dowolnemu graczowi którego uderzy. Zadaje on B×2−2 punktów obrażeń, gdzie B @= liczba bloków o który spadł. -Diamond Pickaxe=Diamentowy kilof -Iron Pickaxe=Żelazny kilof -Stone Pickaxe=Kamienny kilof -Golden Pickaxe=Złoty kilof -Wooden Pickaxe=Drewniany kilof -Diamond Axe=Diamentowa siekiera -Iron Axe=Żelazna siekiera -Stone Axe=Kamienna siekiera -Golden Axe=Złota siekiera -Wooden Axe=Drewniana siekiera -Diamond Shovel=Diamentowa łopata -Iron Shovel=Żelazna łopata -Stone Shovel=Kamienna łopata -Golden Shovel=Złota łopata -Wooden Shovel=Drewniana łopata -This block can be mined by any tool instantly.=Ten blok może zostać wykopany dowolnym narzędziem natychmiastowo. -This block can be mined by:=Ten blok może być wykopany przy użyciu: -Hardness: ∞=Twardość: ∞ -Hardness: @1=Twardość: @1 -This block will not be destroyed by TNT explosions.=Ten blok nie będzie zniszczony przez eksplozję trotylu. -This block drops itself when mined by shears.=Ten blok wyrzuca siebie gdy wykopany nożycami. -@1×@2=@1×@2 -This blocks drops the following when mined by shears: @1=Ten blok wyrzuca siebie gdy wykopany nożycami. -, =, -• Shears=• Nożyce -• Sword=• Miecz -• Hand=• Ręka -This is a melee weapon which deals damage by punching.=To jest broń ręczna która zadaje obrażenia przy uderzenia. -Maximum damage: @1 HP=Maksymalne obrażenia: @1 HP -Full punch interval: @1 s=Pełny okres uderzenia: @1 s -This tool is capable of mining.=To narzędzie jest w stanie kopać. -Mining speed: @1=Szybkość kopania: @1 -Painfully slow=Boleśnie powolne -Very slow=Bardzo wolne -Slow=Wolne -Fast=Szybkie -Very fast=Bardzo szybkie -Extremely fast=Ekstremalnie szybkie -Instantaneous=Natychmiastowe -@1 uses=@1 użyć -Unlimited uses=Nielimitowane użycia -Block breaking strength: @1=Siła niszczenia bloku: @1 -Mining durability: @1=Wytrzymałość kopania: @1 -Armor points: @1=Punkty zbroi: @1 -Armor durability: @1=Wytrzymałość zbroi: @1 -It can be worn on the head.=Może być noszony na głowie. -It can be worn on the torso.=Może być noszone na piersi. -It can be worn on the legs.=Może być noszony na nogach. -It can be worn on the feet.=Może być noszony na stopach. - diff --git a/mods/HELP/mcl_doc/locale/mcl_doc.ru.tr b/mods/HELP/mcl_doc/locale/mcl_doc.ru.tr deleted file mode 100644 index 2deeb8e73..000000000 --- a/mods/HELP/mcl_doc/locale/mcl_doc.ru.tr +++ /dev/null @@ -1,79 +0,0 @@ -# textdomain: mcl_doc -Water can flow into this block and cause it to drop as an item.=Вода может затечь в этот блок и вызвать его выпадение в качестве предмета. -This block can be turned into dirt with a hoe.=Этот блок можно превратить в грязь с помощью мотыги. -This block can be turned into farmland with a hoe.=Этот блок можно превратить в грядку с помощью мотыги. -This block acts as a soil for all saplings.=Этот блок служит почвой для всех саженцев. -This block acts as a soil for some saplings.=Этот блок служит почвой для некоторых саженцев. -Sugar canes will grow on this block.=На этом блоке будет расти сахарный тростник. -Nether wart will grow on this block.=Адский нарост будет расти на этом блоке. -This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.=Этот блок быстро разрушается, когда на расстоянии @1 нет древесных блоков любого вида. При распаде он исчезает и может уронить одну из своих обычных капель. Блок не разрушается, если он размещен игроком. -This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.=Этот блок быстро распадается и исчезает, если на расстоянии @1 нет древесных блоков любого типа. Блок не разрушается, если он размещен игроком. -This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Это растение может расти только на блоках травы и грязи. Чтобы выжить, ему нужно иметь беспрепятственный обзор неба или подвергаться воздействию света уровня 8 или выше. -This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Это растение может расти на блоках травы, подзола и твёрдой грязи. Чтобы выжить, ему нужно иметь беспрепятственный обзор неба или подвергаться воздействию света уровня 8 или выше. -This block is flammable.=Этот блок легковоспламеним. -This block destroys any item it touches.=Этот блок уничтожает всё, к чему прикасается. -To eat it, wield it, then rightclick.=Чтобы съесть это, возьмите в руки и кликните правой клавишей. -You can eat this even when your hunger bar is full.=Вы можете есть это, даже когда ваша полоска голода заполнена. -You cannot eat this when your hunger bar is full.=Вы не можете есть это, когда ваша полоска голода заполнена. -To drink it, wield it, then rightclick.=Чтобы выпить это, возьмите его в руки и кликните правой клавишей мыши. -You cannot drink this when your hunger bar is full.=Вы не можете пить это, когда ваша полоска голода заполнена. -To consume it, wield it, then rightclick.=Чтобы употребить это, возьмите в руки и кликните правой клавишей мыши. -You cannot consume this when your hunger bar is full.=Вы не можете употребить это, когда ваша полоска голода заполнена. -You have to wait for about 2 seconds before you can eat or drink again.=Вам нужно подождать 2 секунды, прежде чем снова пить или есть. -Hunger points restored: @1=Восстановлено единиц голода: @1 -Saturation points restored: @1%.1f=Восстановлено единиц сытости: @1 -This item can be repaired at an anvil with: @1.=Этот предмет можно починить на наковальне при помощи: @1. -This item can be repaired at an anvil with any wooden planks.=Этот предмет можно починить на наковальне с помощью любых деревянных досок. -This item can be repaired at an anvil with any item in the “@1” group.=Этот предмет можно починить на наковальне с помощью любого предмета из группы “@1”. -This item cannot be renamed at an anvil.=Этот предмет нельзя починить в наковальне. -This block crushes any block it falls into.=Этот блок сокрушает любой блок, на который падает. -When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.=Когда этот блок падает 1 блока, то наносит урон задеваемому игроку. Повреждение составляет B×2–2 единиц удара, где B @= количество упавших блоков. Урон не может превышать 40 HP. -Diamond Pickaxe=Алмазная кирка -Iron Pickaxe=Железная кирка -Stone Pickaxe=Каменная кирка -Golden Pickaxe=Золотая кирка -Wooden Pickaxe=Деревянная кирка -Diamond Axe=Алмазный топор -Iron Axe=Железный топор -Stone Axe=Каменный топор -Golden Axe=Золотой топор -Wooden Axe=Деревянный топор -Diamond Shovel=Алмазная лопата -Iron Shovel=Железная лопата -Stone Shovel=Каменная лопата -Golden Shovel=Золотая лопата -Wooden Shovel=Деревянная лопата -This block can be mined by any tool instantly.=Этот блок можно мгновенно добыть любым инструментом. -This block can be mined by:=Этот блок можно добыть при помощи: -Hardness: ∞=Твердость: ∞ -Hardness: @1=Твердость: @1 -This block will not be destroyed by TNT explosions.=Этот блок не уничтожат взрывы тротила. -This block drops itself when mined by shears.=Этот блок сбрасывается сам при добыче ножницами. -@1×@2=@1×@2 -This blocks drops the following when mined by shears: @1=Этот блок при добыче ножницами выбрасывает следующее: @1 -, = , -• Shears=• Ножницы -• Sword=• Меч -• Hand=• Рука -This is a melee weapon which deals damage by punching.=Это оружие ближнего боя, оно наносит урон при ударе. -Maximum damage: @1 HP=Максимальный урон: @1 HP -Full punch interval: @1 s=Интервал полного удара: @1 с -This tool is capable of mining.=Этим инструментом можно добывать -Mining speed: @1=Скорость добычи: @1 -Painfully slow=Мучительно медленно -Very slow=Очень медленно -Slow=Медленно -Fast=Быстро -Very fast=Очень быстро -Extremely fast=Ужасно быстро -Instantaneous=Мгновенно -@1 uses=@1 раз(а) -Unlimited uses=не ограничено -Block breaking strength: @1=Прочность блока на разрыв: @1 -Mining durability: @1=Долговечность при добыче: @1 -Armor points: @1=Эффективность защиты: @1 -Armor durability: @1=Долговечность защиты: @1 -It can be worn on the head.=Это можно носить на голове. -It can be worn on the torso.=Это можно носить на теле. -It can be worn on the legs.=Это можно носить на ногах. -It can be worn on the feet.=Это можно носить на ступнях. diff --git a/mods/HELP/mcl_doc/locale/template.txt b/mods/HELP/mcl_doc/locale/template.txt deleted file mode 100644 index de652f05e..000000000 --- a/mods/HELP/mcl_doc/locale/template.txt +++ /dev/null @@ -1,79 +0,0 @@ -# textdomain: mcl_doc -Water can flow into this block and cause it to drop as an item.= -This block can be turned into dirt with a hoe.= -This block can be turned into farmland with a hoe.= -This block acts as a soil for all saplings.= -This block acts as a soil for some saplings.= -Sugar canes will grow on this block.= -Nether wart will grow on this block.= -This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.= -This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.= -This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.= -This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.= -This block is flammable.= -This block destroys any item it touches.= -To eat it, wield it, then rightclick.= -You can eat this even when your hunger bar is full.= -You cannot eat this when your hunger bar is full.= -To drink it, wield it, then rightclick.= -You cannot drink this when your hunger bar is full.= -To consume it, wield it, then rightclick.= -You cannot consume this when your hunger bar is full.= -You have to wait for about 2 seconds before you can eat or drink again.= -Hunger points restored: @1= -Saturation points restored: @1%.1f= -This item can be repaired at an anvil with: @1.= -This item can be repaired at an anvil with any wooden planks.= -This item can be repaired at an anvil with any item in the “@1” group.= -This item cannot be renamed at an anvil.= -This block crushes any block it falls into.= -When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.= -Diamond Pickaxe= -Iron Pickaxe= -Stone Pickaxe= -Golden Pickaxe= -Wooden Pickaxe= -Diamond Axe= -Iron Axe= -Stone Axe= -Golden Axe= -Wooden Axe= -Diamond Shovel= -Iron Shovel= -Stone Shovel= -Golden Shovel= -Wooden Shovel= -This block can be mined by any tool instantly.= -This block can be mined by:= -Hardness: ∞= -Hardness: @1= -This block will not be destroyed by TNT explosions.= -This block drops itself when mined by shears.= -@1×@2= -This blocks drops the following when mined by shears: @1= -, = -• Shears= -• Sword= -• Hand= -This is a melee weapon which deals damage by punching.= -Maximum damage: @1 HP= -Full punch interval: @1 s= -This tool is capable of mining.= -Mining speed: @1= -Painfully slow= -Very slow= -Slow= -Fast= -Very fast= -Extremely fast= -Instantaneous= -@1 uses= -Unlimited uses= -Block breaking strength: @1= -Mining durability: @1= -Armor points: @1= -Armor durability: @1= -It can be worn on the head.= -It can be worn on the torso.= -It can be worn on the legs.= -It can be worn on the feet.= diff --git a/mods/HELP/mcl_doc/mod.conf b/mods/HELP/mcl_doc/mod.conf deleted file mode 100644 index d939761d5..000000000 --- a/mods/HELP/mcl_doc/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_doc -author = Wuzzy -description = This MineClone 2 mod sets up and configures the Help modpack mods to tailor the help towards MineClone 2. -depends = doc, doc_items diff --git a/mods/HELP/mcl_doc_basics/README.md b/mods/HELP/mcl_doc_basics/README.md deleted file mode 100644 index 13ac04e4a..000000000 --- a/mods/HELP/mcl_doc_basics/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Basic help, MineClone 2 edition [`mcl_doc_basics`] -Adds basic help texts about Minetest, controls, gameplay and other basics. -This mod uses the Documentation System [`doc`] as a basis and adds these -categories: - -* Basics: Basic gameplay information (e.g. how to craft) -* Advanced usage: Advanced Minetest information (not gameplay-releavant) for power users (e.g. how to use commands) - -## License -Everything in this mod is licensed under the MIT License. diff --git a/mods/HELP/mcl_doc_basics/init.lua b/mods/HELP/mcl_doc_basics/init.lua deleted file mode 100644 index 45ce75877..000000000 --- a/mods/HELP/mcl_doc_basics/init.lua +++ /dev/null @@ -1,753 +0,0 @@ ---[[ -Basic help for MCL2. Fork of doc_basics -]] - -local S = minetest.get_translator(minetest.get_current_modname()) - -doc.add_category("basics", -{ - name = S("Basics"), - description = S("Everything you need to know to get started with playing"), - sorting = "custom", - sorting_data = {"quick_start", "controls", "point", "items", "inventory", "hotbar", "tools", "weapons", "nodes", "mine", "build", "craft", "cook", "hunger", "mobs", "animals", "minimap", "cam", "sneak", "players", "liquids", "light", "groups", "glossary", "minetest"}, - build_formspec = doc.entry_builders.text_and_gallery, -}) - -doc.add_category("advanced", -{ - name = S("Advanced usage"), - description = S("Advanced information which may be nice to know, but is not crucial to gameplay"), - sorting = "custom", - sorting_data = {"creative", "console", "commands", "privs", "movement_modes", "coordinates", "settings", "online"}, - build_formspec = doc.entry_builders.text_and_gallery, -}) - -doc.add_entry("basics", "quick_start", { - name = S("Quick start"), - data = { text = -S("This is a very brief introduction to the basic gameplay:").."\n\n".. - -S("• Move mouse to look").."\n".. -S("• [W], [A], [S] and [D] to move").."\n".. -S("• [E] to sprint").."\n".. -S("• [Space] to jump or move upwards").."\n".. -S("• [Shift] to sneak or move downwards").."\n".. -S("• Mouse wheel or [1]-[9] to select item").."\n".. -S("• Left-click to mine blocks or attack").."\n".. -S("• Recover from swings to deal full damage").."\n".. -S("• Right-click to build blocks and use things").."\n".. -S("• [I] for the inventory").."\n".. -S("• First items in inventory appear in hotbar below").."\n".. -S("• Read entries in this help to learn the rest").."\n".. -S("• [Esc] to close this window").."\n\n".. - -S("How to play:").."\n".. -S("• Punch a tree trunk until it breaks and collect wood").."\n".. -S("• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks").."\n".. -S("• Place them in a 2×2 shape in the crafting grid to craft a crafting table").."\n".. -S("• Place the crafting table on the ground").."\n".. -S("• Rightclick it for a 3×3 crafting grid").."\n".. -S("• Use the crafting guide (book icon) to learn all the possible crafting recipes").."\n".. -S("• Craft a wooden pickaxe so you can dig stone").."\n".. -S("• Different tools break different kinds of blocks. Try them out!").."\n".. -S("• Read entries in this help to learn the rest").."\n".. -S("• Continue playing as you wish. There's no goal. Have fun!") -}}) - -doc.add_entry("basics", "minetest", { - name = S("Minetest"), - data = { - text = -S("Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).").."\n\n".. - -S("The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.").."\n\n".. - -S("A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.").."\n\n".. - -S("Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.").."\n\n".. - -S("Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums ."), - - images = {{image="doc_basics_gameplay_mtg_1.png"}, {image="doc_basics_gameplay_mtg_2.png"}, {image="doc_basics_gameplay_carbone_ng.png"}, {image="doc_basics_gameplay_lott.png"}, {image="doc_basics_gameplay_pixture.png"}, {image="doc_basics_gameplay_outback.png"}, {image="doc_basics_gameplay_moontest.png"}, -{image="doc_basics_gameplay_hades.png"}, {image="doc_basics_gameplay_xtraores_xtension.png"},} -}}) - -doc.add_entry("basics", "sneak", { - name = S("Sneaking"), - data = { text = -S("Sneaking makes you walk slower and prevents you from falling off the edge of a block.").."\n".. -S("To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!").."\n\n".. - -S("• Sneak: [Shift]").."\n\n".. - -S("Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.").."\n\n".. - -S("Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges."), - images = { { image = "doc_basics_sneak.png" } }, -}}) - -doc.add_entry("basics", "controls", { - name = S("Controls"), - data = { text = -S("These are the default controls:").."\n\n".. - -S("Basic movement:").."\n".. -S("• Moving the mouse around: Look around").."\n".. -S("• W: Move forwards").."\n".. -S("• A: Move to the left").."\n".. -S("• D: Move to the right").."\n".. -S("• S: Move backwards").."\n".. -S("• E: Sprint").."\n\n".. - -S("While standing on solid ground:").."\n".. -S("• Space: Jump").."\n".. -S("• Shift: Sneak").."\n\n".. - -S("While on a ladder, swimming in a liquid or fly mode is active").."\n".. -S("• Space: Move up").."\n".. -S("• Shift: Move down").."\n\n".. - -S("Extended movement (requires privileges):").."\n".. -S("• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)").."\n".. -S("• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)").."\n".. -S("• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)").."\n".. -S("• E: Walk fast in fast mode").."\n\n".. - -S("World interaction:").."\n".. -S("• Left mouse button: Punch / mine blocks").."\n".. -S("• Right mouse button: Build or use pointed block").."\n".. -S("• Shift+Right mouse button: Build").."\n".. -S("• Roll mouse wheel / B / N: Select next/previous item in hotbar").."\n".. -S("• 1-9: Select item in hotbar directly").."\n".. -S("• Q: Drop item stack").."\n".. -S("• Shift+Q: Drop 1 item").."\n".. -S("• I: Show/hide inventory menu").."\n\n".. - -S("Inventory interaction:").."\n".. -S("See the entry “Basics > Inventory”.").."\n\n".. - -S("Camera:").."\n".. -S("• Z: Zoom").."\n".. -S("• F7: Toggle camera mode").."\n\n".. - -S("Interface:").."\n".. -S("• Esc: Open menu window (pauses in single-player mode) or close window").."\n".. -S("• F1: Show/hide HUD").."\n".. -S("• F2: Show/hide chat").."\n".. -S("• F9: Toggle minimap").."\n".. -S("• Shift+F9: Toggle minimap rotation mode").."\n".. -S("• F10: Open/close console/chat log").."\n".. -S("• F12: Take a screenshot").."\n\n".. - -S("Server interaction:").."\n".. -S("• T: Open chat window (chat requires the “shout” privilege)").."\n".. -S("• /: Start issuing a server command").."\n\n".. - -S("Technical:").."\n".. -S("• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)").."\n".. -S("• +: Increase minimal viewing distance").."\n".. -S("• -: Decrease minimal viewing distance").."\n".. -S("• F3: Enable/disable fog").."\n".. -S("• F5: Enable/disable debug screen which also shows your coordinates").."\n".. -S("• F6: Only useful for developers. Enables/disables profiler") -}}) - -doc.add_entry("basics", "players", { - name = S("Players"), - data = { - text = -S("Players (actually: “player characters”) are the characters which users control.").."\n\n".. - -S("Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).").."\n".. -S("Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.").."\n".. - -S("Players can take damage for a variety of reasons, here are some:").."\n\n".. - -S("• Taking fall damage").."\n".. -S("• Touching a block which causes direct damage").."\n".. -S("• Drowning").."\n".. -S("• Being attacked by another player").."\n".. -S("• Being attacked by a computer enemy").."\n\n".. - -S("At a health of 0, the player dies. The player can just respawn in the world.").."\n".. -S("Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.").."\n\n".. - -S("Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.").."\n\n".. - -S("Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.").."\n\n".. - -S("In multi-player mode, the name of other players is written above their head."), - images = {{image="doc_basics_players_sam.png"}, {image="doc_basics_players_lott.png"}, {image="doc_basics_players_flat.png"}}, -}}) - -doc.add_entry("basics", "items", { - name = S("Items"), - data = { - text = -S("Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.").."\n\n".. - -S("An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.").."\n\n".. - -S("Items have several properties, including the following:").."\n\n".. - -S("• Maximum stack size: Number of items which fit on 1 item stack").."\n".. -S("• Pointing range: How close things must be to be pointed while wielding this item").."\n".. -S("• Group memberships: See “Basics > Groups”").."\n".. -S("• May be used for crafting or cooking"), - --- MCL2: Items cannot be taken by punching - images = {{image="doc_basics_inventory_detail.png"}, {image="doc_basics_items_dropped.png"}}, -}}) - -doc.add_entry("basics", "tools", { - name = S("Tools"), - data = { text = -S("Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.").."\n\n".. - -S("A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.").."\n\n".. - -S("When nothing is wielded, players use their hand which may act as tool and weapon.").."\n\n".. - -S("Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”."), - images = {{image="doc_basics_tools.png"}, {image="doc_basics_tools_mining.png"}}, -}}) - -doc.add_entry("basics", "weapons", { - name = S("Weapons"), - data = { text = -S("Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.").."\n\n".. - -S("Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:").."\n".. -S("• Single punch: Left-click once to deal a single punch").."\n".. -S("• Quick punching: Hold down the left mouse button to deal quick repeated punches").."\n\n".. - -S("There are two core attributes of melee weapons:").."\n".. -S("• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered").."\n".. -S("• Full punch interval: Time it takes for fully recovering from a punch").."\n\n".. - -S("A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.").."\n\n".. - -S("There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.") -}}) - - -doc.add_entry("basics", "point", { - name = S("Pointing"), - data = { - text = -S("“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.").."\n\n".. - -S("To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.").."\n\n".. - -S("A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items."), - images = {{ image = "doc_basics_pointing.png" }}, -}}) - -doc.add_entry("basics", "cam", { - name = S("Camera"), - data = { - text = -S("There are 3 different views which determine the way you see the world. The modes are:").."\n\n".. - -S("• 1: First-person view (default)").."\n".. -S("• 2: Third-person view from behind").."\n".. -S("• 3: Third-person view from the front").."\n\n".. - -S("You can change the camera mode by pressing [F7].").."\n".. -S("You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.").."\n".. -S("Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.").."\n\n".. - -S("• Switch camera mode: [F7]").."\n".. -S("• Zoom: [Z]"), - images = {{image="doc_basics_camera_ego.png"}, {image="doc_basics_camera_behind.png"}, {image="doc_basics_camera_front.png"}} -}}) - -doc.add_entry("basics", "nodes", { - name = S("Blocks"), - data = { - text = -S("The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.").."\n\n".. - -S("Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:").."\n\n".. - -S("• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely").."\n".. -S("• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools").."\n".. -S("• Mining properties: By which tools it can be mined, how fast and how much it wears off tools").."\n".. -S("• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys").."\n".. -S("• Drowning damage: See the entry “Basics > Player”").."\n".. -S("• Liquids: See the entry “Basics > Liquids”").."\n".. -S("• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more"), - images = {{image="doc_basics_nodes.png"}} -}}) - -doc.add_entry("basics", "mine", { - name = S("Mining"), - data = { - text = --- Text changed for MCL2 -S("Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.").."\n\n".. - -S("Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.") .. "\n\n".. - -S("After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:").."\n".. -S("• Always drops itself (the usual case)").."\n".. -S("• Always drops the same items").."\n".. -S("• Drops items based on probability").."\n".. -S("• Drops nothing"), -}}) - -doc.add_entry("basics", "build", { - name = S("Building"), - data = { - text = -S("Almost all blocks can be built (or placed). Building is very simple and has no delay.").."\n\n".. - -S("To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.").."\n\n".. - -S("Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.").."\n\n".. - -S("Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced."), - images = {{image="doc_basics_build.png"}}, -}}) - - - -doc.add_entry("basics", "liquids", { - name = S("Liquids"), - data = { - text = -S("Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.").."\n\n".. - -S("Liquids usually come in two forms: In source form (S) and in flowing form (F).").."\n".. -S("Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.").."\n".. -S("Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.").."\n".. - -S("All liquids share the following properties:").."\n".. -S("• All properties of blocks (including drowning damage)").."\n".. -S("• Renewability: Renewable liquids can create new sources").."\n".. -S("• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2").."\n".. -S("• Viscosity: How slow players move through it and how slow the liquid spreads").."\n\n".. - -S("Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:").."\n".. -S("• Two renewable liquid blocks of the same type touch each other diagonally").."\n".. -S("• These blocks are also on the same height").."\n".. -S("• One of the two “corners” is open space which allows liquids to flow in").."\n\n".. - -S("When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).").."\n\n".. - -S("Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.").."\n\n".. - -S("The physics for swimming and diving in a liquid are:").."\n".. -S("• The higher the viscosity, the slower you move").."\n".. -S("• If you rest, you'll slowly sink").."\n".. -S("• There is no fall damage for falling into a liquid as such").."\n".. -S("• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage").."\n\n".. - -S("Liquids are often not pointable. But some special items are able to point all liquids."), - images = { - { image="doc_basics_liquids_types.png", - caption="A source liquid and its flowing liquids" }, - { image="doc_basics_liquids_renewable_1.png", - caption="Renewable liquids need to be arranged like this to create a new source block" }, - { image="doc_basics_liquids_renewable_2.png", - caption="A new liquid source is born" }, - { image="doc_basics_liquids_nonrenewable.png", - caption="Non-renewable liquids creates a flowing liquid (F) instead" }, - { image="doc_basics_liquids_range.png", - caption="Liquid with a flowing range of 2" }, - }, - }, -}) - -doc.add_entry("basics", "craft", { - name = S("Crafting"), - data = { - text = -S("Crafting is the task of combining several items to form a new item.").."\n\n".. - -S("To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.").."\n\n".. - -S("To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.").."\n\n".. - -S("A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).").."\n\n".. - -S("Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.").."\n\n".. - -S("There are multiple types of crafting recipes:").."\n\n".. - -S("• Shaped (image 2): Items need to be placed in a particular shape").."\n".. -S("• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)").."\n".. -S("• Cooking: Explained in “Basics > Cooking”").."\n".. --- MCL2 change: call out specific repair percentage -S("• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%").."\n\n".. - -S("In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.").."\n\n".. - -S("Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item."), - images = { - {image="doc_basics_craft_grid.png"}, {image="doc_basics_craft_shaped.png"}, - {image="doc_basics_craft_shapeless_1.png"}, {image="doc_basics_craft_shapeless_2.png"}, {image="doc_basics_craft_repair.png"}, - {image="doc_basics_craft_groups_1.png"}, {image="doc_basics_craft_groups_2.png"}, {image="doc_basics_craft_groups_3.png"}, - }, -}}) - -doc.add_entry("basics", "cook", { - name = S("Cooking"), - data = { - text = -S("Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.").."\n\n".. - -S("Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.").."\n\n".. - -S("Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.") -}}) - -doc.add_entry("basics", "hotbar", { - name = S("Hotbar"), - data = { - text = -S("At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.").."\n".. -S("You can change the selected item with the mouse wheel or the keyboard.").."\n\n".. - -S("• Select previous item in hotbar: [Mouse wheel up] or [B]").."\n".. -S("• Select next item in hotbar: [Mouse wheel down] or [N]").."\n".. -S("• Select item in hotbar directly: [1]-[9]").."\n\n".. - -S("The selected item is also your wielded item."), - images = {{image="doc_basics_hotbar.png"}, {image="doc_basics_hotbar_relations.png"}}, -}}) - -doc.add_entry("basics", "minimap", { - name = S("Minimap"), - data = { - text = -S("If you have a map item in any of your hotbar slots, you can use the minimap.").."\n\n".. - -S("Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.").."\n\n".. - -S("There are 2 minimap modes and 3 zoom levels.").."\n\n".. - -S("Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.").."\n\n".. - -S("Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.").."\n\n".. - -S("There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.").."\n\n".. - -S("In some games, the minimap may be disabled.").."\n\n".. - -S("• Toggle minimap mode: [F9]").."\n".. -S("• Toggle minimap rotation mode: [Shift]+[F9]"), - images = {{image="doc_basics_minimap_map.png"}, {image="doc_basics_minimap_radar.png"}, {image="doc_basics_minimap_round.png"}}, -}}) - -doc.add_entry("basics", "inventory", { - name=S("Inventory"), - data = { - text = -S("Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.").."\n".. -S("You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.").."\n".. -S("Blocks can also have their own inventory, e.g. chests and furnaces.").."\n\n".. - -S("Inventory controls:").."\n\n".. - -S("Taking: You can take items from an occupied slot if the cursor holds nothing.").."\n".. -S("• Left click: take entire item stack").."\n".. -S("• Right click: take half from the item stack (rounded up)").."\n".. -S("• Middle click: take 10 items from the item stack").."\n".. -S("• Mouse wheel down: take 1 item from the item stack").."\n\n".. - -S("Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.").."\n".. -S("• Left click: put entire item stack").."\n".. -S("• Right click or mouse wheel up: put 1 item of the item stack").."\n".. -S("• Middle click: put 10 items of the item stack").."\n\n".. - -S("Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.").."\n".. -S("• Click: exchange item stacks").."\n\n".. - -S("Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.").."\n\n".. - -S("Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.").."\n".. -S("• Sneak+Left click: Automatically transfer item stack"), - images = {{image="doc_basics_inventory.png"}} -}}) - -doc.add_entry("advanced", "online", { - name = S("Online help"), - data = { text= -S("You may want to check out these online resources related to Minetest:").."\n\n".. - -S("Official homepage of Minetest: ").."\n".. -S("The main place to find the most recent version of Minetest.").."\n\n".. - -S("Community wiki: ").."\n".. -S("A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.").."\n\n".. - -S("Web forums: ").."\n".. -S("A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.").."\n\n".. - -S("Chat: ").."\n".. -S("A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.") -}}) - -doc.add_entry("basics", "groups", { - name = S("Groups"), - data = { - text = -S("Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:").."\n\n".. - -S("• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups").."\n".. -S("• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups").."\n".. -S("• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group").."\n".. -S("• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”").."\n".. -S("• Other uses").."\n\n".. - -S("In the item help, many important groups are usually mentioned and explained.") -}}) - -doc.add_entry("basics", "glossary", { - name = S("Glossary"), - data = { - text = -S("This is a list of commonly used terms:").."\n\n".. - -S("Controls:").."\n".. -S("• Wielding: Holding an item in hand").."\n".. -S("• Pointing: Looking with the crosshair at something in range").."\n".. -S("• Dropping: Throwing an item or item stack to the ground").."\n".. -S("• Punching: Attacking with left-click, is also used on blocks").."\n".. -S("• Sneaking: Walking slowly while (usually) avoiding to fall over edges").."\n".. -S("• Climbing: Moving up or down a climbable block").."\n\n".. - -S("Blocks:").."\n".. -S("• Block: Cubes that the worlds are made of").."\n".. -S("• Mining/digging: Using a mining tool to break a block").."\n".. -S("• Building/placing: Putting a block somewhere").."\n".. -S("• Drop: Items you get after mining a block").."\n".. -S("• Using a block: Right-clicking a block to access its special function").."\n\n".. - -S("Items:").."\n".. -S("• Item: A single thing that players can possess").."\n".. -S("• Item stack: A collection of items of the same kind").."\n".. -S("• Maximum stack size: Maximum amount of items in an item stack").."\n".. -S("• Slot / inventory slot: Can hold one item stack").."\n".. -S("• Inventory: Provides several inventory slots for storage").."\n".. -S("• Player inventory: The main inventory of a player").."\n".. -S("• Tool: An item which you can use to do special things with when wielding").."\n".. -S("• Range: How far away things can be to be pointed by an item").."\n".. -S("• Mining tool: A tool which allows to break blocks").."\n".. -S("• Craftitem: An item which is (primarily or only) used for crafting").."\n\n".. - -S("Gameplay:").."\n".. -S("• “heart”: A single health symbol, indicates 2 HP").."\n".. -S("• “bubble”: A single breath symbol, indicates 1 BP").."\n".. -S("• HP: Hit point (equals half 1 “heart”)").."\n".. -S("• BP: Breath point, indicates breath when diving").."\n".. -S("• Mob: Computer-controlled enemy").."\n".. -S("• Crafting: Combining multiple items to create new ones").."\n".. -S("• Crafting guide: A helper which shows available crafting recipes").."\n".. -S("• Spawning: Appearing in the world").."\n".. -S("• Respawning: Appearing again in the world after death").."\n".. -S("• Group: Puts similar things together, often affects gameplay").."\n".. -S("• noclip: Allows to fly through walls").."\n\n".. - -S("Interface").."\n".. -S("• Hotbar: Inventory slots at the bottom").."\n".. -S("• Statbar: Indicator made out of half-symbols, used for health and breath").."\n".. -S("• Minimap: The map or radar at the top right").."\n".. -S("• Crosshair: Seen in the middle, used to point at things").."\n\n".. - -S("Online multiplayer:").."\n".. -S("• PvP: Player vs Player. If active, players can deal damage to each other").."\n".. -S("• Griefing: Destroying the buildings of other players against their will").."\n".. -S("• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside").."\n\n".. - -S("Technical terms:").."\n".. -S("• Minetest: This game engine").."\n".. -S("• Minetest Game: A game for Minetest by the Minetest developers").."\n".. -S("• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar").."\n".. -S("• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them").."\n".. -S("• Privilege: Allows a player to do something").."\n".. -S("• Node: Other word for “block”") -}}) - -doc.add_entry("advanced", "settings", { - name = S("Settings"), - data = { - text = -S("There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.").."\n\n".. - -S("These are a few of the most important gameplay settings:").."\n\n".. - -S("• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal").."\n".. -S("• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.").."\n".. -S("• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other").."\n\n".. - -S("For a full list of all available settings, use the “All Settings” dialog in the main menu.") -}}) - -doc.add_entry("advanced", "movement_modes", { - name = S("Movement modes"), - data = { text = -S("You can enable some special movement modes that change how you move.").."\n\n".. - -S("Pitch movement mode:").."\n".. -S("• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.").."\n".. -S("• Default key: [L]").."\n".. -S("• No privilege required").."\n\n".. - -S("Fast mode:").."\n".. -S("• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.").."\n".. -S("• Default key: [J]").."\n".. -S("• Required privilege: fast").."\n\n".. - -S("Fly mode:").."\n".. -S("• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.").."\n".. -S("• Default key: [K]").."\n".. -S("• Required privilege: fly").."\n\n".. - -S("Noclip mode:").."\n".. -S("• Description: Allows you to move through walls. Only works when fly mode is enabled, too.").."\n".. -S("• Default key: [H]").."\n".. -S("• Required privilege: noclip") -}}) - -doc.add_entry("advanced", "console", { - name = S("Console"), - data = { text = -S("With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.").."\n".. -S("Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.").."\n\n".. - -S("Use the chat to communicate with other players. This requires you to have the “shout” privilege.").."\n".. -S("Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.").."\n\n".. - -S("You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .").."\n\n".. - -S("There are some special controls for the console:").."\n\n".. - -S("• [F10] Open/close console").."\n".. -S("• [Enter]: Send message or command").."\n".. -S("• [Tab]: Try to auto-complete a partially-entered player name").."\n".. -S("• [Ctrl]+[Left]: Move cursor to the beginning of the previous word").."\n".. -S("• [Ctrl]+[Right]: Move cursor to the beginning of the next word").."\n".. -S("• [Ctrl]+[Backspace]: Delete previous word").."\n".. -S("• [Ctrl]+[Delete]: Delete next word").."\n".. -S("• [Ctrl]+[U]: Delete all text before the cursor").."\n".. -S("• [Ctrl]+[K]: Delete all text after the cursor").."\n".. -S("• [Page up]: Scroll up").."\n".. -S("• [Page down]: Scroll down").."\n".. - -S("There is also an input history. Minetest saves your previous console inputs which you can quickly access later:").."\n\n".. - -S("• [Up]: Go to previous entry in history").."\n".. -S("• [Down]: Go to next entry in history") -}}) - -doc.add_entry("advanced", "commands", { - name = S("Server commands"), - data = { text = -S("Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.").."\n\n".. - -S("Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.").."\n\n".. - -S("To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.").."\n".. -S("Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.").."\n\n".. - -S("“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.").."\n\n".. - -S("Commands are followed by zero or more parameters.").."\n\n".. - -S("In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:").."\n\n".. - -S("• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter").."\n".. -S("• Anything in square brackets (e.g. “[text]”) is optional and can be omitted").."\n".. -S("• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)").."\n".. -S("• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations").."\n".. -S("• Everything else is to be read as literal text").."\n\n".. - -S("Here are some examples to illustrate the command syntax:").."\n\n".. - -S("• /mods: No parameters. Just enter “/mods”").."\n".. -S("• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”").."\n".. -S("• /give : Two parameters. Example: “/give Player default:apple”").."\n".. -S("• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”").."\n".. -S("• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”").."\n\n\n".. - - - -S("Some final remarks:").."\n\n".. - -S("• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege").."\n".. -S("• For /spawnentity you need an entity name, which is another identifier") -}}) - -doc.add_entry("advanced", "privs", { - name = S("Privileges"), - data = { text = -S("Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.").."\n\n".. - -S("On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.").."\n\n".. - -S("There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.").."\n\n".. - -S("To view your own privileges, issue the server command “/privs”.").."\n\n".. - -S("Here are a few basic privilege-related commands:").."\n\n".. - -S("• /privs: Lists your privileges").."\n".. -S("• /privs : Lists the privileges of ").."\n".. -S("• /help privs: Shows a list and description about all privileges").."\n\n".. - -S("Players with the “privs” privilege can modify privileges at will:").."\n\n".. - -S("• /grant : Grant to ").."\n".. -S("• /revoke : Revoke from ").."\n\n".. - -S("In single-player mode, you can use “/grantme all” to unlock all abilities.") -}}) - -doc.add_entry("basics", "light", { - name = S("Light"), - data = { text = -S("As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).").."\n\n".. - -S("There are two types of light: Sunlight and artificial light.").."\n\n".. - -S("Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.").."\n".. -S("Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.").."\n\n".. - -S("Blocks have 3 levels of transparency:").."\n\n".. - -S("• Transparent: Sunlight goes through limitless, artificial light goes through with losses").."\n".. -S("• Semi-transparent: Sunlight and artificial light go through with losses").."\n".. -S("• Opaque: No light passes through").."\n\n".. - -S("Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).").."\n".. -S("Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.").."\n\n".. - -S("Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side."), - images = {{image="doc_basics_light_torch.png"}, {image="doc_basics_light_test.png"}} -}}) - -doc.add_entry("advanced", "coordinates", { - name = S("Coordinates"), - data = { text = -S("The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.").."\n\n".. - -S("Like this: (5, 45, -12)").."\n\n".. - -S("This refers to the position where X=5, Y=45 and Z=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.").."\n\n".. - -S("The values for X, Y and Z work like this:").."\n\n".. - -S("• If you go up, Y increases").."\n".. -S("• If you go down, Y decreases").."\n".. -S("• If you follow the sun, X increases").."\n".. -S("• If you go to the reverse direction, X decreases").."\n".. -S("• Follow the sun, then go right: Z increases").."\n".. -S("• Follow the sun, then go left: Z decreases").."\n".. -S("• The side length of a full cube is 1").."\n\n".. - -S("You can view your current position in the debug screen (open with [F5]).") -}}) - -dofile(minetest.get_modpath(minetest.get_current_modname()).."/mcl_extension.lua") diff --git a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.de.tr b/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.de.tr deleted file mode 100644 index 236d5a6bb..000000000 --- a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.de.tr +++ /dev/null @@ -1,511 +0,0 @@ -# textdomain: mcl_doc_basics -Basics=Grundlagen -Everything you need to know to get started with playing=Alles, was Sie zum Spielen wissen sollten -Advanced usage=Fortgeschrittenes -Advanced information which may be nice to know, but is not crucial to gameplay=Fortgeschrittene Informationen, die nett zu wissen sind, aber nicht kritisch für das reguläre Spiel -Quick start=Schnellstart -This is a very brief introduction to the basic gameplay:=Hier ist eine sehr kurze Einführung ins Spiel: -• Move mouse to look=• Mausbewegung zum Umsehen -• [W], [A], [S] and [D] to move=• [W], [A], [S] und [D] zum Bewegen -• [E] to sprint=• [E] zum Sprinten -• [Space] to jump or move upwards=• [Leertaste] zum Springen oder für Aufwärtsbewegung -• [Shift] to sneak or move downwards=• [Umschalt] zum Schleichen oder für Abwärtsbewegung -• Mouse wheel or [1]-[9] to select item=• Mausrad oder [1]-[9], um Gegenstand zu wählen -• Left-click to mine blocks or attack=• Linksklick, um Blöcke abzubauen oder anzugreifen -• Recover from swings to deal full damage=• Warten Sie Schwünge ganz ab, um vollen Schaden anzurichten -• Right-click to build blocks and use things=• Rechtsklick, um Blöcke zu bauen und Dinge zu benutzen -• [I] for the inventory=• [I] für das Inventar -• First items in inventory appear in hotbar below=• Die ersten Gegenstände im Inventar tauchen in der Schnellleiste unten auf -• [F9] for the minimap=• [F9] für die Übersichtskarte -• Put items into crafting grid (usually 3×3 grid) to craft=• Legen Sie Gegenstände ins Fertigungsgitter (normalerweise 3×3-Gitter) zum Fertigen -• Use a crafting guide mod to learn crafting recipes or visit =• Benutzen Sie eine Mod mit Fertigungsführer, um die Fertigungsrezepte zu erlernen oder besuchen Sie -• Read entries in this help to learn the rest=• Lesen Sie Einträge in dieser Hilfe, um den Rest zu lernen -• [Esc] to close this window=• [Esc], um dieses Fenster zu schließen -How to play:=Spielanleitung -• Punch a tree trunk until it breaks and collect wood=• Hauen Sie einen Baumstamm, bis er bricht und sammeln Sie Holz auf -• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks=• Platzieren Sie das Holz in das 2×2-Gitter (Ihr „Fertigungsgitter) in Ihrem Inventar und fertigen Sie 4 Holzplanken -• Place them in a 2×2 shape in the crafting grid to craft a crafting table=• Platzieren Sie sie in eine 2×2-Form im Fertigungsgitter, um eine Werkbank zu errichten -• Place the crafting table on the ground=• Platzieren Sie die Werkbank auf den Boden -• Rightclick it for a 3×3 crafting grid=• Rechtsklicken Sie sie für ein 3×3-Fertigungsgitter -• Use the crafting guide (book icon) to learn all the possible crafting recipes=• Benutzen Sie den Fertigungsführer (Buchsymbol), um die möglichen Fertigungsrezepte zu lernen -• Craft a wooden pickaxe so you can dig stone=• Fertigen Sie eine Holzspitzhacke, damit Sie Stein graben können -• Different tools break different kinds of blocks. Try them out!=• Verschiedene Werkzeuge können verschiedene Blöcke brechen. Probieren Sie einfach! -• Read entries in this help to learn the rest=• Lesen Sie Einträge in dieser Hilfe, um den Rest zu lernen -• Continue playing as you wish. There's no goal. Have fun!=• Spielen Sie weiter, so wie sie wollen. Es gibt kein Ziel. Viel Spaß! -Minetest=Minetest -Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Minetest ist eine freie Spiel-Engine für Spiele auf Voxelbasis, inspiriert von InfiniMiner, Minecraft, und so weiter. Minetest wurde ursprünglich erfunden von Perttu Ahola (alias „celeron55“). -The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.=Der Spieler wird in eine große Welt aus Würfeln bzw. Blöcken geworfen. Aus diesen Würfeln besteht die Landschaft; sie können aufgesammelt und wieder platziert werden. Mit den aufgesammelten Gegenständen können neue Werkzeuge und andere Dinge gefertigt werden. Spiele in Minetest können aber viel komplexer sein. -A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Ein Hauptfeature in Minetest ist die eingebaute Modding-Funktionalität. Mods ändern das bestehende Spielgeschehen ab. Sie können recht einfach sein und einfach nur ein paar dekorative Blöcke hinzufügen oder sie können sehr komplex sein, indem sie z.B. völlig neue Spielkonzepte einführen, eine ganz andere Art Welt erschaffen, und viele andere Dinge. -Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=Minetest kann alleine oder online mit mehreren Spielern gespielt werden. Das Onlinespiel funktioniert mit beliebigen Mods, es muss keine Zusatzsoftware installiert werden, da die Mods komplett vom Server zur Verfügung gestellt werden. -Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums .=Minetest wird normalerweise mit einem einfachen Standardspiel ausgeliefert, es heißt „Minetest Game“ (siehe Bilder 1 und 2). Sie haben es vielleicht schon. Andere Spiele für Minetest können von den offiziellen Minetest-Foren heruntergeladen werden. -Sneaking=Schleichen -Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Schleichen verlangsamt Ihre Schritte und hindert Sie daran, vom Rand eines Blocks zu fallen. -To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Zum Schleichen halten Sie die Schleichtaste (Standard: [Umschalt]) gedrückt. Lassen Sie sie los, um nicht mehr zu schleichen. Vorsicht: Wenn sie die Taste an einer Kante loslassen, könnten sie stürzen! -• Sneak: [Shift]=• Schleichen [Umschalt] -Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=Schleichen funktioniert nur, wenn Sie auf festem Boden stehen, sich nicht in einer Flüssigkeit befinden und nicht klettern. -Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Schleichen kann von Mods deaktiviert werden. In diesem Fall gehen Sie immer noch langsamer, aber Sie werden an Kanten nicht mehr anhalten. -Controls=Steuerung -These are the default controls:=Dies ist die Standardsteuerung: -Basic movement:=Bewegen: -• Moving the mouse around: Look around=• Mausbewegung: Umsehen -• W: Move forwards=• W: Vorwärts -• A: Move to the left=• A: Links -• D: Move to the right=• D: Rechts -• S: Move backwards=• S: Rückwärts -• E: Sprint=• E: Sprint -While standing on solid ground:=Auf festem Boden: -• Space: Jump=• Leertaste: Springen -• Shift: Sneak=• Umschalt: Schleichen -While on a ladder, swimming in a liquid or fly mode is active=An einer Leiter, beim Tauchen oder im Flugmodus: -• Space: Move up=• Leertaste: Hoch -• Shift: Move down=• Umschalt: Runter -Extended movement (requires privileges):=Erweiterte Bewegung (benötigt Privilegien): -• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: Schnellmodus, damit laufen oder fliegen Sie schneller (benötigt das „fast“-Privileg) -• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: Flugmodus, damit fliegen Sie frei in alle Richtungen (benötigt das „fly“-Privileg) -• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: Geistmodus, damit fliegen durch Wände im Flugmodus (benötigt das „noclip“-Privileg) -• E: Walk fast in fast mode=• E: Schnell im Schnellmodus gehen -World interaction:=Weltinteraktion: -• Left mouse button: Punch / mine blocks=• Linke Maustaste: Schlagen / Blöcke abbauen -• Right mouse button: Build or use pointed block=• Rechte Maustaste: Bauen oder gezeigten Block benutzen -• Shift+Right mouse button: Build=• Umschalt+Rechte Maustaste: Bauen -• Roll mouse wheel / B / N: Select next/previous item in hotbar=• Mausrad drehen / B / N: Nächten/vorherigen Gegenstand in Schnellleiste wählen -• 0-9: Select item in hotbar directly=• 0-9: Gegenstand in Schnellleiste direkt wählen -• Q: Drop item stack=• Q: Gegenstandsstapel wegwerfen -• Shift+Q: Drop 1 item=• Umschalt+Q: 1 Gegenstand wegwerfen -• I: Show/hide inventory menu=• I: Inventarmenü zeigen/verbergen -Inventory interaction:=Inventarinteraktion: -See the entry “Basics > Inventory”.=Siehe Eintrag „Grundlagen > Inventar“. -Camera:=Kamera: -• Z: Zoom=• Z: Zoom -• F7: Toggle camera mode=• F7: Kameramodus wechseln -• F8: Toggle cinematic mode=• F8: Kinomodus umschalten -Interface:=Benutzeroberfläche: -• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: Menüfenster öffnen (pausiert im Einzelspielermodus) oder Fenster schließen -• F1: Show/hide HUD=• F1: Oberfläche zeigen/verbergen -• F2: Show/hide chat=• F2: Chat zeigen/verbergen -• F9: Toggle minimap=• F9: Übersichtskarte umschalten -• Shift+F9: Toggle minimap rotation mode=• Umschalt+F9: Rotationsmodus der Übersichtskarte wechseln -• F10: Open/close console/chat log=• F10: Konsole/Chatprotokoll öffnen/schließen -• F12: Take a screenshot=• Bildschirmfoto machen -Server interaction:=Serverinteraktion: -• T: Open chat window (chat requires the “shout” privilege)=• T: Chatfenster öffnen (Chat benötigt das „shout“-Privileg) -• /: Start issuing a server command=• Einen Serverbefehl eingeben -Technical:=Technisches: -• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• Weite Sicht (deaktiviert Nebel und erlaubt sehr weite Sicht, kann das Spiel enorm verlangsamen) -• +: Increase minimal viewing distance=• +: Minimale Sichtweite erhöhen -• -: Decrease minimal viewing distance=• -: Minimale Sichtweite verringern -• F3: Enable/disable fog=• F3: Nebel umschalten -• F5: Enable/disable debug screen which also shows your coordinates=• F5: Debug-Anzeige umschalten, was auch Ihre Koordinaten anzeigt -• F6: Only useful for developers. Enables/disables profiler=• F6: Nur nützlich für Entwickler. Schaltet die Profiler-Anzeige um -Players=Spieler -Players (actually: “player characters”) are the characters which users control.=Spieler (genauer: „Spielerfiguren“) sind die Figuren, die die Benutzer steuern. -Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).=Spieler sind Lebewesen. Sie starten mit ein paar Trefferpunkten (TP) und ein paar Atempunkten (AP). -Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Spieler können gehen, schleichen, springen, klettern, tauchen, graben, bauen, kämpfen und Werkzeuge und Blöcke benutzen. -At a health of 0, the player dies. The player can just respawn in the world.=Fällt die Gesundheit auf 0, stirbt der Spieler. Der Spieler kann in der Welt einfach wieder einsteigen. -Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.=Andere Konsequenzen des Todes hängen vom Spiel ab. Der Spieler könnte seinen Besitz verlieren oder eine Runde in einem Wettbewerb verlieren. -Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Einige Blöcke reduzieren den Atem. In einem Block, der den Atem reduziert, werden die Atempunkte um 1 alle 2 Sekunden reduziert. Wenn der Atem verbraucht ist, erleidet der Spieler Schaden durch Ertrinken. Der Atem wird in jedem anderen Block rasch wiederhergestellt. -Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Schaden kann in jeder Welt ausgeschaltet werden. Ohne Schaden sind Spieler unsterblich und Gesundheit und Atem spielen keine Rolle. -In multi-player mode, the name of other players is written above their head.=Im Mehrspielermodus steht der Name anderer Spieler über dem Kopf. -Items=Gegenstände -Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Gegenstände sind Dinge, die sie tragen und in Inventaren aufbewahren können. Sie können für die Fertigung, zum Schmelzen, Bauen, Graben und mehr verwendet werden. Zu Gegenständen zählen Blöcke, Werkzeuge und Gegenstände, die nur in der Fertigung benutzt werden. -An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Ein Gegenstandsstapel ist eine Sammlung von gleichen Gegenständen, die in einem Inventarplatz passen. Gegenstandsstapel können auf den Boden geworfen werden. Gegenstände, die auf die gleichen Koordinaten fallen, bilden einen Gegenstandsstapel. -A dropped item stack can be collected by punching it.=Ein fallen gelassener Gegenstandsstapel kann aufgesammelt werden, indem er geschlagen wird. -Tools=Werkzeuge -Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Einige Gegenstände können als Werkzeug fungieren, wenn man sie hält. Als Werkzeug zählt jeder Gegenstand, der einen besonderen Zweck hat, der direkt vom Träger ausgelöst werden kann. -A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Eine häufige Werkzeugart sind Grabewerkzeuge. Sie sind wichtig zum Abbauen aller möglichen Blöcke. Waffen sind eine Art Werkzeug. Es gibt natürlich viele weitere Werkzeuge. Sonderaktionen von Werkzeugen weden normalerweise mit Links- oder Rechtsklick ausgelöst. -When nothing is wielded, players use their hand which may act as tool and weapon.=Wird nichts gehalten, benutzen die Spieler ihre Hand, die als Werkzeug und Waffe herhalten kann. -Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=Viele Werkzeuge werden sich bei Benutzung abnutzen und zerbrechen früher oder später. Der Schaden wird in einer Schadensleiste unter dem Werkzeugsymbol angezeigt. Ohne diese Leiste ist das Werkzeug wie neu. Werkzeuge kann man eventuell mit einer Fertigung reparieren. -Weapons=Waffen -Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Einige Gegenstände sind als Nahkampfwaffen zu gebrauchen. Waffen teilen die meisten Eigenschaften mit Werkzeugen. -Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Nahkampfwaffen richten Schaden an, indem Spieler und andere aktive Objekte geschlagen werden. -• Single punch: Left-click once to deal a single punch=• Einzelner Schlag: Einmal links klicken -• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Schneller Schlag: Linke Maustaste gedrückt halten, um schnelle wiederholte Schläge zu machen -There are two core attributes of melee weapons:=Nahkampfwaffen haben zwei Hauptattribute: -• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered=• Höchstschaden: Schaden, der angerichtet wird, wenn die Waffe voll ausgeholt ist -• Full punch interval: Time it takes for fully recovering from a punch=• Vollschlagintervall: Zeit, die es braucht, um die Waffe nach einem Schlag wieder stabil zu halten -A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Eine Waffe macht nur den vollen Schaden, wenn sie voll ausgeholt ist, d.h. der letzte Schlag war lange genug her. Sonst macht die Waffe nur reduzierten Schaden. Das bedeutet, dass schnelle Schläge wirklich sehr schnell sind, aber geringen Schaden anrichten. Beachten Sie, dass das Vollschlagintervall nicht begrenzt, wie schnell Sie angreifen können. -There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=Es gibt eine Regel, die es manchmal unmöglich macht, Schaden anzurichten. Spieler, lebendige Objekte und Waffen gehören Schadensgruppen an. Eine Waffe macht nur Schaden auf Sachen, mit denen sie mindestens eine Schadensgruppe teilt. Wenn Sie also die falsche Waffe benutzen, können sie überhaupt keinen Schaden machen. -Pointing=Zeigen -“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.=„Zeigen“ bedeutet, dass man auf etwas mit dem Fadenkreuz in Reichweite schaut. Zeigen wird für die Interaktion benutzt, wie Graben, Schlagen, usw. Zu zeigbaren Dingen gehören Blöcke, Spieler, computergesteuerte Feinde und Objekte. -To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Um auf etwas zu zeigen, muss es sich in der Zeigereichweite (kurz „Reichweite“) Ihres gehaltenen Gegenstands befinden. Es gibt eine Standardreichweite, wenn Sie nichts halten. Ein gezeigtes Ding wird umrandet oder hervorgehoben (abhängig von Ihren Einstellungen). Zeigen ist nicht möglich mit der Dritten-Person-Vorderkamera. -A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=Ein paar Dinge können nicht gezeigt werden. Die meisten Blöcke sind zeigbar. Ein paar Blöcke, wie Luft, können niemals gezeigt werden. Andere Blöcke, wie Flüssigkeiten können nur von besonderen Gegenständen gezeigt werden. -Camera=Kamera -You can change the camera mode by pressing [F7].=Sie wechseln den Kameramodus mit [F7]. -You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.=Sie sind eventuell in der Lage, mit [Z] zum Fadenkreuz hereinzuzoomen. Damit können Sie weiter sehen. -Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.=Zoomen ist eine Spielfunktion, die vom Spiel ein- oder ausgeschaltet werden kann. Standardmäßig ist das Zoomen im Kreativmodus erlaubt, aber sonst deaktiviert. -• Switch camera mode: [F7]=• Kameramodus wechseln: [F7] -• Zoom: [Z]=• Zoom: [Z] -Blocks=Blöcke -The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Die Welt besteht aus Blöcken (oder Voxeln, um genau zu sein). Blöcke können mit den richtigen Werkzeugen gebaut oder entfernt werden. -Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=Blöcke haben eine Reihe an verschiedenen Eigenschaften, die die Abbauzeit, ihr Verhalten, Aussehen, Form und vieles mehr beeinflussen. Zu ihren Eigenschaften zählen: -• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Kollisionsfähig: Kollisionsfähige Blöcke können nicht passiert werden, Spieler können auf ihnen gehen. Nicht kollisionsfähige Blöcke können frei passiert werden -• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Zeigbar: Zeigbare Blöcke zeigen ein Drahtmodell oder eine scheinende Box, wenn sie gezeigt werden. Aber durch nicht-zeigbare Blöcke werden Sie hindurch zeigen. Flüssigkeiten sind üblicherweise nicht-zeigbar, aber mit besonderen Werkzeugen können sie gezeigt werden. -• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Grabeeigenschaften: Von welchen Werkzeugen es abgebaut werden kann, wie schnell und wie stark es Werkzeuge abnutzt -• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Kletterbar: Wenn Sie sich an einem kletterbaren Block befinden, werden Sie nicht fallen und Sie können sich mit den Sprung- und Schleichtasten auf- und ab bewegen -• Drowning damage: See the entry “Basics > Player”=• Ertrinkenssschaden: Siehe „Grundlagen > Spieler“ -• Liquids: See the entry “Basics > Liquids”=• Flüssigkeiten: Siehe „Grundlagen > Flüssigkeiten“ -• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Gruppenmitgliedschaften: Gruppenmitgliedschaften werden benutzt, um Grabeeigenschaften, Fertigungen, Interaktionen zwischen Blöcken und mehr festzulegen -Mining=Abbauen -Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=Das Abbauen (oder Ausgraben) ist der Prozess, in dem Blöcke abgebrochen werden, um sie zu entfernen. Um einen Block abzubauen, zeigen Sie auf ihn und halten Sie die linke Maustaste, bis er bricht. -Short explanation:=Kurzerklärung: -Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.=Blöcke benötigen ein Grabewerkzeug, um abgebaut werden zu können. Verschiedene Blöcke werden von verschiedenen Grabewerkzeugen abgebaut und einige Blöcke können gar nicht abgebaut werden. Blöcke variieren in der Härte und Werkzeuge variieren in ihrer Stärke. Grabewerkzeuge werden sich allmählich abnutzen. Die Grabezeit und die Werkzeugabnutzung hängen vom Block und dem Grabewerkzeug ab. Die schnellste Methode, um herauszufinden, wie effizient Ihre Grabewerkzeuge sind, ist es, sie einfach an verschiedenen Blöcken auszuprobieren. Alles, was Sie aus Blöcken erhalten, wird zu Boden fallen und kann von ihnen aufgesammelt werden. -Detailed explanation:=Detaillierte Erklärung: -Mineable blocks have mining properties (based on groups) and a toughness level. Mining tools have the same properties. Each mining property of a block also has a rating, while tools can be able to break blocks within a range of ratings.=Abbaubare Blöcke haben Abbaueigenschaften (basierend auf Gruppen) und einen Härtegrad. Grabewerkzeuge haben die gleichen Eigenschaften. Jede Abbaueigenschaft eines Blocks hat auch eine Wertung; Werkzeuge hingegen können fähig sein, Blöcke mit einer Reihe von Wertungen abzubauen. -In order to mine a block, these conditions need to be met:=Um einen Block abbauen zu können, müssen diese Bedingungen erfüllt sein: -• The block and tool share at least one mining property for which they have a matching rating=• Der Block und das Werkzeug haben mindestens eine gemeinsame Abbaueigenschaft, für die sie eine gleiche Wertung haben -• The tool's toughness level is equal or greater than the block's toughness level=• Der Härtegrad des Werkzeugs ist größer oder gleich dem Härtegrad des Blocks -Example: A block with the mining property “cracky”, rating 3 and toughness level 0 can only be broken by a tool which is able to break “cracky” blocks at rating 3 and it must have a toughness level of 0 or larger.=Beispiel: Ein Block mit der Abbaueigenschaft „cracky“, Wertung 3 und Härtegrad 0 kann nur von einem Werkzeug, der Blöcke mit Eigenschaft „cracky“ bei Wertung 3 bricht, und er muss einen Härtegrad von 0 oder größer haben. -The time it takes to mine a block depends on the ratings and the toughness levels of both tool and block.=Die Zeit, die gebraucht wird, um einen Block abzubauen, hängt von den Wertungen und dem Härtegrad von sowohl dem Werkzeug als auch dem Block ab. -• The base mining time depends on the ratings of the block and the mining speed of the tool=• Die Grund-Abbauzeit hängt von den Wertungen des Blocks und der Grabegeschwindigkeit des Werkzeugs ab -• The mining speed of the tool differs for each mining property and its rating=• Die Grabezeit der Werkzeug unterscheidet sich für jede Abbaueigenschaft und ihrer Wertung -• The toughness level further modifies the mining speed for this mining property=• Der Härtegrad modifiziert die Abbaugeschwindigkeit für diese Abbaueigenschaft noch weiter -• A high difference in toughness levels decreases the mining time considerably=• Eine hohe Differenz in Härtegraden verringert die Abbauzeit beträchtlich -• If the toughness level difference is 2, the mining time is half of the base mining time=• Wenn der Härtegrad 2 ist, wird die Abbauzeit die Hälfte der Grundabbauzeit sein -• With a difference of 3, the mining time is a third, and so on=• Mit einer Differenz von 3 ist die Abbauzeit ein Drittel, und so weiter -The item help shows the mining times of a tool listed by its mining properties and its ratings. The mining times are often expressed as a range. The low number stands for the mining time for toughness level 0 and the high number for the highest level the tool can mine.=Die Gegenstandshilfe zeigt die Abbauzeiten eines Werkzeuges unterteilt nach seinen Abbaueigenschaften und -wertungen. Die Abbauzeiten werden oft als Intervall angegeben. Die niedrige Zahl steht für die Abbauzeit mit Härtegrad 0 und die hohe Zahl für den höchstmöglichen Härtegrad, der vom Werkzeug abgebaut werden kann. -Mining usually wears off tools. Each time you mine a block, your tool takes some damage until it is destroyed eventually. The wear per mined block is determined by the difference between the tool's toughness level and the block's toughness level. The higher the difference, the lower the wear. This means:=Abbauen nutzt Werkzeuge üblicherweise ab. Jedes mal, wenn Sie einen Block abbauen, nimmt Ihr Werkzeug etwas Schaden, bis es zerstört ist. Die Abnutzung pro abgebautem Block hängt ab von der Differenz zwischen dem Härtegrad des Werkzeugs und dem Härtegrad des Blocks. Je größer die Differenz, desto niedriger die Abnutzung. Das bedeutet: -• High-level blocks wear off your tools faster=• Blöcke mit hohem Härtegrad nutzen Ihre Werkzeuge schneller ab -• You can use high-level tools to compensate this=• Sie können hochgradige Werkzeuge benutzen, um dies zu kompensieren -• The highest wear is caused when the level of both tool and block are equal=• Die höchste Abnutzung tritt ein, wenn der Härtegrad von Werkzeug und Block gleich sind -After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=Nach dem Abbauen kann ein Block etwas abwerfen. Das sind ein paar Gegenstände, die Sie nach dem Abbauen erhalten können. Üblicherweise erhalten Sie den Block selbst. Es gibt andere Möglichkeiten für einen Abwurf, der vom Blocktyp abhängt. Die folgenden Abwürfe sind möglich: -• Always drops itself (the usual case)=• Wirft nur sich selbst ab (der Normalfall) -• Always drops the same items=• Wirft immer die gleichen Gegenstände ab -• Drops items based on probability=• Wirft Gegenstände mit einer bestimmten Wahrscheinlichkeit ab -• Drops nothing=• Wirft nichts ab -The drop goes directly into your inventory, unless there's no more space left. In that case, the items literally drop on the floor.=Der Abwurf landet direkt in Iherem Inventar, außer, es gibt keinen Platz mehr. In diesem Fall fallen die Gegenstände zu Boden. -Building=Bauen -Almost all blocks can be built (or placed). Building is very simple and has no delay.=Fast alle Blöcke können gebaut (oder platziert) werden. Bauen ist sehr einfach und hat keine Verzögerung. -To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Um den gehaltenen Block zu bauen, zeigen Sie auf einen Block in der Welt und machen Sie einen Rechtsklick. Wenn dies nicht möglich ist, weil der Block eine besondere Rechtsklick-Aktion hat, halten Sie zusätzlich die Schleichen-Taste gedrückt. -Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=Blöcke können fast immer an zeigbaren Blöcken gebaut werden. Eine Ausnahme sind Blöcke, die am Boden befestigt sind; diese können nur auf dem Boden gebaut werden. -Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Normalerweise werden Blöcke vor der gezeigten Seite des gezeigten Blocks gebaut. Ein paar Blöcke sind anders: Wenn Sie an sie anbauen, werden sie ersetzt. -Liquids=Flüssigkeiten -Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=Flüssigkeiten sind besondere dynamische Blöcke. Flüssigkeiten neigen dazu, sich auszubreiten und zu ihren Nachbarblöcken zu fließen. Spieler können in Flüssigkeiten schwimmen und ertrinken. -Liquids usually come in two forms: In source form (S) and in flowing form (F).=Flüssigkeiten gibt es normalerweise in zwei Formen: Quelle (S) und fließend (F). -Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.=Flüssigkeitsquellen nehmen die Form eines ganzen Würfels an. Eine Flüssigkeitsquelle wird um sich herum fließende Flüssigkeitsquellen erzeugen und, falls die Flüssigkeit erneuerbar ist, auch Flüssigkeitsquellen erzeugen. Eine Flüssigkeitsquelle erhält sich selbst. Solange nichts passiert, wird eine Flüssigkeitsquelle normalerweise ihren Platz behalten und nicht austrocknen. -Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=Fließende Flüssigkeiten nehmen eine schräge Form an. Fließende Flüssigkeiten breiten sich in der Welt aus, bis sie austrocknen. Eine fließende Flüssigkeit kann sich nicht selbst erhalten und kommt immer aus einer Flüssigkeitsquelle, entweder direkt oder indirekt. Ohne einer Flüssigkeitsquelle wird eine fließende Flüssigkeit irgendwann austrocknen und verschwinden. -All liquids share the following properties:=Alle Flüssigkeiten teilen die folgenden Eigenschaften: -• All properties of blocks (including drowning damage)=• Alle Eigenschaften von Blöcken (inklusive Ertrinkensschaden) -• Renewability: Renewable liquids can create new sources=• Erneuerbarkeit: Erneuerbare Flüssigkeiten können neue Quellen erschaffen -• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Fließreichweite: Wie viele fließende Flüssigkeiten maximal je Flüssigkeitsquelle erschaffen werden; das bestimmt, wie weit die Flüssigkeit fließen wird. Mögliche Reichweiten sind zwischen 0 bis 8. Bei 0 werden keine fließenden Flüssigkeiten erzeugt. Bild 5 zeigt eine Flüssigkeit mit einer Fließreichweite von 2. -• Viscosity: How slow players move through it and how slow the liquid spreads=• Zähflüssigkeit: Wie langsam sich Spieler durch sie bewegen und wie langsam sich die Flüssigkeit ausbreitet -When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Wenn diese Eigenschaften zutreffen, wird der freie Raum mit einer neuen Flüssigkeitsquelle des selben Typs gefüllt (Bild 3). -Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Schwimmen in einer Flüssigkeit ist einfach: Die normale Richtungstasten für die Grundbewegung, Sprungtaste und Schleichen für Auf- und Abbewegungen. -The physics for swimming and diving in a liquid are:=Die Schwimmphysik: -• The higher the viscosity, the slower you move=• Je höher die Zähflüssigkeit, desto langsamer bewegen Sie sich -• If you rest, you'll slowly sink=• Wenn Sie ruhen, sinken sie langsam -• There is no fall damage for falling into a liquid as such=• Es gibt keinen Fallschaden für das Eintauchen in einer Flüssigkeit als solche -• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Wenn Sie in eine Flüssigkeit stürzen, werden Sie bei Kontakt verlangsamt (aber Sie halten nicht sofort an). Ihre Falltiefe hängt von Ihrer Geschwindigkeit und der Zähflüssigkeit ab. Für einen sicheren hohen Sturz in eine Flüssigkeit, stellen Sie sicher, dass genug Flüssigkeit über dem Boden ist, sonst könnten Sie auf den Boden aufschlagen und Fallschaden nehmen. -Liquids are often not pointable. But some special items are able to point all liquids.=Flüssigkeiten sind generell nicht zeigbar. Aber ein paar besondere Werkzeuge können auf alle Flüssigkeiten zeigen. -Crafting=Fertigung -Crafting is the task of combining several items to form a new item.=Fertigen ist die Tätigkeit, in der man mehrere Gegenstände kombiniert, um einen neuen zu erhalten. -To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Um etwas zu fertigen, brauchen Sie einen oder mehrere Gegenstände, ein Fertigungsgitter (C) und ein Fertigungsrezept. Ein Fertigungsgitter ist wie ein normales Inventar, welches auch zum Fertigen benutzt werden kann. Gegenstände müssen in ein bestimmtes Muster in das Fertigungsgitter platziert werden. Neben dem Fertigungsgitter befindet sich ein Ausgabeplatz (O). Hier wird das Ergebnis auftauchen, wenn Sie die Gegenstände korrekt platziert haben. Das ist nur eine Vorschau, nicht der richtige Gegenstand. Fertigungsgitter können in verschiedenen Größen daher kommen, was die möglichen Rezepte begrenzt. -To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Um die Fertigung abzuschließen, nehmen Sie sich das Ergebnis vom Ausgabeplatz, was die Gegenstände aus dem Fertigungsgitter verbrauchen und einen neuen Gegenstand erschaffen wird. Es ist nicht möglich, Gegenstände in den Ausgabeplatz zu platzieren. -A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).=Eine Beschreibung, wie man einen Gegenstand fertigt, nennt man „Fertigungsrezept“. Sie brauchen dieses Wissen, um etwas zu fertigen. Es gibt mehrere Möglichkeiten, Fertigungsrezepte zu lernen. Eine Möglichkeit ist es, einen Fertigungsführer zu benutzen, er enthält eine Liste von verfügbaren Fertigungsrezepten. Einige Spiele bieten Fertigungsführer an. Es gibt auch ein paar Mods, die Sie online herunterladen können, um einen Fertigungsführer zu installieren. Ansonsten können Sie die Online-Anleitung des Spieles lesen (wenn es eine gibt). -Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Fertigungsrezepte bestehen aus mindestens einem Eingabegegenstand und genau einem Stapel von Ausgabegegenständen. Beim Vornehmen einer einzelnen Fertigung wird es genau einen Gegenstand von jedem Stapel im Fertigungsgitter verbrauchen, außer, wenn das Fertigungsrezept Ersätze definiert. -In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=In einigen Fertigungsrezepten brauchen ein paar Eingabegegenstände keine konkreten Gegenstände zu sein, sie müssen stattdessen nur Mitglied einer Gruppe sein (siehe „Grundlagen > Gruppen“). Diese Rezepte bieten etwas mehr Freiheit bei der Wahl der Eingabegegenstände. Bilder 6-8 zeigen das gleiche gruppenbasierte Rezept. Hier werden 8 Gegenstände der „Stein“-Gruppe benötigt, was der Fall für alle gezeigten Gegenstände ist. -Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=Selten können Fertigungsrezepte Ersätze haben. Das bedeutet, wenn Sie eine Fertigung vornehmen, werden einige Gegenstände im Fertigungsgitter nicht verbraucht, sondern durch einen anderen Gegenstand ersetzt. -Cooking=Kochen -Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=Kochen (bzw. Schmelzen) ist eine Art Fertigung, die ohne Fertigungsgitter auskommt. Kochen wird mit einem besonderem Block vorgenommen (wie einem Ofen), einen kochbaren Gegenstand, einem Brennstoff und Zeit, um einen neuen Gegenstand zu erhalten. -Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Jeder Brennstoff hat eine Brennzeit. Das ist die Zeit, die ein einzelner Gegenstand des Brennstoffs den Ofen brennen lässt. -Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Jeder kochbare Gegenstand braucht Zeit, um gekocht zu werden. Diese Zeit hängt vom Gegenstandstyp ab und der Gegenstand muss für die gesamte Kochzeit „im Feuer“ sein, um tatsächlich gekocht zu werden. -Hotbar=Schnellleiste -At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=Unten sehen Sie ein paar Quadrate. Dies ist die „Schnellleiste“. Die Schnellleiste ermöglicht es Ihnen, schnell auf die ersten Gegenstände Ihres Spielerinventars zuzugreifen. -You can change the selected item with the mouse wheel or the keyboard.=Sie können die gewählten Gegenstände mit dem Mausrad oder der Tastatur wechseln. -• Select previous item in hotbar: [Mouse wheel up] or [B]=• Vorherigen Gegenstand in Schnellleiste wählen: [Mausrad rauf] oder [B] -• Select next item in hotbar: [Mouse wheel down] or [N]=• Vorherigen Gegenstand in Schnellleiste wählen: [Mausrad runter] oder [N] -• Select item in hotbar directly: [1]-[9]=• Gegenstand direkt in Schnellleiste wählen: [1]-[9] -The selected item is also your wielded item.=Der gewählte Gegenstand ist auch Ihr gehaltener Gegenstand. -Minimap=Übersichtskarte -Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Drücken Sie [F9], um eine Übersichtskarte rechts oben erscheinen zu lassen. Die Übersichtskarte hilft Ihnen, sich in der Welt zu orientieren. -There are 2 minimap modes and 3 zoom levels.=Es gibt 2 Modi und 3 Zoom-Stufen. -Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=Der Bodenmodus (Bild 1) ist eine Draufsicht auf die Welt, er zeigt grob die Farben der Blöcke, aus denen die Welt besteht. Er zeigt nur die obersten Blöcke, alles unter ihnen ist verborgen, wie bei einem Satellitenfoto. Der Bodenmodus ist nützlich, wenn Sie sich verlaufen haben. -Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=Der Radarmodus (Bild 2) ist etwas komplizierter. Er zeigt die „Dichte“ des Gebiets um Sie herum an und ändert sich mit Ihrer Höhe. Grob gesagt, je grüner ein Gebiet ist, desto „weniger dicht“ ist es. Schwarze Gebiete haben viele Blöcke. Benutzen Sie das Radar, um Höhlen, verborgene Gebiete, Wände und mehr zu finden. Die rechteckigen Formen in Bild 2 verraten deutlich den Ort eines Kerkers. -There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Es gibt auch zwei unterschiedliche Rotationsmodi. Im „Quadratsmodus“ ist die Rotation der Übersichtskarte fest. Drücken Sie [Umschalt]+[F9], um zum „Kreismodus“ zu wechseln, in dem sich die Karte mit Ihrer Blickrichtung dreht, also ist „oben“ immer in Ihrer Blickrichtung. -In some games, the minimap may be disabled.=In einigen Spielen kann die Übersichtskarte deaktiviert sein. -• Toggle minimap mode: [F9]=• Übersichtskartenmodus ändern: [F9] -• Toggle minimap rotation mode: [Shift]+[F9]=• Rotationsmodus der Übersichtskarte ändern: [Umschalt]+[F9] -Inventory=Inventar -Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Inventare werden benutzt, um Gegenstandsstapel aufzubewahren. Es gibt andere Verwendungszwecke, wie die Fertigung. Ein Inventar besteht aus einem rechteckigem Raster aus Gegenstandsplätzen. Jeder Gegenstandsplatz kann entweder leer sein, oder einen Gegenstandsstapel enthalten. Gegenstandsstapel können frei zwischen den meisten Plätzen bewegt weren. -You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=Sie haben Ihr eigenes Inventar, das „Spielerinventar“, Sie können es mit Ihrer Inventartaste (Standard: [I]) öffnen. Die ersten Inventarplätze werden auch als Plätze in Ihrer Schnellleiste benutzt. -Blocks can also have their own inventory, e.g. chests and furnaces.=Blöcke können auch ihr eigenes Inventar haben, z.B. Truhen und Öfen. -Inventory controls:=Inventarsteuerung: -Taking: You can take items from an occupied slot if the cursor holds nothing.=Nehmen: Sie können Gegenstände aus einem belegten Platz nehmen, wenn der Mauszeiger nichts hält. -• Left click: take entire item stack=• Linksklick: Ganzen Gegenstandsstapel nehmen -• Right click: take half from the item stack (rounded up)=• Rechtsklick: Hälfte des Stapels nehmen (aufgerundet) -• Middle click: take 10 items from the item stack=• Mittelklick: 10 Gegenstände von einem Stapel nehmen -• Mouse wheel down: take 1 item from the item stack=• Mausrad runter: 1 Gegenstand vom Stapel nehmen -Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Ablegen: Sie können Gegenstände auf einem Platz ablegen, wenn der Mauszeiger einen oder mehrere Gegenstände hält und der Platz entweder leer ist, oder einen Stapel des gleichen Gegenstandstyps enthält. -• Left click: put entire item stack=• Linksklick: Ganzen Stapel ablegen -• Right click or mouse wheel up: put 1 item of the item stack=• Rechtsklick oder Mausrad hoch: 1 Gegenstand des Stapels ablegen -• Middle click: put 10 items of the item stack=• Mittelklick: 10 Gegenstände des Stapels ablegen -Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.=Vertauschen: Sie können Gegenstände vertauschen, wenn der Mauszeiger einen oder mehrere Gegenstände hält und der Zielplatz von einem anderen Gegenstandstyp belegt ist. -• Click: exchange item stacks=• Klick: Stapel vertauschen -Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Wegwerfen: Wenn Sie einen Stapel halten und irgendwo außerhalb des Menüs klicken, wird der Stapel in die Umwelt weggeworfen. -Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Schnelles Verschieben: Sie können einen Stapel schnell von/zu dem Spielerinventar von/zu einem anderem Inventar (z.B. in einem Inventar einer Truhe oder eines Ofens) verschieben. Das Zielinventar ist normalerweise das relevanteste Inventar des Behälters. -• Sneak+Left click: Automatically transfer item stack=• Schleichtaste+Linksklick: Automatisch Stapel verschieben -Online help=Online-Hilfe -You may want to check out these online resources related to Minetest:=Sie können diese Onlinequellen zum Thema Minetest besuchen: -Official homepage of Minetest: =Offizielle Minetest-Homepage: -The main place to find the most recent version of Minetest.=Dort findet man die neueste Minetest-Version. -Community wiki: =Community-Wiki: -A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Eine gemeinschaftsbasierte Dokumentationswebpräsenz für Minetest. Jeder mit einem Benutzerkonto kann sie bearbeiten. Enthält auch die Hilfe zu Minetest Game. -Web forums: =Webforen: -A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Eine webbasierte Diskussionsplattform, wo Sie über alles zum Thema Minetest diskutieren können. Dort werden auch spielergemachte Mods und Spiele veröffentlicht und diskutiert. -Chat: =Chat: -A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Ein allgemeiner Internet-Relay-Chat-Kanal für alles über Minetest, wo sich Menschen treffen können, um in Echtzeit zu diskutieren. Wenn Sie IRC nicht verstehen, sehen Sie im Community-Wiki für Hilfe nach. -Groups=Gruppen -Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Gegenstände, Spieler und Objekte (lebend oder nicht) können Mitglieder von einer Reihe von Gruppen sein. Gruppen erfüllen mehrere Zwecke: -• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Fertigungsrezepte: Plätze in Fertigungsrezepten erfordern nicht unbedingt einen konkreten Gegenstand, sondern einen Gegenstand, der zu einer bestimmten Gruppe, oder mehreren Gruppen, gehört -• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Abbauzeiten: Abbaubare Blöcke gehören zu Gruppen, die benutzt werden, um die Abbauzeiten zu bestimmen. Grabewerkzeuge sind fähig, grabbare Blöcke, die zu bestimmten Gruppen gehören, abzubauen -• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Blockverhalten: Blöcke können ein besonderes Verhalten aufweisen und mit anderen Blöcken interagieren, wenn sie zu einer bestimmten Gruppe gehören -• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Schaden und Rüstung: Objekte und Spieler haben Rüstungsgruppen, Waffen haben Schadensgruppen. Diese Gruppe bestimmen den Schaden. Siehe auch: „Grundlagen > Waffen“ -• Other uses=• Andere Zwecke -In the item help, many important groups are usually mentioned and explained.=In der Gegenstandshilfe werden viele wichtige Gruppen normalerweise erwähnt und erklärt. -Glossary=Glossar -This is a list of commonly used terms:=Dies ist eine Liste von häufig benutzten Begriffen: -Controls:=Steuerung: -• Wielding: Holding an item in hand=• Halten: Einen Gegenstand in der Hand halten -• Pointing: Looking with the crosshair at something in range=• Zeigen: Mit dem Fadenkreuz auf etwas in Reichweite blicken -• Dropping: Throwing an item or item stack to the ground=• Wegwerfen: Gegenstand oder Stapel zu Boden werfen -• Punching: Attacking with left-click, is also used on blocks=• Schlagen: Angriff mit Linksklick, wird auch an Blöcken benutzt -• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Schleichen: Langsam gehen, während man (normalerweise) verhindert, über die Kante zu fallen -• Climbing: Moving up or down a climbable block=• Klettern: Bei einem kletterbaren Block auf- oder absteigen -Blocks:=Blöcke: -• Block: Cubes that the worlds are made of=• Block: Würfel, aus denen die Welten gemacht sind -• Mining/digging: Using a mining tool to break a block=• Abbauen/Graben: Ein Grabewerkzeug benutzen, um einen Block zu zerbrechen -• Building/placing: Putting a block somewhere=• Bauen/Platzieren: Einen Block irgendwo hin setzen -• Drop: Items you get after mining a block=• Abwurf: Gegenstände, den Sie nach dem Abbauen erhalten -• Using a block: Right-clicking a block to access its special function=• Einen Block benutzen: Rechtsklick auf einem Block, um auf seine Sonderfunktion zuzugreifen -Items:=Gegenstände: -• Item: A single thing that players can possess=• Gegenstand: Ein einzelnes Ding, den Spieler besitzen können -• Item stack: A collection of items of the same kind=• Gegenstandsstapel: Eine Sammlung von gleichen Gegenständen -• Maximum stack size: Maximum amount of items in an item stack=• Maximale Stapelgröße: Maximale Anzahl Gegenstände in einem Gegenstandsstapel -• Slot / inventory slot: Can hold one item stack=• Platz / Inventarplatz: Kann einen Gegenstandsstapel halten -• Inventory: Provides several inventory slots for storage=• Inventar: Bietet mehrere Inventarplätze für die Lagerung -• Player inventory: The main inventory of a player=• Spielerinventar: Das Hauptinventar eines Spielers -• Tool: An item which you can use to do special things with when wielding=• Werkzeug: Ein Gegenstand, mit dem man besondere Dinge beim Halten tun kan -• Range: How far away things can be to be pointed by an item=• Reichweite: Bis zu welcher Entfernung man Dinge zeigen kann -• Mining tool: A tool which allows to break blocks=• Grabewerkzeug: Werkzeug, mit dem man Blöcke brechen kann -• Craftitem: An item which is (primarily or only) used for crafting=• Fertigungsgegenstand: Ein Gegenstand der (hauptsächlich oder nur) für die Fertigung benutzt wird -Gameplay:=Spiel: -• “heart”: A single health symbol, indicates 2 HP=• „Herz“: Ein einzelnes Gesundheitssymbol, steht für 2 TP -• “bubble”: A single breath symbol, indicates 1 BP=• „Luftblase“: Ein einzelnes Atemsymbol, steht für 1 AP -• HP: Hit point (equals half 1 “heart”)=• TP: Trefferpunkt (gleich 1 halbes „Herz“) -• BP: Breath point, indicates breath when diving=• AP: Atempunkt, steht für Atem beim Tauchen -• Mob: Computer-controlled enemy=• Mob: Computergesteuerter Gegner -• Crafting: Combining multiple items to create new ones=• Fertigen: Kombinierung mehrerer Gegenstände, um neue zu erhalten -• Crafting guide: A helper which shows available crafting recipes=• Fertigungsführer: Ein Helferlein, um die verfügbaren Fertigungsrezepte zu zeigen -• Spawning: Appearing in the world=• Einsteigen (spawning): In der Welt auftauchen -• Respawning: Appearing again in the world after death=• Wiedereinsteigen (respawning): Wieder in der Welt auftauchen, nach dem man gestorben ist -• Group: Puts similar things together, often affects gameplay=• Gruppe: Fasst mehrere Dinge zusammen, betrifft oft den Spielverlauf -• noclip: Allows to fly through walls=• Geistmodus / noclip: Damit kann man durch Wände fliegen -Interface=Benutzeroberfläche -• Hotbar: Inventory slots at the bottom=• Schnellleiste: Untere Inventarplätze -• Statbar: Indicator made out of half-symbols, used for health and breath=• Wertleiste: Indikator aus Halbsymbolen, für Gesundheit und Atem benutzt -• Minimap: The map or radar at the top right=• Übersichtskarte: Karte oder Radar oben rechts -• Crosshair: Seen in the middle, used to point at things=• Fadenkreuz: In der Mitte, damit kann man auf Dinge zeigen -Online multiplayer:=Online-Mehrspieler: -• PvP: Player vs Player. If active, players can deal damage to each other=• PvP: Spielerkampf (Player vs Player). Wenn aktiv, können sich Spieler gegenseitig verletzen -• Griefing: Destroying the buildings of other players against their will=• Griefen: Gebäude anderer Spieler gegen ihren Willen zerstören -• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Schutz: Mechanismus, um Eigentum an Gebieten in der der Welt zu erlangen, wodurch nur der Eigentümer die Blöcke verändern kann -Technical terms:=Technische Begriffe: -• Minetest: This game engine=• Minetest: Diese Spiel-Engine -• Minetest Game: A game for Minetest by the Minetest developers=• Minetest Game: Ein Spiel für Minetest von den Minetest-Entwicklern -• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Spiel: Ein vollständiges Spielerlebnis für Minetest, also ein richtiges Spiel oder auch nur eine Sandbox oder ähnliches -• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them=• Mod: Ein einzelnes Untersystem, welches Funktionalität hinzufügt oder modifiziert; ist das Fundament von Spielen und kann benutzt werden, um sie zu erweitern oder zu modifizieren -• Privilege: Allows a player to do something=• Privileg: Erlaubt einem Spieler, etwas zu tun -• Node: Other word for “block”=• Node: Anderes Wort für „Block“ -Settings=Einstellungen -There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Es gibt viele Einstellungen, um Minetest einzurichten. Fast jeder Aspekt kann so verändert werden. -These are a few of the most important gameplay settings:=Dies sind ein paar der wichtigsten Spieleinstellungen: -• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Schaden aktiviert (enable_damage): Aktiviert die Gesundheits- und Atemattribute für alle Spieler. Wird dies deaktiviert, sind Spieler unsterblich. -• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Kreativmodus (creative_mode): Aktiviert eine Art Sandkastenmodus, der sich auf Kreativität statt auf ein herausforderndes Spiel konzentriert. Die Bedeutung hängt vom Spiel ab; die üblichen Änderungen sind: Verringerte Grabezeiten, leichter Zugriff zu fast allen Dingen, Werkzeuge nutzen sich nie ab, usw. -• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• PvP (enable_pvp): Wenn aktiv, können sich Spieler gegenseitig verletzen -For a full list of all available settings, use the “All Settings” dialog in the main menu.=Für eine vollständige Liste aller verfügbaren Einstellungen, benutzen Sie den Knopf „Alle Einstellunen“ im Hauptmenü. -Movement modes=Bewegungsmodi -If you have the required privileges, you can use up to three special movement modes.=Wenn Sie die benötigten Privilegien haben, können Sie bis zu drei besondere Bewegungsmodi benutzen. -Fast mode:=Schnellmodus: -• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Beschreibung: Damit bewegen Sie sich viel schneller. In der Client-Konfiguration können Sie den Schnellmodus ferner anpassen -• Default key: [J]=• Standardtaste: [J] -• Required privilege: fast=• Benötigtes Privileg: fast -Fly mode:=Flugmodus -• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Beschreibung: Schwerkraft beeinflusst Sie nicht und Sie können sich in alle Richtungen schnell bewegen. Benutzen Sie die Sprungtaste zum Aufsteigen und die Schleichentaste zum Absinken. -• Default key: [K]=• Standardtaste: [K] -• Required privilege: fly=• Benötigtes Privileg: fly -Noclip mode:=Geistmodus: -• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Beschreibung: Damit können Sie durch Wände fliegen, wenn der Flugmodus aktiv ist. -• Default key: [H]=• Standardtaste: [H] -• Required privilege: noclip=• Benötigtes Privileg: noclip -Console=Konsole -With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=Mit [F10] öffnen und schließen Sie die Konsole. Der Hauptzweck der Konsole ist die Anzeige des Chatprotokolls und für die Eingabe von Chatnachrichten oder Serverbefehlen. -Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=Wenn Sie die Chat- oder Serverbefehlstaste benutzen, wird die Konsole auch geöffnet, aber sie ist kleiner und wird geschlossen, nachdem Sie eine Nachricht gesendet haben. -Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Benutzen Sie den Chat, um mit anderen Spielern zu kommunizieren. Dafür brauchen Sie das „shout“-Privileg. -Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Geben Sie einfach die Nachricht ein und drücken [Eingabe]. Öffentliche Chatnachrichten können nicht mit „/“ beginnen. -You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .=Sie können private Nachrichten senden: Sagen Sie „/msg “ im Chat, um „“ zu senden, aber nur für sichtbar. -There are some special controls for the console:=Besondere Steuerung für die Konsole: -• [F10] Open/close console=• [F10] Konsole öffnen/schließen -• [Enter]: Send message or command=• [Eingabe] Nachricht oder Befehl senden -• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: Autovervollständigung von Spielernamen -• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Strg]+[Links]: Cursor zum Anfang des vorherigen Wortes bewegen -• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Strg]+[Rechts]: Cursor zum Anfang des vorherigen Wortes bewegen -• [Ctrl]+[Backspace]: Delete previous word=• [Strg]+[Rücktaste]: Vorheriges Wort löschen -• [Ctrl]+[Delete]: Delete next word=• [Strg]+[Entfernen]: Nächstes Wort löschen -• [Ctrl]+[U]: Delete all text before the cursor=• [Strg]+[U]: Text vor dem Cursor löschen -• [Ctrl]+[K]: Delete all text after the cursor=• [Strg]+[K]: Text nach dem Cursor löschen -• [Page up]: Scroll up=• [Bild auf]: Nach oben scrollen -• [Page down]: Scroll down=• [Bild ab]: Nach unten rollen -There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Es gibt auch eine Eingabe-Historie. Minetest merkt sich Ihre vorherigen Konsoleneingaben, auf die Sie später schnell zugreifen können: -• [Up]: Go to previous entry in history=• [Rauf]: Zum vorherigen Eintrag in der Historie gehen -• [Down]: Go to next entry in history=• [Runter]: Zum nächsten Eintrag in der Historie gehen -Server commands=Serverbefehle -Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=Serverbefehle (auch „Chat-Befehle“ genannt) sind kleine Helferlein für fortgeschrittene Benutzer. Sie müssen diese Befehle im normalen Spielverlauf nicht benutzen. Aber sie können nützlich sein, um ein paar technischere Aufgaben zu erledigen. Serverbefehle funktionieren sowohl im Mehrspieler- als auch im Einzelspielermodus. -Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=Serverbefehle können von Spielern im Chat eingegeben werden, um eine besondere Serveraktion auszulösen. Es gibt ein paar Befehle, die von jedem benutzt werden können, aber einige Befehle benötigen Privilegien, die vom Server gewährt werden. Es gibt eine kleine Menge an Grundbefehlen, die immer verfügbar sind, andere Befehle können von Mods hinzugefügt werden. -To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Um einen Befehl zu erteilen, geben Sie ihn einfach wie eine Chatnachricht ein oder drücken Sie Minetests Befehlstaste (Standard: [/]). Alle Befehle müssen mit „/“ beginnen, z.B. „/mods“. Die Minetestbefehlstaste macht das gleiche wie die Chattaste, nur, dass der Schrägstrich schon eingegeben wurde. -Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=Befehle können eine Rückmeldung im Chatprotokoll auslösen, müssen aber nicht. Fehlermeldungen tauchen grundsätzlich im Chat auf. Probieren Sie es aus: Schließen Sie dieses Fenster und geben Sie den „/mods“-Befehl ein. Damit erhalten Sie die Liste der vorhandenen Mods auf diesem Server. -“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.=„/help all“ ist ein sehr wichtiger Befehl: Damit erhalten Sie eine Liste aller verfügbaren Befehle auf dem Server, eine kurze Erklärung und die möglichen Parameter. Dieser Befehl ist auch wichtig, weil die Befehle sich je nach Server unterscheiden können. -Commands are followed by zero or more parameters.=Befehle haben null oder mehr Parameter. -In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=In der Befehlsreferenz sehen Sie einige Platzhalter, die sie mit dem richtigen Wert ersetzen müssen. Hier ist eine Erklärung: -• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter=• Text zwischen Größer-Als- und Kleiner-Als-Zeichen (z.B. „“): Platzhalter für einen Parameter -• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Alles in eckigen Klammern (z.B. „[Text]“) ist optional und kann ausgelassen werden -• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Senkrechtstrich (z.B. „Text1 | Text2 | Text3“): Alternativen. Eines von mehreren Texten muss benutzt werden -• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Klammern (z.B. „(Wort1 Wort2) | Wort3“): Gruppiert mehrere Wörter zusammen, für die Alternativen benutzt -• Everything else is to be read as literal text=• Alles andere muss als wortwörtlicher Text gelesen werden -Here are some examples to illustrate the command syntax:=Ein paar Beispiele, um die Befehlssyntax zu erläutern: -• /mods: No parameters. Just enter “/mods”=• /mods: Keine Parameter. Geben Sie einfach „/mods“ ein -• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /me : 1 Parameter. Sie müssen „/me “ gefolgt von einem beliebigen Text eingeben, z.B. „/me bestellt Pizza“ -• /give : Two parameters. Example: “/give Player default:apple”=• /give : Zwei Parameter. Beispiel: „/give Spieler default:apple“ -• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all|privs|]: Gültige Eingaben sind „/help“, „/help all“, „/help privs“ oder „/help “ gefolgt von einem Befehlsnamen, wie „/help time“ -• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity [,,]: Gültige Eingaben beeinhalten „/spawnentity boats:boat“ und „/spawnentity boats:boat 0,0,0“ -Some final remarks:=Ein paar letzte Anmerkungen: -• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=• Für /give und /giveme brauchen Sie einen sog. Itemstring. Das ist ein intern benutzter eindeutiger Gegenstandsidentifikator, den Sie in der Gegenstandshilfe finden, wenn Sie das „give“ oder „debug“-Privileg haben -• For /spawnentity you need an entity name, which is another identifier=• Für /spawnentity brauchen Sie einen Entity-Namen, was ein anderer Identifikator ist -Privileges=Privilegien -Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Jeder Spieler hat eine Menge an Privilegien, die sich von Server zu Server unterscheiden. Ihre Privilegien bestimmen, was Sie tun können und was nicht. Privilegien können von anderen Spielern gewährt und entzogen werden, wenn diese das Privileg namens „privs“ haben. -On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=In Mehrspielerservern mit der Standardeinstellung starten Spieler mit den Privilegien „interact“ und „shout“. Das „interact“-Privileg wird für die grundlegendsten Spielaktionen so wie Bauen, Abbauen, Benutzen, usw. gebraucht. Das „shout“-Privileg braucht man zum Chatten. -There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Es gibt eine kleine Menge an Hauptprivilegien, die Sie auf jeden Server finden, andere Privilegien können von Mods hinzugefügt werden. -To view your own privileges, issue the server command “/privs”.=Um Ihre eigenen Privilegien zu sehen, erteilen Sie den Serverbefehl „/privs“. -Here are a few basic privilege-related commands:=Hier sind ein paar Befehle zum Thema Privilegien: -• /privs: Lists your privileges=• /privs: Listet Ihre Privilegien auf -• /privs : Lists the privileges of =• /privs : Listet die Privilegien von auf -• /help privs: Shows a list and description about all privileges=• /help privs: Zeigt eine Liste und Beschreibung für alle Privilegien an -Players with the “privs” privilege can modify privileges at will:=Spieler mit dem Privileg „privs“ können Privilegien beliebig ändern: -• /grant : Grant to =• /grant : an gewähren -• /revoke : Revoke from =• /revoke : von entziehen -In single-player mode, you can use “/grantme all” to unlock all abilities.=Im Einzelspielermodus können Sie „/grantme all“ benutzen, um alle Fähigkeiten freizuschalten. -Light=Licht -As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Da die Welt völlig auf Blöcken basiert, gilt dies auch für das Licht in der Welt. Jeder Block hat seine eigene Helligkeit. Die Helligkeit eines Blocks wird als „Helligkeitsstufe“ angegeben, die von 0 (völlig dunkel) bis 15 (so hell wie die Sonne) reicht. -There are two types of light: Sunlight and artificial light.=Es gibt zwei Lichttypen: Sonnenlicht und künstliches Licht. -Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=Künstliches List kommt von leuchtenden Blöcken. Künstliches Licht hat eine Helligkeit zwischen 1-14. -Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=Sonnenlicht ist das hellste Licht und geht immer von oben vom Himmel schnurgerade nach unten zu jeder Tageszeit. In der Nacht wird aus Sonnenlicht Mondlicht, welches immer noch etwas Licht spendet. -Blocks have 3 levels of transparency:=Blöcke haben 3 Stufen der Transparenz: -• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Transparent: Sonnenlicht geht unbegrenzt hindurch, künstliches Licht geht mit Verlusten hindurch -• Semi-transparent: Sunlight and artificial light go through with losses=• Halbtransparent: Sonnenlicht und künstliches Licht gehen mit Verlusten durch -• Opaque: No light passes through=• Lichtundurchlässig: Licht kann nicht passieren -Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=Künstliches Licht wird eine Helligkeitsstufe für jeden transparenten oder halbtransparenten Block, den es passiert, einbüßen, bis es völlig verdunkelt ist (Bild 1). -Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=Sonnenlicht wird seine Helligkeit behalten, solange sie nur volltransparente Blöcke passiert. Sobald sie einen halbtransparenten Block passiert, wird es zu künstlichem Licht. Bild 2 zeigt den Unterschied. -Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Beachten Sie, dass das Wort „Transparenz“ hier nur bedeutet, dass der Block fähig ist, Helligkeit von seinen Nachbarblöcken weiterzugeben. Es ist möglich, dass ein Block transparent gegenüber Licht ist, aber Sie können nicht durch ihn sehen. -Coordinates=Koordinaten -The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Die Welt ist ein großer Würfel. Und daher kann eine Position in der Welt leicht mit kartesischen Koordinaten ausgedrückt weren. Das bedeutet, für jede Position in der Welt gibt es 3 Werte X, Y und Z. -Like this: (5, 45, -12)=So wie dies: (5, 45, -12) -This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=Das bezieht sich auf die Position, in der X@=5, Y@=45 und Z@=-12 sind. Die drei Buchstaben nennt man „Achsen“. Y ist für die Höhe X und Z sind für die horizontale Position. -The values for X, Y and Z work like this:=Die Werte für X, Y und Z funktionieren so: -• If you go up, Y increases=• Wenn Sie aufsteigen, erhöht sich Y -• If you go down, Y decreases=• Steigen Sie ab, verringert sich Y -• If you follow the sun, X increases=• Folgen Sie der Sonne, erhöht sich X -• If you go to the reverse direction, X decreases=• Gehen Sie in die entgegengesetzte Richtung, verringert sich X -• Follow the sun, then go right: Z increases=• Folgen Sie der Sonne, dann gehen Sie nach rechts: Z erhöht sich -• Follow the sun, then go left: Z decreases=• Folgen Sie der Sonne, dann gehen Sie nach links: Z verringert sich -• The side length of a full cube is 1=• Die Seitenlänge eines ganzen Würfels ist 1 -You can view your current position in the debug screen (open with [F5]).=Sie sehen Ihre aktuelle Position im Debug-Bildschirm (mit [F5] öffnen). -Items have several properties, including the following:=Gegenstände haben diverse Eigenschaften, unter anderem: -• Maximum stack size: Number of items which fit on 1 item stack=• Maximale Stapelgröße: Anzahl der Gegenstände, die in einen Gegenstandsstapel passen -• Pointing range: How close things must be to be pointed while wielding this item=• Zeigereichweite: Wie nah Dinge zum Zeigen sein müssen, wenn dieser Gegenstand gehalten wird -• Group memberships: See “Basics > Groups”=• Gruppenmitgliedschaften: Siehe „Grundlagen > Gruppen“ -• May be used for crafting or cooking=• Kann zum Fertigen oder beim Kochen benutzt werden -There are multiple types of crafting recipes:=Es gibt mehrere Arten von Fertigungsrezepten: -• Shaped (image 2): Items need to be placed in a particular shape=• Förmig (Bild 2): Gegenstände müssen in einer bestimmten Form platziert werden -• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)=• Formlos (Bilder 3 und 4): Gegenstände müssen irgendwo in der Eingabe platziert werden (beide Bilder zeigen das gleiche Rezept) -• Cooking: Explained in “Basics > Cooking”=• Kochen: Siehe „Grundlagen > Kochen“ -• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%=• Reparieren (Bild 5): Platzieren sie zwei gleiche beschädigte Werkzeuge in das Fertigungsgitter, um ein Werkzeug zu erhalten, das zu 5% repariert ist -There are 3 different views which determine the way you see the world. The modes are:=Es gibt 3 verschiedene Ansichten, die bestimmen, wie Sie die Welt sehen. Die Modi sind: -• 1: First-person view (default)=• 1: Erste Person (Standard) -• 2: Third-person view from behind=• 2: Dritte Person von hinten -• 3: Third-person view from the front=• 3: Dritte Person von vorne -Players can take damage for a variety of reasons, here are some:=Spieler können aus verschidenen Gründen Schaden erleiden, hier sind ein paar: -• Taking fall damage=• Fallschaden -• Touching a block which causes direct damage=• Einen Block berühren, der Direktschaden anrichtet -• Drowning=• Ertrinken -• Being attacked by another player=• Angriff eines anderen Spielers -• Being attacked by a computer enemy=• Angriff eines Computergegners -Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:=Erneuerbare Flüssigkeiten erschaffen neue Flüssigkeitsquellen in Freiräumen (Bild 2). Eine neue Flüssigkeitsquelle wird erschaffen, wenn: -• Two renewable liquid blocks of the same type touch each other diagonally=• Zwei gleiche erneuerbare Flüssigkeitsblöcke sich diagonal berühren -• These blocks are also on the same height=• Diese Blöcke sich auch in der gleichen Höhe befinden -• One of the two “corners” is open space which allows liquids to flow in=• Eines der zwei „Ecken“ ein Freiraum ist, in den Flüssigkeiten hereinfließen können -You can enable some special movement modes that change how you move.=Sie können in paar besondere Bewegungsmodi einschalten, die ändern, wie Sie sich bewegen. -Pitch movement mode:=Nick-Bewegungsmodus: -• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.=• Wenn dieser Modus aktiviert ist, werden die Bewegungstasten Sie relativ zu Ihrem jetzigen Nickwinkel (vertikaler Blickwinkel) bewegen, wenn Sie sich in einer Flüssigkeit befinden oder der Flugmodus aktiv ist. -• Default key: [L]=• Standardtaste: [L] -• No privilege required=• Kein Privileg nötig - -Creative Mode=Kreativmodus -Enabling Creative Mode in MineClone 2 applies the following changes:=Der Kreativmodus in MineClone 2 nimmt die folgenden Änderungen vor: -• You keep the things you've placed=• Sie behalten die Dinge, die Sie platzieren -• Creative inventory is available to obtain most items easily=• Das Kreativinventar ist verfügbar, mit dem Sie die meisten Dinge leicht erhalten -• Hand breaks all default blocks instantly=• Hand zerbricht alle Standardblöcke sofort -• Greatly increased hand pointing range=• Stark erhöhte Zeigereichweite der Hand -• Mined blocks don't drop items=• Gegrabene Blöcke werfen nichts ab -• Items don't get used up=• Gegenstände werden nicht verbraucht -• Tools don't wear off=• Werkzeuge nutzen sich nicht ab -• You can eat food whenever you want=• Sie können essen, wann immer Sie wollen -• You can always use the minimap (including radar mode)=• Sie können die Übersichtskarte immer benutzen (auch den Radarmodus) -Damage is not affected by Creative Mode, it needs to be disabled separately.=Schaden wird vom Kreativmodus nicht beeinflusst, er muss separat ausgeschaltet werden. -Mobs=Mobs -Mobs are the living beings in the world. This includes animals and monsters.=Mobs sind die lebenden Kreaturen in der Welt. Das schließt Tiere und Monster ein. -Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).=Monster tauchen zufällig in der Welt auf. Das nennt man „spawnen“. Jeder Mobart taucht auf bestimmten Blocktypen bei einer bestimmten Helligkeit auf. Die Höhe spielt auch eine Rolle. Friedliche Mobs neigen dazu, bei Tageslicht zu spawnen, während feindliche Mobs die Dunkelheit bevorzugen. Die meisten Mobs können auf jedem festen Block spawnen, aber einige Mobs können nur auf bestimmten Blöcken spawnen (wie Grasblöcke). -Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.=Wie Spieler haben Mobs Trefferpunkte und manchmal auch Rüstungspunkte (was bedeutet, dass Sie bessere Waffen benötigen, um überhaupt Schaden anrichten zu können). Auch wie bei Spielern können feindliche Mobs direkt angreifen oder aus der Ferne. Mobs können nach ihrem Tod zufällige Gegenstände abwerfen. -Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.=Die meisten Tiere wandern in der Welt ziellos umher, während die meisten feindlichen Mobs die Spieler jagen. Tiere können gefüttert, gezähmt und gezüchtet werden. -Animals=Tiere -Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.=Tiere sind friedliche Wesen, die in der Welt ziellos umherwandern. Sie können sie füttern, zähmen und züchten. -Feeding:=Füttern: -Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.=Jedes Tier hat eine eigene Vorliebe für Nahrung und akzeptiert nicht einfach jedes Lebensmittel. Zum Füttern halten Sie einen Gegenstand in der Hand und rechtsklicken Sie das Tier. -Animals are attraced to the food they like and follow you as long you hold the food item in hand.=Tiere werden von Lebensmitteln, die sie mögen, magisch angezogen und sie folgen Ihnen, solange Sie einen solchen Gegenstand halten. -Feeding an animal has three uses: Taming, healing and breeding.=Füttern hat drei Zwecke: Zähmen, heilen und züchten. -Feeding heals animals instantly, depending on the quality of the food item.=Füttern heilt Tiere sofort, abhängig von der Qualität des Lebensmittels. -Taming:=Zähmen: -A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.=Ein paar Tiere können gezähmt werden. Sie können grundsätzlich mehr Sachen mit gezähmten Tieren machen und andere Gegenstände an ihnen benutzen. Zum Beispiel können zahme Pferde aufgesattelt werden und Wölfe dazu gebracht werden, an Ihrer Seite zu kämpfen. -Breeding:=Züchten: -When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.=Wenn Sie ein Tier bis zur vollen Gesundheit geheilt haben und es erneut füttern, werden Sie den „Liebesmodus“ aktivieren. Viele Herzen tauchen um das Tier herum auf. -Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.=Zwei Tiere der gleichen Art werden sich paaren, wenn sie im Liebesmodus sind und nah beieinander stehen. Kurz darauf wird ein Junges auftauchen. -Baby animals:=Junge: -Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.=Junge sind wie ihre erwachsenen Artgenossen, aber sie können nicht gezähmt oder gezüchtet werden und werfen nichts ab, wenn sie sterben. Nach einer kurzen Zeit werden sie erwachsen. Werden sie gefüttert, werden sie schneller erwachsen. -Hunger=Hunger -Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.=Hunger beeinflusst Ihre Gesundheit und Ihre Fähigkeit, zu sprinten. -Core hunger rules:=Haupthungerregeln: -• You start with 20/20 hunger points (more points @= less hungry)=• Sie beginnen mit 20/20 Hungerpunkten (mehr Punkte @= weniger hungrig) -• Actions like combat, jumping, sprinting, etc. decrease hunger points=• Aktionen wie kämpfen, springen, sprinten, usw. verringern die Hungerpunkte -• Food restores hunger points=• Nahrung erhöht die Hungerpunkte -• If your hunger bar decreases, you're hungry=• Wenn sich Ihre Hungerleiste verringert, sind Sie hungrig -• At 18-20 hunger points, you regenerate 1 HP every 4 seconds=• Bei 18-20 Hungerpunkten erhalten Sie 1 TP alle 4 Sekunden -• At 6 hunger points or less, you can't sprint=• Bei 6 Hungerpunkten oder weniger können Sie nicht sprinten -• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)=• Bei 0 Hungerpunkten verlieren Sie 1 TP alle 4 Sekunden (bis nur 1 TP bleibt) -• Poisonous food decreases your health=• Giftige oder verpestete Nahrung verringert Ihre Gesundheit -Details:=Details: -You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.=Sie haben 0-20 Hungerpunkte, was durch 20 Fleischkeulen-Halbsymbole über der Schnellleiste dargestellt wird. -Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.=Hungerpunkte reflektieren, wie satt Sie sind, während Sättigung reflektiert, wie lange es noch braucht, bis Sie wieder hungrig sind. -Each food item increases both your hunger level as well your saturation.=Jedes Lebensmittel erhöht Ihre Hunger- als auch Ihre Sättigungspunkte. -Food with a high saturation boost has the advantage that it will take longer until you get hungry again.=Nahrung mit einer hohen Sättigung hat den Vorteil, dass es länger dauern wird, bis Sie wieder hungrig sind. -A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.=Ein paar Lebensmittel können eine Lebensmittelvergiftung verursachen. Wenn Sie vergiftet sind, werden die Gesundheits- und Hungersymbole eine ungesund grüne Farbe annehmen. Die Lebensmittelvergiftung verringert Ihre Gesundheit um 1 TP pro Sekunde, bis nur noch 1 TP verbleibt. Eine Lebensmittelvergiftung reduziert auch Ihre Sättigung. Eine Lebensmittelvergiftung vergeht nach einer Weile, oder, wenn Sie Milch trinken. -You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.=Sie beginnen mit 5 Sättigungspunkten. Ihre höchstmögliche Sättigung ist gleich der Anzahl Ihrer Hungerpunkte. Wenn Sie also 20 Hungerpunkte haben, ist Ihre höchstmögliche Sättigung 20. Das bedeutet, dass Lebensmittel mit einer hohen Sättigung effektiver sind, je mehr Hungerpunkte Sie haben. Das ist deshalb so, weil bei wenigen Hungerpunkten ein Großteil des Sättigungsbonus aufgrund der niedrigen Maximalsättigung verloren gehen wird. -If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.=Wenn Ihre Sättigung 0 erreicht, haben Sie Hunger und werden allmählich Hungerpunkte verlieren. Wenn Sie sehen, dass die Hungerleiste sich verringert, ist es ein guter Zeitpunkt, etwas zu essen. -Saturation decreases by doing things which exhaust you (highest exhaustion first):=Die Sättigung verringert sich, wenn Sie Dinge tun, die Sie erschöpfen (höchste Erschöpfung zuerst): -• Regenerating 1 HP=• 1 TP regenerieren -• Suffering food poisoning=• Lebensmittelvergiftung erleiden -• Sprint-jumping=• Beim Sprinten springen -• Sprinting=• Sprinten -• Attacking=• Angreifen -• Taking damage=• Schaden nehmen -• Swimming=• Schwimmen -• Jumping=• Springen -• Mining a block=• Einen Block abbauen -Other actions, like walking, do not exaust you.=Andere Aktionen, wie gehen, erschöpfen Sie nicht. -If you have a map item in any of your hotbar slots, you can use the minimap.=Wenn Sie eine Karte in einem beliebigen Platz der Schnellleiste haben, können Sie die Übersichtskarte benutzen. diff --git a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.fr.tr b/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.fr.tr deleted file mode 100644 index 98fcd81b3..000000000 --- a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.fr.tr +++ /dev/null @@ -1,511 +0,0 @@ -# textdomain: mcl_doc_basics -Basics=Les bases -Everything you need to know to get started with playing=Tout ce que vous devez savoir pour commencer à jouer -Advanced usage=Utilisation avancée -Advanced information which may be nice to know, but is not crucial to gameplay=Informations avancées qui peuvent être agréables à connaître, mais qui ne sont pas cruciales pour le gameplay -Quick start=Démarrage rapide -This is a very brief introduction to the basic gameplay:=Voici une très brève introduction au gameplay de base: -Basic controls:=Contrôles de base: -• Move mouse to look=• Déplacez la souris pour regarder -• [W], [A], [S] and [D] to move=• [W], [A], [S] and [D] to move -• [E] to sprint=• [E] pour sprinter -• [Space] to jump or move upwards=• [Espace] pour sauter ou se déplacer vers le haut -• [Shift] to sneak or move downwards=• [Shift] pour se faufiler ou se déplacer vers le bas -• Mouse wheel or [1]-[9] to select item=• Molette de la souris ou [1] - [9] pour sélectionner l'élément -• Left-click to mine blocks or attack=• Clic gauche pour miner des blocs ou attaquer -• Recover from swings to deal full damage=• Attendez les virages pour faire des dégâts complets -• Right-click to build blocks and use things=• Clic droit pour construire des blocs et utiliser des choses -• [I] for the inventory=• [I] pour l'inventaire -• First items in inventory appear in hotbar below=• Les premiers éléments de l'inventaire apparaissent dans la barre de raccourci ci-dessous -• Lowest row in inventory appears in hotbar below=• La ligne la plus basse de l'inventaire apparaît dans la barre d'outils ci-dessous -• [Esc] to close this window=• [Esc] pour fermer cette fenêtre -How to play:=Comment jouer: -• Punch a tree trunk until it breaks and collect wood=• Frappez un tronc d'arbre jusqu'à ce qu'il se brise et ramassez du bois -• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks=• Placez le bois dans la grille 2×2 (votre "grille d'établi") dans votre menu d'inventaire et fabriquez 4 planches de bois -• Place them in a 2×2 shape in the crafting grid to craft a crafting table=• Placez-les dans une forme 2×2 dans la grille de fabrication pour créer un établi -• Place the crafting table on the ground=• Placez l'établi sur le sol -• Rightclick it for a 3×3 crafting grid=• Faites un clic droit dessus pour une grille de fabrication 3×3 -• Use the crafting guide (book icon) to learn all the possible crafting recipes=• Utilisez le guide d'artisanat (icône du livre) pour apprendre toutes les recettes de fabrication possibles -• Craft a wooden pickaxe so you can dig stone=• Fabriquez une pioche en bois pour creuser la pierre -• Different tools break different kinds of blocks. Try them out!=• Différents outils cassent différents types de blocs. Essayez-les! -• Read entries in this help to learn the rest=• Lisez les entrées de cette aide pour apprendre le reste -• Continue playing as you wish. There's no goal. Have fun!=• Continuez à jouer comme vous le souhaitez. Il n'y a aucun but. Amuser vous! -Minetest=Minetest -Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Minetest est un moteur de jeu logiciel gratuit pour les jeux basés sur le gameplay voxel, inspiré d'InfiniMiner, Minecraft, etc. Minetest a été créé à l'origine par Perttu Ahola (alias «celeron55»). -The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.=Le joueur est jeté dans un monde immense fait de cubes ou de blocs. Ces cubes font généralement le paysage qu'ils blocs peuvent être enlevés et placés presque entièrement librement. En utilisant les objets collectés, de nouveaux outils et autres objets peuvent être fabriqués. Les jeux dans Minetest peuvent cependant être beaucoup plus complexes que cela. -A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Une caractéristique essentielle de Minetest est la capacité de modding intégrée. Les mods modifient le gameplay existant. Ils peuvent être aussi simples que l'ajout de quelques blocs décoratifs ou être très complexes par ex. introduisant des concepts de gameplay complètement nouveaux, générant un type de monde complètement différent, et bien d'autres choses. -Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=Minetest peut être joué seul ou en ligne avec plusieurs joueurs. Le jeu en ligne fonctionnera immédiatement avec tous les mods, sans avoir besoin de logiciels supplémentaires car ils sont entièrement fournis par le serveur. -Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums .=Minetest est généralement fourni avec un jeu par défaut simple, nommé «Minetest Game» (illustré dans les images 1 et 2). Vous l'avez probablement déjà. D'autres jeux pour Minetest peuvent être téléchargés à partir des forums officiels Minetest . -Minetest as well as Minetest Game are both unfinished at the moment, so please forgive us when not everything works out perfectly.=Minetest ainsi que Minetest Game sont tous deux inachevés pour le moment, alors veuillez nous pardonner quand tout ne fonctionne pas parfaitement. -Sneaking=Se faufiler -Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Se faufiler vous fait marcher plus lentement et vous empêche de tomber du bord d'un bloc. -To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Pour vous faufiler, maintenez enfoncée la touche furtive (par défaut: [Shift]). Lorsque vous le relâchez, vous arrêtez de vous faufiler. Attention: lorsque vous relâchez la touche furtive sur un rebord, vous risquez de tomber! -• Sneak: [Shift]=• Se faufiler: [Shift] -Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=Se faufiler ne fonctionne que lorsque vous vous tenez sur un sol solide, pas dans un liquide et ne grimpez pas. -If you jump while holding the sneak key, you also jump slightly higher than usual.=Si vous sautez tout en maintenant la touche furtive, vous sautez également légèrement plus haut que d'habitude. -Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Le faufilement peut être désactivé par les mods. Dans ce cas, vous marchez toujours plus lentement en vous faufilant, mais vous ne serez plus arrêté aux rebords. -Controls=Les contrôles -These are the default controls:=Ce sont les contrôles par défaut: -Basic movement:=Mouvement de base: -• Moving the mouse around: Look around=• Déplacer la souris: regardez autour -• W: Move forwards=• W: Avancer -• A: Move to the left=• A: Déplacer vers la gauche -• D: Move to the right=• D: Déplacer vers la droite -• S: Move backwards=• S: Reculer -• E: Sprint=• E: Courrir -While standing on solid ground:=En position debout sur un sol solide: -• Space: Jump=• Espace: Sauter -• Shift: Sneak=• Shift: Faufiler -While on a ladder, swimming in a liquid or fly mode is active=Sur une échelle, nager dans un liquide ou le mode voler est actif -• Space: Move up=• Espace: Monter -• Shift: Move down=• Shift: Descendre -Extended movement (requires privileges):=Déplacement étendu (nécessite des privilèges): -• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: Basculer en mode rapide, vous permet de courir ou de voler rapidement (nécessite le privilège "fast") -• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: Basculer en mode vol, vous permet de vous déplacer librement dans toutes les directions (nécessite le privilège "fly") -• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: Bascule le mode noclip, vous fait passer à travers les murs en mode vol (nécessite le privilège "noclip") -• E: Move even faster when in fast mode=• E: Déplacez-vous encore plus rapidement en mode rapide -• E: Walk fast in fast mode=• E: Marchez vite en mode rapide -World interaction:=Interaction avec le monde: -• Left mouse button: Punch / mine blocks / take items=• Bouton gauche de la souris: Perforer / miner des blocs / prendre des objets -• Left mouse button: Punch / mine blocks=• Bouton gauche de la souris: Perforer / miner des blocs -• Right mouse button: Build or use pointed block=• Bouton droit de la souris: Créer ou utiliser un bloc pointu -• Shift+Right mouse button: Build=• Shift+Bouton droit de la souris: Construire -• Roll mouse wheel: Select next/previous item in hotbar=• Molette de la souris: Sélectionnez l'élément suivant / précédent dans la barre active -• Roll mouse wheel / B / N: Select next/previous item in hotbar=• Faites rouler la molette de la souris / B / N: Sélectionnez l'élément suivant / précédent dans la barre de raccourci -• 1-9: Select item in hotbar directly=• 1-9: sélectionnez directement l'élément dans la barre de raccourci -• Q: Drop item stack=• Q: Déposer la pile d'objets -• Shift+Q: Drop 1 item=• Shift+Q: Déposer 1 élément -• I: Show/hide inventory menu=• I: Afficher/masquer le menu d'inventaire -Inventory interaction:=Interaction d'inventaire: -See the entry “Basics > Inventory”.=Voir l'entrée «Bases> Inventaire». -Camera:=Caméra: -• Z: Zoom=• Z: Zoom -• F7: Toggle camera mode=• F7: Bascule le mode caméra -• F8: Toggle cinematic mode=• F8: Basculer le mode cinématique -Interface:=Interface: -• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: Ouvrir la fenêtre du menu (fait une pause en mode solo) ou fermer la fenêtre -• F1: Show/hide HUD=• F1: Afficher/masquer le HUD -• F2: Show/hide chat=• F2: Afficher/masquer le chat -• F9: Toggle minimap=• F9: Basculer la mini-carte -• Shift+F9: Toggle minimap rotation mode=• Shift+F9: Bascule le mode de rotation de la mini-carte -• F10: Open/close console/chat log=• F10: Ouvrir/fermer la console/journal de chat -• F12: Take a screenshot=• F12: Prendre une capture d'écran -Server interaction:=Interaction avec le serveur: -• T: Open chat window (chat requires the “shout” privilege)=• T: Ouvrir la fenêtre de discussion (la discussion nécessite le privilège "shout") -• /: Start issuing a server command=• /: Lancer l'émission d'une commande serveur -Technical:=Technique: -• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• R: Basculer la vue éloignée (désactive tout le brouillard et permet une visualisation éloignée, peut rendre le jeu très lent) -• +: Increase minimal viewing distance=• +: Augmentez la distance de visionnement minimale -• -: Decrease minimal viewing distance=• -: Diminue la distance de visionnement minimale -• F3: Enable/disable fog=• F3: Activer/désactiver le brouillard -• F5: Enable/disable debug screen which also shows your coordinates=• F5: Activer / désactiver l'écran de débogage qui affiche également vos coordonnées -• F6: Only useful for developers. Enables/disables profiler=• F6: utile uniquement pour les développeurs. Active/désactive le profileur -• P: Only useful for developers. Writes current stack traces=• P: utile uniquement pour les développeurs. Écrit les traces de pile actuelles -Players=Joueurs -Players (actually: “player characters”) are the characters which users control.=Les joueurs (en fait: "personnages joueurs") sont les personnages que les utilisateurs contrôlent. -Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).=Les joueurs sont des êtres vivants. Ils commencent par un certain nombre de points de vie (PV) et un certain nombre de points de respiration (BP). -Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Les joueurs sont capables de marcher, se faufiler, sauter, grimper, nager, plonger, exploiter, construire, se battre et utiliser des outils et des blocs. -Players can take damage for a variety of reasons, here are some:=Les joueurs peuvent subir des dégâts pour diverses raisons, en voici quelques-unes: -• Taking fall damage=• Prendre des dégâts de chute -• Touching a block which causes direct damage=• Toucher un bloc qui cause des dommages directs -• Drowning=• Noyade -• Being attacked by another player=• Être attaqué par un autre joueur -• Being attacked by a computer enemy=• Être attaqué par un ennemi informatique -At a health of 0, the player dies. The player can just respawn in the world.=À une santé de 0, le joueur meurt. Le joueur peut simplement réapparaître dans le monde. -Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.=Les autres conséquences de la mort dépendent du jeu. Le joueur pourrait perdre tous les objets ou perdre la manche dans une partie compétitive. -Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Certains blocs réduisent la respiration. Tout en étant avec la tête dans un bloc qui provoque la noyade, les points de respiration sont réduits de 1 toutes les 2 secondes. Quand tout le souffle est parti, le joueur commence à subir des dégâts de noyade. Le souffle est rapidement rétabli dans tout autre bloc. -Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Les dégâts peuvent être désactivés sur n'importe quel monde. Sans dégâts, les joueurs sont immortels et la santé et le souffle sont sans importance. -In multi-player mode, the name of other players is written above their head.=En mode multi-joueurs, le nom des autres joueurs est écrit au-dessus de leur tête. -Items=Objects -Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Les objets sont des choses que vous pouvez emporter et stocker dans des inventaires. Ils peuvent être utilisés pour l'artisanat, la fusion, la construction, l'exploitation minière, etc. Les types d'objets comprennent des blocs, des outils, des armes et des objets uniquement utilisés pour l'artisanat. -An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Une pile d'objets est une collection d'objets du même type qui tient dans un seul emplacement d'objet. Les piles d'objets peuvent être déposées au sol. Les objets qui tombent dans les mêmes coordonnées formeront une pile d'objets. -Items have several properties, including the following:=Les éléments ont plusieurs propriétés, notamment les suivantes: -• Maximum stack size: Number of items which fit on 1 item stack=• Taille maximale de la pile: Nombre d'articles pouvant tenir sur une pile d'articles -• Pointing range: How close things must be to be pointed while wielding this item=• Plage de pointage: A quelle distance les choses doivent être pointées lorsque vous maniez cet objet -• Group memberships: See “Basics > Groups”=• Appartenance à un groupe: Voir "Général> Groupes" -• May be used for crafting or cooking=• Peut être utilisé pour l'artisanat ou la cuisine -Dropped item stacks will be collected automatically when you stand close to them.=Les piles d'objets déposés seront collectées automatiquement lorsque vous vous tenez près d'eux. -Tools=Outils -Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Certains articles peuvent servir d'outil lorsqu'ils sont utilisés. Tout objet ayant une utilité particulière pouvant être directement utilisé par son porteur est considéré comme un outil. -When nothing is wielded, players use their hand which may act as tool and weapon.=Quand rien n'est manié, les joueurs utilisent leur main qui peut servir d'outil et d'arme. -A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Un sous-ensemble d'outils sont les outils de minage. Ceux-ci sont importants pour casser toutes sortes de blocs. Les armes sont une sorte d'outil. Il existe bien sûr de nombreux autres outils possibles. Les actions spéciales des outils sont généralement effectuées par un clic gauche ou un clic droit. -Mining tools are important to break all kinds of blocks. Weapons are another kind of tool. There are some other more specialized tools. Special actions of tools are usually done by right-click.=Les outils miniers sont importants pour briser toutes sortes de blocs. Les armes sont un autre type d'outil. Il existe d'autres outils plus spécialisés. Les actions spéciales des outils sont généralement effectuées par un clic droit. -When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of punching and deals minimum damage.=Quand rien n'est manié, les joueurs utilisent leur main qui peut servir d'outil et d'arme. La main est capable de poinçonner et inflige un minimum de dégâts. -Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=De nombreux outils s'usent lors de leur utilisation et peuvent éventuellement être détruits. Les dégâts sont affichés dans une barre de dégâts sous l'icône de l'outil. Si aucune barre de dommage n'est affichée, l'outil est en parfait état. Les outils peuvent être réparables par artisanat, voir «Bases> Artisanat». -Weapons=Armes -Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Certains objets sont utilisables comme arme de mêlée lorsqu'ils sont utilisés. Les armes partagent la plupart des propriétés des outils. -Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Les armes de mêlée infligent des dégâts en frappant les joueurs et d'autres objets animés. Il y a deux façons d'attaquer: -• Single punch: Left-click once to deal a single punch=• Coup de poing unique: Cliquez une fois avec le bouton gauche pour traiter un coup de poing -• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Poinçonnage rapide: Maintenez le bouton gauche de la souris enfoncé pour effectuer des coups de poing répétés rapidement -There are two core attributes of melee weapons:=Il y a deux attributs principaux des armes de mêlée: -• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered=• Dégâts maximum: Dégâts qui sont infligés après un coup lorsque l'arme a été complètement récupérée -• Full punch interval: Time it takes for fully recovering from a punch=• Intervalle de poinçonnage complet: temps nécessaire pour récupérer complètement d'un poinçon -A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Une arme n'inflige des dégâts complets que lorsqu'elle a complètement récupéré d'un coup de poing précédent. Sinon, l'arme n'infligera que des dégâts réduits. Cela signifie que le poinçonnage rapide est très rapide, mais inflige également des dégâts plutôt faibles. Notez que l'intervalle de punch complet ne limite pas la vitesse à laquelle vous pouvez attaquer. -There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=Il existe une règle qui rend parfois les attaques impossibles: les joueurs, les objets animés et les armes appartiennent à des groupes de dégâts. Une arme inflige uniquement des dégâts à ceux qui partagent au moins un groupe de dégâts avec elle. Donc, si vous utilisez la mauvaise arme, vous pourriez ne pas infliger de dégâts du tout. -Pointing=Pointage -“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.="Pointage" signifie regarder quelque chose à portée avec le réticule. Le pointage est nécessaire pour l'interaction, comme l'extraction, le poinçonnage, l'utilisation, etc. -To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Pour pointer quelque chose, il doit se trouver dans la plage de pointage (également appelée simplement "plage") de votre objet brandi. Il y a une plage par défaut lorsque vous ne maniez rien. Une chose pointue sera soulignée ou mise en évidence (en fonction de vos paramètres). Le pointage n'est pas possible avec la caméra frontale à la 3ème personne. -A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=Certaines choses ne peuvent pas être signalées. La plupart des blocs sont pointables. Quelques blocs, comme l'air, ne peuvent jamais être pointés. D'autres blocs, comme les liquides, ne peuvent être pointés que par des objets spéciaux. -Camera=Caméra -There are 3 different views which determine the way you see the world. The modes are:=Il y a 3 vues différentes qui déterminent la façon dont vous voyez le monde. Les modes sont: -• 1: First-person view (default)=• 1: Vue à la première personne (par défaut) -• 2: Third-person view from behind=• 2: Vue à la troisième personne par derrière -• 3: Third-person view from the front=• 3: Vue à la troisième personne de face -You can change the camera mode by pressing [F7].=Vous pouvez changer le mode de l'appareil photo en appuyant sur [F7]. -You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.=Vous pourrez peut-être zoomer avec [Z] pour zoomer la vue sur le réticule. Cela vous permet de regarder plus loin. -Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.=Le zoom est une fonctionnalité de gameplay qui peut être activée ou désactivée par le jeu. Par défaut, le zoom est activé en mode créatif mais désactivé dans le cas contraire. -There is also Cinematic Mode which can be toggled with [F8]. With Cinematic Mode enabled, the camera movements become more smooth. Some players don't like it, it is a matter of taste.=Il y a aussi le mode cinématique qui peut être basculé avec [F8]. Lorsque le mode cinématique est activé, les mouvements de la caméra deviennent plus fluides. Certains joueurs ne l'aiment pas, c'est une question de goût. -By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.=En maintenant [Z] enfoncé, vous pouvez agrandir la vue sur votre réticule. Vous avez besoin du privilège "zoom" pour ce faire. -• Switch camera mode: [F7]=• Changer le mode de l'appareil photo: [F7] -• Toggle Cinematic Mode: [F8]=• Basculer le mode cinématique: [F8] -• Zoom: [Z]=• Zoom: [Z] -Blocks=Blocs -The world of MineClone 2 is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Le monde de MineClone 2 est entièrement constitué de blocs (voxels, pour être précis). Les blocs peuvent être ajoutés ou supprimés avec les bons outils. -The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Le monde est entièrement fait de blocs (voxels, pour être précis). Les blocs peuvent être ajoutés ou supprimés avec les bons outils. -Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=Les blocs peuvent avoir un large éventail de propriétés différentes qui déterminent les temps d'exploration, le comportement, l'apparence, la forme et bien plus encore. Leurs propriétés comprennent: -• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Collidable: les blocs collidables ne peuvent pas être traversés; les joueurs peuvent marcher dessus. Les blocs non collidables peuvent passer librement -• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Pointable: les blocs pointables affichent un filaire ou une boîte de halo lorsqu'ils sont pointés. Mais vous pointerez simplement à travers des blocs non pointables. Les liquides sont généralement non pointables mais ils peuvent être pointés par certains outils spéciaux -• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Propriétés minières: par quels outils il peut être extrait, à quelle vitesse et combien il s'use -• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Grimpable: Pendant que vous êtes sur un bloc grimpable, vous ne tomberez pas et vous pouvez vous déplacer de haut en bas avec les touches de saut et de furtivité -• Drowning damage: See the entry “Basics > Player”=• Dommages liés à la noyade: voir l'entrée "Bases> Joueur" -• Liquids: See the entry “Basics > Liquids”=• Liquides: voir l'entrée "Bases> Liquides" -• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Appartenances aux groupes: les appartenances aux groupes sont utilisées pour déterminer les propriétés minières, l'artisanat, les interactions entre les blocs, etc. -Mining=Exploitation minière -Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=L'exploitation minière (ou creuser) est le processus de rupture des blocs pour les retirer. Pour extraire un bloc, pointez-le et maintenez enfoncé le bouton gauche de la souris jusqu'à ce qu'il se casse. -Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.=Les blocs nécessitent un outil de minage pour être minés. Différents blocs sont extraits par différents outils d'exploration de données, et certains blocs ne peuvent être extraits par aucun outil. Les blocs varient en dureté et les outils varient en résistance. Les outils miniers s'useront avec le temps. Le temps d'extraction et l'usure de l'outil dépendent du bloc et de l'outil d'extraction. Le moyen le plus rapide de découvrir l'efficacité de vos outils d'exploration est simplement de les essayer sur différents blocs. Tous les objets que vous récupérez par extraction tomberont au sol, prêts à être récupérés. -After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=Après l'extraction, un bloc peut laisser une «goutte» derrière. Il s'agit d'un certain nombre d'objets que vous obtenez après l'extraction. Le plus souvent, vous obtiendrez le bloc lui-même. Il existe d'autres possibilités de suppression qui dépendent du type de bloc. Les baisses suivantes sont possibles: -• Always drops itself (the usual case)=• Se laisse toujours tomber (le cas habituel) -• Always drops the same items=• Dépose toujours les mêmes articles -• Drops items based on probability=• Supprime les éléments en fonction de la probabilité -• Drops nothing=• Ne laisse tomber rien -Building=Construire -Almost all blocks can be built (or placed). Building is very simple and has no delay.=Presque tous les blocs peuvent être construits (ou placés). La construction est très simple et n'a pas de retard. -To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Pour construire votre bloc brandi, pointez sur un bloc dans le monde et faites un clic droit. Si cela n'est pas possible car le bloc pointé a une action spéciale de clic droit, maintenez la touche furtive avant de cliquer avec le bouton droit. -Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=Les blocs peuvent presque toujours être construits sur des blocs pointables. Une exception est les blocs attachés au sol; ceux-ci ne peuvent être construits que sur le sol. -Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Normalement, les blocs sont construits devant le côté pointu du bloc pointu. Quelques blocs sont différents: lorsque vous essayez de les construire, ils sont remplacés. -Liquids=Liquides -Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=Les liquides sont des blocs dynamiques spéciaux. Les liquides aiment se propager et s'écouler vers leurs blocs environnants. Les joueurs peuvent nager et se noyer en eux. -Liquids usually come in two forms: In source form (S) and in flowing form (F).=Les liquides se présentent généralement sous deux formes: sous forme source (S) et sous forme fluide (F). -Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.=Les sources liquides ont la forme d'un cube plein. Une source de liquide génère de temps à autre des liquides qui coulent autour d'elle et, si le liquide est renouvelable, elle génère également des sources de liquide. Une source liquide peut se maintenir. Tant qu'elle est laissée seule, une source liquide gardera normalement sa place et ne s'écoulera pas. -Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=Les liquides qui coulent prennent une forme inclinée. Les liquides qui coulent se répandent dans le monde jusqu'à ce qu'ils s'écoulent. Un liquide qui coule ne peut pas subvenir à ses besoins et provient toujours d'une source de liquide, directement ou indirectement. Sans source de liquide, un liquide qui s'écoule finira par s'écouler et disparaître. -All liquids share the following properties:=Tous les liquides partagent les propriétés suivantes: -• All properties of blocks (including drowning damage)=• Toutes les propriétés des blocs (y compris les dégâts de noyade) -• Renewability: Renewable liquids can create new sources=• Renouvelabilité: les liquides renouvelables peuvent créer de nouvelles sources -• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Plage d'écoulement: le nombre de liquides qui s'écoulent au maximum par source de liquide détermine la distance de propagation du liquide. Les plages possibles sont comprises entre 0 et 8. À 0, aucun liquide ne sera créé. L'image 5 montre un liquide de gamme fluide 2 -• Viscosity: How slow players move through it and how slow the liquid spreads=• Viscosité: la vitesse à laquelle les joueurs se déplacent et la vitesse de propagation du liquide -Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:=Les liquides renouvelables créent de nouvelles sources de liquide dans les espaces ouverts (image 2). Une nouvelle source de liquide est créée lorsque: -• Two renewable liquid blocks of the same type touch each other diagonally=• Deux blocs liquides renouvelables du même type se touchent en diagonale -• These blocks are also on the same height=• Ces blocs sont également à la même hauteur -• One of the two “corners” is open space which allows liquids to flow in=• L'un des deux «coins» est un espace ouvert qui permet aux liquides de s'écouler -When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Lorsque ces critères sont remplis, l'espace ouvert est rempli d'une nouvelle source de liquide du même type (image 3). -Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Nager dans un liquide est assez simple: les touches de direction habituelles pour les mouvements de base, la touche de saut pour la montée et la touche furtive pour le naufrage. -The physics for swimming and diving in a liquid are:=La physique pour nager et plonger dans un liquide est: -• The higher the viscosity, the slower you move=• Plus la viscosité est élevée, plus vous vous déplacez lentement -• If you rest, you'll slowly sink=• Si vous vous reposez, vous coulerez lentement -• There is no fall damage for falling into a liquid as such=• Il n'y a aucun dommage de chute pour tomber dans un liquide en tant que tel -• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Si vous tombez dans un liquide, vous serez ralenti à l'impact (mais ne vous arrêtez pas instantanément). Votre profondeur d'impact est déterminée par votre vitesse et la viscosité du liquide. Pour une chute élevée et sûre dans un liquide, assurez-vous qu'il y a suffisamment de liquide au-dessus du sol, sinon vous pourriez toucher le sol et subir des dommages de chute -Liquids are often not pointable. But some special items are able to point all liquids.=Les liquides sont souvent inutiles. Mais certains objets spéciaux sont capables de pointer tous les liquides. -Crafting=Artisanat -Crafting is the task of combining several items to form a new item.=L'artisanat consiste à combiner plusieurs éléments pour former un nouvel élément. -To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Pour fabriquer quelque chose, vous avez besoin d'un ou plusieurs objets, d'une grille de fabrication (C) et d'une recette de fabrication. Une grille d'artisanat est comme un inventaire normal qui peut également être utilisé pour l'artisanat. Les objets doivent être placés selon un certain modèle dans la grille de fabrication. À côté de la grille de fabrication se trouve un emplacement de sortie (O). Ici, le résultat apparaîtra lorsque vous aurez placé les objets correctement. Ceci n'est qu'un aperçu, pas l'élément réel. Les grilles de fabrication peuvent être de différentes tailles, ce qui limite les recettes possibles que vous pouvez créer. -To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Pour terminer le métier, prenez l'objet résultant de l'emplacement de sortie, qui consommera des objets de la grille de fabrication et créera un nouvel objet. Il n'est pas possible de placer des éléments dans la fente de sortie. -A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).=Une description sur la façon de fabriquer un objet est appelée "recette d'artisanat". Vous avez besoin de ces connaissances pour créer. Il existe plusieurs façons d'apprendre des recettes d'artisanat. Une façon consiste à utiliser un guide d'artisanat, qui contient une liste des recettes d'artisanat disponibles. Certains jeux proposent des guides d'artisanat. Il existe également des mods que vous pouvez télécharger en ligne pour installer un guide d'artisanat. Une autre façon consiste à lire le manuel en ligne du jeu (s'il en existe un). -Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Les recettes d'artisanat consistent en au moins un élément d'entrée et exactement une pile d'éléments de sortie. Lors de l'exécution d'un seul métier, il consommera exactement un objet de chaque pile de la grille de fabrication, à moins que la recette de fabrication ne définisse des remplacements. -There are multiple types of crafting recipes:=Il existe plusieurs types de recettes d'artisanat: -• Shaped (image 2): Items need to be placed in a particular shape=• En forme (image 2): Les articles doivent être placés dans une forme particulière -• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)=• Sans forme (images 3 et 4): Les éléments doivent être placés quelque part dans l'entrée (les deux images montrent la même recette) -• Cooking: Explained in “Basics > Cooking”=• Cuisine: expliquée dans "Bases> Cuisine" -• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%=• Réparation (image 5): Placez deux outils endommagés dans la grille d'artisanat n'importe où pour obtenir un outil qui est réparé de 5% -In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=Dans certaines recettes d'artisanat, certains éléments d'entrée n'ont pas besoin d'être un élément concret, ils doivent plutôt être membres d'un groupe (voir "Bases> Groupes"). Ces recettes offrent un peu plus de liberté dans les éléments d'entrée. Les images 6-8 montrent la même recette de groupe. Ici, 8 éléments du groupe "pierre" sont requis, ce qui est vrai pour tous les éléments affichés. -Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=Rarement, les recettes d'artisanat ont des remplacements. Cela signifie que chaque fois que vous effectuez un métier, certains objets de la grille de fabrication ne seront pas consommés, mais seront remplacés à la place par un autre objet. -Cooking=Cuisine -Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=La cuisson (ou la fonte) est une forme d'artisanat qui n'implique pas de grille d'artisanat. La cuisson se fait avec un bloc spécial (comme un four), un article à cuire, un article à combustible et du temps afin de produire un nouvel article. -Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Chaque élément combustible a une durée de combustion. C'est le moment où un seul élément du combustible continue de brûler un four. -Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Chaque élément pouvant être cuit nécessite du temps pour être cuit. Cette durée est spécifique au type d'élément et l'élément doit être «en feu» pendant tout le temps de cuisson pour donner réellement le résultat. -Hotbar=Hotbar -At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=Au bas de l'écran, vous voyez des carrés. C'est ce qu'on appelle la "hotbar". La barre d'accès vous permet d'accéder rapidement aux premiers éléments de votre inventaire de joueur. -You can change the selected item with the mouse wheel or the keyboard.=Vous pouvez modifier l'élément sélectionné avec la molette de la souris ou le clavier. -• Select previous item in hotbar: [Mouse wheel up] or [B]=• Sélectionnez l'élément précédent dans la hotbar: [Molette de la souris vers le haut] ou [B] -• Select next item in hotbar: [Mouse wheel down] or [N]=• Sélectionnez l'élément suivant dans la hotbar: [Molette de la souris vers le bas] ou [N] -• Select item in hotbar directly: [1]-[9]=• Sélectionnez l'élément dans la hotbar directement: [1]-[9] -The selected item is also your wielded item.=L'élément sélectionné est également votre élément brandi. -Minimap=Mini-carte -If you have a map item in any of your hotbar slots, you can use the minimap.=Si vous avez un élément de carte dans l'un de vos emplacements de hotbar vous pouvez utiliser la minicarte. -Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Appuyez sur [F9] pour faire apparaître une mini-carte en haut à droite. La mini-carte vous aide à trouver votre chemin dans le monde. Appuyez à nouveau pour sélectionner différents modes de minicarte et niveaux de zoom. La mini-carte montre également les positions des autres joueurs. -There are 2 minimap modes and 3 zoom levels.=Il existe 2 modes de minicarte et 3 niveaux de zoom. -Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=Le mode surface (image 1) est une vue de haut en bas du monde, ressemblant à peu près aux couleurs des blocs dont ce monde est fait. Il ne montre que les blocs les plus hauts, tout ce qui suit est caché, comme une photo satellite. Le mode Surface est utile si vous vous êtes perdu. -Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=Le mode radar (image 2) est plus compliqué. Il affiche la «densité» de la zone autour de vous et change avec votre taille. En gros, plus une zone est verte, moins elle est «dense». Les zones noires ont de nombreux blocs. Utilisez le radar pour trouver des cavernes, des zones cachées, des murs et plus encore. Les formes rectangulaires de l'image 2 révèlent clairement la position d'un donjon. -There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Il existe également deux modes de rotation différents. En "mode carré", la rotation de la minicarte est fixe. Si vous appuyez sur [Shift] + [F9] pour passer en "mode cercle", la minicarte tournera à la place avec votre direction de recherche, donc "haut" est toujours votre direction de recherche. -In some games, the minimap may be disabled.=Dans certains jeux, la minicarte peut être désactivée. -• Toggle minimap mode: [F9]=• Basculer le mode mini-carte: [F9] -• Toggle minimap rotation mode: [Shift]+[F9]=• Basculer le mode de rotation de la mini-carte: [Shift]+[F9] -Inventory=Inventaire -Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Les stocks sont utilisés pour stocker des piles d'articles. Il existe d'autres utilisations, telles que l'artisanat. Un inventaire se compose d'une grille rectangulaire d'emplacements d'objets. Chaque emplacement d'objet peut être vide ou contenir une pile d'objets. Les piles d'objets peuvent être déplacées librement entre la plupart des emplacements. -You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=Vous avez votre propre inventaire qui s'appelle votre "inventaire de joueur", vous pouvez l'ouvrir avec la touche d'inventaire (par défaut: [I]). Les premiers emplacements d'inventaire sont également utilisés comme emplacements dans votre hotbar. -Blocks can also have their own inventory, e.g. chests and furnaces.=Les blocs peuvent également avoir leur propre inventaire, par exemple coffres et fours. -Inventory controls:=Contrôles d'inventaire: -Taking: You can take items from an occupied slot if the cursor holds nothing.=Prendre: vous pouvez prendre des objets dans un emplacement occupé si le curseur ne contient rien. -• Left click: take entire item stack=• Clic gauche: Prendre toute la pile d'objets -• Right click: take half from the item stack (rounded up)=• Clic droit: Prendre la moitié de la pile d'objets (arrondi vers le haut) -• Middle click: take 10 items from the item stack=• Clic du milieu: Prenez 10 objets de la pile d'objets -• Mouse wheel down: take 1 item from the item stack=• Molette de la souris vers le bas: Prenez 1 objet de la pile d'objets -Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Placer: Vous pouvez placer des objets dans un emplacement si le curseur contient un ou plusieurs objets et que l'emplacement est vide ou contient une pile d'objets du même type d'objet. -• Left click: put entire item stack=• Clic gauche: Mettre toute la pile d'objets -• Right click: put 1 item of the item stack=• Clic droit: Mettre 1 élément de la pile d'objets -• Right click or mouse wheel up: put 1 item of the item stack=• Clic droit ou roulette de la souris vers le haut: Placez 1 article dans la pile d'objets -• Middle click: put 10 items of the item stack=• Clic du milieu: Mettez 10 objets dans la pile d'objets -Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.=Échange: vous pouvez échanger des objets si le curseur contient un ou plusieurs objets et que l'emplacement de destination est occupé par un type d'objet différent. -• Click: exchange item stacks=• Cliquez: Echangez les piles d'articles -Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Jeter: Si vous maintenez une pile d'objets et cliquez avec elle quelque part en dehors du menu, la pile d'objets est jetée dans l'environnement. -Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Transfert rapide: vous pouvez rapidement transférer une pile d'objets vers / depuis l'inventaire du joueur vers / depuis l'emplacement d'inventaire d'un autre objet comme un four, un coffre ou tout autre élément avec un emplacement d'inventaire lorsque l'inventaire de cet article est accessible. L'inventaire cible est généralement l'inventaire le plus pertinent dans ce contexte. -• Sneak+Left click: Automatically transfer item stack=• Faufiler+clic gauche: transférer automatiquement la pile d'objets -Online help=Aide en ligne -You may want to check out these online resources related to MineClone 2.=Vous voudrez peut-être consulter ces ressources en ligne liées à MineClone 2. -MineClone 2 download and forum discussion: =Téléchargement de MineClone 2 et discussion sur le forum: -Here you find the most recent version of MineClone 2 and can discuss it.=Vous trouverez ici la version la plus récente de MineClone 2 et pouvez en discuter. -Bug tracker: =Suivi des bogues: -Report bugs here.=Signalez les bugs ici. -Minetest links:=Liens Minetest: -You may want to check out these online resources related to Minetest:=Vous voudrez peut-être consulter ces ressources en ligne liées à Minetest: -Official homepage of Minetest: =Page d'accueil officielle de Minetest: -The main place to find the most recent version of Minetest, the engine used by MineClone 2.=L'endroit principal pour trouver la version la plus récente de Minetest, le moteur utilisé par MineClone 2. -The main place to find the most recent version of Minetest.=L'endroit principal pour trouver la version la plus récente de Minetest. -Community wiki: =Wiki de la communauté: -A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Un site Web de documentation communautaire pour Minetest. N'importe qui avec un compte peut le modifier! C'est aussi une documentation pour Minetest. -Minetest forums: =Forums de minetest: -A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Une plate-forme de discussion en ligne où vous pouvez discuter de tout ce qui concerne Minetest. C'est également un endroit où les mods et les jeux créés par les joueurs sont publiés et discutés. Les discussions se déroulent principalement en anglais, mais il existe également un espace de discussion dans d'autres langues. -Chat: =Chat: -A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Un canal de discussion générique pour tout ce qui concerne le Minetest où les gens peuvent se rencontrer pour discuter en temps réel. Si vous ne comprenez pas IRC, consultez le wiki de la communauté pour obtenir de l'aide. -Groups=Groupes -Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Les objets, les joueurs et les objets (animés et inanimés) peuvent être membres de plusieurs de groupes. Les groupes ont plusieurs objectifs: -• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Recettes d'artisanat: Les emplacements d'une recette d'artisanat peuvent ne pas nécessiter un élément spécifique, mais plutôt un élément qui est membre d'un groupe particulier ou de plusieurs groupes. -• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Temps de creusement: Les blocs pouvant être creusés appartiennent à des groupes qui sont utilisés pour déterminer les temps de creusement. Les outils miniers sont capables de creuser des blocs appartenant à certains groupes -• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Comportement des blocs: Les blocs peuvent présenter un comportement spécial et interagir avec d'autres blocs lorsqu'ils appartiennent à un groupe particulier -• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Dommages et armures: Les objets et les joueurs ont des groupes d'armures, les armes ont des groupes de dégâts. Ces groupes déterminent les dommages. Voir aussi: "Bases> Armes" -• Other uses=• Autres utilisations -In the item help, many important groups are usually mentioned and explained.=Dans l'aide aux objets, de nombreux groupes importants sont généralement mentionnés et expliqués. -Glossary=Glossaire -This is a list of commonly used terms:=Voici une liste de termes couramment utilisés: -Controls:=Les contrôles: -• Wielding: Holding an item in hand=• Maniement: Tenir un objet en main -• Pointing: Looking with the crosshair at something in range=• Pointage: Regarder avec le réticule quelque chose à portée -• Dropping: Throwing an item or item stack to the ground=• Lâcher: Jeter un objet ou une pile d'objets au sol -• Punching: Attacking with left-click, is also used on blocks=• Frapper: Attaque avec clic gauche, est également utilisé sur les blocs -• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Se faufiler: Marcher lentement tout en évitant (généralement) de tomber sur les bords -• Climbing: Moving up or down a climbable block=• Escalade: Monter ou descendre un bloc grimpable -Blocks:=Blocs: -• Block: Cubes that the worlds are made of=• Bloc: Cubes dont les mondes sont faits -• Mining/digging: Using a mining tool to break a block=• Exploration/minage: Utilisation d'un outil d'exploration pour casser un bloc -• Building/placing: Putting a block somewhere=• Construction/Placement: Placer un bloc quelque part -• Drop: Items you get after mining a block=• Drop: Les objets que vous obtenez après avoir extrait un bloc -• Using a block: Right-clicking a block to access its special function=• Utilisation d'un bloc: Clic droit sur un bloc pour accéder à sa fonction spéciale -Items:=Objects: -• Item: A single thing that players can possess=• Objet: Une seule chose que les joueurs peuvent posséder -• Item stack: A collection of items of the same kind=• Pile d'objets: Une collection d'objets du même type -• Maximum stack size: Maximum amount of items in an item stack=• Taille maximale de la pile: Quantité maximale d'éléments dans une pile d'éléments -• Slot / inventory slot: Can hold one item stack=• Emplacement/Emplacement d'inventaire: Peut contenir une pile d'objets -• Inventory: Provides several inventory slots for storage=• Inventaire: Fournit plusieurs emplacements d'inventaire pour le stockage -• Player inventory: The main inventory of a player=• Inventaire des joueurs: L'inventaire principal d'un joueur -• Tool: An item which you can use to do special things with when wielding=• Outil: Un élément que vous pouvez utiliser pour faire des choses spéciales avec lors du soudage -• Range: How far away things can be to be pointed by an item=• Plage: A quelle distance les objets peuvent être pointés par un élément -• Mining tool: A tool which allows to break blocks=• Outil minier: Un outil qui permet de casser des blocs -• Craftitem: An item which is (primarily or only) used for crafting=• Composant: Un objet qui est (principalement ou uniquement) utilisé pour l'artisanat -Gameplay:=Gameplay: -• “heart”: A single health symbol, indicates 2 HP=• "coeur": Un seul symbole de santé, indique 2 PV -• “bubble”: A single breath symbol, indicates 1 BP=• "bulle": Un symbole de respiration unique, indique 1 BP -• HP: Hit point (equals half 1 “heart”)=• VP: point de vie (équivaut à un demi-«coeur») -• BP: Breath point, indicates breath when diving=• BP: Point de respiration, indique la respiration lors de la plongée -• Mob: Computer-controlled enemy=• Mob: Ennemi contrôlé par ordinateur -• Crafting: Combining multiple items to create new ones=• Artisanat: Combiner plusieurs objets pour en créer de nouveaux -• Crafting guide: A helper which shows available crafting recipes=• Guide d'artisanat: Un assistant qui montre les recettes d'artisanat disponibles -• Spawning: Appearing in the world=• Reproduction: Apparaissant dans le monde -• Respawning: Appearing again in the world after death=• Réapparition: Réapparaître dans le monde après la mort -• Group: Puts similar things together, often affects gameplay=• Groupe: Rassemble des choses similaires, affecte souvent le gameplay -• noclip: Allows to fly through walls=• noclip: Permet de voler à travers les murs -Interface=Interface -• Hotbar: Inventory slots at the bottom=• Hotbar: Emplacements d'inventaire en bas -• Statbar: Indicator made out of half-symbols, used for health and breath=• Statbar: Indicateur composé de demi-symboles, utilisé pour la santé et la respiration -• Minimap: The map or radar at the top right=• Mini-carte: La carte ou le radar en haut à droite -• Crosshair: Seen in the middle, used to point at things=• Réticule: Vu au milieu, utilisé pour pointer les choses -Online multiplayer:=Multijoueur en ligne: -• PvP: Player vs Player. If active, players can deal damage to each other=• PvP: Joueur contre Joueur. S'ils sont actifs, les joueurs peuvent s'infliger mutuellement des dégâts -• Griefing: Destroying the buildings of other players against their will=• Deuil: Détruire les bâtiments des autres joueurs contre leur gré -• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Protection: Mécanisme pour posséder des zones du monde, qui permet uniquement aux propriétaires de modifier les blocs à l'intérieur -Technical terms:=Termes techniques: -• Minetest: This game engine=• Minetest: Ce moteur de jeu -• MineClone 2: What you play right now=• MineClone 2: Ce que vous jouez en ce moment -• Minetest Game: A game for Minetest by the Minetest developers=• Minetest Game: Un jeu pour Minetest par les développeurs de Minetest -• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Jeu: Une expérience de jeu complète à utiliser dans Minetest; comme un jeu ou un bac à sable ou similaire -• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them=• Mod: un sous-système unique qui ajoute ou modifie des fonctionnalités; est le bloc de construction de base des jeux et peut être utilisé pour les améliorer ou les modifier davantage -• Privilege: Allows a player to do something=• Privilège: Permet à un joueur de faire quelque chose -• Node: Other word for “block”=• Noeud: Autre mot pour "bloc" -Settings=Réglages -There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Il existe une grande variété de paramètres pour configurer Minetest. Presque tous les aspects peuvent être modifiés de cette façon. -These are a few of the most important gameplay settings:=Voici quelques-uns des paramètres de jeu les plus importants: -• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Dommage activé (enable_damage): Active les attributs de santé et de souffle pour tous les joueurs. Si désactivé, les joueurs sont immortels -• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Mode créatif (creative_mode): permet un gameplay de style sandbox en se concentrant sur la créativité plutôt que sur un gameplay difficile. Le sens dépend du jeu; les changements habituels sont: temps de fouille réduits, accès facile à presque tous les articles, les outils ne s'usent jamais, etc. -• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• PvP (enable_pvp): Abréviation de «Player vs Player». Si activé, les joueurs peuvent s'infliger mutuellement des dégâts -For a full list of all available settings, use the “All Settings” dialog in the main menu.=Pour une liste complète de tous les paramètres disponibles, utilisez la boîte de dialogue "Tous les Paramètres" dans le menu principal. -Movement modes=Modes de mouvement -You can enable some special movement modes that change how you move.=Vous pouvez activer certains modes de déplacement spéciaux qui modifient votre façon de vous déplacer. -Pitch movement mode:=Mode de mouvement de tangage: -• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.=• Description: Si ce mode est activé, les touches de déplacement vous déplaceront par rapport à votre hauteur de vue actuelle (angle de vue vertical) lorsque vous êtes en mode liquide ou en mode vol. -• Default key: [L]=• Touche par défaut: [L] -• No privilege required=• Aucun privilège requis -Fast mode:=Mode Rapide: -• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Description: vous permet de vous déplacer beaucoup plus rapidement. Maintenez la touche "Utiliser" [E] enfoncée pour vous déplacer plus rapidement. Dans la configuration du client, vous pouvez personnaliser davantage le mode rapide. -• Default key: [J]=• Touche par défaut: [J] -• Required privilege: fast=• Privilège requis: fast -Fly mode:=Mode Vol: -• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Description: La gravité ne vous affecte pas et vous pouvez vous déplacer librement dans toutes les directions. Utilisez la touche de saut pour monter et la touche de sneak pour descendre. -• Default key: [K]=• Touche par défaut: [K] -• Required privilege: fly=• Privilège requis: fly -Noclip mode:=Mode Noclip: -• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Description: vous permet de vous déplacer à travers les murs. Fonctionne uniquement lorsque le mode avion est également activé. -• Default key: [H]=• Touche par défaut: [H] -• Required privilege: noclip=• Privilège requis: noclip -Console=Console -With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=Avec [F10], vous pouvez ouvrir et fermer la console. L'utilisation principale de la console est d'afficher le journal de discussion et d'entrer des messages de discussion ou des commandes de serveur. -Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=L'utilisation de la touche de commande chat ou serveur ouvre également la console, mais elle est plus petite et sera fermée après l'envoi d'un message. -Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Utilisez le chat pour communiquer avec d'autres joueurs. Cela vous oblige à avoir le privilège "shout". -Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Tapez simplement le message et appuyez sur [Entrée]. Les messages de discussion publique ne peuvent pas commencer par "/". -You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .=Vous pouvez envoyer des messages privés: Dites "/msg " dans le chat pour envoyer "" qui ne peut être vu que par . -There are some special controls for the console:=Il existe des commandes spéciales pour la console: -• [F10] Open/close console=• [F10]: Ouvrir/fermer la console -• [Enter]: Send message or command=• [Entrée]: Envoyer un message ou une commande -• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: Essayez de compléter automatiquement un nom de joueur partiellement entré -• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Ctrl]+[Gauche]: Déplacer le curseur au début du mot précédent -• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Ctrl]+[Droite]: Déplacez le curseur au début du mot suivant -• [Ctrl]+[Backspace]: Delete previous word=• [Ctrl]+[Retour arrière]: Supprimer le mot précédent -• [Ctrl]+[Delete]: Delete next word=• [Ctrl]+[Supprimer]: Supprimer le mot suivant -• [Ctrl]+[U]: Delete all text before the cursor=• [Ctrl]+[U]: Supprimer tout le texte avant le curseur -• [Ctrl]+[K]: Delete all text after the cursor=• [Ctrl]+[K]: Supprimer tout le texte après le curseur -• [Page up]: Scroll up=• [Page précédente]: Faites défiler vers le haut -• [Page down]: Scroll down=• [Page suivante]: Faites défiler vers le bas -There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Il existe également un historique des entrées. Minetest enregistre vos entrées de console précédentes auxquelles vous pouvez accéder rapidement plus tard: -• [Up]: Go to previous entry in history=• [Haut]: Aller à l'entrée précédente de l'historique -• [Down]: Go to next entry in history=• [Bas]: Passer à la prochaine entrée de l'historique -Server commands=Commandes serveur -Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=Les commandes serveur (également appelées "commandes de chat") sont de petites aides pour les utilisateurs avancés. Vous n'avez pas besoin d'utiliser ces commandes lors du jeu. Mais elles pourraient être utiles pour effectuer des tâches plus techniques. Les commandes du serveur fonctionnent à la fois en mode multi-joueurs et solo. -Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=Les commandes du serveur peuvent être saisies par les joueurs utilisant le chat pour effectuer une action spéciale du serveur. Il y a quelques commandes qui peuvent être émises par tout le monde, mais certaines commandes ne fonctionnent que si vous avez certains privilèges accordés sur le serveur. Il y a un petit ensemble de commandes de base qui sont toujours disponibles, d'autres commandes peuvent être ajoutées par des mods. -To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Pour lancer une commande, tapez-la simplement comme un message de discussion ou appuyez sur la touche de commande de Minetest (par défaut: [/]). Toutes les commandes doivent commencer par "/", par exemple "/mods". La touche de commande Minetest fait la même chose que la touche de conversation, sauf que la barre oblique est déjà entrée. -Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=Les commandes peuvent ou non donner une réponse dans le journal de discussion, mais les erreurs seront généralement affichées dans la discussion. Essayez-le par vous-même: Fermez cette fenêtre et tapez la commande "/mods". Cela vous donnera la liste des mods disponibles sur ce serveur. -“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.="/Help all" est une commande très importante: vous obtenez une liste de toutes les commandes disponibles sur le serveur, une brève explication et les paramètres autorisés. Cette commande est également importante car les commandes disponibles diffèrent souvent selon le serveur. -Commands are followed by zero or more parameters.=Les commandes sont suivies de zéro ou plusieurs paramètres. -In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=Dans la référence de commande, vous voyez des espaces réservés que vous devez remplacer par une valeur réelle. Voici une explication: -• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter=• Texte en signes supérieur à et inférieur à (par exemple «»): Espace réservé pour un paramètre -• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Tout ce qui est entre crochets (par exemple «[texte]») est facultatif et peut être omis -• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Tuyau ou barre oblique (par exemple, «texte1 | texte2 | texte3»): Alternance. L'un des multiples textes doit être utilisé (par exemple, "texte2") -• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Parenthèses: (par exemple «(mot1 mot2) | mot3»): Regroupe plusieurs mots, utilisés pour les alternances -• Everything else is to be read as literal text=• Tout le reste doit être lu comme un texte littéral -Here are some examples to illustrate the command syntax:=Voici quelques exemples pour illustrer la syntaxe de commande: -• /mods: No parameters. Just enter “/mods”=• /mods: aucun paramètre. Entrez simplement "/mods" -• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /me : 1 paramètre. Vous devez saisir "/me" suivi de tout texte, par ex. "/me order pizza" -• /give : Two parameters. Example: “/give Player default:apple”=• /give : Deux paramètres. Exemple: "/give Player default:apple" -• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all | privs | ]: Les entrées valides sont "/help", "/help all", "/help privs" ou "/help" suivi d'un nom de commande, comme "/help time" -• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity [,,]: Les entrées valides sont “/spawnentity boats:boat” et “/spawnentity boats:boat 0,0,0” -Some final remarks:=Quelques remarques finales: -• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=• Pour /give et /giveme, vous avez besoin d'une chaîne d'objet. Il s'agit d'un identifiant d'élément unique utilisé en interne que vous pouvez trouver dans l'aide de l'élément si vous disposez du privilège "give" ou "debug". -• For /spawnentity you need an entity name, which is another identifier=• Pour /spawnentity, vous avez besoin d'un nom d'entité, qui est un autre identifiant -Privileges=Privilèges -Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Chaque joueur dispose d'un ensemble de privilèges, qui diffèrent d'un serveur à l'autre. Vos privilèges déterminent ce que vous pouvez et ne pouvez pas faire. Les privilèges peuvent être accordés et révoqués aux autres joueurs par n'importe quel joueur qui a le privilège appelé "privs". -On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=Sur un serveur multijoueur avec la configuration par défaut, les nouveaux joueurs commencent avec les privilèges appelés "interact" et "shout". Le privilège "interact" est requis pour les actions de jeu les plus élémentaires telles que la construction, l'extraction, l'utilisation, etc. Le privilège "shout" permet de discuter. -There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Il existe un petit ensemble de privilèges de base que vous trouverez sur chaque serveur, d'autres privilèges peuvent être ajoutés par les mods. -To view your own privileges, issue the server command “/privs”.=Pour afficher vos propres privilèges, exécutez la commande serveur "/privs". -Here are a few basic privilege-related commands:=Voici quelques commandes de base liées aux privilèges: -• /privs: Lists your privileges=• /privs: Répertorie vos privilèges -• /privs : Lists the privileges of =• /privs : Répertorie les privilèges de -• /help privs: Shows a list and description about all privileges=• /help privs: Affiche une liste et une description de tous les privilèges -Players with the “privs” privilege can modify privileges at will:=Les joueurs avec le privilège "privs" peuvent modifier les privilèges à volonté: -• /grant : Grant to =• /grant : Accordez à -• /revoke : Revoke from =• /revoke : Révoquer de -In single-player mode, you can use “/grantme all” to unlock all abilities.=En mode solo, vous pouvez utiliser "/grantme all" pour débloquer toutes les capacités. -Light=Lumière -As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Comme le monde est entièrement basé sur des blocs, la lumière du monde l'est également. Chaque bloc a sa propre luminosité. La luminosité d'un bloc s'exprime dans un "niveau de lumière" qui varie de 0 (obscurité totale) à 15 (aussi lumineux que le soleil). -There are two types of light: Sunlight and artificial light.=Il existe deux types de lumière: La lumière du soleil et la lumière artificielle. -Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=La lumière artificielle est émise par des blocs lumineux. La lumière artificielle a un niveau de lumière de 1 à 14. -Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=La lumière du soleil est la lumière la plus brillante et descend toujours parfaitement directement du ciel à chaque heure de la journée. La nuit, la lumière du soleil deviendra le clair de lune à la place, qui fournit toujours une petite quantité de lumière. Le niveau de lumière solaire est de 15. -Blocks have 3 levels of transparency:=Les blocs ont 3 niveaux de transparence: -• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Transparent: La lumière du soleil passe sans limite, la lumière artificielle passe avec des pertes -• Semi-transparent: Sunlight and artificial light go through with losses=• Semi-transparent: La lumière du soleil et la lumière artificielle subissent des pertes -• Opaque: No light passes through=• Opaque: Aucune lumière ne passe -Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=La lumière artificielle perdra un niveau de luminosité pour chaque bloc transparent ou semi-transparent qu'elle traverse, jusqu'à ce qu'il ne reste que l'obscurité (image 1). -Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=La lumière du soleil conservera sa luminosité tant qu'elle ne passera que par des blocs entièrement transparents. Lorsqu'il passe à travers un bloc semi-transparent, il se transforme en lumière artificielle. L'image 2 montre la différence. -Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Notez que la "transparence" ici signifie uniquement que le bloc est capable de transporter la luminosité de ses blocs voisins. Il est possible qu'un bloc soit transparent à la lumière mais vous ne pouvez pas voir à travers l'autre côté. -Coordinates=Coordonnées -The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Le monde est un grand cube. Et pour cette raison, une position dans le monde peut être facilement exprimée avec des coordonnées cartésiennes. Autrement dit, pour chaque position dans le monde, il existe 3 valeurs X, Y et Z. -Like this: (5, 45, -12)=Comme ceci: (5, 45, -12) -This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=Cela fait référence à la position où X@=5, Y@=45 et Z@=-12. Les 3 lettres sont appelées "axes": Y est pour la hauteur. X et Z sont pour la position horizontale. -The values for X, Y and Z work like this:=Les valeurs pour X, Y et Z fonctionnent comme ceci: -• If you go up, Y increases=• Si vous montez, Y augmente -• If you go down, Y decreases=• Si vous descendez, Y diminue -• If you follow the sun, X increases=• Si vous suivez le soleil, X augmente -• If you go to the reverse direction, X decreases=• Si vous allez dans le sens inverse, X diminue -• Follow the sun, then go right: Z increases=• Suivez le soleil, puis allez à droite: Z augmente -• Follow the sun, then go left: Z decreases=• Suivez le soleil, puis allez à gauche: Z diminue -• The side length of a full cube is 1=• La longueur latérale d'un cube complet est de 1 -You can view your current position in the debug screen (open with [F5]).=Vous pouvez afficher votre position actuelle dans l'écran de débogage (ouvrir avec [F5]). - -# MCL2 extensions -Creative Mode=Mode Creatif -Enabling Creative Mode in MineClone 2 applies the following changes:=L'activation du mode créatif dans MineClone 2 applique les modifications suivantes: -• You keep the things you've placed=• Vous gardez les choses que vous avez placées -• Creative inventory is available to obtain most items easily=• Un inventaire créatif est disponible pour obtenir facilement la plupart des objets -• Hand breaks all default blocks instantly=• La main brise instantanément tous les blocs par défaut -• Greatly increased hand pointing range=• Plage de pointage de la main considérablement augmentée -• Mined blocks don't drop items=• Les blocs extraits ne déposent pas d'objets -• Items don't get used up=• Les articles ne s'épuisent pas -• Tools don't wear off=• Les outils ne s'usent pas -• You can eat food whenever you want=• Vous pouvez manger de la nourriture quand vous le souhaitez -• You can always use the minimap (including radar mode)=• Vous pouvez toujours utiliser la minicarte (y compris le mode radar) -Damage is not affected by Creative Mode, it needs to be disabled separately.=Les dommages ne sont pas affectés par le mode créatif, ils doivent être désactivés séparément. -Mobs=Mobs -Mobs are the living beings in the world. This includes animals and monsters.=Les mobs sont les êtres vivants du monde. Cela inclut les animaux et les monstres. -Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).=Les mobs apparaissent de manière aléatoire à travers le monde. C'est ce qu'on appelle l'"apparition". Chaque type de mob apparaît sur des types de blocs particuliers à un niveau de lumière donné. La hauteur joue également un rôle. Les mobs pacifiques ont tendance à apparaître à la lumière du jour tandis que les hostiles préfèrent l'obscurité. La plupart des mobs peuvent apparaître sur n'importe quel bloc solide, mais certains n'apparaissent que sur des blocs particuliers (comme les blocs d'herbe). -Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.=Comme les joueurs, les monstres ont aussi des points de vie et parfois des points d'armure (ce qui signifie que vous avez besoin de meilleures armes pour infliger des dégâts). Comme les joueurs, les monstres hostiles peuvent attaquer directement ou à distance. Les mobs peuvent déposer des objets aléatoires après leur mort. -Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.=La plupart des animaux parcourent le monde sans but tandis que la plupart des monstres hostiles chassent les joueurs. Les animaux peuvent être nourris, apprivoisés et élevés. -Animals=Animaux -Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.=Les animaux sont des êtres pacifiques qui parcourent le monde sans but. Vous pouvez les nourrir, les apprivoiser et les élever. -Feeding:=Alimentation: -Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.=Chaque animal a son propre goût pour la nourriture et n'accepte pas n'importe quelle nourriture. Pour vous nourrir, tenez un objet dans votre main et faites un clic droit sur l'animal. -Animals are attraced to the food they like and follow you as long you hold the food item in hand.=Les animaux sont attirés par la nourriture qu'ils aiment et vous suivent aussi longtemps que vous tenez l'aliment en main. -Feeding an animal has three uses: Taming, healing and breeding.=Nourrir un animal a trois usages: Apprivoiser, guérir et se reproduire. -Feeding heals animals instantly, depending on the quality of the food item.=Nourrir les animaux guérit instantanément, selon la qualité de l'aliment. -Taming:=Apprivoisement: -A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.=Quelques animaux peuvent être apprivoisés. Vous pouvez généralement faire plus de choses avec des animaux apprivoisés et utiliser d'autres objets dessus. Par exemple, les chevaux apprivoisés peuvent être sellés et les loups apprivoisés se battent à vos côtés. -Breeding:=Reproduction: -When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.=Lorsque vous avez nourri un animal à sa santé maximale, puis le nourrir à nouveau, vous activerez le "Mode Amour" et de nombreux coeurs apparaissent autour de l'animal. -Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.=Deux animaux de la même espèce commenceront à se reproduire s'ils sont en mode Amour et proches l'un de l'autre. Bientôt, un bébé animal apparaîtra. -Baby animals:=Bébés animaux: -Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.=Les bébés animaux sont comme leurs homologues adultes, mais ils ne peuvent pas être apprivoisés ou élevés et ne laissent rien tomber lorsqu'ils meurent. Ils deviennent adultes après peu de temps. Une fois nourris, ils deviennent plus vite adultes. -Hunger=Faim -Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.=La faim affecte votre santé et votre capacité à sprinter. La faim n'est pas active lorsque les dégâts sont désactivés. -Core hunger rules:=Règles fondamentales de la faim: -• You start with 20/20 hunger points (more points @= less hungry)=• Vous commencez avec 20/20 points de faim (plus de points @= moins faim) -• Actions like combat, jumping, sprinting, etc. decrease hunger points=• Des actions comme le combat, le saut, le sprint, etc. diminuent les points de faim -• Food restores hunger points=• La nourriture rétablit les points de faim -• If your hunger bar decreases, you're hungry=• Si votre barre de la faim diminue, vous avez faim -• At 18-20 hunger points, you regenerate 1 HP every 4 seconds=• À 18-20 points de faim, vous régénérez 1 PV toutes les 4 secondes -• At 6 hunger points or less, you can't sprint=• À 6 points de faim ou moins, vous ne pouvez pas sprinter -• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)=• À 0 point de faim, vous perdez 1 PV toutes les 4 secondes (jusqu'à 1 PV) -• Poisonous food decreases your health=• La nourriture toxique diminue votre santé -Details:=Détails: -You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.=Vous avez 0-20 points de faim, indiqués par 20 demi-icônes de pilon de Poulet au-dessus de la hotbar. Vous avez également un attribut invisible: La saturation. -Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.=Les points de faim reflètent à quel point vous êtes plein tandis que les points de saturation reflètent le temps qu'il vous faut avant d'avoir à nouveau faim. -Each food item increases both your hunger level as well your saturation.=Chaque aliment augmente à la fois votre niveau de faim et votre saturation. -Food with a high saturation boost has the advantage that it will take longer until you get hungry again.=Les aliments avec une augmentation de saturation élevée ont l'avantage de prendre plus de temps jusqu'à ce que vous ayez de nouveau faim. -A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.=Quelques denrées alimentaires peuvent provoquer une intoxication alimentaire par hasard. Lorsque vous êtes empoisonné, les symboles de santé et de faim virent au vert maladif. L'intoxication alimentaire draine votre santé de 1 PV par seconde, jusqu'à 1 PV. L'intoxication alimentaire draine également votre saturation. L'intoxication alimentaire disparaît après un certain temps ou lorsque vous buvez du lait. -You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.=Vous commencez avec 5 points de saturation. La saturation maximale est égale à votre niveau de faim actuel. Ainsi, avec 20 points de faim, votre saturation maximale est de 20. Ce que cela signifie, c'est que les aliments qui rétablissent de nombreux points de saturation sont plus efficaces avec plus de points de faim. En effet, à de faibles niveaux de faim, une grande partie de l'augmentation de la saturation sera perdue en raison du plafond de saturation faible. -If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.=Si votre saturation atteint 0, vous avez faim et commencez à perdre des points de faim. Chaque fois que vous voyez la barre de la faim diminuer, c'est le bon moment pour manger. -Saturation decreases by doing things which exhaust you (highest exhaustion first):=La saturation diminue en faisant des choses qui vous épuisent (épuisement le plus élevé en premier): -• Regenerating 1 HP=• Régénérant 1 PV -• Suffering food poisoning=• Souffrance d'intoxication alimentaire -• Sprint-jumping=• Saut de sprint -• Sprinting=• Piquer un Sprint -• Attacking=• Combattre -• Taking damage=• Prendre des dégâts -• Swimming=• Nager -• Jumping=• Sauter -• Mining a block=• Miner un bloc -Other actions, like walking, do not exaust you.=D'autres actions, comme la marche, ne vous épuisent pas. -If you have a map item in any of your hotbar slots, you can use the minimap.=Si vous avez un élément de carte dans l'un de vos emplacements de la hotbar, vous pouvez utiliser la minicarte. diff --git a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.it.tr b/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.it.tr deleted file mode 100644 index 694735cac..000000000 --- a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.it.tr +++ /dev/null @@ -1,408 +0,0 @@ -# textdomain: mcl_doc_basics -Basics=Nozioni di base -Everything you need to know about Minetest to get started with playing=Tutto ciò che vi serve sapere riguardo a Minetest per cominciare a giocare -Advanced usage=Utilizzo avanzato -Advanced information about Minetest which may be nice to know, but is not crucial to gameplay=Informazioni avanzate riguardo a Minetest che possono essere utili da conoscere, ma non sono cruciali per l'esperienza di gioco -Quick start=Partenza rapida -This is a very brief introduction to the basic gameplay:=Questa è una introduzione molto rapida all'esperienza di gioco di base -• Move mouse to look=• Spostare il mouse per guardare attorno -• [W], [A], [S] and [D] to move=• [W], [A], [S] e [D] per muoversi -• [Space] to jump or move upwards=• [Spazio] per saltare o muoversi in su -• [Shift] to sneak or move downwards=• [Maiusc] per strisciare o muoversi in giù -• Mouse wheel or [0]-[9] to select item=• Rotella del mouse o [0]-[9] per scegliere un oggetto -• Left-click to mine blocks or attack=• Click sinistro per scavare i blocchi o attaccare -• Recover from swings to deal full damage=• Riprendersi dall'oscillazione per infliggere un danno completo -• Right-click to build blocks and use things=• Click destro per costruire blocchi e usare gli oggetti -• [I] for the inventory=• [I] per aprire l'inventario -• First items in inventory appear in hotbar below=• I primi oggetti nell'inventario compaiono nella barra di uso frequente sottostante -• [F9] for the minimap=• [F9] per attivare la minimappa -• Put items into crafting grid (usually 3×3 grid) to craft=• Mettete gli oggetti nella griglia di assemblaggio (normalmente una griglia 3x3) per assemblare -• Use a crafting guide mod to learn crafting recipes or visit =• Usate una gruida di assemblaggio per imparare le ricette di assemblaggio o visitate -• Read entries in this help to learn the rest=• Leggete le voci in questa guida per imparare il resto -• [Esc] to close this window=• [Esc] per chiudere questa finestra -Minetest=Minetest -Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Minetest è un programma gratuito che funge da motore di gioco per giochi basati sull'esperienza di gioco coi voxel, ispirato da InfiniMiner, Minecraft, e simili. Minetest in origine è stato creato da Perttu Ahola (cioè “celeron55”). -The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest (also called “subgames”) can, however, be much more complex than this.=L'utente è gettat* in un enorme mondo fatto di cubi o blocchi. Questi cubi normalmente compongono il panorama e possono essere tolti o messi quasi completamente liberamente. Usando gli oggetti raccolti, si possono assemblare nuovi strumenti e altri oggetti. I giochi in Minetest (chiamati anche "subgame") possono, comunque, essere molto più complessi. -A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Una caratteristica centrale di Minetest è la capacità integrata di usare moduli. I moduli modificano l'esperienza di gioco esistente. Possono essere tanto semplici da aggiungere qualche blocco decorativo o essere molto complessi, per esempio introducendo concetti di gioco totalmente nuovi, generare un tipo di mondo completamente diverso, e molte altre cose. -Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=Minetest può essere giocato localmente o in rete assieme a più utenti. Il gioco in rete funzionerà immediatamente senza nessun modulo, senza bisogno di programmi aggiuntivi perché interamente forniti dal server. -Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums .=Minetest generalmente include un gioco predefinito semplice, chiamato "Minetest Game" (mostrato nelle immagini 1 e 2). Probabilmente lo avete già. Altri giochi per Minetest possono essere scaricati dai forum ufficiali di Minetest . -Sneaking=Strisciare -Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Strisciare vi fa camminare più lentamente e vi impedisce di cadere dal bordo di un blocco. -To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Per strisciare, tenete premuto il tasto per strisciare (predefinito [Maiusc]). Quando lo rilasciate, smettete di strisciare. Fate attenzione: quando rilasciate il tasto per strisciare vicino a un orlo, potreste cadere! -• Sneak: [Shift]=• Strisciare: [Maiusc] -Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=È possibile strisciare solo quando siete su un terreno solido, non siete in un liquido e non vi state arrampicando. -Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Lo strisciare potrebbe essere disabilitato da dei moduli. In questo caso, strisciando camminerete comunque più lentamente, ma non verrete più fermat* agli orli. -Controls=Controlli -These are the default controls:=Questi sono i controlli predefiniti: -Basic movement:=Movimento di base: -• Moving the mouse around: Look around=• Spostando il mouse in giro: guardarsi attorno -• W: Move forwards=• W: fa avanzare -• A: Move to the left=• A: sposta a sinistra -• D: Move to the right=• D: sposta a destra -• S: Move backwards=• S: fa indietreggiare -While standing on solid ground:=Stando su di un terreno solido: -• Space: Jump=• Spazio: saltare -• Shift: Sneak=• Maiusc: strisciare -While on a ladder, swimming in a liquid or fly mode is active=Stando su di una scala a pioli, nuotando in un liquido o mentre è attiva la modalità di volo -• Space: Move up=• Spazio: fa salire -• Shift: Move down=• Maiusc: fa scendere -Extended movement (requires privileges):=Movimento esteso (richiede privilegi): -• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: Attiva o disattiva la modalità veloce, vi fa correre o volare velocemente (richiede il privilegio “fast”) -• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: Attiva o disattiva la modalità di volo, vi fa muovere liberamente in tutte le direzioni (richiede il privilegio “fly”) -• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: Attiva o disattiva la modalità incorporea, in modalità volo vi fa passare attraverso i muri (richiede il privilegio “noclip”) -• E: Walk fast in fast mode=• E: Camminare velocemente in modalità veloce -World interaction:=Interazione col mondo: -• Left mouse button: Punch / mine blocks / take items=• Pulsante sinistro del mouse: colpire / scavare blocchi / prendere oggetti -• Right mouse button: Build or use pointed block=• Pulsante destro del mouse: costruire o usare il blocco puntato -• Shift+Right mouse button: Build=• Maiusc + pulsante destro del mouse: costruire -• Roll mouse wheel: Select next/previous item in hotbar=• Ruotare la rotella del mouse: selezionare il prossimo/precedente oggetto nella barra di uso frequente -• 0-9: Select item in hotbar directly=• 0-9: selezionare direttamente un oggetto nella barra di uso frequente -• Q: Drop item stack=• Q: lasciare una pila di oggetti -• Shift+Q: Drop 1 item=• Maiusc + Q: lasciare un oggetto -• I: Show/hide inventory menu=• I: mostrare/nascondere il menu dell'inventario -Inventory interaction:=Interazione con l'inventario: -See the entry “Basics > Inventory”.=Si veda la voce “Nozioni di base > Inventario” -Camera:=Telecamera: -• Z: Zoom (requires “zoom” privilege)=• Z: ingrandimento (richiede il privilegio “zoom”) -• F7: Toggle camera mode=• F7: cambiare la modalità della telecamera -• F8: Toggle cinematic mode=• F8: attiva/disattiva la modalità cinematic -Interface:=Interfaccia: -• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: apre la finestra del menu (in modalità gioco locale mette in pausa) o chiude la finestra -• F1: Show/hide HUD=• F1: mostra/nasconde il visore -• F2: Show/hide chat=• F2: mostra/nasconde la messaggistica -• F9: Toggle minimap=• F9: attiva o disattiva la minimappa -• Shift+F9: Toggle minimap rotation mode=• Maiusc + F9: cambia la modalità di rotazione della minimappa -• F10: Open/close console/chat log=• F10: apre/chiude il registro della console/messaggistica -• F12: Take a screenshot=• F12: scatta un'istantanea -Server interaction:=Interazione col server -• T: Open chat window (chat requires the “shout” privilege)=• T: apre la finestra di messaggistica (la messaggistica richiede il privilegio “shout”) -• /: Start issuing a server command)=• /: precede l'invio di un comando al server -Technical:=Tecnici: -• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• R: attiva/disattiva la vista lontana (disabilita la nebbia e permette di vedere distante, può rendere il gioco molto lento) -• +: Increase minimal viewing distance=• +: aumenta la distanza visiva minima -• -: Decrease minimal viewing distance=• -: diminuisce la distanza visiva minima -• F3: Enable/disable fog=• F3: abilita/disabilita la nebbia -• F5: Enable/disable debug screen which also shows your coordinates=• F5: abilita/disabilita la schermata di debug che mostra anche le vostre coordinate -• F6: Only useful for developers. Enables/disables profiler=• F6: utile solo per sviluppatori/trici. Abilita/disabilita il generatore di profili -Players=Utenti -Players (actually: “player characters”) are the characters which users control.=Gli utenti (in realtà: “personaggi utente”) sono i personaggi controllati dagli/dalle utenti. -Players are living beings which occupy a space of about 1×2×1 cubes. They start with 20 health points (HP) and 10 breath points (BP).=Gli/le utenti sono entità viventi che occupano uno spazio di circa 1x2x1 cubi. Iniziano con venti punti salute (PS) e dieci punti ossigeno (PO). -Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Gli/le utenti sono in grado di camminare, strisciare, saltare, arrampicarsi, nuotare, immergersi, scavare, costruire, combattere e di usare strumenti e blocchi. -Players can take damage for a variety of reasons, here are some:\n• Taking fall damage\n• Touching a block which causes direct damage\n• Drowning\n• Being attacked by another player\n• Being attacked by a computer enemy=Gli/le utenti possono ferirsi per una serie di motivi, eccone alcune:\n• Cadendo\n• Toccando un blocco che danneggia\n• Affogando\n• Vendendo attaccat* da un* altr* utente\n• Vendendo attaccat* da un* nemic* controllato dal computer -At a health of 0, the player dies. The player can just respawn in the world.=A salute pari a 0, il/la utente muore. Il/la utente può solo ricomparire nel mondo. -Other consequences of death depend on the subgame. The player could lose all items, or lose the round in a competitive game.=Altre conseguenze della morte dipendono dal gioco. Il/la utente potrebbe perdere tutti gli oggetti, o perdere il turno in un gioco di competizione. -Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Alcuni blocchi riducono l'ossigeno. Stando con la testa in un blocco che causa l'annegamento, i punti ossigeno vengono ridotti di uno ogni due secondi. Quando tutto l'ossigeno è finito, il/la utente inizia a subire il ferimento da annegamento. L'ossigeno viene ripristinato rapidamente in ogni altro blocco. -Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Il ferimento può essere disabilitato in qualunque mondo. Senza ferimento, gli/le utenti sono immortali, e salute e ossigeno non hanno importanza. -In multi-player mode, the name of other players is written above their head.=Durante il gioco in rete, il nome degli/delle altr* giocatori/trici è scritto sopra la loro testa. -Items=Oggetti -Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Gli oggetti sono cose che potete trasportare e immagazzinare negli inventari. Possono essere usati per assemblare, fondere, costruire, scavare, e altro. Tipologie di oggetti includono blocchi, strumenti, armi, e oggetti usati solo per l'assemblaggio. -An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Una pila di oggetti è una raccolta di oggetti dello stesso tipo che sta in un unico scomparto per oggetti. Le pile di oggetti possono essere lasciate a terra. Gli oggetti che si lasciano alle stesse coordinate formeranno una pila di oggetti. -Items have several properties, including the following:\n\n• Maximum stack size: Number of items which fit on 1 item stack\n• Pointing range: How close things must be to be pointed while wielding this item\n• Group memberships: See “Basics > Groups”\n• May be used for crafting or cooking=Gli oggetti possiedono diverse proprietà, incluse le seguenti:\n\n• Dimensione massima della pila: il numero di oggetti che stanno in una pila di oggetti\n• Raggio di puntamento: quanto vicino devono essere le cose per essere puntate mentre si impugna questo oggetto\n• Appartenenza a gruppi: si veda “Nozioni di base > Gruppi”\n• Possono essere usati per assemblare o cucinare -A dropped item stack can be collected by punching it.=Una pila di oggetti lasciata a terra può essere raccolta colpendola. -Tools=Strumenti -Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Alcuni oggetti possono servire come strumento quando vengono impugnati. Ogni oggetto che possiede qualche uso speciale che può essere utilizzato da chi lo impugna è considerato uno strumento. -A common tool in Minetest are, of course, mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool in Minetest. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Uno strumento comune in Minetest sono, naturalmente, gli strumenti di scavo. Questi sono importanti per rompere tutti i tipi di blocchi. In Minetest le armi in sono un tipo di strumento. Certamente ci sono molti altri strumenti possibili. Le azioni speciali degli oggetti di solito sono eseguite cliccando il pulsante sinistro o destro. -When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of collecting dropped items by punching.=Quando non si impugna nulla, gli/le utenti usano la loro mano che può fungere come strumento e arma. La mano può raccogliere gli oggetti lasciati a terra colpendoli. -Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=Molti strumenti si consumeranno usandoli e alla fine potrebbero rompersi. L'usura è mostrata in una barra sotto all'icona dello strumento. Se non è mostrata nessuna barra di usura, lo strumento è nuovo di zecca. Gli strumenti potrebbero essere riparabili tramite l'assemblaggio, si veda “Nozioni di base > Assemblaggio”. -Weapons=Armi -Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Alcuni oggetti sono utilizzabili come armi bianche quando sono impugnati. Le armi condividono la maggior parte delle proprietà degli strumenti. -Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Le armi bianche infliggono ferite colpendo i/le utenti e gli altri oggetti animati. Ci sono due modi per attaccare: -• Single punch: Left-click once to deal a single punch=• Colpo singolo: cliccate una volta il pulsante sinistro per sferrare un colpo singolo -• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Colpo rapido: tenete premuto il pulsante sinistro del mouse per sferrare colpi rapidi ripetuti -There are two core attributes of melee weapons:=Esistono due attributi principali delle armi bianche: -• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered)=• Danno massimo: il ferimento inferto dopo un colpo quando l'arma è stata ritratta completamente -• Full punch interval: Time it takes for fully recovering from a punch=• Intervallo di colpo completo: il tempo richiesto per ritrarre completamente da un colpo -A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Un'arma infligge una ferita completa solo quando è stata ritratta completamente dal colpo precedente. Altrimenti, l'arma infliggerà solo un ferimento ridotto. Ciò significa, colpire rapidamente è molto veloce, però infligge ferite piuttosto basse. Si noti che l'intervallo di colpo completo non limita la vostra velocità di attacco. -There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=C'è una regola che a volte rende impossibili gli attacchi: utenti, oggetti animati e armi appartengono a gruppi di ferimento. Un'arma infligge ferite a quell* che condividono con essa almeno un gruppo di ferimento. Perciò se state usando l'arma sbagliata, potreste non infliggere ferite affatto. -Pointing=Puntare -“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, dropped items, players, computer enemies and objects.=“Puntare” significa guardare qualcosa entro il raggio del mirino. Puntare è necessario per l'interazione, come scavare, colpire, usare, ecc. Le cose puntabili includono blocchi, oggetti lasciati a terra, utenti, nemic* controllat* dal computer e oggetti. -To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Per puntare qualcosa, deve essere nel raggio di puntamento (chiamato anche solo “raggio”) del vostro oggetto impugnato. -A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=Un po' di cose non possono essere puntate. La maggior parte dei blocchi sono puntabili. Pochi blocchi, come l'aria, non possono mai essere puntati. Altri blocchi, come i liquidi, possono essere puntati solo da oggetti speciali. -Camera=Telecamera -Minetest has 3 different views which determine the way you see the world. The modes are:\n\n• 1: First-person view (default)\n• 2: Third-person view from behind\n• 3: Third-person view from the front=Minetest possiede tre visuali diverse che stabiliscono il modo in cui vedete il mondo. Le modalità sono:\n\n• 1: Visuale in prima persona (predefinita)\n• 2: Visuale in terza persona da dietro\n• 3: Visuale in terza persona da davanti -You can change the camera mode by pressing [F7].=Potete cambiare la modalità della telecamera premendo [F7]. -By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.=Tenendo premuto il tasto [Z], potete ingrandire la visuale del vostro mirino. Per fare ciò vi serve il privilegio “zoom”. -• Switch camera mode: [F7]=• Cambiare modalità della telecamera: [F7] -• Zoom: [Z]=• Ingrandimento: [Z] -Blocks=Blocchi -The world of Minetest is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Il mondo di Minetest è fatto interamente di blocchi (voxel, per la precisione). I blocchi possono essere messi o tolti per mezzo degli strumenti adatti. -Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=I blocchi possono avere un ampio spettro di proprietà differenti che stabiliscono tempi di scavo, comportamento, aspetto, forma e molto altro. Le loro proprietà includono: -• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Urtabile: non si può passare attraverso i blocchi urtabili; gli/le utenti possono camminare su di essi. I blocchi non urtabili possono essere attraversati liberamente -• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Puntabile: i blocchi puntabili mostrano una cornice o una scatola luminescente quando vengono puntati. Ma nel caso di blocchi non puntabili potrete solo puntare attraverso di essi. I liquidi normalmente non sono puntabili, ma possono essere puntati da alcuni strumenti speciali. -• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Proprietà di scavo: tramite quali strumenti possono essere scavati, quanto velocemente e quanto usurano gli strumenti -• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Scalabile: mentre siete su di un blocco scalabile, non cadrete e potrete muovervi su e giù con i tasti di salto e strisciamento -• Drowning damage: See the entry “Basics > Player”=• Ferimento da annegamento: si veda la voce “Nozioni di base > Utenti” -• Liquids: See the entry “Basics > Liquids”=• Liquidi: si veda la voce “Nozioni di base > Liquidi” -• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Appartenenze a gruppi: le appartenenze ai gruppi sono usate per stabilire le proprietà di scavo, assemblaggio, l'interazione tra blocchi e altro -Mining=Scavo -Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=Scavare (o minare) è il processo di rompere i blocchi per toglierli. Per scavare un blocco, puntatelo e tenete premuto il pulsante sinistro del mouse finché si rompe. -Short explanation:=Spiegazione breve: -Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in toughness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining go straight into your inventory.=Per scavare un blocco servono degli strumenti di scavo. Blocchi differenti si scavano con strumenti di scavo diversi, e alcuni blocchi non possono essere scavati da nessuno strumento. I blocchi variano in durezza e gli strumenti variano in forza. Gli strumenti di scavo si usurano nel tempo. Il tempo di scavo e l'usura dello strumento dipendono dal blocco e dallo strumento di scavo. Il modo più veloce di scoprire quanto sono efficienti i vostri strumenti di scavo è quello di provarli su diversi blocchi. Ogni oggetto che ottenete scavando va direttamente nel vostro inventario. -Detailed explanation:=Spiegazione dettagliata: -Mineable blocks have mining properties (based on groups) and a toughness level. Mining tools have the same properties. Each mining property of a block also has a rating, while tools can be able to break blocks within a range of ratings.=I blocchi scavabili possiedono proprietà di scavo (basate sui gruppi) e un livello di durezza. Gli strumenti di scavo possiedono le stesse proprietà. Ogni proprietà di scavo di un blocco ha anche un grado, mentre gli strumenti possono rompere blocchi all'interno di una scala di gradi. -In order to mine a block, these conditions need to be met:=Per scavare un blocco, è necessario soddisfare queste condizioni: -• The block and tool share at least one mining property for which they have a matching rating=• Il blocco e lo strumento condividono almeno una proprietà di scavo per la quale possiedono un grado corrispondente -• The tool's toughness level is equal or less than the block's toughness level=• Il livello di durezza dello strumento è uguale o inferiore alla durezza del blocco -Example: A block with the mining property “cracky”, rating 3 and toughness level 0 can only be broken by a tool which is able to break “cracky” blocks at rating 3 and it must have a toughness level of 0 or larger.=Esempio: un blocco avente la proprietà “cracky”, di grado 3 e un livello di durezza 0 può essere rotto solo da uno strumento che è in grado di rompere blocchi “cracky” di grado 3 e deve avere un livello di durezza pari a 0 o maggiore. -The time it takes to mine a block depends on the ratings and the toughness levels of both tool and block.=Il tempo necessario per scavare un blocco dipende dal grado e dal livello di durezza sia dello strumento che del blocco. -• The base mining time depends on the ratings of the block and the mining speed of the tool=• Il tempo base di scavo dipende dai gradi del blocco e dalla velocità di scavo dello strumento -• The mining speed of the tool differs for each mining property and its rating=• La velocità di scavo dello strumento varia per ogni proprietà di scavo ed il suo grado -• The toughness level further modifies the mining speed for this mining proeprty=• Il livello di durezza modifica ulteriormente la velocità di scavo per questa proprietà di scavo -• A high difference in toughness levels decreases the mining time considerably=• Una elevata differenza in livelli di durezza diminuisce considerevolmente il tempo di scavo -• If the toughness level difference is 2, the mining time is half of the base mining time=• Se la differenza del livello di durezza è pari a 2, il tempo di scavo è la metà del tempo di base di scavo -• If the a difference of 3, the mining time is a third, and so on=• Se la differenza è pari a 3, il tempo di scavo è un terzo, e così via -The item help shows the mining times of a tool listed by its mining properties and its ratings. The mining times are often expressed as a range. The low number stands for the mining time for toughness level 0 and the high number for the highest level the tool can mine.=L'aiuto sull'oggetto mostra i tempi di scavo di uno strumento, elencati dalle sue proprietà di scavo e dai suoi gradi. I tempi di scavo sono spesso espressi come un ventaglio. Il numero basso sta per il tempo di scavo per il livello di durezza 0 e il numero alto sta per il livello massimo che lo strumento può scavare. -Mining usually wears off tools. Each time you mine a block, your tool takes some damage until it is destroyed eventually. The wear per mined block determined by the difference between the tool's toughness level and the block's toughness level. The higher the difference, the lower the wear. This means:=Normalmente scavare usura gli strumenti. Ogni volta che scavate un blocco, il vostro strumento viene danneggiato un po' finché alla fine si rompe. L'usura per ciascun blocco scavato è stabilita dalla differenza tra il livello di durezza dello strumento e quello del blocco. Maggiore è la differenza, minore è l'usura. Ciò significa: -• High-level blocks wear off your tools faster=• Blocchi di alto livello usurano i vostri strumenti più velocemente -• You can use high-level tools to compensate this=• Per compensare ciò potete usare strumenti di alto livello -• The highest wear is caused when the level of both tool and block are equal=• L'usura maggiore è causata quando il livello di strumento e blocco sono uguali -After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=Dopo averlo scavato, un blocco potrebbe lasciarsi alle spalle un “rilascio”. Questo è un numero di oggetti che ottenete dopo avere scavato. Più comunemente, otterrete il blocco stesso. Ci sono altre possibilità per un rilascio che dipendono dal tipo di blocco. I rilasci seguenti sono possibili: -• Always drops itself (the usual case)=• Rilascia sempre sé stesso (il caso normale) -• Always drops the same items=• Rilascia sempre gli stessi oggetti -• Drops items based on probability=• Rilascia oggetti in base a probabilità -• Drops nothing=• Non rilascia niente -The drop goes directly into your inventory, unless there's no more space left. In that case, the items literally drop on the floor.=Il rilascio va direttamente nel vostro inventario, a meno che non ci sia più spazio. In quel caso, l'oggetto cade per terra. -Building=Costruzione -Almost all blocks can be built (or placed). Building is very simple and has no delay.=Quasi tutti i blocchi possono essere costruiti (o posizionati). Costruire è molto semplice e non ha ritardo. -To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Per posizionare il blocco che state impugnando, puntate ad un blocco nel mondo e cliccate col pulsante destro. Se ciò non è possibile perché il blocco puntato ha una azione speciale legata al pulsante destro, tenete premuto il tasto per strisciare prima di cliccare col pulsante destro. -Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=I blocchi possono essere piazzati quasi sempre sui blocchi puntabili. Una eccezione sono i blocchi attaccati al pavimento; questi possono essere costruiti solo sul pavimento. -Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Normalmente, i blocchi vengono posizionati di fronte al lato puntato del blocco puntato. Pochi blocchi sono differenti: quando tentate di costruirci, vengono rimpiazzati. -Liquids=Liquidi -Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=I liquidi sono blocchi speciali dinamici. Ai liquidi piace espandersi e fluire verso i blocchi circostanti. Gli/le utenti possono affogarci. -Liquids usually come in two forms: In source form (S) and in flowing form (F).=I liquidi normalmente sono di due tipi: il tipo fonte (S) e il tipo corrente (F). -Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. A long it is left alone, a liquid source will normally keep its place and does not drain out.=Le fonti di liquidi hanno la forma di un piccolo cubo. Una fonte di liquidi di tanto in tanto produrrà intorno a sé dei liquidi correnti, e, se il liquido è rinnovabile, produrrà anche fonti di liquidi. Una fonte di liquidi può sostenersi. Finché è lasciata stare, normalmente una fonte di liquidi manterrà il suo posto e non si prosciugherà. -Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=I liquidi correnti assumono una forma inclinata. I liquidi correnti si espandono per il mondo finché si prosciugano. Un liquido corrente non può sostenersi e proviene sempre da una fonte di liquidi, o direttamente o indirettamente. Senza una fonte di liquidi, alla fine un liquido corrente si prosciugherà e sparirà. -All liquids share the following properties:=Tutti i liquidi condividono le proprietà seguenti: -• All properties of blocks (including drowning damage=• Tutte le proprietà dei blocchi (incluso il ferimento da annegamento) -• Renewability: Renewable liquids can create new sources=• Rinnovabilità: i liquidi rinnvabili possono creare nuove fonti -• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Raggio di flusso: quanti liquidi correnti sono creati al massimo da una fonte di liquidi, stabilisce quanto lontano si espanderà il liquido. Sono possibili raggi da 0 a 8. A 0, non sarà creato nessun liquido corrente. L'immagine 5 mostra un liquido con raggio di flusso pari a 2 -• Viscosity: How slow players move through it and how slow the liquid spreads=• Viscosità: quanto lentamente si muovono gli/le utenti in esso e quanto lentamente si espande il liquido -Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:\n• Two renewable liquid blocks of the same type touch each other diagonally\n• These blocks are also on the same height\n• One of the two “corners” is open space which allows liquids to flow in=I liquidi rinnovabili generano nuove fonti di liquidi negli spazi aperti (immagine 2). Una nuova fonte di liquidi viene creata quando:\n• Due blocchi di liquidi rinnovabili dello stesso tipo si toccano l'un l'altro diagonalmente\n• Questi blocchi sono anche alla stessa altezza\n• Uno dei due “angoli” è uno spazio aperto che consente ai liquidi di scorrervi dentro -When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Quando questi criteri sono soddisfatti, lo spazio aperto viene riempito con una nuova fonte di liquidi dello stesso tipo (immagine 3). -Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Nuotare in un liquido è abbastanza semplice: i soliti tasti direzionali per il movimento di base, il tasto di salto per emergere e il tasto strisciare per immergersi. -The physics for swimming and diving in a liquid are:=Le regole fisiche per nuotare e immergersi in un liquido sono: -• The higher the viscosity, the slower you move=• Maggiore è la viscosità, più lentamente vi muoverete -• If you rest, you'll slowly sink=• Se vi riposate, affonderete lentamente -• There is no fall damage for falling into a liquid as such=• Non c'è nessun ferimento da caduta alla caduta in un liquido in quanto tale -• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Se cadete in un liquido, verrete rallentat* all'impatto (ma non vi fermerete immediatamente). La profondità del vostro impatto è determinata dalla vostra velocità e dalla viscosità del liquido. Per un tuffo sicuro in un liquido da grande altezza, assicuratevi che ci sia abbastanza liquido sopra il terreno, altrimenti potreste colpire il terreno e subire il ferimento da caduta. -Liquids are often not pointable. But some special items are able to point all liquids.=Spesso i liquidi non sono puntabili. Ma alcuni oggetti speciali possono puntare tutti i liquidi. -Crafting=Assemblaggio -Crafting is the task of combining several items to form a new item.=L'assemblaggio è l'azione di combinare diversi oggetti per formarne uno nuovo. -To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Per assemblare qualcosa, vi servono uno o più oggetti, una griglia di assemblaggio (C) e una ricetta di assemblaggio. Una griglia di assemblaggio è come un comune inventario che può anche essere usata per assemblare. Gli oggetti devono essere messi nella griglia di assemblaggio secondo una certa disposizione. Vicino alla griglia di assemblaggio c'è la casella del prodotto (O). Lì comparirà il risultato quando avrete disposto correttamente gli oggetti. Quella è solo un'anteprima, non il vero oggetto. Le griglie di assemblaggio possono essere di varie dimensioni che limitano le possibili ricette che potete assemblare. -To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Per completare l'assemblaggio, prendete dalla casella del prodotto l'oggetto risultante, così facendo consumerete gli oggetti disposti nella griglia di assemblaggio creando il nuovo oggetto. Non è possibile posizionare oggetti nella casella del prodotto. -A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some subgames provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the subgame (if one is available).=La descrizione di come si assembla un oggetto è chiamata “ricetta di assemblaggio”. Per assemblare vi servirà questa conoscenza. Esistono svariati modi per imparare le ricette di assemblaggio. Un modo è usare una guida di assemblaggio, che contiene un elenco delle ricette di assemblaggio disponibili. Alcuni giochi forniscono guide di assemblaggio. Esistono anche alcuni moduli che potete scaricare dalla rete per installare una guida di assemblaggio. Un altro modo è leggere il manuale in rete del gioco (se questo è disponibile). -Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Le ricette di assemblaggio sono formate da almeno un oggetto iniziale ed esattamente una pila di oggetti finali. Quando si esegue un assemblaggio singolo, questo consumerà esattamente un oggetto dalla griglia di assemblaggio, a meno che la ricetta di assemblaggio stabilisca dei rimpiazzi. -There are multiple types of crafting recipes:\n\n• Shaped (image 2): Items need to be placed in a particular shape\n• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)\n• Cooking: Explained in “Basics > Cooking”\n• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by a certain percentage. This recipe may not be available in all subgames=Esistono tipi multipli di ricette di assemblaggio:\n\n• Con una forma (immagine 2): gli oggetti devono essere disposti nella griglia secondo un ordine particolare\n• Senza una forma (immagini 3 e 4): gli oggetti devono essere messi da qualche parte nella griglia (entrambe le immagini mostrano la stessa ricetta)\n• Cottura: spiegata in “Nozioni di base > Cottura”\n• Riparazione (immagine 5): mettete nella griglia due strumenti usurati in punti qualsiasi per ottenere uno strumento riparato per una certa percentuale. Questa ricetta potrebbe non essere disponibile in tutti i giochi -In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=In alcune ricette di assemblaggio, alcuni oggetti iniziali non devono essere un oggetto preciso, devono essere invece membri di un gruppo (si veda “Nozioni di base > Gruppi”). Queste ricette offrono una maggiore libertà per gli oggetti iniziali. Le immagini 6-8 mostrano la stessa ricetta basata sui gruppi. In questa, servono otto oggetti del gruppo “stone” (“pietra”), cosa valida per tutti gli oggetti mostrati. -Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=Raramente, le ricette di assemblaggio hanno dei rimpiazzi. Questo significa, ogni volta che eseguite un assemblaggio, alcuni oggetti nella griglia di assemblaggio non verranno consumati, ma invece verranno rimpiazzati da un altro oggetto. -Cooking=Cottura -Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=La cottura (o fusione) è una forma di creazione che non coinvolge una griglia di assemblaggio. La cottura viene eseguita con un blocco speciale (come una fornace), un oggetto cucinabile, un oggetto combustibile e del tempo per ottenere un nuovo oggetto. -Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Ciascun combustibile possiede un tempo di bruciatura. Questo è il tempo per cui un singolo oggetto di combustibile tiene accesa una fornace. -Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Ciascun oggetto cucinabile richiede del tempo per essere cotto. Questo tempo è specifico per il tipo di oggetto, e l'oggetto deve essere “sulla fiamma” per l'intero tempo di cottura per produrre effettivamente il risultato. -Hotbar=Barra di uso frequente -At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=Nella parte inferiore dello schermo si vedono alcuni riquadri. Questi sono chiamati “barra di uso frequente”. La barra di uso frequente vi permette di accedere rapidamente ai primi oggetti dell'inventario del vostro personaggio. -You can change the selected item with the mouse wheel or the number keys.=Potete cambiare l'oggetto selezionato con la rotella del mouse o i tasti numerici. -• Select previous item in hotbar: [Mouse wheel up]=• Selezionare l'oggetto precedente dalla barra di uso frequente: [Rotella del mouse in avanti] -• Select next item in hotbar: [Mouse wheel down]=• Selezionare l'oggetto successivo dalla barra di uso frequente: [Rotella del mouse indietro] -• Select item in hotbar directly: [0]-[9]=• Selezionare direttamente un oggetto dalla barra di uso frequente: [0]-[9] -The selected item is also your wielded item.=L'oggetto selezionato è anche l'oggetto impugnato. -Minimap=Minimappa -Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Premete [F9] per fare comparire una minimappa in alto a destra. La minimappa vi aiuta a trovare la vostra strada nel mondo. Premetelo ancora per selezionare modalità e livelli di ingrandimento differenti. La minimappa mostra anche la posizione degli/delle altre utenti. -There are 2 minimap modes and 3 zoom levels.=Esistono due modalità della minimappa e tre livelli di ingrandimento. -Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=La modalità di superficie (immagine 1) è una visuale del mondo dall'alto, rappresentante approssimativamente i colori dei blocchi di cui è composto questo mondo. Mostra solo i blocchi più elevati, ogni cosa al di sotto è nascosta, come nella foto scattata da un satellite. La modalità di superficie è utile se vi perdete. -Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=La modalità radar (immagine 2) è più complessa. Mostra la “densità” dell'area che vi circonda e varia col variare della vostra altitudine. Grosso modo, più verde è l'area, e meno “compatta” è. Le aree nere possiedono molti blocchi. Usate il radar per trovare caverne, aree nascoste, muri e altro. Le forme rettangolari nell'immagine 2 rivelano chiaramente la posizione di un sotterraneo. -There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Esistono anche due modalità di rotazione diverse. Nella “modalità quadrata”, la rotazione della minimappa è fissa. Se premete [Maiusc]+[F9] per passare alla “modalità circolare”, la minimappa ruoterà invece con la vostra direzione di sguardo, perciò “su” è sempre la vostra direzione di sguardo. -In some subgames, the minimap may be disabled.=In alcuni giochi, la minimappa potrebbe essere disabilitata. -• Toggle minimap mode: [F9]=• Cambiare la modalità della minimappa: [F9] -• Toggle minimap rotation mode: [Shift]+[F9]=• Cambiare la modalità di rotazione della minimappa: [Maiusc]+[F9] -Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Gli inventari sono usati per immagazzinare pile di oggetti. Esistono altri usi, come l'assemblaggio. Un inventario è composto da una griglia rettangolare di alloggi per oggetti. Ogni alloggio per oggetto può essere vuoto o contenere una pila di oggetti. Le pile di oggetti possono essere spostate liberamente nella maggior parte degli alloggi. -You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=Voi avete il vostro inventario personale che è chiamato “inventario utente”, potete aprirlo con il tasto dell'inventario (predefinito: [I]). I primi alloggi dell'inventario sono anche usati come alloggi nella vostra barra di uso frequente. -Blocks can also have their own inventory, e.g. chests and furnaces.=Anche i blocchi possono avere il proprio inventario, per es. bauli e fornaci. -Inventory controls:=Controlli dell'inventario -Taking: You can take items from an occupied slot if the cursor holds nothing.=Prendere: potete prendere oggetti da un alloggio occupato se il cursore non sta tenendo nulla. -• Left click: take entire item stack=• Click sinistro: prende tutta la pila di oggetti -• Right click: take half from the item stack (rounded up)=• Click destro: prende metà della pila di oggetti (arrotondando) -• Middle click: take 10 items from the item stack=• Click centrale: prende dieci oggetti dalla pila di oggetti -Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Mettere: potete mettere oggetti in un alloggio se il cursore sta tenendo uno o più oggetti e se l'alloggio è vuoto o contiene una pila di oggetti dello stesso tipo. -• Left click: put entire item stack=• Click sinistro: mette una intera pila di oggetti -• Right click: put 1 item of the item stack=• Click destro: mette un oggetto della pila di oggetti -• Middle click: put 10 items of the item stack=• Click centrale: mette dieci oggetti della pila di oggetti -Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.= Scambiare: potete scambiare gli oggetti se il cursore sta tenendo uno o più oggetti e l'alloggio di destinazione è occupato da un tipo di oggetto differente. -• Click: exchange item stacks=• Click: scambiare le pile di oggetti -Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Gettare via: se state tenendo una pila di oggetti e cliccate con essa da qualche parte fuori dal menu, la pila di oggetti viene gettata nell'ambiente. -Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Trasferimento rapido: potete trasferire rapidamente una pila di oggetti da/nell'inventario utente da/in un altro alloggio per oggetti di un inventario come quello di una fornace, un baule, o di ogni altro oggetto che abbia un alloggio per oggetti quando si accede all'inventario di quell'oggetto. In questo contesto generalmente l'inventario di destinazione è quello più importante. -• Sneak+Left click: Automatically transfer item stack=• Strisciare + click sinistro: trasferire automaticamente una pila di oggetti -Online help=Aiuto in rete -You may want to check out these online resources related to Minetest:=Potreste volere controllare queste risorse in rete collegate a Minetest: -Official homepage of Minetest: =Pagina ufficiale di Minetest: -The main place to find the most recent version of Minetest.=Il luogo principale dove trovare la versione più recente di Minetest. -Community wiki: =Wiki della comunità: -A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Un sito in rete di documentazione per Minetest basato sulla comunità. Chiunque abbia un account può modificarlo! Presenta anche una documentazione del Minetest Game. -Web forums: =Forum in rete: -A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and subgames are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Una piattaforma di discussione basata sulla rete dove potete discutere ogni cosa riguardante Minetest. Questo è anche il luogo dove sono pubblicati e discussi i moduli e i giochi fatti dagli/dalle utenti. Le conversazioni sono principalmente in Inglese, ma c'è spazio anche per le conversazioni in altre lingue. -Chat: =Messaggistica: -A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Un canale Internet Relay Chat generico per tutto ciò che riguarda Minetest dove le persone possono incontrarsi per discutere in tempo reale. Se non capite IRC, leggete la Wiki della comunità per ottenere aiuto. -Groups=Gruppi -Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Cose, utenti e oggetti (animati e inanimati) possono essere membri di qualunque numero di gruppi. I gruppi servono a svariati scopi: -• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Ricette di assemblaggio: gli alloggi in una ricetta di assemblaggio potrebbero non richiedere un oggetto specifico, ma invece un oggetto che sia membro di un gruppo particolare, o di più gruppi -• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Tempi di scavo: i blocchi scavabili appartengono a gruppi che sono usati per stabilire i tempi di scavo. Gli strumenti di scavo possono scavare blocchi che appartengono a certi gruppi -• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Comportamento del blocco: i blocchi possono mostrare un comportamento speciale e interagire con altri blocchi quando questi appartengono a un gruppo particolare -• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Ferimento e armatura: gli oggetti e i personaggi possiedono gruppi di armatura, le armi possiedono gruppi di ferimento. Questi gruppi stabiliscono il ferimento. Si veda anche: “Nozioni di base > Armi” -• Other uses=• Altri usi -In the item help, many important groups are usually mentioned and explained.=Nell'aiuto sull'oggetto, solitamente sono nominati e spiegati molti gruppi importanti. -Glossary=Glossario -This is a list of commonly used terms in Minetest:=Questo è un elenco dei termini usati comunemente in Minetest: -Controls:=Controlli: -• Wielding: Holding an item in hand=• Impugnare: tenere un oggetto nella mano -• Pointing: Looking with the crosshair at something in range=• Puntare: guardare col mirino a qualcosa entro il suo raggio -• Dropping: Throwing an item or item stack to the ground=• Rilasciare: gettare a terra un oggetto o una pila di oggetti -• Punching: Attacking with left-click, is also used on blocks=• Colpire: attaccare cliccando col pulsante destro, si usa anche sui blocchi -• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Strisciare: camminare lentamente evitando (normalmente) di cadere dagli orgli -• Climbing: Moving up or down a climbable block=• Arrampicarsi: muoversi in alto o in basso su di un blocco arrampicabile -Blocks:=Blocchi: -• Block: Cubes that the worlds are made of=• Blocco: cubi di cui è fatto il mondo -• Mining/digging: Using a mining tool to break a block=• Scavare/minare: usare uno strumento di scavo per rompere un blocco -• Building/placing: Putting a block somewhere=• Costruire/piazzare: mettere un blocco da qualche parte -• Drop: Items you get after mining a block=• Rilascio: oggetti che ottenete dopo avere scavato un blocco -• Using a block: Right-clicking a block to access its special function=• Usare un blocco: cliccare col pulsante destro un blocco per accedere alla sua funzione speciale -Items:=Oggetti: -• Item: A single thing that players can possess=• Oggetto: una cosa singola che gli/le utenti possono possedere -• Item stack: A collection of items of the same kind=• Pila di oggetti: una raccolta di oggetti dello stesso tipo -• Maximum stack size: Maximum amount of items in an item stack=• Dimensione massima della pila: numero massimo di oggetti in una pila di oggetti -• Slot / inventory slot: Can hold one item stack=• Alloggo / alloggio dell'inventario: può contenere una pila di oggetti -• Inventory: Provides several inventory slots for storage=• Inventario: fornisce numerosi alloggi inventario per l'immagazzinamento -• Player inventory: The main inventory of a player=• Inventario utente: l'inventario principale di un* utente -• Tool: An item which you can use to do special things with when wielding=• Strumento: un oggetto che potete usare per fare cose speciali mentre lo impugnate -• Range: How far away things can be to be pointed by an item=• Raggio: quanto possono essere distanti le cose per poter essere puntate da un oggetto -• Mining tool: A tool which allows to break blocks=• Strumento di scavo: uno strumento che permette di rompere blocchi -• Craftitem: An item which is (primarily or only) used for crafting=• Oggetto da assemblaggio: un oggetto che è usato (solamente o principalmente) per assemblare -Gameplay:=Esperienza di gioco: -• “heart”: A single health symbol, indicates 2 HP=• “cuore”: un singolo simbolo di salute, indica 2 PS -• “bubble”: A single breath symbol, indicates 1 BP=• “bolla”: un singolo simbolo di ossigeno, indica 1 PO -• HP: Hit point (equals half 1 “heart”)=• PS: punto salute (pari a metà di 1 “cuore”) -• BP: Breath point, indicates breath when diving=• PO: punto ossigeno, indica l'ossigeno quando ci si immerge -• Mob: Computer-controlled enemy=• Mob: nemic* controllat* dal computer (abbreviazione di “mobile”) -• Crafting: Combining multiple items to create new ones=• Assemblare: combinare diversi oggetti per crearne di nuovi -• Crafting guide: A helper which shows available crafting recipes=• Guida di assemblaggio: una fonte di aiuto che mostra le ricette di assemblaggio disponibili -• Spawning: Appearing in the world=• Comparire: comparire nel mondo -• Respawning: Appearing again in the world after death=• Ricomparire: ricomparire ancora nel mondo dopo la morte -• Group: Puts similar things together, often affects gameplay=• Gruppo: mette assieme cose simili, spesso influenza l'esperienza di gioco -• noclip: Allows to fly through walls=• Modalità incorporea: permette di volare attraverso i muri -Interface=Interfaccia -• Hotbar: Inventory slots at the bottom=• Barra di uso frequente: alloggi dell'inventario sottostanti -• Statbar: Indicator made out of half-symbols, used for health and breath=• Barra delle caratteristiche: indicatore composto di mezzi-simboli, usato per salute e ossigeno -• Minimap: The map or radar at the top right=• Minimappa: la mappa o radar in alto a destra -• Crosshair: Seen in the middle, used to point at things=• Mirino: visibile al centro, usato per puntare le cose -Online multiplayer:=Gioco in rete: -• PvP: Player vs Player. If active, players can deal damage to each other=• UcU: Utente contro Utente (“PvP” in Inglese). Se attivata, gli/le utenti possono ferirsi a vicenda -• Griefing: Destroying the buildings of other players against their will=• Vandalizzare: (“griefing” in Inglese) distruggere le costruzioni degli/delle altr* utenti contro la loro volontà -• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Protezione: meccanismo per possedere aree del mondo, che permette solo al/alla proprietari* di modificare i blocchi al loro interno -Technical terms:=Termini tecnici: -• Minetest: This game engine=• Minetest: questo motore di gioco -• Minetest Game: A subgame for Minetest by the Minetest developers=• Minetest Game: un gioco per Minetest degli sviluppatori di Minetest -• Subgame: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Gioco: una esperienza di gioco completa da usarsi in Minetest; come un gioco, una sandbox o simili -• Mod: A single subsystem which adds or modifies functionality; is the basic building block of subgames and can be used to further enhance or modify them=• Modulo: un singolo sottosistema che aggiunge o modifica funzionalità; è il “mattone” di costruzione di base dei giochi e può essere usato per migliorarli o modificarli ulteriormente -• Privilege: Allows a player to do something=• Privilegio: permette a un* utente di fare qualcosa -• Node: Other word for “block”=• Nodo: parola alternativa per “blocco” -Settings=Impostazioni -There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Esiste una grande varietà di impostazioni per configurare Minetest. Quasi ogni aspetto può essere cambiato in quel modo. -These are a few of the most important gameplay settings:=Queste sono alcune delle impostazioni di gioco più importanti: -• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Ferimento abilitato (enable_damage): abilita gli attributi di salute e ossigeno per tutt* gli/le utenti. Se è disabilitato, gli/le utenti sono immortali -• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the subgame; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Modalità creativa (creative_mode): abilita lo stile di gioco sandbox incentrato sulla creatività piuttosto di quello impegnativo. Il significato dipende dal gioco; i cambiamenti comuni sono: tempi di scavo ridotti, accesso facile a quasi tutti gli oggetti, gli strumenti non si usurano mai, ecc. -• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• UcU (enable_pvp): abbreviazione per “Utente contro Utente” (“PvP” in Inglese). Se abilitata, gli/le utenti possono ferirsi a vicenda. -For a full list of all available settings, use the “Advanced settings” dialog in the main menu.=Per un elenco completo delle impostazioni disponibili, usate il pulsante “Impostazioni avanzate” nel menu principale. -Movement modes=Modalità di movimento -If you have the required privileges, you can use up to three special movement modes. Using these may be considered cheating.=Se disponete dei privilegi necessari, potete usare fino a tre modalità speciali di movimento. Usarle potrebbe essere considerato barare. -Fast mode:=Modalità veloce: -• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Descrizione: vi consente di muovervi molto più velocemente. Tenete premuto il tasto “Usare” [E] per muovervi più velocemente. Potete personalizzare ulteriormente la modalità veloce nella configurazione del client. -• Default key: [J]=• Tasto predefinito: [J] -• Required privilege: fast=• Privilegio richiesto: fast (“veloce”) -Fly mode:=Modalità volo: -• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Descrizione: la gravità non ha effetto su di voi e potete muovervi liberamente in tutte le direzioni. Usate il tasto di salto per ascendere e quello di strisciamento per discendere. -• Default key: [K]=• Tasto predefinito: [K] -• Required privilege: fly=• Privilegio richiesto: fly (“volo”) -Noclip mode:=Modalità incorporea: -• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Descrizione: vi consente di passare attraverso i muri. Funziona solo quando è attivata anche la modalità volo. -• Default key: [H]=• Tasto predefinito: [H] -• Required privilege: noclip=• Privilegio richiesto: noclip (“nessun aggancio”) -Console=Console -With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=Con [F10] potete aprire e chiudere la console. L'uso principale della console è mostrare il registro della messaggistica, o inviare messaggi, o comandi per il sever. -Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=La console può essere aperta anche col tasto della messaggistica, o con quello che precede l'invio dei comandi, ma è più piccola e verrà chiusa dopo che avrete inviato un messaggio. -Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Usate la messaggistica per comunicare con gli/le altr* utenti. Ciò richiede il privilegio “shout” (“urlare”). -Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Scrivete il messaggio e premete [Invio]. I messaggi inviati pubblicamente non possono iniziare con “/”. -You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .=Potete inviare messaggi privati: scrivete “/msg Nome Messaggio” (senza virgolette) nell'area di messaggistica per mandare un “Messaggio” che potrà essere visto solo da “Nome”. -There are some special controls for the console:=Per la console esistono alcuni controlli speciali: -• [F10] Open/close console=• [F10] apre/chiude la console -• [Enter]: Send message or command=• [Invio]: manda un messaggio o un comando -• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: prova a completare automaticamente il nome di un* utente già parzialmente scritto -• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Ctrl] + [Sinistra]: sposta il cursore all'inizio della parola precedente -• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Ctrl] + [Destra]: sposta il cursore all'inizio della parola successiva -• [Ctrl]+[Backspace]: Delete previous word=• [Ctrl] + [Backspace]: cancella la parola precedente -• [Ctrl]+[Delete]: Delete next word=• [Ctrl] + [Canc]: cancella la parola successiva -• [Ctrl]+[U]: Delete all text before the cursor=• [Ctrl] + [U]: cancella tutto il testo prima del cursore -• [Ctrl]+[K]: Delete all text after the cursor=• [Ctrl] + [K]: cancella tutto il testo dopo il cursore -• [Page up]: Scroll up=• [Pag su]: scorre indietro il testo -• [Page down]: Scroll down=• [Pag giù]: scorre in avanti il testo -There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Esiste anche uno storico dei contenuti inseriti. Minetest salva i vostri inserimenti precendenti nella console, in modo che possiate accedervi rapidamente più tardi: -• [Up]: Go to previous entry in history=• [Su]: va alla voce precedente nello storico -• [Down]: Go to next entry in history=• [Giù]: va alla voce successiva nello storico -Server commands=Comandi del server -Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=I comandi del server (chiamati anche “comandi di messaggistica”) sono piccoli aiutanti per gli/le utenti avanzat*. Quando giocate non vi serve usare questi comandi. Ma potrebbero esservi utili per eseguire compiti più avanzati. I comandi del server funzionano sia nella modalità di gioco locale che in quella in rete. -Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=I comandi del server possono essere inseriti dai/dalle utenti usando la messaggistica per eseguire una azione speciale del server. Esistono un po' di comandi che possono essere usati da tutt*, ma alcuni comandi funzionano solo se sul server vi sono stati concessi certi privilegi. Esiste un piccolo numero di comandi di base che sono sempre disponibili, altri comandi possono essere aggiunti dai moduli. -To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Per inviare un comando, scrivetelo come se fosse un messaggio o premete il tasto di comando di Minetest (predefinito: [/]). Tutti i comandi devono iniziare con “/”, per esempio “/mods”. Il tasto di comando di Minetest si comporta come il tasto della messaggistica, eccetto il fatto che la sbarra “/” è già inserita. -Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=I comandi possono non dare una risposta nel registro della messaggistica, ma in genere gli errori saranno mostrati. Provate voi stess*: chiudete questa finestra e inviate il comando “/mods” (senza virgolette). Vi mostrerà l'elenco dei moduli disponibili su questo server. -“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.=“/help all” è un comando molto importante: ottenete un elenco di tutti i comandi disponibili sul server, una breve spiegazione e i parametri consentiti. Questo comando è importante anche perhé i comandi disponibili spesso variano da server a server. -Commands are followed by zero or more parameters.=I comandi sono seguiti da zero o più parametri. -In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=Nella guida di riferimento dei comandi, vedrete alcuni segnaposto che dovrete sostituire con un valore effettivo. Ecco una spiegazione: -• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter=• Testo racchiuso tra i simboli minore-di e maggiore-di (per es. “”): segnaposto per un parametro -• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Tutto quello che è tra parentesi quadre (per esempio “[testo]”) è facoltativo è si può omettere -• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Simbolo alternativo “|” barretta, o “/” sbarra (per es. “testo1 | testo2 | testo3”): alternanza. Si devono usare uno o più testi (per es. “testo2”) -• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Parentesi tonde (per es. “(parola1 parola2) | parola3”): raggruppano assieme più parole, usate per le alternanze -• Everything else is to be read as literal text=Tutto il resto va letto come testo letterale -Here are some examples to illustrate the command syntax:=Ecco alcuni esempi per illustrare la sintassi dei comandi: -• /mods: No parameters. Just enter “/mods”=• /mods: nessun parametro. Scrivete solo “/mods” -• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /me : un parametro. Dovete scrivere “/me ” seguito da del testo, per es. “/me ordina una pizza” -• /give : Two parameters. Example: “/give Player default:apple”=• /give : due parametri. Esempio: “/give Utente default:apple” -• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all|privs|]: i valori validi sono “/help”, “/help all”, “/help privs”, o “/help ” seguito dal nome di un comando, come “/help time” -• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity [,,]: i valori validi includono “/spawnentity boats:boat” e “/spawnentity boats:boat 0,0,0” -Some final remarks:=Alcune osservazioni finali: -• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=Per /give e /giveme, vi serve una stringa oggetto. Questa è un identificatore unico usato internamente che potreste trovare nell'aiuto sull'oggetto se avete il privilegio “give” o “debug” -• For /spawnentity you need an entity name, which is another identifier=• Per /spawnentity vi serve il nome di una entità, che è un altro identificatore -Privileges=Privilegi -Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Ogni utente ha un numero di privilegi, che variano da server a server. I vostri privilegi stabiliscono cosa potete e non potete fare. I privilegi possono essere concessi e revocati ad altr* utenti da qualunque utente che abbia il privilegio chiamato “privs”. -On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=Su di un server in rete avente la configurazione predefinita, i/le nuov* utenti iniziano coi privilegi chiamati “interact” (“interagire”) e “shout” (“urlare”). Il privilegio “interact” è necessario per le azioni di gioco di base, come costruire, scavare, usare, ecc. Il privilegio “shout” permette di conversare. -There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Esiste un piccolo numero di privilegi fondamentali che troverete su ogni server, altri privilegi potrebbero essere aggiunti dai moduli. -To view your own privileges, issue the server command “/privs”.=Per vedere i vostri privilegi, inviate il comando “/privs”. -Here are a few basic privilege-related commands:=Ecco alcuni comandi di base legati ai privilegi: -• /privs: Lists your privileges=• /privs: elenca i vostri privilegi -• /privs : Lists the privileges of =• /privs : elenca i privilegi di -• /help privs: Shows a list and description about all privileges=• /help privs: mostra un elenco e una descrizione di tutti i privilegi -Players with the “privs” privilege can modify privileges at will:=Gli/le utenti con il privilegio “privs” possono cambiare i privilegi a volontà: -• /grant : Grant to =• /grant : concede a -• /revoke : Revoke from =• /revoke : revoca a -In single-player mode, you can use “/grant singleplayer all” to unlock all abilities (which is often considered cheating).=Nella modalità di gioco locale, potete usare “/grant singleplayer all” per sbloccare tutte le abilità (che spesso è considerato barare). -Light=Luce -As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Essendo il mondo completamente basato su blocchi, lo è anche la luce nel mondo. Ogni blocco ha la propria luminosità. La luminosità di un blocco è espressa in un “livello di luce” che va da 0 (oscurità completa) a 15 (luminoso quanto il sole). -There are two types of light: Sunlight and artificial light.=Esistono due tipi di luce: la luce solare e la luce artificiale. -Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=La luce artificiale è emessa dai blocchi luminosi. La luce artificiale ha un livello di luce tra 1 e 14. -Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. blocks. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=La luce solare è quella più luminosa e discende dal cielo perfettamente dritta a ogni ora del giorno. Di notte, la luce solare diverrà invece luce lunare, che fornisce comunque un po' di luce. Il livello di luce della luce solare è 15. -Blocks have 3 levels of transparency:=I blocchi hanno tre livelli di trasparenza: -• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Trasparente: la luce solare li attraversa senza perdite, la luce artificiale li attraversa con delle perdite -• Semi-transparent: Sunlight and artificial light go through with losses=• Semi-trasparenti: la luce solare e la luce artificiale li attraversano con delle perdite -• Opaque: No light passes through=• Opachi: nessuna luce li attraversa -Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=La luce artificiale perderà un livello di luminosità per ciascun nodo trasparente o semi-trasparente che attraversa, finché resterà solo oscurità (immagine 1). -Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=La luce solare conserverà la propria luminosità finché attraverserà solo blocchi trasparenti. Quando passa attraverso un blocco semi-trasparente, si trasforma in luce artificiale. L'immagine 2 mostra la differenza. -Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Si noti che per “trasparenza” qui si intende solo che il blocco può trasferire la luminosità ai nodi vicini. È possibile che un blocco sia trasparente alla luce, ma che voi non possiate guardarci attraverso. -Coordinates=Coordinate -The Minetest world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Il mondo di Minetest è un grande cubo. E per questo, una posizione nel mondo può essere facilmente espressa tramite coordinate Cartesiane. Cioè, per ogni posizione nel mondo, esistono tre valori: X, Y e Z. -Like this: (5, 45, -12)=Come questi: (5, 45, -12) -This refers to the position where X=5, Y=45 and Z=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=Ciò si riferisce alla posizione dove X=5 (si legga “X vale 5”, NdT), Y=45 e Z=-12. Le tre lettere sono chiamate “assi”: Y si riferisce all'altezza. X e Z si riferiscono alla posizione orizzontale. -The values for X, Y and Z work like this:=I valori di X, Y e Z funzionano così: -• If you go up, Y increases=• Se salite, Y aumenta -• If you go down, Y decreases=• Se scendete, Y diminuisce -• If you follow the sun, X increases=• Se seguite il sole, X aumenta -• If you go to the reverse direction, X decreases=• Se andate nella direzione opposta, X diminuisce -• Follow the sun, then go right: Z increases=• Seguite il sole, poi andate a destra: Z aumenta -• Follow the sun, then go left: Z decreases=• Seguite il sole, poi andate a sinistra: Z diminuisce -• The side length of a full cube is 1=• La larghezza di un cubo completo è pari a 1 -You can view your current position in the debug screen (open with [F5]). This is considered cheating in some games.=Potete vedere la vostra posizione attuale nella schermata di debug (visibile con [F5]). In alcuni giochi questo è considerato barare. diff --git a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.pl.tr b/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.pl.tr deleted file mode 100644 index 37fe955ca..000000000 --- a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.pl.tr +++ /dev/null @@ -1,512 +0,0 @@ -# textdomain: mcl_doc_basics -Basics=Podstawy -Everything you need to know to get started with playing=Wszystko co musisz wiedzieć by zacząć grać -Advanced usage=Zaawansowane użycie -Advanced information which may be nice to know, but is not crucial to gameplay=Zaawansowane informacje które mogą być przydatne, ale nie są niezbędne podczas grania -Quick start=Szybki start -This is a very brief introduction to the basic gameplay:=Jest to bardzo krótki wstęp do podstawowej rozgrywki: -Basic controls:=Podstawowe sterowanie: -• Move mouse to look=• Porusz myszą by się rozglądać -• [W], [A], [S] and [D] to move=• Użyj [W], [A], [S] i [D] aby się poruszać -• [E] to sprint=• Użyj [E] aby biegać -• [Space] to jump or move upwards=• Użyj [Spacja] aby skakać lub poruszać się w górę -• [Shift] to sneak or move downwards=• Użyj [Shift] aby się skradać lub poruszać w dół -• Mouse wheel or [1]-[9] to select item=• Użyj kółka myszy lub klawiszy [1]-[9] aby wybrać przedmiot -• Left-click to mine blocks or attack=• Kliknij lewym przyciskiem by kopać bloki lub atakować -• Recover from swings to deal full damage=• Poczekaj aż ochłoniesz po zamachu, aby zadać pełne obrażenia -• Right-click to build blocks and use things=• Kliknij prawym przyciskiem aby kłaść bloki lub używać rzeczy -• [I] for the inventory=• Użyj [I] aby otworzyć ekwipunek -• First items in inventory appear in hotbar below=• Pierwsze przedmioty w ekwipunku pojawią się w pasku szybkiego dostępu -• Lowest row in inventory appears in hotbar below=• Najniższy wiersz ekwipunku pojawi się w pasku szybkiego dostępu -• [Esc] to close this window=• Użyj [Esc] aby zamknąć okno -How to play:=Jak grać: -• Punch a tree trunk until it breaks and collect wood=• Uderzaj pień drzewa aż się zniszczy i zbierz drewno -• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks=• Umieść drewno w siatce 2×2 (twojej "siatce do wytwarzania") w twoim ekwipunku i wytwórz 4 deski -• Place them in a 2×2 shape in the crafting grid to craft a crafting table=• Umieść je w kształt 2×2 w twojej siatce do wytwarzania i wytwórz stół rzemieślniczy -• Place the crafting table on the ground=• Umieść stół rzemieślniczy na ziemi -• Rightclick it for a 3×3 crafting grid=• Kliknij go prawym przyciskiem aby zyskać dostęp do siatki 3×3 -• Use the crafting guide (book icon) to learn all the possible crafting recipes=• Użyj przewodnika do wytwarzania (ikona książki) aby poznać wszystkie możliwe receptury do wytwarzania -• Craft a wooden pickaxe so you can dig stone=• Wytwórz drewniany kilof aby wykopać kamień -• Different tools break different kinds of blocks. Try them out!=• Różne narzędzia są w stanie zniszczyć różne typy bloków. Wypróbuj je! -• Read entries in this help to learn the rest=• Przeczytaj inne wpisy aby dowiedzieć się resztę -• Continue playing as you wish. There's no goal. Have fun!=• Graj tak jak chcesz. Nie ma żadnego celu. Miłej zabawy! -Minetest=Minetest -Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Minetest jest wolnym oprogramowaniem i silnikiem do gier opartych o rozgrywkę na voxelach, inspirowanym przez InfiniMinera, Minecrafta i podobnym. Minetest był oryginalnie stworzony przez Perttu Ahola (alias “celeron55”). -The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.=Gracz jest wrzucony do ogromnego świata stworzonego z sześcianów lub bloków. Te sześciany zwykle tworzą widoczny krajobraz i mogą być usuwane oraz stawiane niemal całkowicie dowolnie. Korzystając z zebranych przedmiotów nowe narzędzia i inne rzeczy mogą zostać utworzone. Gry w Minetest mogą jednak być dużo bardziej skomplikowane niż to. -A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Główną cechą Minetesta jest wbudowana możliwość budowania. Mody modyfikują istniejącą rozgrywkę. Mogą być tak proste jak dodanie kilku bloków dekoracyjnych, lub bardzo skomplikowane np. wprowadzając zupełnie nowe sposoby rozgrywki, generując zupełnie inny rodzaj świata i wiele innych rzeczy. -Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=W Minetest można grać samotnie lub online z kilkoma graczami. Gra online będzie działać od razu z modami, bez potrzeby dodatkowych programów jako, że są one całkowicie dostarczane przez serwer. -Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums .=Minetest jest zwykle dystrybuowany wraz z prostą domyślną grą, nazwaną "Gra Minetest" (pokazana na obrazka 1 i 2). Prawdopodobnie już ją masz. Inne gry dla Minetesta mogą być pobrane z oficjalnych forum Minetesta . -Minetest as well as Minetest Game are both unfinished at the moment, so please forgive us when not everything works out perfectly.=Zarówno Minetest jak i Gra Minetest są aktualnie niedokończone, więc prosimy o wybaczenie jeśli nie wszystkie rzeczy działają idealnie. -Sneaking=Skradanie -Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Skradanie sprawia, że chodzisz wolniej i zapobiega spadaniu z bloków. -To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Aby się skradać przytrzymaj przycisk skradania (domyślnie: [Shift]). Gdy go puścisz, przestaniesz się skradać. Ostrożnie: Jeśli puścisz przycisk skradania na krawędzi możesz spaść! -• Sneak: [Shift]=• Skradanie: [Shift] -Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=Skradanie działa tylko gdy stoisz na stałym gruncie, nie w wodzie oraz nie podczas wspinania. -If you jump while holding the sneak key, you also jump slightly higher than usual.=Jeśli skoczysz podczas skradania, skoczysz nieco wyżej niż zwykle. -Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Skradanie może być wyłączone przez mody. W takim przypadku wciąż będziesz chodziła wolniej przy skradaniu, ale wciąż będziesz mogła spaść z bloków. -Controls=Sterowanie -These are the default controls:=To jest domyślne sterowanie: -Basic movement:=Podstawy poruszania: -• Moving the mouse around: Look around=• Poruszanie myszką: Rozglądnij się -• W: Move forwards=• W: Idź naprzód -• A: Move to the left=• A: Idź w lewo -• D: Move to the right=• D: Idź w prawo -• S: Move backwards=• S: Idź w tył -• E: Sprint=• E: Biegnij -While standing on solid ground:=Podczas stania na stałym gruncie: -• Space: Jump=• Spacja: Skok -• Shift: Sneak=• Shift: Skradanie -While on a ladder, swimming in a liquid or fly mode is active=Podczas wspinania, pływania w płynie lub aktywnego trybu latania: -• Space: Move up=• Spacja: W górę -• Shift: Move down=• Shift: W dół -Extended movement (requires privileges):=Rozszerzone poruszanie: -• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: Przełącz tryb szybki, co umożliwia szybkie bieganie i latanie (wymaga przywileju "fast") -• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: Przełącz tryb latania, co umożliwia swobodne poruszanie w dowolnym kierunku (wymaga przywileju "fly") -• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: Przełącz tryb noclip, co umożliwia przechodzenie przez ściany w trybie latania (wymaga przywileju "noclip") -• E: Move even faster when in fast mode=• E: Poruszaj się jeszcze szybciej w trybie szybkim -• E: Walk fast in fast mode=• Poruszaj się szybciej w trybie szybkim -World interaction:=Interakcja ze światem: -• Left mouse button: Punch / mine blocks / take items=• Lewy przycisk myszy: Uderz / kop bloki / weź przedmiot -• Left mouse button: Punch / mine blocks=• Lewy przycisk myszy: Uderz / kop bloki -• Right mouse button: Build or use pointed block=• Prawy przycisk myszy: Zbuduj lub użyj wskazywany blok -• Shift+Right mouse button: Build=• Shift+Prawy przycisk myszy: Zbuduj -• Roll mouse wheel: Select next/previous item in hotbar=• Kręć kółkiem myszy: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu -• Roll mouse wheel / B / N: Select next/previous item in hotbar=• Kręć kółkiem myszy / B / N: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu -• 1-9: Select item in hotbar directly=• 1-9: Wybierz przedmiot z pasku szybkiego dostępu -• Q: Drop item stack=• Q: Wyrzuć grupę przedmiotów -• Shift+Q: Drop 1 item=• Shift+Q: Wyrzuć jeden przedmiot -• I: Show/hide inventory menu=• I: Pokaż/schowaj menu ekwipunku -Inventory interaction:=Interakcja z ekwipunkiem: -See the entry “Basics > Inventory”.=Zobacz wpis "Podstawy > Ekwipunek". -Camera:=Kamera: -• Z: Zoom=• Z: Przybliż -• F7: Toggle camera mode=• F7: Zmień tryb kamery -• F8: Toggle cinematic mode=• F8: Zmień na tryb kinowy -Interface:=Interfejs: -• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: Otwórz okno menu (zatrzymuje grę w trybie pojedynczego gracza) lub zamknij okno -• F1: Show/hide HUD=• F1: Pokaż/ukryj interfejs -• F2: Show/hide chat=• F2: Pokaż/ukryj czat -• F9: Toggle minimap=• F9: Przełącz minimapę -• Shift+F9: Toggle minimap rotation mode=• Shift+F9: Przełącz tryb rotacji minimapy -• F10: Open/close console/chat log=• F10: Otwórz/zamknij konsolę/okno czatu -• F12: Take a screenshot=• F12: Zrób zrzut ekranu -Server interaction:=Interakcja z serwerem: -• T: Open chat window (chat requires the “shout” privilege)=• T: Otwórz okno czatu (chat wymaga przywileju "shout") -• /: Start issuing a server command=• /: Rozpocznij wpisywanie komendy serwera -Technical:=Techniczne: -• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• R: Przełącz tryb dalekiego widzenia (wyłącza mgłę i pozwala widzieć odległe obiekty, może znacząco spowolnić grę) -• +: Increase minimal viewing distance=• +: Zwiększ minimalny zasięg widzenia -• -: Decrease minimal viewing distance=• -: Zmniejsz minimalny zasięg widzenia -• F3: Enable/disable fog=• F3: Włącz/wyłącz mgłę -• F5: Enable/disable debug screen which also shows your coordinates=• F5: Włącz/wyłącz ekran debug'u, który pokazuje również twoje położenie -• F6: Only useful for developers. Enables/disables profiler=• F6: Przydatne tylko dla deweloperów. Włącza/wyłącza profiler -• P: Only useful for developers. Writes current stack traces=• P: Przydatne tylko dla deweloperów. Zapisuje aktualny zrzut stosu -Players=Gracze -Players (actually: “player characters”) are the characters which users control.=Gracze (właściwie "postacie graczy") są postaciami kontrolowanymi przez użytkowników. -Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).=Gracze są żywymi stworzeniami. Zaczynają z pewną liczbą punktów życia (HP) oraz punktów oddechu (BP). -Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Gracze są w stanie chodzić, skradać się, skakać, wspinać, pływać, nurkować, kopać, budować walczyć oraz korzystać z narzędzi i bloków. -Players can take damage for a variety of reasons, here are some:=Gracze mogą otrzymać obrażenia z wielu powodów, oto niektóre: -• Taking fall damage=• Obrażenia od upadku -• Touching a block which causes direct damage=• Dotknięcie bloku który zadaje obrażenia -• Drowning=• Tonięcie -• Being attacked by another player=• Zaatakowanie przez innego gracza -• Being attacked by a computer enemy=• Zaatakowanie przez przeciwnika sterowanego przez komputer -At a health of 0, the player dies. The player can just respawn in the world.=Gdy zdrowie osiągnie poziom 0, gracz umiera. Gracz może wtedy odrodzić się w świecie. -Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.=Inne konsekwencje śmierci zależą od gry. Gracz może stracić wszystkie przedmioty, lub stracić punkty w grze konkurencyjnej. -Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Niektóre bloki zmniejszają oddech. Podczas przebywania w bloku powodującym topienie się, punkty oddechu są zmniejszane o 1 co 2 sekundy. Gdy punkty oddechu się skończą, gracz zacznie otrzymywać obrażenia od tonięcia. Oddech szybko odnawia się w dowolnym innym bloku. -Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Obrażenia mogą zostać wyłączone w dowolnym świecie. Bez obrażeń gracze są nieśmiertelni, a ich życie i oddech są nieistotne. -In multi-player mode, the name of other players is written above their head.=W trybie wieloosobowym imię innych graczy jest napisane powyżej ich głów. -Items=Przedmioty -Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Przedmioty są rzeczami które możesz przenosić i przechowywać w ekwipunku. Mogą być wykorzystane do wytwarzania, przetapiania, budowania, kopania i w innych celach. Typy przedmiotów to m.in. bloki, narzędzia bronie oraz przedmioty użyteczne tylko w wytwarzaniu. -An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Grupa przedmiotów jest zbiorem przedmiotów tego samego typu, która mieści się w jednym miejscu na przedmiot. Grupy przedmiotów mogą zostać upuszczone na ziemię. Przedmioty, które zostaną upuszczone na te same współrzędne utworzą grupę przedmiotów. -Dropped item stacks will be collected automatically when you stand close to them.=Upuszczone grupy przedmiotów zostaną podniesione automatycznie gdy staniesz w ich pobliżu. -Items have several properties, including the following:=Przedmioty mają wiele właściwości, między innymi: -• Maximum stack size: Number of items which fit on 1 item stack=• Maksymalny rozmiar grupy: Liczba przedmiotów które mieszczą się w jednej grupie -• Pointing range: How close things must be to be pointed while wielding this item=• Zasięg wskazywania: Jak blisko muszą być przedmioty aby można na nie wskazać za pomocą tego przedmiotu -• Group memberships: See “Basics > Groups”=• Przynależność do grupy: Zobacz "Podstawy > Grupy" -• May be used for crafting or cooking=• Mogą być używane do wytwarzania lub pieczenia -Tools=Narzędzia -Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Niektóre przedmioty służą jako narzędzia gdy trzyma się je w rękach. Dowolny przedmiot, który ma specjalne użycia które mogą być bezpośrednio użyte przez jego posiadacza jest uznawany za narzędzie. -A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Częstym podzbiorem narzędzi są narzędzia do kopania. Są one istotne przy niszczeniu różnych typów bloków. Bronie są innym rodzajem narzędzia. Jest oczywiście wiele innych możliwych narzędzi. Specjalne akcje narzędzi są zwykle aktywowane przy użyciu lewego lub prawego przycisku myszy. -When nothing is wielded, players use their hand which may act as tool and weapon.=Gdy nic nie jest trzymane, gracze używają swojej ręki, która może służyć jako narzędzie i broń. -Mining tools are important to break all kinds of blocks. Weapons are another kind of tool. There are some other more specialized tools. Special actions of tools are usually done by right-click.=Narzędzia do kopania są istotne do niszczenia różnych bloków. Innym rodzajem narzędzi są bronie. Istnieją również inne, bardzie wyspecjalizowane narzędzia. Specjalne akcje narzędzi są zwykle wykonywane przy użyciu lewego oraz prawego przycisku myszy. -When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of punching and deals minimum damage.=Gdy nic nie jest trzymane gracze używają swojej dłoni, która może służyć za narzędzie i za broń. Ręką można uderzać co zadaje minimalne obrażenia. -Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=Wiele narzędzi będzie się zużywać podczas używania, co w końcu sprawi, że zostaną zniszczone. Zużycie jest wyświetlane jako pasek poniżej ikony narzędzia. Jeśli pasek nie jest pokazywany, narzędzie jest w idealnym stanie. Narzędzia mogą być naprawiane przez wytwarzania, zobacz "Podstawy > Wytwarzanie". -Weapons=Bronie -Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Niektóre przedmioty są przydatne jako bronie wręcz gdy trzymane. Bronie mają wiele podobnych własności co narzędzia. -Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Bronie wręcz zadają obrażenia przy uderzaniu graczy i innych obiektów. -• Single punch: Left-click once to deal a single punch=• Pojedyncze uderzenie: Kliknij lewy przycisk myszy aby wykonać jedno uderzenie -• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Szybkie uderzenia: Przytrzymaj lewy przycisk myszy aby zadać szybkie, powtarzające się uderzenia -There are two core attributes of melee weapons:=Dwie istotne cechy każdej broni wręcz: -• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered=• Maksymalne obrażenia: Obrażenia zadawane gdy broń przy uderzeniu gdy broń jest całkowicie ochłonięta -• Full punch interval: Time it takes for fully recovering from a punch=• Pełny okres uderzenia: Czas który jest potrzebny do ochłonięcia broni po uderzeniu -A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Broń zadaje pełne obrażenia tylko gdy jest w pełni ochłonięta z poprzedniego uderzenia. W przeciwnym wypadku zadane obrażenia będą zmniejszone. To oznacza, że szybkie uderzanie jest bardzo szybkie, ale zadaje niskie obrażenia. Zauważ, że pełny okres uderzenia nie jest limitem na to jak szybko możesz atakować. -There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=Istnieje reguła która sprawia, że ataki są czasem niemożliwe: Gracze, ruchome obiekty i bronie należą do grup obrażeń. Broń zadaje obrażenia tylko tym, którzy należą do przynajmniej jednej z jej grup obrażeń. -Pointing=Wskazywanie -“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.="Wskazywanie" oznacza patrzenia na coś w zasięgu celownikiem. Wskazywanie jest wymagane podczas interakcji takich jak kopanie, uderzanie, używanie itp. Wskazywalne obiekty to między innymi bloki, gracze, przeciwnicy komputerowi i obiekty. -To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Aby na coś wskazać musi być to w zasięgu wskazywania (zwykle nazywanym po prostu "zasięgiem") trzymanego przez ciebie przedmiotu. Gdy nic nie jest trzymane jest to zasięg domyślny. Wskazywany przedmiot będzie obrysowany lub podświetlony (w zależności od twoich ustawień). Wskazywanie nie jest możliwe gdy włączona jest przednia kamera trzecioosobowa. -A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=Na niektóre rzeczy nie można wskazywać. Większość bloków jest wskazywalna. Na niektóre bloki, np. powietrze, nie można wskazać. Inne bloki, takie jak płyny, mogą być wskazane tylko przy użyciu specjalnych przedmiotów. -Camera=Kamera -There are 3 different views which determine the way you see the world. The modes are:=Istnieją 3 różne widoki, które definiują w jaki sposób będziesz obserwował świat. Te widoki to: -• 1: First-person view (default)=• 1: Widok pierwszoosobowy (domyślny) -• 2: Third-person view from behind=• 2: Widok trzecioosobowy od tyłu -• 3: Third-person view from the front=• 3: Widok trzecioosobowy od przodu -You can change the camera mode by pressing [F7].=Możesz zmienić widok kamery naciskając [F7]. -You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.=Możesz być w stanie przybliżać widok naciskając [Z]. To pozawala spojrzeć dalej w kierunku celownika. -Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.=Przybliżanie jako cecha rozgrywki może być włączone lub wyłączone przez grę. Domyślnie przybliżanie jest włączone w trybie Kreatywny i wyłączone w przeciwnym przypadku. -There is also Cinematic Mode which can be toggled with [F8]. With Cinematic Mode enabled, the camera movements become more smooth. Some players don't like it, it is a matter of taste.=Istnieje również tryb kinowy, który może być włączony naciskając [F8]. Gdy jest on włączony ruchy kamery są bardziej wygładzone. Niektórzy gracze go nie lubią, jest to kwestia gustu. -By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.=Przytrzymując [Z] możesz przybliżyć widok na swoim celowniku. Potrzebujesz przywileju "zoom" aby to zrobić. -• Switch camera mode: [F7]=• Zmień widok kamery: [F7] -• Toggle Cinematic Mode: [F8]=• Przełącz tryb kinowy: [F8] -• Zoom: [Z]=• Przybliż: [Z] -Blocks=Bloki -The world of MineClone 2 is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat MineClone 2 jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi. -The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi. -Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=Bloki mogą mieć wiele różnych właściwości określających czas kopania, zachowanie, wygląd, kształt i wiele więcej. Te własności to między innymi: -• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Zderzalne: Przez bloki z tą własnością nie można przechodzić; gracze mogą po nich chodzić. Przez nie-zderzalne bloki można swobodnie przechodzić. -• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Wskazywalne: Te bloki pokażą obwód lub poświatę gdy zostaną wskazane. Ale przez niewskazywalne bloki będziesz wskazywała bloki znajdujące się za nimi. Płyny są zwykła niewskazywalne, ale można na nie wskazać przy użyciu specjalnych narzędzi. -• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Własności kopania: Przez jakie narzędzia mogą być wykopane, jak szybko oraz jak bardzo zużyje to narzędzie -• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Wspinaczkowe: Gdy jesteś obok bloków wspinaczkowych nie spadniesz, oraz możesz poruszać się w górę i w dół korzystając z przycisków do skakania i skradania. -• Drowning damage: See the entry “Basics > Player”=• Obrażenia tonięcia: Zobacz wpis "Podstawy > Gracz" -• Liquids: See the entry “Basics > Liquids”=• Płyny: Zobacz wpis "Podstawy > Płyny" -• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Przynależność do grup: Przynależności do grup definiują własności kopania, wytwarzania, interakcje między blokami i wiele więcej -Mining=Kopanie -Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=Kopanie (lub wydobywanie) jest procesem niszczenia i usuwania bloków. Aby wykopać blok, wskaż na niego i przytrzymaj lewy przycisk myszy aż się zniszczy. -Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.=Bloki wymagają narzędzi do kopania aby je wykopać. Różne bloki są wykopywane przez różne narzędzia, a niektóre nie mogą być wykopane przez żadne narzędzie. Najszybszym sposobem testowania jak efektowne są twoje narzędzia do kopania jest po prostu wypróbowanie ich na różnych blokach. Wszystkie przedmioty które wykopiesz zostaną upuszczone na ziemię, gotowe do podniesienia. -After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=Po wykopaniu, blok może upuścić "zrzut". Jest to kilka przedmiotów zdobytych przez kopanie. Najczęściej będzie to wykopany blok. Możliwe są inne zrzuty zależne od typu bloku. Następujące zrzuty są możliwe: -• Always drops itself (the usual case)=• Zawsze wyrzuca siebie (typowy przypadek) -• Always drops the same items=• Zawsze wyrzuca te same przedmioty -• Drops items based on probability=• Wyrzuca przedmioty z pewnym prawdopodobieństwem -• Drops nothing=• Nie wyrzuca niczego -Building=Budowanie -Almost all blocks can be built (or placed). Building is very simple and has no delay.=Prawie wszystkie bloki mogą być zbudowane (lub postawione). Stawianie jest bardzo proste i natychmiastowe. -To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Aby postawić trzymany blok, wskaż na blok w świecie i kliknij prawy przycisk. Jeśli jest to niemożliwe, ponieważ wskazany blok ma specjalną akcję aktywowaną prawym przyciskiem myszy, przytrzymaj przycisk skradania przed kliknięciem prawego przycisku. -Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=Bloki prawie zawsze mogą być zbudowane na wskazywalnych blokach. Jednym z wyjątków są bloki przyczepione do podłogi; takie mogą być zbudowane tylko na podłodze. -Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Zwykle, bloki są zbudowane przed wskazaną stroną wskazanego bloki. Niektóre bloki są inne: Gdy próbujesz na nich coś postawić są one tym zastępowane. -Liquids=Płyny -Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=Płyny są specjalnymi dynamicznymi blokami. Płyny lubią się rozprzestrzeniać i wpływać na otaczające bloki. Gracze mogą w nich pływać i tonąć. -Liquids usually come in two forms: In source form (S) and in flowing form (F).=Płyny zwykle pojawiają się w dwóch formach: W formie źródła (S) oraz w formie bieżącej (F). -Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.=Źródła płynów są w kształcie pełnej kostki. Źródło płynu od czasu do czasu wygeneruje bieżący formę płynu w swoim otoczeniu oraz jeśli płyn jest odnawialny, utworzy również źródła płynu. Źródło płynu podtrzymuje siebie. Tak długo jak nie jest ruszane, źródło wody zostanie w miejscu i nie kończy się. -Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=Bieżące płyny przyjmują formę ściętą. Rozprzestrzeniają się one po świecie dopóki się nie wyczerpią. Bieżący płyn nie podtrzymuje sam siebie i zawsze powstaje ze źródła płynu, bezpośrednio lub pośrednio. Bez źródła płynu, płyn bieżący prędzej czy później wyczerpie się i zniknie. -All liquids share the following properties:=Wszystkie płyny mają następujące własności: -• All properties of blocks (including drowning damage)=• Wszystkie własności bloków (włączając w to obrażenia od tonięcia) -• Renewability: Renewable liquids can create new sources=• Odnawialność: Odnawialne płyny mogą tworzyć nowe źródła -• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Zasięg płynięcia: Ile maksymalnie płynów bieżących jest utworzonych przez źródło płynu. Definiuje to jak daleko płyn może się rozprzestrzenić. Możliwe wartości są od 0 do 8. Przy 0, żadne płyny bieżące nie będą utworzone. Obrazek 5 pokazuje płyn z zasięgiem płynięcia 2 -• Viscosity: How slow players move through it and how slow the liquid spreads=• Lepkość: Jak wolno gracze poruszają się przez niego i jak wolno płyn się rozprzestrzenia -Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:=Odnawialne płyny mogą tworzyć nowe źródła płynów w wolnej przestrzeni (obrazek 2). Nowe źródło płynu jest tworzone gdy: -• Two renewable liquid blocks of the same type touch each other diagonally=• Dwa odnawialne źródła płynów tego samego typu stykają się po przekątnej -• These blocks are also on the same height=• Bloki te są na tej samej wysokości -• One of the two “corners” is open space which allows liquids to flow in=• Jeden z dwóch "rogów" jest wolną przestrzenią gdzie może wpłynąć płyn -When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Gdy te kryteria są spełnione, wolna przestrzeń jest zapełniona źródłem płynu tego samego typu (obrazek 3). -Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Pływanie w płynie jest całkiem proste: Klawisze chodzenia powodują ruch w danym kierunku, przycisk skakania powoduje wznoszenia, a skradania opadanie. -The physics for swimming and diving in a liquid are:=Fizyka pływania i nurkowania w płynach jest następująca: -• The higher the viscosity, the slower you move=• Im wyższa lepkość, tym wolniej się poruszasz -• If you rest, you'll slowly sink=• Jeśli się nie ruszasz, będziesz powoli opadała -• There is no fall damage for falling into a liquid as such=• Nie ma obrażeń od upadku gdy wpadniesz do płynu -• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Gdy wpadasz do płynu będziesz spowolniona przy zetknięciu (ale nie natychmiast). Zanurzenie po upadku jest ustalane na podstawie twojej szybkości oraz lepkości płynu. Żeby bezpiecznie skoczyć do płynu, upewnij się, że jest go wystarczająco dużo nad ziemię. W przeciwnym wypadku możesz uderzyć w ziemię i otrzymać obrażenia od upadku. -Liquids are often not pointable. But some special items are able to point all liquids.=Płyny są zwykle niewskazywalne, ale niektóre specjalne przedmioty mogą wskazywać na płyny. -Crafting=Wytwarzanie -Crafting is the task of combining several items to form a new item.=Wytwarzanie jest procesem łączenia i przetwarzania przedmiotów aby utworzyć nowy przedmiot. -To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Aby coś wytworzyć potrzebujesz jednego lub więcej przedmiotów, siatki do wytwarzania oraz receptury. Siatka do wytwarzania jest jak zwykły ekwipunek, który może być użyty do wytwarzania. Przedmioty muszą być ułożone w konkretny wzór w siatce do wytwarzania. Obok siatki wytwarzania jest miejsce wyjściowe (O). Tutaj pojawi się rezultat gdy poprawnie umieścisz przedmioty. Jest to tylko podgląd, a nie faktyczny przedmiot. Siatki do wytwarzania mogą mieć różne rozmiary, co ogranicza liczbę receptur które możesz wytworzyć. -To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Aby zakończyć wytwarzanie zabierze wynikowy przedmiot z miejsca wyjściowego. Skonsumuje to przedmioty z siatki do wytwarzania i utworzy nowy przedmiot. Nie da się umieszczać przedmiotów w miejscu wyjściowym. -A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).=Opis w jaki sposób uzyskać dany przedmiot nazywa się "recepturą wytwarzania". Potrzebujesz tej wiedzy do wytwarzania. Jest kilka sposobów by je poznać. Jednym z nich jest korzystanie z przewodnika do wytwarzania, który zawiera listę dostępnych receptur do wytwarzania. Niektóre gry dostarczają takie przewodniki. Istnieją także mody, które możesz pobrać z internetu dodające przewodniki. Innym sposobem jest przeczytanie instrukcji gry w internecie (jeśli taka jest dostępna). -Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Receptury do wytwarzania składają się z przynajmniej jednego przedmiotu na wejściu i dokładnie jednej grupy przedmiotów wyjściowych. Podczas dokonywania pojedynczego wytwarzania skonsumowany zostanie dokładnie jeden przedmiot z każdej grupy w siatce wytwarzania, chyba, że receptura definiuje zamienniki. -There are multiple types of crafting recipes:=Istnieje kilka typów receptur: -• Shaped (image 2): Items need to be placed in a particular shape=• Kształtne (obrazek 2): Przedmioty muszą być ułożone w konkretny kształt -• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)=• Bezkształtne (obrazki 3 i 4): Przedmioty muszą być ułożone gdzieś w wejściu (oba obrazki pokazują tę samą recepturę) -• Cooking: Explained in “Basics > Cooking”=• Pieczenie: Wyjaśnione w "Podstawy > Pieczenie" -• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%=• Naprawianie (obrazek 5): Postaw dwa uszkodzone narzędzia w siatce do wytwarzania w dowolnym miejscu aby uzyskać narzędzie naprawione o 5% -In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=W niektórych recepturach, niektóre przedmioty wejściowe nie muszą być konkretnymi przedmiotami, tylko przynależeć do pewnej grupy (zobacz "Podstawy > Grupy"). Te receptury są nieco mniej restrykcyjne jeśli chodzi o wejściowe przedmioty. Obrazki 6-8 pokazują tę samą recepturę opartą o grupy. W tym przypadku 8 przedmiotów z grupy "kamień" są potrzebne, a wszystkie pokazane przedmioty do niej należą. -Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=Czasami, receptury mają zamienniki. To oznacza, że po wykonaniu przetwarzania, niektóre przedmioty w siatce nie będą skonsumowane, a jedynie zamienione w inny przedmiot. -Cooking=Pieczenie -Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=Pieczenie (lub przetapianie) jest formą wytwarzania, która nie wymaga siatki do wytwarzania. Pieczenie jest wykonywane przy użyciu specjalnego bloku (np. pieca), przedmiotu który można upiec, paliwa oraz czasu potrzebnego na uzyskanie nowego przedmiotu. -Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Każdy przedmiot będący paliwem ma czas wypalania. Jest to czas przez jaki pojedynczy przedmiot tego paliwa utrzymuje piec zapalony. -Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Każdy przedmiot możliwy do upieczenia potrzebuje czasu by zostać upieczony. Czas ten jest przypisany do typu przedmiotu i każdy przedmiot musi być "na ogniu" przez cały ten czas by uzyskać przedmiot wynikowy. -Hotbar=Pasek szybkiego dostępu -At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=Na dole swojego ekwipunku możesz zobaczyć kwadraty. To nazywa się "pasek szybkiego dostępu". Pozwala on na szybki dostęp do pierwszych przedmiotów z twojego ekwipunku. -You can change the selected item with the mouse wheel or the keyboard.=Możesz zmieniać wybrany przedmiot przy użyciu kółka myszy lub klawiatury. -• Select previous item in hotbar: [Mouse wheel up] or [B]=• Wybierz poprzedni przedmiot w pasku: [Kółko myszy w górę] lub [B] -• Select next item in hotbar: [Mouse wheel down] or [N]=• Wybierz następny przedmiot w pasku: [Kółko myszy w dół] lub [N] -• Select item in hotbar directly: [1]-[9]=• Wybierz bezpośrednio przedmiot w pasku: [1]-[9] -The selected item is also your wielded item.=Wybrany przedmiot jest również przedmiotem, który trzymasz. -Minimap=Minimapa -If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w którymś z twoich miejsc na pasku szybkiego dostępu, możesz korzystać z minimapy. -Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Naciśnij [F9] aby minimapa pojawiła się w prawym górnym rogu. Minimapa pomoże ci odnaleźć się w świecie. Naciśnij [F9] ponownie aby wybrać inny tryb minimapy i stopień przybliżenia. Minimapa pokazuje również pozycję innych graczy. -There are 2 minimap modes and 3 zoom levels.=Są 2 tryby minimapy oraz 3 stopnie przybliżenia. -Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=Tryb powierzchni (obrazek 1) jest widokiem z lotu ptaka na świat, mniej więcej odzwierciedlającym kolory bloków z których stworzony jest świat. Pokazuje tylko najwyżej położone bloki, wszystko poniżej jest ukryte, podobnie jak zdjęcie satelitarne. Tryb ten jest przydatny gdy się zgubisz. -Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=Tryb radaru (obrazek 2) jest bardziej skomplikowany. Pokazuje "gęstość" obszaru wokół ciebie i zmienia się z wysokością. Z grubsza, im bardziej zielony jest obszar, ty mniej "gęsty" jest. Czarne obszary mają wiele bloków. Użyj tego trybu by znaleźć jaskinie, ukryte obszary, ściany i więcej. Prostokątne kształty w obrazku 2 wyraźnie ujawniają pozycję lochów. -There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Istnieją również dwa różne tryby rotacji. W "trybie kwadratowym" rotacja minimapy jest ustalona. Jeśli naciśniesz [Shift]+[F9] aby zmienić na "tryb okręgu", minimapy będzie natomiast obracać się wraz z twoim kierunkiem patrzenia. -In some games, the minimap may be disabled.=W niektórych grach minimapa może być wyłączona. -• Toggle minimap mode: [F9]=• Przełącz tryb minimapy: [F9] -• Toggle minimap rotation mode: [Shift]+[F9]=• Przełącz tryb rotacji minimapy: [Shift]+[F9] -Inventory=Ekwipunek -Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Ekwipunki są wykorzystywane do przechowywania grup przedmiotów. Mogą być również wykorzystywane w innych celach, np. wytwarzanie. Ekwipunek składa się z prostokątnej siatki miejsc na przedmioty. Każde miejsce na przedmioty może być puste lub zapełnione jedną grupą przedmiotów. Grupy przedmiotów można dowolnie przenosić pomiędzy miejscami. -You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=Posiadasz swój własny ekwipunek nazywany "ekwipunkiem gracza", możesz go otworzyć klikając przycisk inwentarza (domyślnie: [I]). Pierwsze miejsca ekwipunku są również wykorzystywane jako miejsca na pasku szybkiego dostępu. -Blocks can also have their own inventory, e.g. chests and furnaces.=Bloki mogą mieć swój własny ekwipunek, np. skrzynie lub piece. -Inventory controls:=Sterowanie w ekwipunku -Taking: You can take items from an occupied slot if the cursor holds nothing.=Zabieranie: Możesz zabierać przedmioty z zajętego miejsca jeśli na kursorze niczego nie ma. -• Left click: take entire item stack=• Lewy przycisk: weź całą grupę przedmiotów -• Right click: take half from the item stack (rounded up)=• Prawy przycisk: weź połowę przedmiotów z grupy (zaokrąglone w górę) -• Middle click: take 10 items from the item stack=• Środkowy przycisk: weź 10 przedmiotów z grupy -• Mouse wheel down: take 1 item from the item stack=• Kółko myszy w dół: Weź 1 przedmiot z grupy -Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Wstawianie: Możesz wstawić przedmioty w miejsce jeśli na kursorze jest przynajmniej 1 przedmiot, a wskazane miejsce jest puste lub zawiera grupę przedmiotów tego samego typu. -• Left click: put entire item stack=• Lewy przycisk: Wstaw całą grupę przedmiotów -• Right click: put 1 item of the item stack=• Prawy przycisk: Wstaw 1 przedmiot z grupy -• Right click or mouse wheel up: put 1 item of the item stack=• Prawy przycisk lub kółko myszy w górę: Wstaw 1 przedmiot z grupy -• Middle click: put 10 items of the item stack=• Środkowy przycisk: wstaw 10 przedmiotów z grupy -Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.=Wymienianie: Możesz wymieniać przedmioty jeśli na kursorze jest przynajmniej jeden przedmiot, a we wskazanym miejscu znajduje się grupa innych przedmiotów. -• Click: exchange item stacks=• Kliknij: wymień grupy przedmiotów -Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Wyrzucanie: Jeśli trzymasz grupę przedmiotów i klikniesz poza menu ekwipunku, grupa przedmiotów zostanie wyrzucona w świat. -Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Szybki transfer: Możesz szybko przemieszczać grupę przedmiotów z/do ekwipunku gracza do/z ekwipunku innego przedmiotu, takich jak piec, skrzynia czy innego z ekwipunkiem, gdy jego ekwipunek jest otworzony. Docelowy ekwipunek jest najczęściej najbardziej istotnym ekwipunkiem w takim kontekście. -• Sneak+Left click: Automatically transfer item stack=• Skradanie+Lewy przycisk: Automatycznie przenieś grupę przedmiotów -Online help=Pomoc online -You may want to check out these online resources related to MineClone 2.=Możesz chcieć zobaczyć na te zasoby online powiązane z MineClone 2. -MineClone 2 download and forum discussion: =MineClone 2 pobieranie oraz dyskusja na forum: -Here you find the most recent version of MineClone 2 and can discuss it.=Tutaj możesz znaleźć najnowszą wersję MineClone 2 i porozmawiać o niej -Bug tracker: =Śledzenie błędów: -Report bugs here.=Zgłaszaj tu zauważone błędy. -Minetest links:=Linki dotyczące Minetest: -You may want to check out these online resources related to Minetest:=Możesz chcieć zobaczyć te zasoby online dotyczące Minetest -Official homepage of Minetest: =Oficjalna strona Minetest: -The main place to find the most recent version of Minetest, the engine used by MineClone 2.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta, silnika wykorzystywanego przez MineClone 2. -The main place to find the most recent version of Minetest.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta. -Community wiki: =Wiki społeczności: -A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Utrzymywana przez społeczność dokumentacja na temat Minetest. Każdy z kontem może ją edytować! Znajduje się na niej również dokumentacja Gry Minetest. -Minetest forums: =Forum Minetest: -A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Platforma dyskusyjna, gdzie możesz porozmawiać na wszystkie tematy związane z Minetestem. Jest to również miejsce gdzie stworzone przez graczy mody i gry są publikowane i omawiane. Rozmowy są prowadzone głównie po angielsku ale jest również miejsce na rozmowy w innych językach. -Chat: =Czat: -A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Ogólne kanał IRC na dowolny temat związany z Minetest, gdzie ludzie mogą się spotkać i rozmawiać w czasie rzeczywistym. Jeśli nie rozumiesz IRC, zobacz na Wiki społeczności by znaleźć pomoc. -Groups=Grupy -Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Przedmioty, gracze i obiekty (ruchome i nieruchome) mogą przynależeć do dowolnej liczby grup. Grupy pełnią kilka funkcji: -• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Receptury wytwarzania: Miejsca w recepturze mogą nie wymagać konkretnego przedmiotu, lecz przedmiotu, który przynależy do konkretnej grupy, lub kilku grup -• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Czas kopania: Bloki które można wykopać należą do grupy, które definiują czas ich kopania. Narzędzia do kopania są w stanie kopać przedmioty należące do pewnych grup -• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Zachowanie bloku: Bloki mogą wykazywać się pewnym zachowaniem i wchodzić w interakcję z innymi blokami gdy należą do pewnych grup -• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Obrażenia i zbroja: Obiekty i gracze mają grupy zbroi, bronie mają grupy obrażeń. Te grupy definiują obrażenia. Zobacz również: "Podstawy > Bronie" -• Other uses=• Inne użycia -In the item help, many important groups are usually mentioned and explained.=We wpisach o przedmiotach wiele istotnych grup jest zwykle wymienionych i opisanych. -Glossary=Słowniczek -This is a list of commonly used terms:=Jest to lita często używanych terminów: -Controls:=Sterowanie: -• Wielding: Holding an item in hand=• Trzymanie: Posiadanie przedmiotu w ręce -• Pointing: Looking with the crosshair at something in range=• Wskazywanie: Patrzenie na coś w zasięgu celownikiem -• Dropping: Throwing an item or item stack to the ground=• Upuszczanie: Wyrzucenie przedmiotu lub grupy przedmiotów na ziemię -• Punching: Attacking with left-click, is also used on blocks=• Uderzanie: Atakowanie lewym przyciskiem myszy, używane również na blokach -• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Skradanie: Powolne chodzenie i (zwykle) unikanie spadania z bloków -• Climbing: Moving up or down a climbable block=• Wspinanie: Wchodzenie w górę lub schodzenie w dół po wspinaczkowych blokach -Blocks:=Bloki: -• Block: Cubes that the worlds are made of=• Blok: Kostki z którego stworzony jest świat -• Mining/digging: Using a mining tool to break a block=• Kopanie/Wydobywanie: Używanie przedmiotów do kopania do niszczenia bloków -• Building/placing: Putting a block somewhere=• Budowanie/Umieszczanie: Wstawianie gdzieś bloku -• Drop: Items you get after mining a block=• Zrzut: Przedmioty uzyskane po wykopaniu bloku -• Using a block: Right-clicking a block to access its special function=• Używanie bloku: Kliknięcie prawym przyciskiem na blok aby uruchomić jego specjalną funkcję -Items:=Przedmioty: -• Item: A single thing that players can possess=• Przedmiot: Pojedyncza rzecz, którą gracz może posiadać -• Item stack: A collection of items of the same kind=• Grupa przedmiotów: Zbiór przedmiotów tego samego typu -• Maximum stack size: Maximum amount of items in an item stack=• Maksymalny rozmiar grupy: Maksymalna liczba przedmiotów w grupie przedmiotów -• Slot / inventory slot: Can hold one item stack=• Miejsce / miejsce w ekwipunku: Może przechowywać jedną grupę przedmiotów -• Inventory: Provides several inventory slots for storage=• Ekwipunek: Dostarcza kilka miejsc w ekwipunku do przechowywania -• Player inventory: The main inventory of a player=• Ekwipunek gracza: Główny ekwipunek gracza -• Tool: An item which you can use to do special things with when wielding=• Narzędzie: Przedmiot, który można wykorzystać w specjalny sposób podczas trzymania -• Range: How far away things can be to be pointed by an item=• Zasięg: Jak dalekie rzeczy mogą być wskazane przedmiotem -• Mining tool: A tool which allows to break blocks=• Narzędzie do kopania: Narzędzie pozwalające niszczyć bloki -• Craftitem: An item which is (primarily or only) used for crafting=• Przedmiot do wytwarzania: Przedmiot który jest (głównie lub tylko) wykorzystywany do wytwarzania. -Gameplay:=Rozgrywka -• “heart”: A single health symbol, indicates 2 HP=• "serce": Pojedynczy symbol zdrowia, reprezentujący 2 HP -• “bubble”: A single breath symbol, indicates 1 BP=• "bąbel": Pojedynczy symbol oddechu, reprezentujący 1 BP -• HP: Hit point (equals half 1 “heart”)=• HP: Punkt zdrowia (równy połowie serca) -• BP: Breath point, indicates breath when diving=• BP: Punkt oddechu reprezentujący ilość powietrza podczas nurkowania -• Mob: Computer-controlled enemy=• Mob: Przeciwnik sterowany przez komputer -• Crafting: Combining multiple items to create new ones=• Wytwarzanie: Łączenie kilku przedmiotów w celu uzyskania innych -• Crafting guide: A helper which shows available crafting recipes=• Przewodnik wytwarzania: Pomocniczy spis dostępnych receptur wytwarzania -• Spawning: Appearing in the world=• Spawnowanie: Pojawienie się w świecie -• Respawning: Appearing again in the world after death=• Odradzanie: Ponownie pojawienie się w świecie po śmierci -• Group: Puts similar things together, often affects gameplay=• Grupa: Łączy podobne rzeczy razem, często wpływa na rozgrywkę -• noclip: Allows to fly through walls=• noclip: Pozwala przelatywać przez ściany -Interface=Interfejs: -• Hotbar: Inventory slots at the bottom=• Pasek szybkiego dostępu: Miejsca ekwipunku na dole ekranu -• Statbar: Indicator made out of half-symbols, used for health and breath=• Pasek statusu: Wskaźniki składające się z symboli używane dla oznaczania życia oraz oddechu -• Minimap: The map or radar at the top right=• Minimapa: Mapa lub radar w prawym górnym rogu ekranu -• Crosshair: Seen in the middle, used to point at things=• Celownik: Widoczny na środku ekranu, używany do wskazywania na rzeczy -Online multiplayer:=Gra wieloosobowa w internecie: -• PvP: Player vs Player. If active, players can deal damage to each other=• PvP: Gracz kontra Gracz. Jeśli ten tryb jest aktywny, gracze mogą zadawać sobie obrażenia -• Griefing: Destroying the buildings of other players against their will=• Griefowanie: Celowe niszczenie budynków innych graczy wbrew ich woli -• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Ochrona: Mechanizm pozwalający wejść w posiadanie pewnych części świata, co pozwala tylko właścicielom modyfikować bloki wewnątrz -Technical terms:=Techniczne terminy: -• Minetest: This game engine=• Minetest: Ten silnik gier -• MineClone 2: What you play right now=• MineClone 2: To w co teraz grasz -• Minetest Game: A game for Minetest by the Minetest developers=• Gra Minetest: Gra w Minetest napisana przez jego twórców -• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Gra: Kompletny doświadczenie do wykorzystania w Minetest; takie jak gry, piaskownice i podobne -• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them=• Mod: Pojedynczy system, który dodaje, lub modyfikuje funkcjonalność; jest podstawowym blokiem budowalnym gier i może być wykorzystywany do dalszego urozmaicania i modyfikowania ich -• Privilege: Allows a player to do something=• Przywilej: Pozwala graczowi coś zrobić -• Node: Other word for “block”=• Węzeł: Inna nazwa na "blok" -Settings=Ustawienia -There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Jest wiele różnych ustawień pozwalających zmodyfikować działanie Minetesta. Niemal każdy aspekt może być w ten sposób zmieniony. -These are a few of the most important gameplay settings:=Oto kilka najważniejszych ustawień dotyczących rozgrywki: -• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Włączone obrażenia (enable_damage): Włącza paski zdrowia i oddechu. Jeśli wyłączone, gracze są nieśmiertelni -• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Tryb kreatywny (creative_mode): Włącza rozgrywkę w stylu piaskownicy, skupiająca się na kreatywności a nie wyzwaniach. Dokładne znaczenie zależy od gry; najczęstsze zmiany to: Zmniejszony czas kopania, łatwy dostęp do niemal wszystkich przedmiotów, narzędzie się nie wykorzystują itp. -• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• PvP (enable_pvp): Skrót od "Player vs Player" (gracz kontra gracz). Jeśli włączone, gracze mogą zadawać sobie obrażenia -For a full list of all available settings, use the “All Settings” dialog in the main menu.=Aby zobaczyć pełną listę dostępnych ustawień, użyj przycisku "Wszystkie ustawienia" w menu głównym. -Movement modes=Tryby poruszania -You can enable some special movement modes that change how you move.=Możesz uruchomić specjalne tryby poruszania, które zmieniają sposób w jaki się przemieszczasz. -Pitch movement mode:=Alternatywny tryb poruszania bez-ważkiego: -• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.=• Opis: Jeśli ten tryb jest włączony, klawisze ruchu będą poruszać cię prostopadle do kierunku patrzenia, gdy jesteś w płynach lub w trybie latania. -• Default key: [L]=• Domyślny przycisk: [L] -• No privilege required=• Nie potrzeba żadnego przywileju -Fast mode:=Tryb szybki: -• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Opis: Pozwala poruszać się znacznie szybciej. Przytrzymaj swój przycisk "Używania" [E] aby poruszać się szybciej. W konfiguracji klienta możesz dokładniej skonfigurować tryb szybki. -• Default key: [J]=• Domyślny przycisk: [J] -• Required privilege: fast=• Potrzebny przywilej: fast -Fly mode:=Tryb latania: -• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Opis: Grawitacja przestaje na ciebie wpływać i możesz swobodnie poruszać się w dowolnym kierunku. Użyj przycisku skoku aby się wznosić, a przycisku skradania aby opadać. -• Default key: [K]=• Domyślny przycisk: [K] -• Required privilege: fly=• Potrzebny przywilej: fly -Noclip mode:=Tryb noclip: -• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Opis: Pozwala przechodzić przez ściany. Działa tylko gdy uruchomiony jest tryb latania. -• Default key: [H]=• Domyślny przycisk: [H] -• Required privilege: noclip=• Potrzebny przywilej: noclip -Console=Konsola -With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=Naciskając [F10] możesz otworzyć i zamknąć konsolę. Głównym zastosowaniem konsoli jest wyświetlenie czatu oraz wysyłanie wiadomości lub wpisywanie komend serwera. -Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=Korzystanie z przycisku czatu lub komand serwera również otwiera konsolę, będzie ona jednak mniejsza i zostanie zamknięta po wysłaniu wiadomości. -Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Użyj czatu by komunikować się z innymi graczami. Wymaga to przywileju "shout". -Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Aby to zrobić wpisz wiadomość i naciśnij [Enter]. Publiczne wiadomości nie mogą rozpoczynać się od znaku "/". -You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .=Możesz wysyłać prywatne wiadomości: Napisz "/msg " w czacie aby wysłać "" widoczną tylko przez . -There are some special controls for the console:=W konsoli obowiązuje kilka specjalnych metod sterowania: -• [F10] Open/close console=• [F10] Otwórz/zamknij konsolę -• [Enter]: Send message or command=• [Enter]: Wyślij wiadomość lub komendę -• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: Spróbuj dokończyć częściowo wprowadzone imię gracza -• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Ctrl]+[Lewo]: Przenieś kursor na początek poprzedniego słowa -• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Ctrl]+[Prawo]: Przenieś kursor na początek następnego słowa -• [Ctrl]+[Backspace]: Delete previous word=• [Ctrl]+[Backspace]: Usuń poprzednie słowo -• [Ctrl]+[Delete]: Delete next word=• [Ctrl]+[Delete]: Usuń następne słowo -• [Ctrl]+[U]: Delete all text before the cursor=• [Ctrl]+[U]: Usuń cały tekst przed kursorem -• [Ctrl]+[K]: Delete all text after the cursor=• [Ctrl]+[K]: Usuń cały tekst po kursorze -• [Page up]: Scroll up=• [Page up]: Przewiń do góry -• [Page down]: Scroll down=• [Page down]: Przewiń w dół -There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Istnieje również historia wprowadzania. Minetest zapisuje wprowadzone komendy, do szybkiego dostępu później: -• [Up]: Go to previous entry in history=• [Góra]: Idź do poprzedniej komendy w historii -• [Down]: Go to next entry in history=• [Dół]: Idź do następnej komendy w historii -Server commands=Komendy serwera -Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=Komendy serwera (zwane również "komendy czatu") są drobnymi pomocnymi komendami dla zaawansowanych użytkowników. Nie musisz korzystać z tych komend podczas grania, ale mogą okazać się przydatne przy wykonywaniu technicznych zadań. Działają one zarówno w grze wieloosobowej i jednoosobowej. -Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=Komendy serwera mogą być wprowadzane przy użyciu czatu, aby wykonać akcje na serwerze. Niektóre komendy mogą być wywołane przez każdego, ale niektóre działają tylko jeśli masz przyznane przywileje na serwerze. Mały zbiór podstawowych komend dostępny jest zawsze, inne komendy mogą być dodane przez mody. -To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Aby wywołać komendę, po prostu wpisze ją jako wiadomość czatu lub kliknij przycisk komend Minetesta (domyślnie: [/]). Wszystkie komendy muszą zaczynać się od "/', np. "/mods". Przycisk komend Minetesta robi dokładnie to samo co przycisk czatu, ale "/" jest od razu wpisany. -Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=Komendy mogą, ale nie muszą wypisać odpowiedź w czacie, ale błędy będą zwykle pokazane w czacie. Sama spróbuj: Zamknij to okno i wpisz komendę "/mods". Ta komenda wypiszę listę dostępnych modów na tym serwerze. -“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.="/help all" jest bardzo ważną komendą: Zostanie ci pokazana lista wszystkich dostępnych komend na serwerze, krótkie wyjaśnienie oraz dozwolone parametry. Ta komenda jest również ważna, ponieważ dostępne komendy będą inne w zależności od serwera. -Commands are followed by zero or more parameters.=Po komendach mogą wystąpić parametry. -In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=W opisie komend możesz zobaczyć tekst zastępczy, który musisz zamienić na faktyczną wartość. Oto krótkie wyjaśnienie: -• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter=• Teks pomiędzy symbolami większe niż oraz mniejsze niż (np. ""): Tekst zastępczy dla parametru -• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Cokolwiek w nawiasach kwadratowych (np. "[tekst]") jest opcjonalne i może być pominięte -• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Pionowa kreska lub slesz (np. "tekst1 | tekst2 | tekst3"): Alternatywa. Jeden z wymienionych tekstów musi być użyty (np. "tekst2") -• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Nawiasy (np. "((słowo1 słowo2) | słowo3)"): Grupuje wiele słów razem, używane przy alternatywach -• Everything else is to be read as literal text=• Wszystko inne powinno być czytane jako dosłowny tekst -Here are some examples to illustrate the command syntax:=Oto kilka przykładów ilustrujących składnię komend: -• /mods: No parameters. Just enter “/mods”=• /mods: Brak parametrów. Po prostu wpisz "/mods" -• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /ja : 1 parametr. Musisz wpisać "/ja ", a następnie dowolny tekst, np. "/ja zamawiam pizzę" -• /give : Two parameters. Example: “/give Player default:apple”=• /give : Dwa parametry. Przykładowo: "/give gracz default:apple" -• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all|privs|]: Poprawne użycia tej komendy to "/help", "/help all", "/help privs" lub "/help ", po którym następują nazwa komendy, np. "/help mods" -• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity [,,]: Poprawne użycia tej komendy to np. "/spawnentity boats:boat" oraz "/spawnentity boats:boat 0,0,0" -Some final remarks:=Kilka uwag na koniec: -• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=• Aby użyć komend /give oraz /giveme, potrzebujesz nazwy przedmiotu. Jest to używany wewnętrznie unikalny identyfikator, który możesz znaleźć w pomocy jeśli masz przywileje "give" lub "debug" -• For /spawnentity you need an entity name, which is another identifier=• Aby użyć /spawnentity musisz znać nazwę obiektu, która podobnie jest identyfikatorem -Privileges=Przywileje -Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Każdy gracz ma zbiór przywilejów, które są różne w zależności od serwera. Twoje przywileje definiują co możesz, a czego nie możesz robić. Przywileje mogą być nadane i odebrane przez dowolnego gracza, który ma przywilej "privs". -On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=Na serwerze z domyślną konfiguracją nowi gracze zaczynają z przywilejami "interact" oraz "shout". Przywilej "interact" pozwala na podstawowe akcje gry takie jak budowanie, kopanie, używanie itp. Przywilej "shout" pozwala na używanie czatu. -There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Mały zbiór bazowych przywilejów znajdziesz na każdym serwerze, inne przywileje mogą zostać dodane przez mody. -To view your own privileges, issue the server command “/privs”.=Aby zobaczyć swoje przywileje, użyj komendy serwera "/privs". -Here are a few basic privilege-related commands:=Oto kilka podstawowych komend związanych z przywilejami: -• /privs: Lists your privileges=• /privs: Pokazuje twoje przywileje -• /privs : Lists the privileges of =• /privs : Pokazuje przywileje -• /help privs: Shows a list and description about all privileges=• /help privs: Pokazuje listę i opis wszystkich przywilejów -Players with the “privs” privilege can modify privileges at will:=Gracze z przywilejem "privs" mogą zmieniać przywileje jak chcą: -• /grant : Grant to =• /grant : Nadal -• /revoke : Revoke from =• /revoke : Odbierz -In single-player mode, you can use “/grantme all” to unlock all abilities.=W trybie jednoosobowym możesz użyć "/grantme all" aby odblokować wszystkie umiejętności. -Light=Światło -As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Jako, że świat jest całkowicie oparty na blokach, jest tak również w przypadku światła. Każdy blok ma swoją własną jasność. Jasność bloku jest wyrażona w "poziomie oświetlenia", który przyjmuje wartości od 0 (zupełnie ciemny) do 15 (jasny jak słońce). -There are two types of light: Sunlight and artificial light.=Są dwa typy światła: słoneczne oraz sztuczne. -Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=Światło sztuczne jest emitowane przez oświetlające bloki. Sztuczne światło ma poziom oświetlenia od 1 do 14. -Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=Światło słoneczne jest najjaśniejszym światłem i zawsze świeci bezpośrednio w dół w trakcie dnia. W nocy światło to zamieni się w księżycowe, które wciąż daje niewielką ilość światła. Poziom oświetlenia słonecznego jest równy 15. -Blocks have 3 levels of transparency:=Bloki mają 3 poziomy przeźroczystości: -• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Przeźroczysty: Światło słoneczne przenika bez strat, sztuczne przenika ze spadkiem -• Semi-transparent: Sunlight and artificial light go through with losses=• Półprzeźroczysty: Światło słoneczne i sztuczne przenika ze stratą jasności -• Opaque: No light passes through=• Nieprzeźroczysty: Światło nie przenika -Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=Światło sztuczne będzie traciło jeden poziom jasności z każdym przeźroczystym lub nieprzeźroczystym blokiem przez który przenika, dopóki nie pozostanie tylko ciemność (obrazek 1). -Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=Światło słoneczne zachowuje swoją jasność tak długo jak przenika tylko przez w pełni przeźroczyste bloki. Gdy przenika przez półprzeźroczyste bloki, zamienia się w światło sztuczne. Obrazek 2 pokazuje różnicy. -Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Zwróć uwagę, że "przeźroczystość" odnosi się tutaj tylko do możliwości przenoszenia poziomu oświetlenia z sąsiednich bloków. Jest możliwe by blok był przeźroczysty dla światła, ale nie będziesz w stanie przez niego zobaczyć. -Coordinates=Współrzędne -The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Świat jest wielką kostką. I z tego powodu pozycja w świecie może być łatwo wyrażona we współrzędnych kartezjańskich. To oznacza, że dla każdej pozycji na świecie są 3 wartości X, Y oraz Z. -Like this: (5, 45, -12)=Na przykład: (5, 45, -12) -This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=To opisuje pozycje w której X@=5, Y@=45 i Z@=-12. Te 3 litery nazywamy "osiami": Y jest wysokością, X i Z są dla pozycji poziomej. -The values for X, Y and Z work like this:=Wartości dla X, Y i Z działają następująco: -• If you go up, Y increases=• Jeśli pójdziesz w górę, Y się zwiększy -• If you go down, Y decreases=• Jeśli pójdziesz w dół, Y się zmniejszy -• If you follow the sun, X increases=• Jeśli podążysz za słońcem, X się zwiększy -• If you go to the reverse direction, X decreases=• Jeśli pójdziesz w przeciwnym kierunku, X się zmniejszy -• Follow the sun, then go right: Z increases=• Podążaj za słońcem następnie, w prawo: Z się zwiększy -• Follow the sun, then go left: Z decreases=• Podążaj za słońcem następnie, w lewo: Z się zmniejszy -• The side length of a full cube is 1=• Długość boku jednego sześcianu wynosi 1 -You can view your current position in the debug screen (open with [F5]).=Możesz zobaczyć swoją aktualną pozycję na ekranie debug (otwórz go naciskając [F5]). - -# MCL2 extensions -Creative Mode=Tryb kreatywny -Enabling Creative Mode in MineClone 2 applies the following changes:=Włączenie trybu kreatywnego w MineClone 2 aplikuje następujące zmiany: -• You keep the things you've placed=• Nie tracisz postawionych rzeczy -• Creative inventory is available to obtain most items easily=• Kreatywny ekwipunek jest dostępny, który pozwala łatwo zdobywać przedmioty -• Hand breaks all default blocks instantly=• Ręka niszczy wszystkie domyślne bloki natychmiastowo -• Greatly increased hand pointing range=• Znacząco zwiększony zasięg reki -• Mined blocks don't drop items=• Wykopane bloki nie wyrzucają zrzutu -• Items don't get used up=• Przedmioty nie zużywają się -• Tools don't wear off=• Narzędzie nie niszczą się -• You can eat food whenever you want=• Możesz jeść jedzenie kiedy tylko chcesz -• You can always use the minimap (including radar mode)=• Zawsze możesz korzystać z minimapy (włączając w to tryb radaru) -Damage is not affected by Creative Mode, it needs to be disabled separately.=Tryb kreatywny nie ma wpływu na obrażenia, muszą być wyłączone osobno. -Mobs=Moby -Mobs are the living beings in the world. This includes animals and monsters.=Moby są żyjącymi stworzeniami w świecie. To między innymi zwierzęta i potwory. -Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).=Moby pojawiają się losowo w świecie. Nazywamy to "spawnowaniem". Każdy mob pojawia się na pewnym typie bloku przy pewnym poziomie oświetlenia. Wysokość również ma znaczenie. Spokojne moby najczęściej spawnują się w świetle, podczas gdy wrogie preferują ciemność. Większość mobów spawnuje się na dowolnym stałym bloku, ale niektóre moby spawnują się tylko na konkretnych blokach (np. blokach trawy). -Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.=Podobnie jak gracze, moby mają punkty życia, a czasami również zbroi (co oznacza, że będziesz potrzebował lepszych broni by zadać im obrażenia). Również podobnie jak gracze wrogie moby mogą atakować bezpośrednio lub z dystansu. Moby mogą wyrzucać losowe przedmioty przy śmierci. -Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.=Większość zwierząt przemieszcza się po świecie bez celu, a większość wrogich mobów poluje na gracza. Zwierzęta mogą być karmione, oswajane i rozmnażane. -Animals=Zwierzęta -Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.=Zwierzęta są spokojnymi mobami, które przemierzają świat bez celu. Mogą być karmione, oswajane i rozmnażane. -Feeding:=Karmienie: -Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.=Każde zwierzę ma swój własny gust w jedzeniu i nie przyjmuje byle czego. Aby nakarmić, weź przedmiot do swojej ręki i kliknij prawym przyciskiem na zwierzę. -Animals are attraced to the food they like and follow you as long you hold the food item in hand.=Zwierzęta są przyciągane do jedzenia które lubią i będą za tobą podążać tak długo jak będziesz je trzymała w dłoni. -Feeding an animal has three uses: Taming, healing and breeding.=Karmienie zwierząt a trzy zastosowania: Oswajanie, uzdrawianie i rozmnażanie. -Feeding heals animals instantly, depending on the quality of the food item.=Karmienie natychmiast uzdrawia zwierzęta w zależności od jakości. -Taming:=Oswajanie -A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.=Niektóre zwierzęta mogą być oswojony. Z oswojonymi zwierzętami możesz zwykle robić więcej rzeczy i używać na nich dodatkowych przedmiotów. Przykładowo oswojone konie mogą być osiodłane, a oswojone wilki walczą po twojej stronie. -Breeding:=Rozmnażanie -When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.=Gdy nakarmisz zwierzę do pełnego zdrowia, a następnie nakarmisz je jeszcze raz, aktywujesz "tryb miłości" i wiele serc pojawi się wokół zwierzęcia. -Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.=Dwa zwierzęta tego samego gatunku będą się rozmnażać jeśli są blisko siebie i w trybie miłości. Wkrótce potem pojawi się dziecko zwierzątko. -Baby animals:=Dzieci zwierzątka -Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.=Dzieci zwierzątka są takie jak ich dorosłe odpowiedniki, jednak nie mogą być oswojone i rozmnażane oraz nie wyrzucają niczego gdy umierają. Po pewnym czasie wyrastają w dorosłe zwierze. Gdy są karmione wyrastają szybciej. -Hunger=Głód -Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.=Głód wpływa na twoje zdrowie i możliwość biegania. Głód jest wyłączony gdy obrażenia są wyłączone. -Core hunger rules:=Główne zasady głodu: -• You start with 20/20 hunger points (more points @= less hungry)=• Zaczynasz z 20/20 punktami głodu (więcej punktów @= mniej głodna) -• Actions like combat, jumping, sprinting, etc. decrease hunger points=• Akcje takie jak walka, skakanie, bieganie itp. zmniejszają liczbę punktów głodu -• Food restores hunger points=• Jedzenie przywraca punkty głodu -• If your hunger bar decreases, you're hungry=• Jeśli twój pasek głodu zmniejsza się, staniesz się głodna -• At 18-20 hunger points, you regenerate 1 HP every 4 seconds=• Przy 18-20 punktach głodu, będziesz regenerował 1 HP co 4 sekundy -• At 6 hunger points or less, you can't sprint=• Przy 6 punktach głodu i mniej, nie możesz biegać -• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)=• Przy 0 punktach głodu i mniej, tracisz 1 HP co 4 sekundy -• Poisonous food decreases your health=• Trujące jedzenie zmniejsza twoje zdrowie -Details:=Szczegóły: -You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.=Masz 0-20 punktów głodu, oznaczanych przez 20 pałek pół-ikon nad paskiem szybkiego dostępu. Posiadasz również niewidzialną własność: Nasycenie. -Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.=Punkty głodu pokazują jak pełna jesteś, podczas gdy punkty nasycenia mówią jak długo zajmie zanim znów będziesz głodna. -Each food item increases both your hunger level as well your saturation.=Każde jedzenie zwiększa zarówno twój poziom głodu jak i nasycenia. -Food with a high saturation boost has the advantage that it will take longer until you get hungry again.=Jedzenie z większym wzrostem nasycenia ma tę przewagę, że sprawi, że dłużej zajmie zanim znów będziesz głodna. -A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.=Niektóre jedzenia mogą losowo wywołać zatrucie pokarmowe. Gdy jesteś otruta symbole życia i głodu zmienią kolor na zgniło-zielony. Zatrucie pokarmowe zmniejsza twoje życie o 1 HP na sekundę aż do 1 hp. Zmniejsza ono również twoje nasycenie. Zatrucie pokarmowe przechodzi po chwili lub gdy wypijesz mleko. -You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.=Zaczynasz z 5 punktami nasycenia. Maksymalne nasycenie jest równe twojemu aktualnemu poziomowi głodu. Więc z 20 punktami głodu, twój maksymalny poziom nasycenia to 20. To oznacza, że jedzenie które zwiększa nasycenie jest bardziej efektywne im więcej punktów głodu masz. Jest tak ponieważ na niskich poziomach głodu spora część zwiększenia nasycenia zostanie stracona przez niski poziom maksymalny. -If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.=Gdy twój poziom nasycenia spadnie do 0 stajesz się głodna i zaczynasz tracić punkty głodu. Gdy widzisz, że twój pasek głodu zmniejsza się, to jest to dobry moment na jedzenie. -Saturation decreases by doing things which exhaust you (highest exhaustion first):=Nasycenie zmniejsza się gdy robisz rzeczy, które cię męczą (w kolejności od najbardziej męczącego): -• Regenerating 1 HP=• Odnowienie 1 HP -• Suffering food poisoning=• Zatrucie pokarmowe -• Sprint-jumping=• Skakanie podczas biegu -• Sprinting=• Bieganie -• Attacking=• Atakowanie -• Taking damage=• Otrzymywanie obrażeń -• Swimming=• Pływanie -• Jumping=• Skakanie -• Mining a block=• Kopanie bloku -Other actions, like walking, do not exaust you.=Inne akcje takie jak chodzenie nie męczą cię. -If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w swoim pasku szybkiego dostępu możesz korzystać z minimapy. - diff --git a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.ru.tr b/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.ru.tr deleted file mode 100644 index cf598fb43..000000000 --- a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.ru.tr +++ /dev/null @@ -1,511 +0,0 @@ -# textdomain: mcl_doc_basics -Basics=Основы -Everything you need to know to get started with playing=Всё, что вам нужно знать, чтобы начать играть -Advanced usage=Продвинутое использование -Advanced information which may be nice to know, but is not crucial to gameplay=Дополнительная информация, которую хорошо было бы знать, но не критично для хода игры -Quick start=Быстрый старт -This is a very brief introduction to the basic gameplay:=Это максимально сжатое введение в основы игрового процесса -Basic controls:=Основное управление: -• Move mouse to look=• Мышь - осматриваться -• [W], [A], [S] and [D] to move=• [W], [A], [S] и [D] - идти -• [E] to sprint=• [E] - бежать -• [Space] to jump or move upwards=• [Пробел] - прыгнуть или двигаться вверх -• [Shift] to sneak or move downwards=• [Shift] - красться или двигаться вниз -• Mouse wheel or [1]-[9] to select item=• Колёсико или [1]-[9] - выбор предмета -• Left-click to mine blocks or attack=• Левый клик - добывать блок или атаковать -• Recover from swings to deal full damage=• Бейте без колебаний, чтобы нанести максимальный урон -• Right-click to build blocks and use things=• Правый клик - строить блоки и использовать вещи -• [I] for the inventory=• [I] - открыть инвентарь -• First items in inventory appear in hotbar below=• Первые предметы в инвентаре появляются на панели быстрого доступа внизу -• Lowest row in inventory appears in hotbar below=• Нижний ряд в инвентаре появляется на панели быстрого доступа внизу -• [Esc] to close this window=• [Esc] - закрыть это окно -How to play:=Как играть: -• Punch a tree trunk until it breaks and collect wood=• Бейте дерево по стволу, пока оно не сломается, и собирайте древесину -• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks=• Поместите кусок дерева в решётку 2×2 (вашу личную “крафт-сетку”) в меню инвентаря и скрафтите из него 4 доски -• Place them in a 2×2 shape in the crafting grid to craft a crafting table=• Разместите их в виде квадрата 2×2 в крафт-сетке, чтобы сделать верстак -• Place the crafting table on the ground=• Поставьте верстак на землю -• Rightclick it for a 3×3 crafting grid=• Кликните правой по верстаку для работы с крафт-сеткой 3×3 -• Use the crafting guide (book icon) to learn all the possible crafting recipes=Используйте крафт-гид (значок книги) рецептов для изучения всех доступных рецептов -• Craft a wooden pickaxe so you can dig stone=• Создайте деревянную кирку, чтобы добыть камни -• Different tools break different kinds of blocks. Try them out!=• Разные инструменты могут ломать разные виды блоков. Опробуйте их! -• Read entries in this help to learn the rest=Читайте записи в этой справке, чтобы узнать всё -• Continue playing as you wish. There's no goal. Have fun!=Продолжайте играть, как вам нравится. Игра не имеет конечной цели. Наслаждайтесь! -Minetest=Майнтест -Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Майнтест - бесплатный программный движок для игр, основанных на воксельных мирах, источником вдохновения послужили игры InfiniMiner, Minecraft и подобные. Майнтест изначально создан Пертту Ахолой (под псевдонимом “celeron55”). -The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.=Игрок попадает в огромный мир из кубиков-блоков. Из этих кубиков состоит ландшафт, их можно убирать и снова размещать практически свободно. Используя собранные предметы, вы можете создать («скрафтить») новые инструменты и предметы. Игры для Майнтеста могут быть и гораздо сложнее. -A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Основной особенностью Майнтеста является встроенная возможность моддинга. Моды изменяют привычный игровой процесс. Они могут быть очень простыми, например, добавлять нескольких декоративных блоков, или очень сложными - полностью изменяющими игровой процесс, генерирующими новые виды миров и т. д. -Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=В Майнтест можно играть в одиночку или онлайн вместе с несколькими игроками. Онлайн-игра будет работать «из коробки» с любыми модами без необходимости установки дополнительного программного обеспечения, так как всё необходимое предоставляется сервером. -Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums .=Обычно Майнтест поставляется в комплекте с простой игрой по умолчанию, которая называется «Игра Майнтест» (показана на рисунках 1 и 2). У вас она, вероятно, есть. Другие игры для Майнтеста можно скачать с официального форума . -Minetest as well as Minetest Game are both unfinished at the moment, so please forgive us when not everything works out perfectly.=Как Майнтест, так и «Игра Майнтест» в данный момент еще не завершены, поэтому, пожалуйста, простите, если что-то не заработает идеально. -Sneaking=Подкрадывание -Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Подкрадывание замедляет ход и предотвращает падение с края блока. -To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Чтобы красться, удерживайте нажатой клавишу [Красться] (по умолчанию: [Shift]). Когда вы отпускаете её, то перестаете красться. Будьте осторожны: если отпустить клавишу, стоя на краю выступа, то можете оттуда упасть! -• Sneak: [Shift]=• Красться: [Shift] -Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=Подкрадывание работает только когда вы стоите на твердой земле, не находитесь в жидкости и не карабкаетесь. -If you jump while holding the sneak key, you also jump slightly higher than usual.=Если вы прыгаете, удерживая нажатой клавишу [Красться], вы также прыгаете немного выше, чем обычно. -Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Подкрадывание может быть отключено модами. В этом случае вы все равно идете медленнее, крадясь, но вас больше ничто не останавливает на выступах. -Controls=Управление -These are the default controls:=Вот стандартное управление: -Basic movement:=Основное движение: -• Moving the mouse around: Look around=• Движение мыши: осматриваться вокруг -• W: Move forwards=• W: двигаться вперед -• A: Move to the left=• A: двигаться влево -• D: Move to the right=• D: двигаться вправо -• S: Move backwards=• S: двигаться назад -• E: Sprint=• E: Бег -While standing on solid ground:=Если стоите на твердой земле: -• Space: Jump=• Пробел: прыгать -• Shift: Sneak=• Shift: красться -While on a ladder, swimming in a liquid or fly mode is active=Стоя на лестнице, плывя в режиме жидкости или находясь в режиме полёта -• Space: Move up=• Пробел: двигаться вверх -• Shift: Move down=• Shift: двигаться вниз -Extended movement (requires privileges):=Расширенное движение (требуются привилегии): -• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: включает/выключает быстрый режим для бега/полёта (требуется привилегия “fast”) -• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: включает/выключает режим полёта, позволяющий свободно перемещаться во всех направлениях (требуется привилегия “fly”) -• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: включает/выключает режим отсутствия препятствий, позволяющий проходить сквозь стены в режиме полёта (требуется привилегия “noclip”) -• E: Move even faster when in fast mode=• E: двигаться даже быстрее, чем в быстром режиме -• E: Walk fast in fast mode=• E: идти быстро в быстром режиме -World interaction:=Взаимодействие с миром: -• Left mouse button: Punch / mine blocks / take items=• Левая кнопка мыши: Бить / добывать блоки / брать предметы -• Left mouse button: Punch / mine blocks=• Левая кнопка мыши: Бить / добывать блоки -• Right mouse button: Build or use pointed block=• Правая кнопка мыши: Строить или использовать указанный блок -• Shift+Right mouse button: Build=• Shift+Правая кнопка мыши: Строить -• Roll mouse wheel: Select next/previous item in hotbar=• Вращение колёсика мыши: Выбор следующего/предыдущего предмета на панели быстрого доступа -• Roll mouse wheel / B / N: Select next/previous item in hotbar=• Вращение колёсика мыши / B / N: Выбор следующего/предыдущего предмета на панели быстрого доступа -• 1-9: Select item in hotbar directly=• 1-9: Быстрый и прямой выбор предмета на панели быстрого доступа -• Q: Drop item stack=• Q: выбросить всю стопку предметов -• Shift+Q: Drop 1 item=• Shift+Q: выбросить только 1 предмет -• I: Show/hide inventory menu=• I: Показать/скрыть меню вашего инвентаря -Inventory interaction:=Взаимодействие с инвентарём: -See the entry “Basics > Inventory”.=Смотрите запись “Основы > Инвентарь”. -Camera:=Камера: -• Z: Zoom=• Z: Увеличение -• F7: Toggle camera mode=• F7: Смена режима камеры -• F8: Toggle cinematic mode=• F8: Кинематографический режим -Interface:=Интерфейс: -• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: Открыть/закрыть меню (пауза в режиме одиночной игры) -• F1: Show/hide HUD=• F1: Показать/убрать игровой интерфейс (HUD) -• F2: Show/hide chat=• F2: Показать/убрать чат -• F9: Toggle minimap=• F9: Включить/выключить миникарту -• Shift+F9: Toggle minimap rotation mode=• Shift+F9: Смена режима вращения мини-карты -• F10: Open/close console/chat log=• F10: Открыть/закрыть консоль/историю чата -• F12: Take a screenshot=• F12: Сделать снимок экрана -Server interaction:=Взаимодействие с сервером: -• T: Open chat window (chat requires the “shout” privilege)=• T: Открыть окно чата (чат требует привилегию “shout”) -• /: Start issuing a server command=• /: Начать ввод серверной команды -Technical:=Технические: -• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• R: Включить/выключить дальний обзор (отключает туман и позволяет смотреть очень далеко, может замедлять игру) -• +: Increase minimal viewing distance=• +: Увеличить минимальное расстояние просмотра -• -: Decrease minimal viewing distance=• -: Уменьшить минимальное расстояние просмотра -• F3: Enable/disable fog=• F3: Включить/отключить туман -• F5: Enable/disable debug screen which also shows your coordinates=• F5: Включить/отключить экран отладки, который также показывает ваши координаты -• F6: Only useful for developers. Enables/disables profiler=• F6: Полезно только для разработчиков. Включает/отключает профайлер -• P: Only useful for developers. Writes current stack traces=• P: Полезно только для разработчиков. Записывает текущие трассировки стека -Players=Игроки -Players (actually: “player characters”) are the characters which users control.=Игроки (на самом деле «персонажи игроков») - персонажи, которыми управляют пользователи. -Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).=Игроки это живые существа. Они появляются с определённым количеством очков здоровья (HP) и дыхания (BP). -Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Игроки могут ходить, красться, прыгать, карабкаться, плавать, нырять, добывать, строить, сражаться и использовать инструменты и блоки. -Players can take damage for a variety of reasons, here are some:=Игроки могут получить урон по разным причинам, вот некоторые: -• Taking fall damage=• Получение урона от падения -• Touching a block which causes direct damage=• Прикосновение к блоку, который наносит прямой ущерб -• Drowning=• Утопление -• Being attacked by another player=• Быть атакованным другим игроком -• Being attacked by a computer enemy=• Быть атакованным компьютерным врагом -At a health of 0, the player dies. The player can just respawn in the world.=На отметке здоровья HP@=0 игрок умирает. Но он может возродиться в этом же мире. -Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.=Другие последствия смерти зависят от игры. Игрок может потерять все предметы или проиграть в соревновательной игре. -Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Некоторые блоки не допускают дыхания. При нахождении с головой в блоке, который вызывает утопление, точки дыхания уменьшаются на 1 каждые 2 секунды. Когда все очки дыхания уходят, игрок начинает получать урон утопающего. Очки дыхания быстро восстановятся в любом другом блоке. -Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Урон можно отключить в любом мире. Без повреждений игроки бессмертны, а здоровье и дыхание неважны. -In multi-player mode, the name of other players is written above their head.=В многопользовательском режиме имена других игроков написаны над их головами. -Items=Предметы -Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Предметы - это вещи, которые вы можете носить с собой и хранить в инвентаре. Их можно использовать для крафтинга (создания чего-либо), плавки, строительства, добычи и многого другого. Типы предметов: блоки, инструменты, оружие, а также предметы, используемые только для крафтинга. -An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Стопка предметов - это набор предметов одного типа, который помещается в один слот. Стопки предметов можно выбрасывать на землю полностью. Предметы, попавшие в одни и те же координаты, образуют стопку. -Dropped item stacks will be collected automatically when you stand close to them.=Стопки брошенных предметов подбираются автоматически, если вы стоите рядом с ними. -Items have several properties, including the following:=Предметы имеют несколько свойств, в том числе следующие: -• Maximum stack size: Number of items which fit on 1 item stack=• Максимальный размер стопки: количество, которое помещается в 1 стопку предметов -• Pointing range: How close things must be to be pointed while wielding this item=• Дальность прицела: насколько близко должна находиться цель, чтобы можно было навести на неё этот предмет и использовать -• Group memberships: See “Basics > Groups”=• Членство в группах: См. “Основы > Группы” -• May be used for crafting or cooking=• Может быть использовано для крафтинга или приготовления пищи -Tools=Инструменты -Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Некоторые предметы могут служить вам в качестве инструментов. Любой предмет, которым вы можете напрямую воспользоваться, чтобы сделать какое-то особое действие, считается инструментом. -A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Распространенной разновидностью инструментов являются инструменты майнинга. Они позволяют ломать все виды блоков. Оружие - тоже своего рода инструмент. Есть и много других инструментов. Особое действие инструмента обычно выполняются по нажатию левой или правой кнопки мыши. -When nothing is wielded, players use their hand which may act as tool and weapon.=Когда у вас в руке нет никакого предмета, инструментом, либо даже оружием, выступает сама рука. -Mining tools are important to break all kinds of blocks. Weapons are another kind of tool. There are some other more specialized tools. Special actions of tools are usually done by right-click.=Инструменты добычи позволяют ломать все виды блоков. Оружие - тоже своеобразный инструмент, хотя есть и другие, более специализированные. Особое действие инструментов обычно включается правой клавишей мыши. -When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of punching and deals minimum damage.=При отсутствии предметов игроки используют свою руку, которая может выступать в качестве инструмента и оружия. Рука способна ударять и даже наносить небольшой урон. -Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=Многие инструменты изнашиваются при использовании и со временем могут разрушиться. Износ отображается в строке повреждений под значком инструмента. Если полоса повреждений не отображается, значит инструмент находится в отличном состоянии. Инструменты могут быть восстановлены путем крафтинга, см. “Основы > Крафтинг”. -Weapons=Оружие -Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Некоторые предметы можно использовать в качестве оружия ближнего боя. Оружие сохраняет большинство свойств инструментов. -Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Оружие ближнего боя наносит урон при ударе по игрокам и другим живым объектам. Есть два способа атаковать: -• Single punch: Left-click once to deal a single punch=• Одиночный удар: для нанесения одиночного удара кликните один раз левой клавишей мыши -• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Быстрые удары: для нанесения быстрых повторяющихся ударов удерживайте левую клавишу мыши -There are two core attributes of melee weapons:=Есть два основных атрибута оружия ближнего боя: -• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered=• Максимальный урон: урон, который наносится после удара, когда оружие полностью восстановлено -• Full punch interval: Time it takes for fully recovering from a punch=• Интервал полного удара: время, необходимое для полного восстановления после удара -A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Оружие наносит полный урон только тогда, когда оно полностью восстановилось после предыдущего удара. В противном случае оружие будет наносить меньший урон. Это означает, что быстрый удар очень быстр, но наносит довольно низкий урон. Обратите внимание, что интервал полного удара не ограничивает скорость атаки. -There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=Есть правило, иногда делающее атаки невозможными: игроки, живые объекты и оружие принадлежат к некоторым к группам повреждений. Оружие наносит урон только тем, кто имеет хотя бы одну общую группу с ним. Так что, если вы используете «неправильное» оружие, то можете не нанести совсем никакого урона. -Pointing=Прицел -“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.=“Прицел” означает, что вы смотрите на цель через область с крестиком. Прицелиться нужно для таких вещей, как добыча, удар, использование и так далее. Нацеливаемыми вещами являются блоки, игроки, компьютерные враги и объекты. -To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Чтобы прицелиться на что-то, это должно быть в пределах расстояния прицела (по-простому: «дальности») предмета, который вы держите в руках. Существует дальность по умолчанию, когда вы ничего не держите. Вещь под прицелом будет очерчена или подсвечена (в зависимости от настроек). Наведение невозможно выполнить с помощью фронтальной камеры 3-го лица. -A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=На некоторые вещи нельзя нацелиться. Большинство блоков нацеливаемые, но некоторые, например, воздух, - нет. На блоки вроде жидкостей можно нацелиться только специальными предметами. -Camera=Камера -There are 3 different views which determine the way you see the world. The modes are:=Есть 3 различных способа видеть мир: -• 1: First-person view (default)=• 1: вид от первого лица (по умолчанию); -• 2: Third-person view from behind=• 2: вид от третьего лица сзади; -• 3: Third-person view from the front=• 3: вид от третьего лица спереди. -You can change the camera mode by pressing [F7].=Вы можете изменить режим камеры, нажав клавишу [F7]. -You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.=Вероятно, вы сможете увеличить масштаб вида в перекрестии с помощью [Z]. Это позволит вам смотреть дальше. -Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.=Масштабирование-это функция геймплея, которая может быть включена или отключена игрой. По умолчанию масштабирование включено в творческом режиме, но отключено в обычном. -There is also Cinematic Mode which can be toggled with [F8]. With Cinematic Mode enabled, the camera movements become more smooth. Some players don't like it, it is a matter of taste.=Существует также кинематографический режим, который можно переключить с помощью [F8]. При включенном кинематографическом режиме движения камеры становятся более плавными. Некоторым игрокам это не нравится, это дело вкуса. -By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.=Удерживая нажатой клавишу [Z], вы можете увеличить изображение в перекрестии прицела. Для этого вам нужна привилегия “zoom”. -• Switch camera mode: [F7]=• Переключение режима камеры: [F7]; -• Toggle Cinematic Mode: [F8]=• Переключение кинематографического режима: [F8]; -• Zoom: [Z]=• Масштабирование: [Z]. -Blocks=Блоки -The world of MineClone 2 is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Мир MineClone 2 полностью состоит из блоков (вокселей, если быть точными). Блоки могут быть добавлены или удалены с помощью правильно подобранных инструментов. -The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Мир целиком состоит из блоков (точнее, вокселей). Блоки могут быть добавлены или удалены с помощью правильно подобранных инструментов. -Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=Блоки могут иметь широкий спектр различных свойств, которые определяют время добычи, поведение, внешний вид, форму и многое другое. Их свойства включают в себя: -• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Непроходимые: непроходимые блоки не могут быть пройдены насквозь; игроки могут ходить по ним. Проходимые блоки могут свободно пропускать вас сквозь себя -• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Нацеливаемые: нацеливаемые блоки демонстрируют свой контур или ореол, когда вы на них нацеливаетесь. Но через ненацеливаемые блоки ваш прицел просто пройдёт насквозь. Жидкости обычно не подлежат нацеливанию, но в них всё-таки можно целиться с помощью некоторых специальных инструментов -• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Майнинговые свойства: с помощью каких инструментов можно добывать эти блоки и как быстро инструмент при этом изнашивается -• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Карабкательные: пока вы находитесь на блоке, по которому можно карабкаться, вы падаете и можете перемещаться вверх и вниз клавишами [Прыжок] и [Красться] -• Drowning damage: See the entry “Basics > Player”=• Наносящие урон как при утоплении: Смотрите запись “Основы > игрок” -• Liquids: See the entry “Basics > Liquids”=• Жидкости: Смотрите запись “Основы > Жидкости” -• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Членство в группах: Членство в группах используется для определения майнинговых и крафтинговых свойств, взаимодействий между блоками и другого -Mining=Майнинг (добывание) -Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=Добывание (или копание) - это процесс разрушения блоков для их убирания. Чтобы добыть блок, нацельтесь на него указателем и удерживайте левую кнопку мыши, пока он не сломается. -Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.=Для добычи блоков требуется инструмент майнинга. Разные блоки добываются разными инструментами майнинга, а некоторые блоки не могут быть добыты никаким инструментом. Блоки различаются по твердости, а инструменты - по прочности. Майнинговые инструменты со временем изнашиваются. Время добывания и износ зависят и от блока, и от инструмента майнинга. Самый быстрый способ узнать, насколько эффективны ваши инструменты для майнинга, - это просто попробовать их на различных блоках. Любые предметы, которые вы извлечёте из блоков в качестве добычи, упадут на землю, готовые к сбору. -After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=При добыче (майнинге) блок может оставить после себя ”кусочек“. Это предметы, которые вы получаете в результате майнинга. Чаще всего вы получаете сам блок, но в зависимости от его типа блока, может быть следующие варианты: -• Always drops itself (the usual case)=• Всегда выпадает сам блок (обычный случай) -• Always drops the same items=• Всегда выпадают одни и те же предметы -• Drops items based on probability=• Выпадающие предметы зависят от вероятности -• Drops nothing=• Ничего не выпадает -Building=Строительство -Almost all blocks can be built (or placed). Building is very simple and has no delay.=Почти все блоки можно использовать для строительства (размещая их где-то). Это очень просто и происходит без задержек. -To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Чтобы установить блок, который вы держите в руке, нацельтесь на блок в мире и щелкните правой кнопкой мыши. Если это невозможно из-за того, что указательный блок имеет специальное действие щелчка правой кнопкой мыши, то зажмите клавишу [Красться] перед щелчком правой кнопки. -Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=Блоки почти всегда могут быть построены на нацеливаемых блоках. Исключение составляют блоки, прикрепляемые к полу - они могут быть установлены только на полу. -Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Обычно блоки строятся прямо перед блоком, в который вы целитесь, прямо перед стороной, на которую вы целитесь. Но несколько блоков ведут себя иначе: когда вы пытаетесь строить на них, они заменяются вашими новыми блоками. -Liquids=Жидкости -Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=Жидкости - это специальные динамические блоки. Жидкости любят распространяться и стекать по окружающим их блокам. Игроки могут плавать и тонуть в них. -Liquids usually come in two forms: In source form (S) and in flowing form (F).=Жидкости могут быть двух видов: источник (S) и течение (F). -Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.=Источники жидкостей имеют форму полного куба. Источник генерирует течение жидкости вокруг себя время от времени, и, если жидкость является возобновляемой, он также генерирует новые источники. Жидкий источник может поддерживать себя сам. Пока вы не трогаете источник, он, как правило, остаётся на месте и никуда не утекает. -Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=Текущие жидкости принимают наклонную форму. Они распространяются по всему миру, пока не пересохнут. Текучая жидкость не может поддерживать себя и всегда поступает из источника жидкости, прямо или непрямо. Без источника течение в конце концов высыхает и исчезает. -All liquids share the following properties:=Все жидкости обладают следующими свойствами: -• All properties of blocks (including drowning damage)=• Все свойства блоков (включая урон от утопления) -• Renewability: Renewable liquids can create new sources=• Возобновляемость: возобновляемые жидкости могут создавать новые источники -• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Диапазон текучести: сколько текучих жидкостей создается максимум на один источник жидкости, это определяет, как далеко жидкость будет распространяться. Возможны диапазоны от 0 до 8. При 0 не будет создаваться никаких текучих жидкостей. На рисунке 5 показана жидкость с диапазоном текучести 2 -• Viscosity: How slow players move through it and how slow the liquid spreads=• Вязкость: как медленно игроки движутся через нее и как медленно распространяется жидкость -Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:=Возобновляемые жидкости создают новые источники жидкости на открытых пространствах (рис.2). Новый источник жидкости создается, когда: -• Two renewable liquid blocks of the same type touch each other diagonally=• Два возобновляемых жидкостных блока одного типа касаются друг друга по диагонали -• These blocks are also on the same height=• При этом данные блоки находятся на одной высоте -• One of the two “corners” is open space which allows liquids to flow in=• Один из двух “углов” - это открытое пространство, которое позволяет жидкостям затекать в него -When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Если эти критерии выполнены, открытое пространство заполняется новым источником жидкости того же типа (рис.3). -Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Плавать в жидкости довольно просто: обычные клавиши направления для основного движения, клавиша прыжка для подъема и клавиша подкрадывания для погружения. -The physics for swimming and diving in a liquid are:=Физика плавания и погружения в жидкость такова: -• The higher the viscosity, the slower you move=• Чем выше вязкость, тем медленнее вы двигаетесь -• If you rest, you'll slowly sink=• Если вы отдыхаете, то постепенно тонете -• There is no fall damage for falling into a liquid as such=Падение в жидкость не причиняет вам повреждений напрямую -• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Если вы упадете в жидкость, вы будете замедлены перед ударом (но не остановлены мгновенно). Итоговая сила удара определяется вашей скоростью и вязкостью жидкости. Для безопасного высокого падения в жидкость убедитесь, что над землей достаточно жидкости, иначе вы можете удариться о землю и получить урон от падения -Liquids are often not pointable. But some special items are able to point all liquids.=Жидкости часто ненацеливаемы. Но некоторые специальные предметы способны указывать на все жидкости. -Crafting=Крафтинг -Crafting is the task of combining several items to form a new item.=Крафтинг это комбинирование нескольких предметов для формирования нового предмета. -To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Чтобы скрафтить что-либо, вам понадобятся исходные предметы, крафтинговая решётка (С) и рецепт. Решётка это как будто бы инвентарь, который можно использовать для крафтинга. Предметы должны быть помещены в решётку в определенном порядке. Результат появится сразу, как только вы правильно разместите предметы. Это ещё не сам предмет, а всего лишь предварительный просмотр. Решётки крафтинга могут быть разных размеров, размер ограничивает рецепты, которые вы можете использовать. -To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Чтобы завершить крафтинг, возьмите результирующий предмет из выходного отсека. Он будет при этом создан, а предметы из решётки будут использованы для его производства. Выходной отсек предназначен только для извлечения предметов, складывать предметы в него нельзя. -A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).=Описания того, как создавать предметы, называются “рецептами”. Вам понадобятся эти знания для крафтинга различных предметов. Есть много способов узнавать рецепты. Один из них это использование встроенной книги рецептов, доступных вам с теми предметами, которые вы успели собрать. Некоторые игры предоставляют собственные руководства по крафтингу. Существуют моды, скачав и установив которые, вы получите дополнительные руководства. И, наконец, можно узнавать рецепты из онлайн-руководства к игре (если таковое имеется). -Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Рецепты состоят, как минимум, из одного входного элемента и стопки выходных элементов. При выполнении единичного крафтинга будет употреблён ровно один предмет из каждой стопки в отсеках крафтинговой решётки, если только рецепт не предполагает замены. -There are multiple types of crafting recipes:=Существует несколько типов рецептов: -• Shaped (image 2): Items need to be placed in a particular shape=• Фигурные (рис. 2): предметы должны быть выложены в виде определенной фигуры -• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)=• Простые (изображения 3 и 4): предметы помещаются в произвольных отсеках на входе (оба изображения показывают один и тот же рецепт) -• Cooking: Explained in “Basics > Cooking”=• Приготовление пищи: описано в разделе “Основы > Приготовление пищи” -• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%=• Ремонт (рис. 5): Два поврежденных инструмента помещаются в произвольные отсеки крафт-решётки, и на выходе получается инструмент, отремонтированный на 5% -In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=В некоторых рецептах некоторые предметы должны быть не какими-то конкретными, а просто принадлежать нужной группе предметов (см. “Основы > Группы”). Такие рецепты предлагают немного больше свободы в выборе входных предметов. На рисунках 6-8 показан один и тот же групповой рецепт. Здесь требуется 8 предметов из группы “Камни“, к которой относятся все показанные предметы. -Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=В редких случаях в рецептах содержатся замены. Это означает, что при каждом крафтинге некоторые предметы из крафтинговой решётки не будут расходоваться, но будут заменяться другими предметами. -Cooking=Приготовление еды -Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=Приготовление еды (или плавление) это вид крафтинга, для которой не требуется крафтинговая решётка. Приготовление пищи осуществляется с помощью специального блока (например, печи), приготавливаемого предмета, топливного предмета и времени, которое требуется для получения нового предмета. -Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Каждый топливный предмет имеет своё время горения. В течение этого времени печь будет работать. -Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Процесс готовки требует времени. Это время зависит от типа предмета, и продукт должен быть “на огне” в течение всего времени приготовления, чтобы вы получили желаемый результат. -Hotbar=Панель быстрого доступа -At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=В нижней части экрана вы видите несколько квадратов. Это так называемая “Панель быстрого доступа“. Она позволяет быстро получать доступ к первым предметам вашего игрового инвентаря. -You can change the selected item with the mouse wheel or the keyboard.=Вы можете выбирать предмет при помощи колесика мыши или при помощи клавиатуры. -• Select previous item in hotbar: [Mouse wheel up] or [B]=• Выбор предыдущего предмета панели: [Колёсико вверх] или [B] -• Select next item in hotbar: [Mouse wheel down] or [N]=• Выбор следующего предмета панели: [Колёсико вниз] или [N] -• Select item in hotbar directly: [1]-[9]=• Прямой выбор предмета панели: [1] - [9] -The selected item is also your wielded item.=Выбранный предмет на панели быстрого доступа также является вашим носимым предметом, который вы держите в руке. -Minimap=Миникарта -If you have a map item in any of your hotbar slots, you can use the minimap.=Если у вас есть карта (это такой предмет) в любом отсеке панели быстрого доступа, то вы можете пользоваться миникартой. -Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Нажмите [F9], чтобы в правом верхнем углу появилась миникарта. Она поможет вам найти свой путь по всему миру. Нажмите его еще раз, чтобы выбирать различные режимы мини-карты и уровни масштабирования. Миникарта также показывает позиции других игроков. -There are 2 minimap modes and 3 zoom levels.=Миникарта имеет 2 режима и 3 уровня масштабирования. -Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=Режим поверхности (рис. 1) это вид на мир сверху с приблизительным воспроизведением цветов блоков из которых этот мир состоит. В этом режиме видны только самые верхние блоки, а всё, что ниже, скрыто, как на спутниковой фотографии. Режим поверхности полезен, если вы заблудились. -Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=Режим радара (рис. 2) более сложный. Он отображает “плотность“ области вокруг вас и изменяется с вашей высотой. Проще говоря, чем больше на карте зелёного цвета, тем данный участок менее “плотный”. Чёрные области содержат много блоков. Используйте радар, чтобы находить пещеры, скрытые области, стены и многое другое. Прямоугольные формы на рисунке 2 ясно показывают местонахождение подземелья. -There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Существует также два различных режима вращения. В “квадратном режиме” вращение миникарты фиксируется. Если вы нажмете [Shift]+[F9], чтобы переключиться в “режим круга”, миникарта будет вращаться в соответствии с вашим направлением взгляда, поэтому “вверх” всегда будет вашим направлением взгляда. -In some games, the minimap may be disabled.=В некоторых играх миникарта может быть отключена. -• Toggle minimap mode: [F9]=• Переключение режима миникарты: [F9] -• Toggle minimap rotation mode: [Shift]+[F9]=• Переключение режима вращения миникарты: [Shift]+[F9] -Inventory=Инвентарь -Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Инвентари используются для хранения стопок предметов. Есть и другое их применение, например, крафтинг. Инвентарь состоит из прямоугольной решётки отсеков для предметов. Каждый отсек может быть либо пустым, либо содержать одну стопку предметов. Стопки предметов можно свободно перемещать между большей частью отсеков. -You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=У вас есть ваш собственный инвентарь, который называется “инвентарь игрока”, вы можете открыть его нажатием клавиши инвентаря (по умолчанию это [I]). Первый ряд отсеков вашего инвентаря будут отображаться на панели быстрого доступа. -Blocks can also have their own inventory, e.g. chests and furnaces.=Блоки также могут иметь свой собственный инвентарь, например сундуки и печи. -Inventory controls:=Управление инвентарём: -Taking: You can take items from an occupied slot if the cursor holds nothing.=Взятие: вы можете брать предметы из занятого отсека, если не держите предмет курсором в этот момент. -• Left click: take entire item stack=• Клик левой: взятие всей стопки предметов -• Right click: take half from the item stack (rounded up)=• Клик правой: взятие половины стопки предметов (округлённо) -• Middle click: take 10 items from the item stack=• Клик средней: взятие 10 предметов из стопки предметов -• Mouse wheel down: take 1 item from the item stack=• Колесо вниз: взятие 1 предмета из стопки предметов -Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Выкладывание: вы можете помещать предметы в отсек, если ваш курсор удерживает 1 или более предмет, а отсек пуст, либо содержит стопку таких же предметов. -• Left click: put entire item stack=• Клик левой: положить всю стопку предметов -• Right click: put 1 item of the item stack=• Клик правой: положить только 1 предмет из всей удерживаемой курсором стопки -• Right click or mouse wheel up: put 1 item of the item stack=• Клик правой или колёсико вверх: положить 1 предмет из удерживаемой курсором стопки -• Middle click: put 10 items of the item stack=• Клик средней: положить 10 предметов из удерживаемой курсором стопки -Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.=Обмен: Вы можете обменять предметы, если курсор удерживает 1 или более предметов, а целевой отсек занят другими предметами. -• Click: exchange item stacks=• Клик: обмен стопок предметов -Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Выбрасывание: если вы, держа на курсоре стопку предметов, кликнете ей за пределами меню, то вся стопка выбрасывается в окружающую среду. -Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Быстрая передача: вы можете быстро передавать стопки предметов между вашим личным инвентарём и инвентарём другого предмета (печи, сундука или любого другого, имеющего инвентарный отсек) во время доступа к эту предмету. Обычно это используется для загрузки/выгрузки нужных предметов. -• Sneak+Left click: Automatically transfer item stack=• [Красться]+Клик левой: автоматическая передача стопки предметов -Online help=Онлайн-помощь -You may want to check out these online resources related to MineClone 2.=Возможно, вы захотите ознакомиться с этими онлайн-ресурсами, связанными с MineClone 2. -MineClone 2 download and forum discussion: =Официальный форум MineClone 2: -Here you find the most recent version of MineClone 2 and can discuss it.=Здесь вы найдете самую последнюю версию MineClone 2 и сможете обсудить её. -Bug tracker: =Баг-трекер: -Report bugs here.=С помощью баг-трекера можно сообщить об ошибке, если вы её обнаружите. -Minetest links:=Ссылки Minetest: -You may want to check out these online resources related to Minetest:=Возможно, вы захотите посетить эти онлайн-ресурсы, связанные с Minetest: -Official homepage of Minetest: =Официальная домашняя страница Minetest: -The main place to find the most recent version of Minetest, the engine used by MineClone 2.=Это основное место для скачивания свежих версий Minetest (Minetest это «движок», используемый MineClone 2). -The main place to find the most recent version of Minetest.=Это основное место для скачивания свежих версий Minetest. -Community wiki: =Wiki сообщества: -A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Веб-сайт документации сообщества. Любой, у кого есть учетная запись, может её редактировать! Там много документации по игре Minetest. -Minetest forums: =Форумы Minetest: -A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Интернет-форумы, где вы можете обсудить все, что связано с Minetest. Это также место, где публикуются и обсуждаются игры и моды, сделанные игроками. Дискуссии ведутся в основном на английском языке, но есть также место для дискуссий и на других языках. -Chat: =Чат: -A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Универсальный IRC-чат-канал для всего, связанного с Minetest, где люди могут встретиться для общения в режиме реального времени. Если вы не разбираетесь в IRC, обратитесь за помощью к Wiki. -Groups=Группы -Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Предметы, игроки и объекты (одушевленные и неодушевленные) могут быть членами любого количества групп. Группы выполняют несколько задач: -• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Рецепты: один из входных отсеков решётки крафтинга может занять не строго определённый предмет, а один из предметов, принадлежащих одной или нескольким группам -• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Время выкапывания: Копаемые блоки принадлежат группам, имеющим определённое время копания. Инструментами майнинга можно добывать блоки, принадлежащие определенным группам -• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Поведение блоков: блоки могут вести себя необычным образом и взаимодействовать с другими блоками, если принадлежат определенной группе -• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Урон и защита: у объектов и игроков есть группы защиты, а у оружия - группы причиняемого урона. Эти группы позволяют определить урон. Смотри также: “Основы > Оружие” -• Other uses=• И прочее -In the item help, many important groups are usually mentioned and explained.=В справке по предметам обычно содержится информация о многих важных группах, а также объясняется их назначение. -Glossary=Глоссарий -This is a list of commonly used terms:=Это список часто используемых терминов: -Controls:=Управление: -• Wielding: Holding an item in hand=• Wielding (Владеть/Держать/Нести/Удерживать): держать предмет в руке -• Pointing: Looking with the crosshair at something in range=• Pointing (Наведение/Нацеливание/Прицел/Взгляд): смотреть через прицел в виде крестика на что-либо в пределах вашей досягаемости -• Dropping: Throwing an item or item stack to the ground=• Dropping (Выпадание): бросание предмета или стопки предметов на землю -• Punching: Attacking with left-click, is also used on blocks=• Punching (Удар/Стуканье): атака с помощью щелчка левой кнопкой мыши, применяется и к блокам -• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Sneaking (Красться/Подкрадывание): идти медленно, избегая опасности падения с края блока -• Climbing: Moving up or down a climbable block=• Climbing (Карабкаться/Скалолазание): перемещение вверх или вниз по блоку, позволяющему по нему карабкаться -Blocks:=Блоки: -• Block: Cubes that the worlds are made of=• Блоки: кубики, из которых состоят миры -• Mining/digging: Using a mining tool to break a block=• Майнинг/копание/добывание: использование инструмента майнинга для разрушения блока -• Building/placing: Putting a block somewhere=• Строительство/размещение/установка/укладывание: установка блока где-либо в мире -• Drop: Items you get after mining a block=• Выбрасывание/Выпадание: появление предметов в результате добывания блоков -• Using a block: Right-clicking a block to access its special function=• Использование блока: клик правой по блоку для доступа к его специальной функции -Items:=Предметы: -• Item: A single thing that players can possess=• Предмет: единственная вещь, которой могут обладать игроки -• Item stack: A collection of items of the same kind=• Стопка предметов: набор одинаковых предметов -• Maximum stack size: Maximum amount of items in an item stack=• Максимальный размер стопки: максимальное количество предметов в стопке -• Slot / inventory slot: Can hold one item stack=• Отсек / отсек инвентаря: может вместить одну стопку предметов -• Inventory: Provides several inventory slots for storage=• Инвентарь: содержит несколько отсеков инвентаря для хранения -• Player inventory: The main inventory of a player=• Инвентарь игрока: основной инвентарь игрока, который находится непосредственно при нём -• Tool: An item which you can use to do special things with when wielding=• Инструмент: предмет, держа который в руке, можно совершать какие-либо специальные действия с блоками -• Range: How far away things can be to be pointed by an item=• Диапазон: как далеко могут находиться вещи, на которые нацелен предмет -• Mining tool: A tool which allows to break blocks=• Инструмент майнинга: инструмент, который позволяет разбивать блоки -• Craftitem: An item which is (primarily or only) used for crafting=• Ингредиент: предмет, который преимущественно используется для крафтинга (создания) новых предметов -Gameplay:=Игровой процесс: -• “heart”: A single health symbol, indicates 2 HP=• “сердечко”: часть индикатора здоровья, обозначает 2 HP -• “bubble”: A single breath symbol, indicates 1 BP=• “пузырёк“: часть индикатора дыхания, обозначает 1 BP -• HP: Hit point (equals half 1 “heart”)=• HP: Hit point (половинка сердечка, переводится как “единица удара”) -• BP: Breath point, indicates breath when diving=• BP: Breath point (целый пузырёк, переводится как “единица дыхания”) отображает состояние дыхания при погружении -• Mob: Computer-controlled enemy=• Моб: управляемый компьютером враг -• Crafting: Combining multiple items to create new ones=• Крафтинг: комбинирование нескольких предметов для создания новых -• Crafting guide: A helper which shows available crafting recipes=• Книга рецептов: помощник, который показывает доступные рецепты -• Spawning: Appearing in the world=• Спаунинг: появление в мире -• Respawning: Appearing again in the world after death=• Возрождение (респаунинг): появление снова в мире после смерти -• Group: Puts similar things together, often affects gameplay=• Группа: объединяет похожие вещи, часто влияет на игровой процесс -• noclip: Allows to fly through walls=• noclip (ноуклип): позволяет летать сквозь стены -Interface=Интерфейс -• Hotbar: Inventory slots at the bottom=• Панель быстрого доступа: отсеки для инвентаря внизу -• Statbar: Indicator made out of half-symbols, used for health and breath=• Панель состояния: индикатор, сделанный из полусимволов, используемый для здоровья и дыхания -• Minimap: The map or radar at the top right=• Миникарта: карта или радар в правом верхнем углу -• Crosshair: Seen in the middle, used to point at things=• Перекрестие: видно посередине, используется для нацеливания на предметы -Online multiplayer:=Сетевая многопользовательская игра: -• PvP: Player vs Player. If active, players can deal damage to each other=• PvP: игрок против игрока. Если включено, игроки могут наносить урон друг другу -• Griefing: Destroying the buildings of other players against their will=• Грифинг: разрушение зданий других игроков против их воли -• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Защита: механизм присваивания себе некоторых областей мира, позволяющий владельцам запретить изменять блоки внутри этих областей всем, кроме себя, либо ограниченного списка друзей -Technical terms:=Технические условия: -• Minetest: This game engine=• Minetest: движок этой игры -• MineClone 2: What you play right now=• MineClone 2: то, во что вы играете прямо сейчас -• Minetest Game: A game for Minetest by the Minetest developers=• Minetest Game: игра для Minetest от разработчиков Minetest -• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Игра: весь игровой процесс, принятый в Minetest; например, обычная игра, или песочница, или подобное -• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them=• Мод: отдельная подсистема, которая добавляет или изменяет функциональность; является основным способом конструирования игр и может быть использована для дальнейшего улучшения или изменения их -• Privilege: Allows a player to do something=• Привилегия: позволяет игроку что-то делать -• Node: Other word for “block”=• Узел: другое слово для обозначения “блока” -Settings=Настройки -There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Существует много разнообразных настроек Minetest. Почти каждый аспект игры может быть изменён. -These are a few of the most important gameplay settings:=Вот некоторые наиболее важные настройки: -• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Урон (enable_damage): включает здоровье и дыхание для всех игроков. Если он выключен, то все игроки бессмертны -• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Творческий режим (creative_mode): позволяет играть в стиле песочницы, сосредоточившись на творчестве, а не на сложном игровом процессе. Смысл зависит от конкретной игры. Основные черты: ускоренное время копания, мгновенный доступ почти ко всем предметам, отсутствует износ инструментов и пр. -• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• PvP (enable_pvp): “Игрок против игрока”. Если этот режим включён, игроки могут наносить урон друг другу -For a full list of all available settings, use the “All Settings” dialog in the main menu.=Для получения полного списка настроек вы можете перейти в ”Настройки - Все настройки“ в главном меню Minetest. -Movement modes=Режимы передвижения -You can enable some special movement modes that change how you move.=Вы можете включать специальные режимы вашего перемещения. -Pitch movement mode:=Движение под уклоном -• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.=• Описание: при активации этого режима клавиши будут перемещать вас в соответствии с вашим текущим углом обзора, если вы находитесь в жидкости или в режиме полёта. -• Default key: [L]=• Клавиша по умолчанию: [L] -• No privilege required=• Никаких привилегий не требуется -Fast mode:=Быстрый режим -• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Описание: позволяет двигаться гораздо быстрее. Удерживайте нажатой клавишу “Use “[E], чтобы двигаться быстрее. В конфигурации клиента вы можете дополнительно настроить быстрый режим. -• Default key: [J]=• Клавиша по умолчанию: [J] -• Required privilege: fast=• Требуемые привилегии: fast -Fly mode:=Режим полёта: -• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Описание: гравитация не влияет на вас, и вы можете свободно перемещаться во всех направлениях. клавишу прыжка, чтобы подниматься, и клавишу [Красться], чтобы опускаться. -• Default key: [K]=• Клавиша по умолчанию: [K] -• Required privilege: fly=• Требуемые привилегии: fly -Noclip mode:=Режим прохождения сквозь стены (Noclip): -• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Описание: позволяет перемещаться сквозь стены. Работает только тогда, когда включен режим полета. -• Default key: [H]=• Клавиша по умолчанию: [H] -• Required privilege: noclip=• Требуемые привилегии: noclip -Console=Консоль -With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=С помощью [F10] вы можете открывать и закрывать консоль. Основное назначение консоли - показывать журнал чата и вводить сообщения чата или команды сервера. -Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=Использование чата или клавиши для отправки команд также открывает консоль, но меньшего размера, и будет закрываться сразу после отправки сообщения. -Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Используйте чат для общения с другими игроками. Для этого требуется привилегия ”shout“. -Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Просто введите сообщение и нажмите [Enter]. Сообщения чата не могут начинаться с “/“. -You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .=Вы можете отправлять приватные сообщения: скажите “/msg <игрок> <сообщение>” в чате, чтобы отправить “<сообщение>”, который сможет увидеть только <игрок>. -There are some special controls for the console:=Клавиши специального управления консолью: -• [F10] Open/close console=• [F10] открыть/закрыть консоль -• [Enter]: Send message or command=• [Enter]: Отправить сообщение или команду -• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: попытаться автоматически дополнить частично введённое имя игрока -• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Ctrl]+[Left]: переместить курсор в начало предыдущего слова -• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Ctrl]+[Right]: переместить курсор в начало следующего слова -• [Ctrl]+[Backspace]: Delete previous word=• [Ctrl]+[Backspace]: удалить предыдущее слово -• [Ctrl]+[Delete]: Delete next word=• [Ctrl]+[Delete]: удалить следующее слово -• [Ctrl]+[U]: Delete all text before the cursor=• [Ctrl]+[U]: удалить весь текст перед курсором -• [Ctrl]+[K]: Delete all text after the cursor=• [Ctrl]+[K]: удалить весь текст после курсора -• [Page up]: Scroll up=• [Page up]: прокрутка вверх -• [Page down]: Scroll down=• [Page down]: прокрутка вниз -There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Существует также история ввода данных. Minetest сохраняет весь ваш консольный ввод, и к нему можно быстро получить доступ в дальнейшем: -• [Up]: Go to previous entry in history=• [Вверх]: перейти к предыдущей записи истории ввода -• [Down]: Go to next entry in history=• [Вниз]: переход к следующей записи истории ввода -Server commands=Серверные команды -Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=Серверные команды (также известные как “чат-команды”) - это маленькое подспорье для продвинутых пользователей. Нет необходимости использовать их для игры. Но они могут пригодиться для выполнения технических задач. Серверные команды работают как в многопользовательском, так и в однопользовательском режиме. -Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=Серверные команды могут выполнять игроки при помощи чата для выполнения специального действия сервера. Есть несколько команд, которые могут быть выданы всеми, но некоторые команды работают только в том случае, если у вас есть определенные привилегии, предоставленные на сервере. Существует небольшой набор базовых команд, которые доступны всегда, дополнительные команды могут добавляться модами. -To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Чтобы запустить команду, просто введите ее, как вводите сообщения в чате, или нажмите командную клавишу Minetest (по умолчанию: [/]). Все команды должны начинаться с символа “/”, например “/mods”. Клавиша команды Minetest делает то же самое, что и клавиша чата, за исключением того, что символ слэш (косая черта, наклонённая вправо) уже введён. -Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=Команды могут возвращать или не возвращать ответ в журнале чата, но ошибки, как правило, отображаются. Попробуйте сами: закройте это окно и введите команду “/mods”. Она покажет вам список модов, доступных на этом сервере. -“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.=“/help all“ - это очень важная команда: вы получаете список всех доступных серверных команд, их краткое объяснение и разрешённые параметры. Эта команда также важна, потому что доступные команды часто отличаются на каждом сервере. -Commands are followed by zero or more parameters.=За командами прописывается ноль или более параметров. -In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=В справочнике команд отображаются [<(шаблоны)>|], которые нужно заменять реальными значениями. Вот пояснение: -• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter=• Текст в знаках больше и меньше (например, “<игрок>”): шаблон параметра -• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Всё, что заключено в квадратные скобки (например, “[текст]”), является необязательным и может быть пропущено -• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Вертикальная черта либо слэш (например, “текст1 | текст2 | текст3”): возможность выбора. Необходимо использовать какой-то один вариант (например, “text2”) -• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Скобки (например, “(слово1 слово2) | слово3”): группируют несколько слов вместе, используется для обозначения возможности выбора -• Everything else is to be read as literal text=• Все остальное читается буквально как текст команды -Here are some examples to illustrate the command syntax:=Вот несколько примеров, иллюстрирующих синтаксис команды: -• /mods: No parameters. Just enter “/mods”=• /mods: Нет параметров. Просто введите “/mods” -• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /me <действие>: 1 параметр. Вы должны ввести “/me“, а затем любой текст, например “/me orders pizza” -• /give : Two parameters. Example: “/give Player default:apple”=• /give <имя> <Айтемстринг>: два параметра. Пример: “/give Player mcl_core:apple” -• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all|privs|<команда>]: допустимыми командами будут являться: “/help”, “/help all”, “/help privs” или “/help ” и имя команды, например: “/help time” -• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity <ИмяСущности> [<Х>,<У>,]: допустимыми командами будут являться: “/spawnentity mcl_boats:boat” и “/spawnentity mcl_boats:boat 0,0,0” -Some final remarks:=Некоторые заключительные замечания: -• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=• Для /give и /giveme вам понадобится значение «Айтемстринг» (ItemString). Это уникальный идентификатор предмета для внутреннего использования, его можно найти в справке по предмету, если у вас есть привилегия “give” (давать) или “debug” (отлаживать) -• For /spawnentity you need an entity name, which is another identifier=• Для /spawnentity вам нужно имя сущности, которое является другим идентификатором -Privileges=Привилегии -Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Каждый игрок имеет набор привилегий, который отличается от сервера к серверу. Ваши привилегии определяют, что вы можете и чего не можете делать. Привилегии могут быть предоставлены и отозваны у других игроков любым игроком, имеющим привилегию под названием “privs”. -On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=На многопользовательском сервере с конфигурацией по умолчанию новые игроки начинают с привилегиями “interact” (взаимодействовать) и “shout” (кричать). Привилегия “interact” необходима для основных действий игрового процесса, таких как строительство, добыча , использование и т. д. Привилегия “shout” позволяет общаться в чате. -There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Есть небольшой набор базовых привилегий, которые вы есть на каждом сервере, другие привилегии могут быть добавлены модами. -To view your own privileges, issue the server command “/privs”.=Чтобы просмотреть свои собственные привилегии, выполните команду сервера “/privs”. -Here are a few basic privilege-related commands:=Вот несколько основных команд, связанных с привилегиями: -• /privs: Lists your privileges=• /privs: список ваших привилегий -• /privs : Lists the privileges of =• /privs <игрок>: список привилегий игрока с именем <игрок> -• /help privs: Shows a list and description about all privileges=• /help privs: показывает список и описание всех привилегий -Players with the “privs” privilege can modify privileges at will:=Игроки с привилегией “privs” могут предоставлять игрокам привилегии, а также лишать их, по своему усмотрению: -• /grant : Grant to =• /grant <игрок> <привилегия>: предоставить <привилегию> <игроку> -• /revoke : Revoke from =• /revoke <игрок> <привилегия>: отменить <привилегию> для <игрока> -In single-player mode, you can use “/grantme all” to unlock all abilities.=В однопользовательском режиме вы можете использовать “/grantme all“, чтобы сразу разблокировать себе все возможности. -Light=Свет -As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Весть мир полностью основан на блоках, и точно так же устроен свет. Каждый блок имеет свою собственную яркость. Яркость блока выражается в “уровне свечения“, который колеблется от 0 (полная темнота) до 15 (такой же яркий, как солнце). -There are two types of light: Sunlight and artificial light.=Существует два вида света: солнечный и искусственный. -Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=Искусственный свет излучается светящимися блоками. Искусственный свет имеет уровень яркости от 1 до 14. -Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=Солнечный свет самый яркий и всегда идет совершенно прямо с неба в любое время дня. Ночью свет превращается в лунный, и он тоже даёт небольшое количество света. Уровень яркости солнечного света равен 15. -Blocks have 3 levels of transparency:=Блоки имеют 3 уровня прозрачности: -• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Прозрачный: солнечный свет проходит насквозь без ограничений, искусственный свет проходит с потерями -• Semi-transparent: Sunlight and artificial light go through with losses=• Полупрозрачный: солнечный свет и искусственный свет проходят с потерями -• Opaque: No light passes through=• Непрозрачный: свет не проходит насквозь -Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=Искусственный свет будет терять один уровень яркости для каждого прозрачного или полупрозрачного блока, через который он проходит, пока не останется лишь темнота (рис.1). -Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=Солнечный свет будет сохранять свою яркость лишь до тех пор, пока он проходит через прозрачные блоки. Когда он пройдёт через полупрозрачный блок, то превратится в искусственный свет. На рисунке 2 показаны отличия. -Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Обратите внимание, что “прозрачность” здесь означает только то, что блок способен передавать яркость света соседних блоков. Может случиться и так, что блок прозрачен для света, но вы при этом не можете смотреть сквозь него. -Coordinates=Координаты -The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Мир это большой куб. Благодаря этому, положение в мире может быть легко выражено с помощью декартовой системы координат. Для каждой позиции в мире существует 3 значения: X, Y и Z. -Like this: (5, 45, -12)=Например, такие: (5, 45, -12). -This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=Это отсылка на место, имеющее координаты X@=5, Y@=45 и Z@=-12. Буквы обозначают оси координат: Y - высота, X и Z - горизонтальное расположение. -The values for X, Y and Z work like this:=Значения X, Y и Z изменяются следующим образом: -• If you go up, Y increases=• Если вы идете вверх, Y увеличивается -• If you go down, Y decreases=• Если вы идете вниз, Y уменьшается -• If you follow the sun, X increases=• Если вы следуете за солнцем, X увеличивается -• If you go to the reverse direction, X decreases=• Если вы идете в обратном направлении, X уменьшается -• Follow the sun, then go right: Z increases=• Следуете за солнцем, затем идите направо: Z увеличивается -• Follow the sun, then go left: Z decreases=• Следуете за солнцем, затем идите налево: Z уменьшается -• The side length of a full cube is 1=• Длина стороны полного куба равна 1 -You can view your current position in the debug screen (open with [F5]).=Вы можете узнать вашу текущую позицию с помощью отладочного экрана (включается/выключается нажатием клавиши [F5]). - -# Расширения MCL2 -Creative Mode=Творческий режим -Enabling Creative Mode in MineClone 2 applies the following changes:=При включении творческого режима в MineClone 2 применяются следующие изменения: -• You keep the things you've placed=• У вас сохраняются вещи, которые вы размещаете в мире -• Creative inventory is available to obtain most items easily=• Вам доступен творческий инвентарь для легкого получения большинства предметов -• Hand breaks all default blocks instantly=• Рука мгновенно разбивает все стандартные блоки -• Greatly increased hand pointing range=• Значительно увеличенный диапазон нацеливания руки -• Mined blocks don't drop items=• Добываемые блоки не превращаются в предметы -• Items don't get used up=• Предметы не расходуются -• Tools don't wear off=• Инструменты не изнашиваются -• You can eat food whenever you want=• Вы можете есть пищу когда захотите -• You can always use the minimap (including radar mode)=• Вы всегда можете использовать миникарту (включая режим радара) -Damage is not affected by Creative Mode, it needs to be disabled separately.=На урон творческий режим не влияет, его нужно отключать отдельно. -Mobs=Мобы -Mobs are the living beings in the world. This includes animals and monsters.=Мобы - это живые существа в мире. Они включают в себя животных и монстров. -Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).=Мобы появляются случайным образом по всему миру. Это называется “спаунинг” (“spawning” – появление, рождение, нерест). Каждый вид мобов появляется на определенных типах блоков при заданном уровне освещенности. Высота тоже играет свою роль. Мирные мобы, как правило, появляются при дневном свете, в то время как враждебные предпочитают темноту. Большинство мобов могут появляться на любом твердом блоке, но некоторые мобы появляются только на определённых блоках (например, травяных). -Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.=Как и игроки, мобы имеют очки здоровья, а иногда и очки защиты (что означает, что вам понадобится оружие получше, чтобы нанести им хоть какой-то урон). Так же, как и игроки, враждебные мобы могут атаковать вплотную или с расстояния. Мобы могут выбрасывать случайные предметы, когда умирают. -Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.=Большинство животных бесцельно бродят по миру, в то время как большинство враждебных мобов охотятся на игроков. Животных можно кормить, приручать и разводить. -Animals=Животные -Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.=Животные это мирные существа, которые бесцельно бродят по миру. Вы можете кормить, приручать и разводить их. -Feeding:=Кормление: -Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.=У каждого животного свои вкусовые предпочтения, они не будут есть произвольную еду. Чтобы покормить животное, возьмите съедобный предмет в руку и кликните правой клавишей мыши по животному. -Animals are attraced to the food they like and follow you as long you hold the food item in hand.=Животных привлекает еда, которая им нравится, и они следуют за вами, пока вы держите в руках их предмет питания. -Feeding an animal has three uses: Taming, healing and breeding.=Кормление животного имеет три цели: приручение, лечение и разведение. -Feeding heals animals instantly, depending on the quality of the food item.=Кормление исцеляет животных мгновенно, в зависимости от качества продукта питания. -Taming:=Приручение: -A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.=Нескольких животных можно приручать. Как правило, с прирученными животными вы можете делать больше вещей, а также использовать на них другие предметы. Например, прирученных лошадей можно оседлать, а прирученные волки сражаются на вашей стороне. -Breeding:=Разведение: -When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.=Когда вы кормите животное до его максимального здоровья, а затем кормите его снова, вы активируете “режим любви”, и вокруг животного появляется много сердец. -Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.=Два животных одного вида начнут размножаться, если они находятся в режиме любви и близко друг к другу. Скоро появится малыш животного. -Baby animals:=Малыш животного -Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.=Малыши животных точно такие же, как и взрослые, но их нельзя приручить или разводить, и они ничего не дают вам, когда умирают. Они вырастают до взрослых через короткое время. Если кормить их, то они вырастут быстрее. -Hunger=Голод -Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.=Голод влияет на ваше здоровье и способность бегать. Голод не действует, если урон отключён. -Core hunger rules:=Основные правила голода: -• You start with 20/20 hunger points (more points @= less hungry)=• Вы начинаете играть с 20/20 очками голода (больше очков @= меньше голода) -• Actions like combat, jumping, sprinting, etc. decrease hunger points=• Такие действия, такие как бой, прыжки, бег и тому подобные, уменьшают очки голода -• Food restores hunger points=• Еда восстанавливает очки голода -• If your hunger bar decreases, you're hungry=• Если ваша индикатор голода уменьшается, вы голодны -• At 18-20 hunger points, you regenerate 1 HP every 4 seconds=• При 18-20 очках голода ваше здоровье восстанавливается со скоростью 1 HP каждые 4 секунды -• At 6 hunger points or less, you can't sprint=• При 6 очках голода и менее меньше вы не можете бежать -• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)=• При 0 очках голода вы теряете 1 HP 4 секунды (до уровня 1 HP) -• Poisonous food decreases your health=• Ядовитая пища ухудшает ваше здоровье. -Details:=Подробности: -You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.=У вас есть 0-20 очков голода, обозначенных 20 куриными ножками над панелью быстрого доступа. У вас также есть невидимый атрибут: сытость. -Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.=Очки голода отражают, насколько вы сыты, а невидимые очки сытости – через какое время вы снова проголодаетесь. -Each food item increases both your hunger level as well your saturation.=Каждый продукт питания увеличивает как очки голода, так и невидимые очки сытости. -Food with a high saturation boost has the advantage that it will take longer until you get hungry again.=Таким образом, еда с высоком насыщаемостью имеет преимущество, которое заключается в том, что пройдёт больше времени, прежде чем вы снова проголодаетесь. -A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.=Некоторые продукты питания иногда могут вызвать отравление. Когда вы отравлены, символы здоровья и голода становятся болезненно зелёными. Пищевое отравление истощает здоровье на 1 HP в секунду, до уровня 1 HP. Пищевое отравление также уменьшает невидимые очки сытости. Отравление проходит через некоторое время либо при выпивании молока. -You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.=Вы начинаете с 5 очками сытости. Максимальная сытость равна вашему текущему уровню голода. Таким образом, с 20 очками голода ваша максимальная сытость 20. Это означает, что продукты питания, которые восстанавливают много очков сытости, тем эффективнее, чем больше у вас очков голода. При низком уровне голода большая часть сытости будет потеряна. -If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.=Если ваши невидимые очки сытости достигают 0, вы начинаете испытывать голод постепенно терять очки голода. Если вы видите, что индикатор голода уменьшается, значит, настало время поесть. -Saturation decreases by doing things which exhaust you (highest exhaustion first):=Сытость уменьшается, если вы делаете вещи, которые истощают вас (от высокого к низкому истощению): -• Regenerating 1 HP=• Восстановление 1 HP (единицы здоровья/удара) -• Suffering food poisoning=• Страдание пищевым отравлением -• Sprint-jumping=• Прыжки во время бега -• Sprinting=• Бег -• Attacking=• Атака -• Taking damage=• Получение урона -• Swimming=• Плавание -• Jumping=• Прыжки -• Mining a block=• Добывание блоков -Other actions, like walking, do not exaust you.=Другие действия, такие как ходьба, не истощают вас. -If you have a map item in any of your hotbar slots, you can use the minimap.=Если у вас есть карта в любом отсеке на панели быстрого доступа, вы можете использовать миникарту. diff --git a/mods/HELP/mcl_doc_basics/locale/template.txt b/mods/HELP/mcl_doc_basics/locale/template.txt deleted file mode 100644 index 5abc582e7..000000000 --- a/mods/HELP/mcl_doc_basics/locale/template.txt +++ /dev/null @@ -1,511 +0,0 @@ -# textdomain: mcl_doc_basics -Basics= -Everything you need to know to get started with playing= -Advanced usage= -Advanced information which may be nice to know, but is not crucial to gameplay= -Quick start= -This is a very brief introduction to the basic gameplay:= -Basic controls:= -• Move mouse to look= -• [W], [A], [S] and [D] to move= -• [E] to sprint= -• [Space] to jump or move upwards= -• [Shift] to sneak or move downwards= -• Mouse wheel or [1]-[9] to select item= -• Left-click to mine blocks or attack= -• Recover from swings to deal full damage= -• Right-click to build blocks and use things= -• [I] for the inventory= -• First items in inventory appear in hotbar below= -• Lowest row in inventory appears in hotbar below= -• [Esc] to close this window= -How to play:= -• Punch a tree trunk until it breaks and collect wood= -• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks= -• Place them in a 2×2 shape in the crafting grid to craft a crafting table= -• Place the crafting table on the ground= -• Rightclick it for a 3×3 crafting grid= -• Use the crafting guide (book icon) to learn all the possible crafting recipes= -• Craft a wooden pickaxe so you can dig stone= -• Different tools break different kinds of blocks. Try them out!= -• Read entries in this help to learn the rest= -• Continue playing as you wish. There's no goal. Have fun!= -Minetest= -Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).= -The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.= -A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.= -Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.= -Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums .= -Minetest as well as Minetest Game are both unfinished at the moment, so please forgive us when not everything works out perfectly.= -Sneaking= -Sneaking makes you walk slower and prevents you from falling off the edge of a block.= -To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!= -• Sneak: [Shift]= -Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.= -If you jump while holding the sneak key, you also jump slightly higher than usual.= -Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.= -Controls= -These are the default controls:= -Basic movement:= -• Moving the mouse around: Look around= -• W: Move forwards= -• A: Move to the left= -• D: Move to the right= -• S: Move backwards= -• E: Sprint= -While standing on solid ground:= -• Space: Jump= -• Shift: Sneak= -While on a ladder, swimming in a liquid or fly mode is active= -• Space: Move up= -• Shift: Move down= -Extended movement (requires privileges):= -• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)= -• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)= -• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)= -• E: Move even faster when in fast mode= -• E: Walk fast in fast mode= -World interaction:= -• Left mouse button: Punch / mine blocks / take items= -• Left mouse button: Punch / mine blocks= -• Right mouse button: Build or use pointed block= -• Shift+Right mouse button: Build= -• Roll mouse wheel: Select next/previous item in hotbar= -• Roll mouse wheel / B / N: Select next/previous item in hotbar= -• 1-9: Select item in hotbar directly= -• Q: Drop item stack= -• Shift+Q: Drop 1 item= -• I: Show/hide inventory menu= -Inventory interaction:= -See the entry “Basics > Inventory”.= -Camera:= -• Z: Zoom= -• F7: Toggle camera mode= -• F8: Toggle cinematic mode= -Interface:= -• Esc: Open menu window (pauses in single-player mode) or close window= -• F1: Show/hide HUD= -• F2: Show/hide chat= -• F9: Toggle minimap= -• Shift+F9: Toggle minimap rotation mode= -• F10: Open/close console/chat log= -• F12: Take a screenshot= -Server interaction:= -• T: Open chat window (chat requires the “shout” privilege)= -• /: Start issuing a server command= -Technical:= -• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)= -• +: Increase minimal viewing distance= -• -: Decrease minimal viewing distance= -• F3: Enable/disable fog= -• F5: Enable/disable debug screen which also shows your coordinates= -• F6: Only useful for developers. Enables/disables profiler= -• P: Only useful for developers. Writes current stack traces= -Players= -Players (actually: “player characters”) are the characters which users control.= -Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).= -Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.= -Players can take damage for a variety of reasons, here are some:= -• Taking fall damage= -• Touching a block which causes direct damage= -• Drowning= -• Being attacked by another player= -• Being attacked by a computer enemy= -At a health of 0, the player dies. The player can just respawn in the world.= -Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.= -Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.= -Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.= -In multi-player mode, the name of other players is written above their head.= -Items= -Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.= -An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.= -Dropped item stacks will be collected automatically when you stand close to them.= -Items have several properties, including the following:= -• Maximum stack size: Number of items which fit on 1 item stack= -• Pointing range: How close things must be to be pointed while wielding this item= -• Group memberships: See “Basics > Groups”= -• May be used for crafting or cooking= -Tools= -Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.= -A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.= -When nothing is wielded, players use their hand which may act as tool and weapon.= -Mining tools are important to break all kinds of blocks. Weapons are another kind of tool. There are some other more specialized tools. Special actions of tools are usually done by right-click.= -When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of punching and deals minimum damage.= -Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.= -Weapons= -Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.= -Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:= -• Single punch: Left-click once to deal a single punch= -• Quick punching: Hold down the left mouse button to deal quick repeated punches= -There are two core attributes of melee weapons:= -• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered= -• Full punch interval: Time it takes for fully recovering from a punch= -A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.= -There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.= -Pointing= -“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.= -To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.= -A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.= -Camera= -There are 3 different views which determine the way you see the world. The modes are:= -• 1: First-person view (default)= -• 2: Third-person view from behind= -• 3: Third-person view from the front= -You can change the camera mode by pressing [F7].= -You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.= -Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.= -There is also Cinematic Mode which can be toggled with [F8]. With Cinematic Mode enabled, the camera movements become more smooth. Some players don't like it, it is a matter of taste.= -By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.= -• Switch camera mode: [F7]= -• Toggle Cinematic Mode: [F8]= -• Zoom: [Z]= -Blocks= -The world of MineClone 2 is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.= -The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.= -Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:= -• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely= -• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools= -• Mining properties: By which tools it can be mined, how fast and how much it wears off tools= -• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys= -• Drowning damage: See the entry “Basics > Player”= -• Liquids: See the entry “Basics > Liquids”= -• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more= -Mining= -Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.= -Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.= -After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:= -• Always drops itself (the usual case)= -• Always drops the same items= -• Drops items based on probability= -• Drops nothing= -Building= -Almost all blocks can be built (or placed). Building is very simple and has no delay.= -To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.= -Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.= -Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.= -Liquids= -Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.= -Liquids usually come in two forms: In source form (S) and in flowing form (F).= -Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.= -Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.= -All liquids share the following properties:= -• All properties of blocks (including drowning damage)= -• Renewability: Renewable liquids can create new sources= -• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2= -• Viscosity: How slow players move through it and how slow the liquid spreads= -Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:= -• Two renewable liquid blocks of the same type touch each other diagonally= -• These blocks are also on the same height= -• One of the two “corners” is open space which allows liquids to flow in= -When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).= -Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.= -The physics for swimming and diving in a liquid are:= -• The higher the viscosity, the slower you move= -• If you rest, you'll slowly sink= -• There is no fall damage for falling into a liquid as such= -• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage= -Liquids are often not pointable. But some special items are able to point all liquids.= -Crafting= -Crafting is the task of combining several items to form a new item.= -To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.= -To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.= -A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).= -Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.= -There are multiple types of crafting recipes:= -• Shaped (image 2): Items need to be placed in a particular shape= -• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)= -• Cooking: Explained in “Basics > Cooking”= -• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%= -In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.= -Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.= -Cooking= -Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.= -Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.= -Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.= -Hotbar= -At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.= -You can change the selected item with the mouse wheel or the keyboard.= -• Select previous item in hotbar: [Mouse wheel up] or [B]= -• Select next item in hotbar: [Mouse wheel down] or [N]= -• Select item in hotbar directly: [1]-[9]= -The selected item is also your wielded item.= -Minimap= -If you have a map item in any of your hotbar slots, you can use the minimap.= -Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.= -There are 2 minimap modes and 3 zoom levels.= -Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.= -Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.= -There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.= -In some games, the minimap may be disabled.= -• Toggle minimap mode: [F9]= -• Toggle minimap rotation mode: [Shift]+[F9]= -Inventory= -Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.= -You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.= -Blocks can also have their own inventory, e.g. chests and furnaces.= -Inventory controls:= -Taking: You can take items from an occupied slot if the cursor holds nothing.= -• Left click: take entire item stack= -• Right click: take half from the item stack (rounded up)= -• Middle click: take 10 items from the item stack= -• Mouse wheel down: take 1 item from the item stack= -Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.= -• Left click: put entire item stack= -• Right click: put 1 item of the item stack= -• Right click or mouse wheel up: put 1 item of the item stack= -• Middle click: put 10 items of the item stack= -Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.= -• Click: exchange item stacks= -Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.= -Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.= -• Sneak+Left click: Automatically transfer item stack= -Online help= -You may want to check out these online resources related to MineClone 2.= -MineClone 2 download and forum discussion: = -Here you find the most recent version of MineClone 2 and can discuss it.= -Bug tracker: = -Report bugs here.= -Minetest links:= -You may want to check out these online resources related to Minetest:= -Official homepage of Minetest: = -The main place to find the most recent version of Minetest, the engine used by MineClone 2.= -The main place to find the most recent version of Minetest.= -Community wiki: = -A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.= -Minetest forums: = -A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.= -Chat: = -A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.= -Groups= -Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:= -• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups= -• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups= -• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group= -• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”= -• Other uses= -In the item help, many important groups are usually mentioned and explained.= -Glossary= -This is a list of commonly used terms:= -Controls:= -• Wielding: Holding an item in hand= -• Pointing: Looking with the crosshair at something in range= -• Dropping: Throwing an item or item stack to the ground= -• Punching: Attacking with left-click, is also used on blocks= -• Sneaking: Walking slowly while (usually) avoiding to fall over edges= -• Climbing: Moving up or down a climbable block= -Blocks:= -• Block: Cubes that the worlds are made of= -• Mining/digging: Using a mining tool to break a block= -• Building/placing: Putting a block somewhere= -• Drop: Items you get after mining a block= -• Using a block: Right-clicking a block to access its special function= -Items:= -• Item: A single thing that players can possess= -• Item stack: A collection of items of the same kind= -• Maximum stack size: Maximum amount of items in an item stack= -• Slot / inventory slot: Can hold one item stack= -• Inventory: Provides several inventory slots for storage= -• Player inventory: The main inventory of a player= -• Tool: An item which you can use to do special things with when wielding= -• Range: How far away things can be to be pointed by an item= -• Mining tool: A tool which allows to break blocks= -• Craftitem: An item which is (primarily or only) used for crafting= -Gameplay:= -• “heart”: A single health symbol, indicates 2 HP= -• “bubble”: A single breath symbol, indicates 1 BP= -• HP: Hit point (equals half 1 “heart”)= -• BP: Breath point, indicates breath when diving= -• Mob: Computer-controlled enemy= -• Crafting: Combining multiple items to create new ones= -• Crafting guide: A helper which shows available crafting recipes= -• Spawning: Appearing in the world= -• Respawning: Appearing again in the world after death= -• Group: Puts similar things together, often affects gameplay= -• noclip: Allows to fly through walls= -Interface= -• Hotbar: Inventory slots at the bottom= -• Statbar: Indicator made out of half-symbols, used for health and breath= -• Minimap: The map or radar at the top right= -• Crosshair: Seen in the middle, used to point at things= -Online multiplayer:= -• PvP: Player vs Player. If active, players can deal damage to each other= -• Griefing: Destroying the buildings of other players against their will= -• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside= -Technical terms:= -• Minetest: This game engine= -• MineClone 2: What you play right now= -• Minetest Game: A game for Minetest by the Minetest developers= -• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar= -• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them= -• Privilege: Allows a player to do something= -• Node: Other word for “block”= -Settings= -There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.= -These are a few of the most important gameplay settings:= -• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal= -• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.= -• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other= -For a full list of all available settings, use the “All Settings” dialog in the main menu.= -Movement modes= -You can enable some special movement modes that change how you move.= -Pitch movement mode:= -• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.= -• Default key: [L]= -• No privilege required= -Fast mode:= -• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.= -• Default key: [J]= -• Required privilege: fast= -Fly mode:= -• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.= -• Default key: [K]= -• Required privilege: fly= -Noclip mode:= -• Description: Allows you to move through walls. Only works when fly mode is enabled, too.= -• Default key: [H]= -• Required privilege: noclip= -Console= -With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.= -Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.= -Use the chat to communicate with other players. This requires you to have the “shout” privilege.= -Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.= -You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .= -There are some special controls for the console:= -• [F10] Open/close console= -• [Enter]: Send message or command= -• [Tab]: Try to auto-complete a partially-entered player name= -• [Ctrl]+[Left]: Move cursor to the beginning of the previous word= -• [Ctrl]+[Right]: Move cursor to the beginning of the next word= -• [Ctrl]+[Backspace]: Delete previous word= -• [Ctrl]+[Delete]: Delete next word= -• [Ctrl]+[U]: Delete all text before the cursor= -• [Ctrl]+[K]: Delete all text after the cursor= -• [Page up]: Scroll up= -• [Page down]: Scroll down= -There is also an input history. Minetest saves your previous console inputs which you can quickly access later:= -• [Up]: Go to previous entry in history= -• [Down]: Go to next entry in history= -Server commands= -Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.= -Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.= -To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.= -Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.= -“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.= -Commands are followed by zero or more parameters.= -In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:= -• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter= -• Anything in square brackets (e.g. “[text]”) is optional and can be omitted= -• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)= -• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations= -• Everything else is to be read as literal text= -Here are some examples to illustrate the command syntax:= -• /mods: No parameters. Just enter “/mods”= -• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”= -• /give : Two parameters. Example: “/give Player default:apple”= -• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”= -• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”= -Some final remarks:= -• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege= -• For /spawnentity you need an entity name, which is another identifier= -Privileges= -Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.= -On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.= -There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.= -To view your own privileges, issue the server command “/privs”.= -Here are a few basic privilege-related commands:= -• /privs: Lists your privileges= -• /privs : Lists the privileges of = -• /help privs: Shows a list and description about all privileges= -Players with the “privs” privilege can modify privileges at will:= -• /grant : Grant to = -• /revoke : Revoke from = -In single-player mode, you can use “/grantme all” to unlock all abilities.= -Light= -As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).= -There are two types of light: Sunlight and artificial light.= -Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.= -Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.= -Blocks have 3 levels of transparency:= -• Transparent: Sunlight goes through limitless, artificial light goes through with losses= -• Semi-transparent: Sunlight and artificial light go through with losses= -• Opaque: No light passes through= -Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).= -Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.= -Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.= -Coordinates= -The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.= -Like this: (5, 45, -12)= -This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.= -The values for X, Y and Z work like this:= -• If you go up, Y increases= -• If you go down, Y decreases= -• If you follow the sun, X increases= -• If you go to the reverse direction, X decreases= -• Follow the sun, then go right: Z increases= -• Follow the sun, then go left: Z decreases= -• The side length of a full cube is 1= -You can view your current position in the debug screen (open with [F5]).= - -# MCL2 extensions -Creative Mode= -Enabling Creative Mode in MineClone 2 applies the following changes:= -• You keep the things you've placed= -• Creative inventory is available to obtain most items easily= -• Hand breaks all default blocks instantly= -• Greatly increased hand pointing range= -• Mined blocks don't drop items= -• Items don't get used up= -• Tools don't wear off= -• You can eat food whenever you want= -• You can always use the minimap (including radar mode)= -Damage is not affected by Creative Mode, it needs to be disabled separately.= -Mobs= -Mobs are the living beings in the world. This includes animals and monsters.= -Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).= -Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.= -Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.= -Animals= -Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.= -Feeding:= -Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.= -Animals are attraced to the food they like and follow you as long you hold the food item in hand.= -Feeding an animal has three uses: Taming, healing and breeding.= -Feeding heals animals instantly, depending on the quality of the food item.= -Taming:= -A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.= -Breeding:= -When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.= -Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.= -Baby animals:= -Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.= -Hunger= -Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.= -Core hunger rules:= -• You start with 20/20 hunger points (more points @= less hungry)= -• Actions like combat, jumping, sprinting, etc. decrease hunger points= -• Food restores hunger points= -• If your hunger bar decreases, you're hungry= -• At 18-20 hunger points, you regenerate 1 HP every 4 seconds= -• At 6 hunger points or less, you can't sprint= -• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)= -• Poisonous food decreases your health= -Details:= -You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.= -Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.= -Each food item increases both your hunger level as well your saturation.= -Food with a high saturation boost has the advantage that it will take longer until you get hungry again.= -A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.= -You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.= -If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.= -Saturation decreases by doing things which exhaust you (highest exhaustion first):= -• Regenerating 1 HP= -• Suffering food poisoning= -• Sprint-jumping= -• Sprinting= -• Attacking= -• Taking damage= -• Swimming= -• Jumping= -• Mining a block= -Other actions, like walking, do not exaust you.= -If you have a map item in any of your hotbar slots, you can use the minimap.= diff --git a/mods/HELP/mcl_doc_basics/mcl_extension.lua b/mods/HELP/mcl_doc_basics/mcl_extension.lua deleted file mode 100644 index a0f31a2c8..000000000 --- a/mods/HELP/mcl_doc_basics/mcl_extension.lua +++ /dev/null @@ -1,97 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -doc.add_entry("advanced", "creative", { - name = S("Creative Mode"), - data = { text = -S("Enabling Creative Mode in MineClone 2 applies the following changes:").."\n\n".. - -S("• You keep the things you've placed").."\n".. -S("• Creative inventory is available to obtain most items easily").."\n".. -S("• Hand breaks all default blocks instantly").."\n".. -S("• Greatly increased hand pointing range").."\n".. -S("• Mined blocks don't drop items").."\n".. -S("• Items don't get used up").."\n".. -S("• Tools don't wear off").."\n".. -S("• You can eat food whenever you want").."\n".. -S("• You can always use the minimap (including radar mode)").."\n\n".. - -S("Damage is not affected by Creative Mode, it needs to be disabled separately.") -}}) - -doc.add_entry("basics", "mobs", { - name = S("Mobs"), - data = { text = -S("Mobs are the living beings in the world. This includes animals and monsters.").."\n\n".. - -S("Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).").."\n\n".. - -S("Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.").."\n\n".. - -S("Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.") -}}) - -doc.add_entry("basics", "animals", { - name = S("Animals"), - data = { text = -S("Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.").."\n\n".. - -S("Feeding:").."\n".. -S("Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.").."\n".. -S("Animals are attraced to the food they like and follow you as long you hold the food item in hand.").."\n".. -S("Feeding an animal has three uses: Taming, healing and breeding.").."\n".. -S("Feeding heals animals instantly, depending on the quality of the food item.").."\n\n".. - -S("Taming:").."\n".. -S("A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.").."\n\n".. - -S("Breeding:").."\n".. -S("When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.").."\n".. -S("Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.").."\n\n".. - -S("Baby animals:").."\n".. -S("Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.") - -}}) - -doc.add_entry("basics", "hunger", { - name = S("Hunger"), - data = { text = -S("Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.").."\n\n".. - -S("Core hunger rules:").."\n\n".. -S("• You start with 20/20 hunger points (more points = less hungry)").."\n".. -S("• Actions like combat, jumping, sprinting, etc. decrease hunger points").."\n".. -S("• Food restores hunger points").."\n".. -S("• If your hunger bar decreases, you're hungry").."\n".. -S("• At 18-20 hunger points, you regenerate 1 HP every 4 seconds").."\n".. -S("• At 6 hunger points or less, you can't sprint").."\n".. -S("• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)").."\n".. -S("• Poisonous food decreases your health").."\n\n".. - - -S("Details:").."\n\n".. -S("You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.").."\n".. -S("Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.").."\n\n".. - -S("Each food item increases both your hunger level as well your saturation.").."\n".. -S("Food with a high saturation boost has the advantage that it will take longer until you get hungry again.").."\n".. -S("A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.").."\n\n".. - -S("You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.").."\n".. -S("If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.").."\n\n".. - -S("Saturation decreases by doing things which exhaust you (highest exhaustion first):").."\n".. -S("• Regenerating 1 HP").."\n".. -S("• Suffering food poisoning").."\n".. -S("• Sprint-jumping").."\n".. -S("• Sprinting").."\n".. -S("• Attacking").."\n".. -S("• Taking damage").."\n".. -S("• Swimming").."\n".. -S("• Jumping").."\n".. -S("• Mining a block").."\n\n".. - -S("Other actions, like walking, do not exaust you.") - -}}) - diff --git a/mods/HELP/mcl_doc_basics/mod.conf b/mods/HELP/mcl_doc_basics/mod.conf deleted file mode 100644 index c23a0ad55..000000000 --- a/mods/HELP/mcl_doc_basics/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_doc_basics -author = Wuzzy -description = Adds some help texts explaining how to use MineClone 2. -depends = doc diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_build.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_build.png deleted file mode 100644 index 3f89001f1..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_build.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_behind.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_behind.png deleted file mode 100644 index 2f17e4759..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_behind.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_ego.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_ego.png deleted file mode 100644 index 98b533d2d..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_ego.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_front.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_front.png deleted file mode 100644 index 71adb89fd..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_camera_front.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_grid.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_grid.png deleted file mode 100644 index bff1f91b1..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_grid.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_1.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_1.png deleted file mode 100644 index 878bc681b..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_1.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_2.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_2.png deleted file mode 100644 index eb23f5e0d..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_2.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_3.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_3.png deleted file mode 100644 index 149dc61d8..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_groups_3.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_repair.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_repair.png deleted file mode 100644 index fa21ddf93..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_repair.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shaped.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shaped.png deleted file mode 100644 index a5e2f8e70..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shaped.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shapeless_1.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shapeless_1.png deleted file mode 100644 index 68fb58114..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shapeless_1.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shapeless_2.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shapeless_2.png deleted file mode 100644 index 77a456914..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_craft_shapeless_2.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_carbone_ng.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_carbone_ng.png deleted file mode 100644 index 7ac6178f9..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_carbone_ng.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_hades.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_hades.png deleted file mode 100644 index debc08f8d..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_hades.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_lott.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_lott.png deleted file mode 100644 index db27d0acc..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_lott.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_moontest.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_moontest.png deleted file mode 100644 index 47ea2192d..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_moontest.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_mtg_1.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_mtg_1.png deleted file mode 100644 index d85d1cce7..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_mtg_1.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_mtg_2.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_mtg_2.png deleted file mode 100644 index 1ab57ba32..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_mtg_2.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_outback.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_outback.png deleted file mode 100644 index 540f4bbed..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_outback.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_pixture.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_pixture.png deleted file mode 100644 index ead1a160b..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_pixture.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_xtraores_xtension.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_xtraores_xtension.png deleted file mode 100644 index 7b1957505..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_gameplay_xtraores_xtension.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_hotbar.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_hotbar.png deleted file mode 100644 index 406f94db8..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_hotbar.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_hotbar_relations.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_hotbar_relations.png deleted file mode 100644 index 4286d2744..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_hotbar_relations.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_inventory.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_inventory.png deleted file mode 100644 index d23632f9f..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_inventory.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_inventory_detail.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_inventory_detail.png deleted file mode 100644 index 631daa6ea..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_inventory_detail.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_items_dropped.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_items_dropped.png deleted file mode 100644 index 4cbe82db2..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_items_dropped.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_light_test.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_light_test.png deleted file mode 100644 index 49f150365..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_light_test.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_light_torch.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_light_torch.png deleted file mode 100644 index d64fdedd2..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_light_torch.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_nonrenewable.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_nonrenewable.png deleted file mode 100644 index a0d238acb..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_nonrenewable.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_range.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_range.png deleted file mode 100644 index 622e98de3..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_range.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_renewable_1.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_renewable_1.png deleted file mode 100644 index ffb23fd14..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_renewable_1.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_renewable_2.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_renewable_2.png deleted file mode 100644 index 0eb44c54f..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_renewable_2.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_types.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_types.png deleted file mode 100644 index ac72b0cfa..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_liquids_types.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_map.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_map.png deleted file mode 100644 index b574f8b08..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_map.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_radar.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_radar.png deleted file mode 100644 index a743d6d9d..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_radar.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_round.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_round.png deleted file mode 100644 index 083903d36..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_minimap_round.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_nodes.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_nodes.png deleted file mode 100644 index 9f436ca37..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_nodes.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_players_flat.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_players_flat.png deleted file mode 100644 index 868cdb642..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_players_flat.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_players_lott.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_players_lott.png deleted file mode 100644 index 7427f2a7c..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_players_lott.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_players_sam.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_players_sam.png deleted file mode 100644 index afcd3111a..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_players_sam.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_pointing.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_pointing.png deleted file mode 100644 index 23b0dff16..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_pointing.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_sneak.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_sneak.png deleted file mode 100644 index 00325a2a9..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_sneak.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_tools.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_tools.png deleted file mode 100644 index 9bd639342..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_tools.png and /dev/null differ diff --git a/mods/HELP/mcl_doc_basics/textures/doc_basics_tools_mining.png b/mods/HELP/mcl_doc_basics/textures/doc_basics_tools_mining.png deleted file mode 100644 index 8655c5e2a..000000000 Binary files a/mods/HELP/mcl_doc_basics/textures/doc_basics_tools_mining.png and /dev/null differ diff --git a/mods/HELP/mcl_item_id/API.md b/mods/HELP/mcl_item_id/API.md deleted file mode 100644 index a2f244e0c..000000000 --- a/mods/HELP/mcl_item_id/API.md +++ /dev/null @@ -1,24 +0,0 @@ -# mcl_item_id -Show the item ID of an item in the description. -With this API, you can register a different name space than "mineclone" for your mod. - -## mcl_item_id.set_mod_namespace(modname, namespace) -Set a name space for all items in a mod. - -* param1: the modname -* param2: (optional) string of the desired name space, if nil, it is the name of the mod - -## mcl_item_id.get_mod_namespace(modname) -Get the name space of a mod registered with mcl_item_id.set_mod_namespace(modname, namespace). - -* param1: the modname - -### Examples: - -The name of the mod is "mod" which registered an item called "mod:itemname". - -* mcl_item_id.set_mod_namespace("mod", "mymod") will show "mymod:itemname" in the description of "mod:itemname" -* mcl_item_id.set_mod_namespace(minetest.get_current_modname()) will show "mod:itemname" in the description of "mod:itemname" -* mcl_item_id.get_mod_namespace(minetest.get_current_modname()) will return "mod" - -(If no namespace is set by a mod, mcl_item_id.get_mod_namespace(minetest.get_current_modname()) will return "mineclone") diff --git a/mods/HELP/mcl_item_id/init.lua b/mods/HELP/mcl_item_id/init.lua deleted file mode 100644 index 0e029932b..000000000 --- a/mods/HELP/mcl_item_id/init.lua +++ /dev/null @@ -1,62 +0,0 @@ -mcl_item_id = { - mod_namespaces = {}, -} - -local game = "mineclone" - -function mcl_item_id.set_mod_namespace(modname, namespace) - local namespace = namespace or modname - mcl_item_id.mod_namespaces[modname] = namespace -end - -function mcl_item_id.get_mod_namespace(modname) - local namespace = mcl_item_id.mod_namespaces[modname] - if namespace then - return namespace - else - return game - end -end - -local same_id = { - enchanting = { "table" }, - experience = { "bottle" }, - heads = { "skeleton", "zombie", "creeper", "wither_skeleton" }, - mobitems = { "rabbit", "chicken" }, - walls = { - "andesite", "brick", "cobble", "diorite", "endbricks", - "granite", "mossycobble", "netherbrick", "prismarine", - "rednetherbrick", "redsandstone", "sandstone", - "stonebrick", "stonebrickmossy", - }, - wool = { - "black", "blue", "brown", "cyan", "green", - "grey", "light_blue", "lime", "magenta", "orange", - "pink", "purple", "red", "silver", "white", "yellow", - }, -} - -tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] - local item_split = itemstring:find(":") - local id_string = itemstring:sub(item_split) - local id_modname = itemstring:sub(1, item_split - 1) - local new_id = game .. id_string - local mod_namespace = mcl_item_id.get_mod_namespace(id_modname) - for mod, ids in pairs(same_id) do - for _, id in pairs(ids) do - if itemstring == "mcl_" .. mod .. ":" .. id then - new_id = game .. ":" .. id .. "_" .. mod:gsub("s", "") - end - end - end - if mod_namespace ~= game then - new_id = mod_namespace .. id_string - end - if mod_namespace ~= id_modname then - minetest.register_alias_force(new_id, itemstring) - end - if minetest.settings:get_bool("mcl_item_id_debug", false) then - return new_id, "#555555" - end -end) \ No newline at end of file diff --git a/mods/HELP/mcl_item_id/mod.conf b/mods/HELP/mcl_item_id/mod.conf deleted file mode 100644 index c45e17fd3..000000000 --- a/mods/HELP/mcl_item_id/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_item_id -author = NO11 -depends = tt \ No newline at end of file diff --git a/mods/HELP/mcl_tt/init.lua b/mods/HELP/mcl_tt/init.lua deleted file mode 100644 index 3451e76da..000000000 --- a/mods/HELP/mcl_tt/init.lua +++ /dev/null @@ -1,4 +0,0 @@ -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(modpath.."/snippets_base.lua") -dofile(modpath.."/snippets_mcl.lua") \ No newline at end of file diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.de.tr b/mods/HELP/mcl_tt/locale/mcl_tt.de.tr deleted file mode 100644 index 54c376c3b..000000000 --- a/mods/HELP/mcl_tt/locale/mcl_tt.de.tr +++ /dev/null @@ -1,48 +0,0 @@ -# textdomain: mcl_tt -Head armor=Kopfrüstung -Torso armor=Torsorüstung -Legs armor=Beinrüstung -Feet armor=Fußrüstung -Armor points: @1=Rüstungspunkte: @1 -Armor durability: @1=Rüstungshaltbarkeit: @1 -Protection: @1%=Schutz: @1% -Hunger points: +@1=Hungerpunkte: +@1 -Saturation points: +@1=Sättigungspunkte: +@1 -Deals damage when falling=Macht Schaden beim Fallen -Grows on grass blocks or dirt=Wächst auf Grasblöcken oder Erde -Grows on grass blocks, podzol, dirt or coarse dirt=Wächst auf Grasblöcken, Podsol, Erde oder grober Erde -Flammable=Entzündlich -Zombie view range: -50%=Zombiesichtweite: -50% -Skeleton view range: -50%=Skelettsichtweite: -50% -Creeper view range: -50%=Creepersichtweite: -50% -Damage: @1=Schaden: @1 -Damage (@1): @2=Schaden (@1): @2 -Healing: @1=Heilung: @1 -Healing (@1): @2=Heilung (@1): @2 -Full punch interval: @1s=Zeit zum Ausholen: @1s -Contact damage: @1 per second=Kontaktschaden: @1 pro Sekunde -Contact healing: @1 per second=Kontaktheilung: @1 pro Sekunde -Drowning damage: @1=Ertrinkensschaden: @1 -Bouncy (@1%)=Sprunghaft (@1%) -Luminance: @1=Lichtstärke: @1 -Slippery=Rutschig -Climbable=Erkletterbar -Climbable (only downwards)=Erkletterbar (nur nach unten) -No jumping=Kein Springen -No swimming upwards=Kein nach oben schwimmen -No rising=Kein Aufsteigen -Fall damage: @1%=Fallschaden: @1% -Fall damage: +@1%=Fallschaden: +@1% -No fall damage=Kein Fallschaden -Mining speed: @1=Grabegeschwindigkeit: @1 -Very fast=Sehr schnell -Extremely fast=Extrem schnell -Fast=Schnell -Slow=Langsam -Very slow=Sehr langsam -Painfully slow=Furchtbar langsam -Mining durability: @1=Grabehaltbarkeit: @1 -Block breaking strength: @1=Blockbruchstärke: @1 -@1 uses=@1 Verwendungen -Unlimited uses=Unbegrenzte Verwendungen -Durability: @1=Haltbarkeit: @1 diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.fr.tr b/mods/HELP/mcl_tt/locale/mcl_tt.fr.tr deleted file mode 100644 index a66311448..000000000 --- a/mods/HELP/mcl_tt/locale/mcl_tt.fr.tr +++ /dev/null @@ -1,47 +0,0 @@ -# textdomain: mcl_tt -Head armor=Armure de tête -Torso armor=Armure de torse -Legs armor=Armure de jambes -Feet armor=Armure de pieds -Armor points: @1=Points d'armure: @1 -Armor durability: @1=Durabilité d'armure: @1 -Protection: @1%=Protection: @1% -Hunger points: +@1=Points de faim: +@1 -Saturation points: +@1=Points de saturation: +@1 -Deals damage when falling=Inflige des dégâts en tombant -Grows on grass blocks or dirt=Pousse sur des blocs d'herbe ou de terre -Grows on grass blocks, podzol, dirt or coarse dirt=Pousse sur les blocs de gazon, le podzol, la terre ou la terre grossière -Flammable=Inflammable -Zombie view range: -50%=Distance de vue de Zombie: -50% -Skeleton view range: -50%=Distance de vue de Squelette: -50% -Creeper view range: -50%=Distance de vue de Creeper: -50% -Damage: @1=Dégâts: @1 -Damage (@1): @2=Dégâts (@1): @2 -Healing: @1=Guérison: @1 -Healing (@1): @2=Guérison (@1): @2 -Full punch interval: @1s=Intervalle de coup: @1s -Contact damage: @1 per second=Dégâts de contact: @1 par seconde -Contact healing: @1 per second=Guérison de contact: @1 par seconde -Drowning damage: @1=Dégâts de noyade: @1 -Bouncy (@1%)=Rebondissant (@1%) -Luminance: @1=Luminance: @1 -Slippery=Glissant -Climbable=Grimpable -Climbable (only downwards)=Grimpable (uniquement vers le bas) -No jumping=Ne pas sauter -No swimming upwards=Ne pas nager vers le haut -No rising=Pas de montée -Fall damage: @1%=Dégâts de chute: @1% -Fall damage: +@1%=Dégâts de chute: +@1% -No fall damage=Pas de dégâts de chute -Mining speed: @1=Vitesse de minage: @1 -Very fast=Très rapide -Extremely fast=Extremement rapide -Fast=Rapide -Slow=Lent -Very slow=Très lent -Painfully slow=Péniblement lent -Mining durability: @1=Durabilité de minage: @1 -Block breaking strength: @1=Résistance à la rupture: @1 -@1 uses=@1 utilisations -Unlimited uses=Utilisations illimitées diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.pl.tr b/mods/HELP/mcl_tt/locale/mcl_tt.pl.tr deleted file mode 100644 index aecc15d1e..000000000 --- a/mods/HELP/mcl_tt/locale/mcl_tt.pl.tr +++ /dev/null @@ -1,48 +0,0 @@ -# textdomain: mcl_tt -Head armor=Zbroja na głowę -Torso armor=Zbroja na pierś -Legs armor=Zbroja na nogi -Feet armor=Zbroja na stopy -Armor points: @1=Punkty zbroi -Armor durability: @1=Wytrzymałość zbroi: @1 -Protection: @1%=Ochrona: @1% -Hunger points: +@1=Punkty głodu: +@1 -Saturation points: +@1=Punkty nasycenia: +@1 -Deals damage when falling=Zadaje obrażenia gdy spada -Grows on grass blocks or dirt=Rośnie na blokach trawy i ziemi -Grows on grass blocks, podzol, dirt or coarse dirt=Rośnie na blokach trawy, bielicy, ziemi oraz twardej ziemi -Flammable=Łatwopalne -Zombie view range: -50%=Zasięg widzenia zombie: -50% -Skeleton view range: -50%=Zasięg widzenia szkieleta: -50% -Creeper view range: -50%=Zasięg widzenia creepera: -50% -Damage: @1=Obrażenia: @1 -Damage (@1): @2=Obrażenia (@1): @2 -Healing: @1=Leczenie: @1 -Healing (@1): @2=Leczenie (@1): @2 -Full punch interval: @1s=Pełny okres uderzenia: @1s -Contact damage: @1 per second=Obrażenia kontaktowe: @1 na sekundę -Contact healing: @1 per second=Leczenie kontaktowe: @1 na sekundę -Drowning damage: @1=Obrażenia od topienia: @1 -Bouncy (@1%)=Sprężystość (@1%) -Luminance: @1=Luminancja: @1 -Slippery=Śliskość -Climbable=Wspinaczkowe -Climbable (only downwards)=Wspinaczkowe (tylko w dół) -No jumping=Nie można skakać -No swimming upwards=Nie można płynąć pod górę -No rising=Nie wolno wstawać -Fall damage: @1%=Obrażenia od upadku @1% -Fall damage: +@1%=Obrażenia od upadku +@1% -No fall damage=Brak obrażeń od upadku -Mining speed: @1=Szybkość kopania: @1 -Very fast=Bardzo szybkie -Extremely fast=Ekstremalnie szybkie -Fast=Szybkie -Slow=Wolne -Very slow=Bardzo wolne -Painfully slow=Boleśnie wolne -Mining durability: @1=Wytrzymałość kopania: @1 -Block breaking strength: @1=Siła niszczenia bloku: @1 -@1 uses=@1 użyć -Unlimited uses=Nielimitowane użycia - diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.ru.tr b/mods/HELP/mcl_tt/locale/mcl_tt.ru.tr deleted file mode 100644 index 349b6a5fb..000000000 --- a/mods/HELP/mcl_tt/locale/mcl_tt.ru.tr +++ /dev/null @@ -1,47 +0,0 @@ -# textdomain: mcl_tt -Head armor=Зашита головы -Torso armor=Защита тела -Legs armor=Защита ног -Feet armor=Защита ступней -Armor points: @1=Эффективность защиты: @1 -Armor durability: @1=Долговечность защиты: @1 -Protection: @1%=Уровень защиты: @1% -Hunger points: +@1=Очки голода: +@1 -Saturation points: +@1=Очки сытости: +@1 -Deals damage when falling=Наносит урон при падении -Grows on grass blocks or dirt=Растёт на блоках травы или грязи -Grows on grass blocks, podzol, dirt or coarse dirt=Растёт на блоках травы, подзола, грязи и твёрдой грязи -Flammable=Легковоспламенимо -Zombie view range: -50%=Дальность зрения зомби: -50% -Skeleton view range: -50%=Дальность зрения скелета: -50% -Creeper view range: -50%=Дальность зрения крипера: -50% -Damage: @1=Урон: @1 -Damage (@1): @2=Урон (@1): @2 -Healing: @1=Исцеление: @1 -Healing (@1): @2=Исцеление (@1): @2 -Full punch interval: @1s=Интервал полного удара: @1 с -Contact damage: @1 per second=Урон при контакте: @1 в секунду -Contact healing: @1 per second=Исцеление при контакте: @1 в секунду -Drowning damage: @1=Урон при падении: @1 -Bouncy (@1%)=Упругость (@1%) -Luminance: @1=Свечение: @1 -Slippery=Скользкость -Climbable=Можно карабкаться -Climbable (only downwards)=Можно спускаться -No jumping=Нельзя прыгать -No swimming upwards=Нельзя плыть вверх -No rising=Нельзя подниматься -Fall damage: @1%=Урон при падении: @1% -Fall damage: +@1%=Урон при падении: +@1% -No fall damage=Нет урона при падении -Mining speed: @1=Скорость добычи: @1 -Very fast=очень высокая -Extremely fast=ужасно высокая -Fast=высокая -Slow=низкая -Very slow=очень низкая -Painfully slow=мучительно низкая -Mining durability: @1=Долговечность добычи: @1 -Block breaking strength: @1=Сила разбиения блоков: @1 -@1 uses=@1 раз(а) -Unlimited uses=не ограничено diff --git a/mods/HELP/mcl_tt/locale/template.txt b/mods/HELP/mcl_tt/locale/template.txt deleted file mode 100644 index 6fb735b13..000000000 --- a/mods/HELP/mcl_tt/locale/template.txt +++ /dev/null @@ -1,48 +0,0 @@ -# textdomain: mcl_tt -Head armor= -Torso armor= -Legs armor= -Feet armor= -Armor points: @1= -Armor durability: @1= -Protection: @1%= -Hunger points: +@1= -Saturation points: +@1= -Deals damage when falling= -Grows on grass blocks or dirt= -Grows on grass blocks, podzol, dirt or coarse dirt= -Flammable= -Zombie view range: -50%= -Skeleton view range: -50%= -Creeper view range: -50%= -Damage: @1= -Damage (@1): @2= -Healing: @1= -Healing (@1): @2= -Full punch interval: @1s= -Contact damage: @1 per second= -Contact healing: @1 per second= -Drowning damage: @1= -Bouncy (@1%)= -Luminance: @1= -Slippery= -Climbable= -Climbable (only downwards)= -No jumping= -No swimming upwards= -No rising= -Fall damage: @1%= -Fall damage: +@1%= -No fall damage= -Mining speed: @1= -Very fast= -Extremely fast= -Fast= -Slow= -Very slow= -Painfully slow= -Mining durability: @1= -Block breaking strength: @1= -@1 uses= -Unlimited uses= -Durability: @1= diff --git a/mods/HELP/mcl_tt/mod.conf b/mods/HELP/mcl_tt/mod.conf deleted file mode 100644 index e442e1320..000000000 --- a/mods/HELP/mcl_tt/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_tt -author = Wuzzy -description = Add MCL2 tooltips -depends = tt, mcl_enchanting, mcl_colors diff --git a/mods/HELP/mcl_tt/snippets_base.lua b/mods/HELP/mcl_tt/snippets_base.lua deleted file mode 100644 index 4e200d539..000000000 --- a/mods/HELP/mcl_tt/snippets_base.lua +++ /dev/null @@ -1,250 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - ---[[local function get_min_digtime(caps) - local mintime - local unique = true - local maxlevel = caps.maxlevel - if not maxlevel then - maxlevel = 1 - end - if maxlevel > 1 then - unique = false - end - if caps.times then - for r=1,3 do - local time = caps.times[r] - if time and maxlevel > 1 then - time = time / maxlevel - end - if time and ((not mintime) or (time < mintime)) then - if mintime and (time < mintime) then - unique = false - end - mintime = time - end - end - end - return mintime, unique -end]] - -local function newline(str) - if str ~= "" then - str = str .. "\n" - end - return str -end - --- Digging capabilities of tool -tt.register_snippet(function(itemstring, toolcaps) - local def = minetest.registered_items[itemstring] - if not toolcaps then - return - end - local groupcaps = toolcaps.groupcaps - if not groupcaps then - return - end - local minestring = "" - local capstr = "" - local caplines = 0 - for _,v in pairs(groupcaps) do - local speedstr = "" - local miningusesstr = "" - -- Mining capabilities - caplines = caplines + 1 - local maxlevel = v.maxlevel - if not maxlevel then - -- Default from tool.h - maxlevel = 1 - end - - -- Digging speed - local speed_class = def.groups and def.groups.dig_speed_class - if speed_class == 1 then - speedstr = S("Painfully slow") - elseif speed_class == 2 then - speedstr = S("Very slow") - elseif speed_class == 3 then - speedstr = S("Slow") - elseif speed_class == 4 then - speedstr = S("Fast") - elseif speed_class == 5 then - speedstr = S("Very fast") - elseif speed_class == 6 then - speedstr = S("Extremely fast") - elseif speed_class == 7 then - speedstr = S("Instantaneous") - end - - -- Number of mining uses - local base_uses = v.uses - if not base_uses then - -- Default from tool.h - base_uses = 20 - end - if def._doc_items_durability == nil and base_uses > 0 then - local real_uses = base_uses * math.pow(3, maxlevel) - if real_uses < 65535 then - miningusesstr = S("@1 uses", real_uses) - else - miningusesstr = S("Unlimited uses") - end - end - - if speedstr ~= "" then - capstr = capstr .. S("Mining speed: @1", speedstr) .. "\n" - end - if miningusesstr ~= "" then - capstr = capstr .. S("Mining durability: @1", miningusesstr) .. "\n" - end - - -- Only show one group at max - break - end - if caplines > 0 then - -- Capabilities - minestring = minestring .. capstr - -- Max. drop level - local mdl = toolcaps.max_drop_level - if not toolcaps.max_drop_level then - mdl = 0 - end - minestring = minestring .. S("Block breaking strength: @1", mdl) - end - - local weaponstring = "" - -- Weapon stats - if toolcaps.damage_groups then - for group, damage in pairs(toolcaps.damage_groups) do - local msg = "" - if group == "fleshy" then - if damage >= 0 then - msg = S("Damage: @1", damage) - else - msg = S("Healing: @1", math.abs(damage)) - end - end - weaponstring = newline(weaponstring) - weaponstring = weaponstring .. msg - end - local full_punch_interval = toolcaps.full_punch_interval - if not full_punch_interval then - full_punch_interval = 1 - end - weaponstring = newline(weaponstring) - weaponstring = weaponstring .. S("Full punch interval: @1s", string.format("%.2f", full_punch_interval)) - end - - local ret - if minetest.get_item_group(itemstring, "weapon") == 1 then - ret = weaponstring - ret = newline(ret) - ret = ret .. minestring - else - ret = minestring - ret = newline(ret) - ret = ret .. weaponstring - end - - if ret == "" then - ret = nil - end - return ret -end) - --- Weapon stats ---[[tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] -end)]] - --- Food -tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] - local desc - if def._tt_food then - desc = S("Food item") - if def._tt_food_hp then - local msg = S("+@1 food points", def._tt_food_hp) - desc = desc .. "\n" .. msg - end - end - return desc -end) - --- Node info -tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] - local desc = "" - - -- Health-related node facts - if def.damage_per_second then - if def.damage_per_second > 0 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Contact damage: @1 per second", def.damage_per_second)) - elseif def.damage_per_second < 0 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("Contact healing: @1 per second", math.abs(def.damage_per_second))) - end - end - if def.drowning and def.drowning ~= 0 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Drowning damage: @1", def.drowning)) - end - local tmp = minetest.get_item_group(itemstring, "fall_damage_add_percent") - if tmp > 0 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Fall damage: +@1%", tmp)) - elseif tmp == -100 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("No fall damage")) - elseif tmp < 0 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Fall damage: @1%", tmp)) - end - - -- Movement-related node facts - if minetest.get_item_group(itemstring, "disable_jump") == 1 and not def.climbable then - if def.liquidtype == "none" then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No jumping")) - elseif minetest.get_item_group(itemstring, "fake_liquid") == 0 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No swimming upwards")) - else - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No rising")) - end - end - if def.climbable then - if minetest.get_item_group(itemstring, "disable_jump") == 1 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable (only downwards)")) - else - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable")) - end - end - if minetest.get_item_group(itemstring, "slippery") >= 1 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Slippery")) - end - local tmp = minetest.get_item_group(itemstring, "bouncy") - if tmp >= 1 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Bouncy (@1%)", tmp)) - end - - -- Node appearance - tmp = def.light_source - if tmp and tmp >= 1 then - desc = newline(desc) - desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Luminance: @1", tmp)) - end - - - if desc == "" then - desc = nil - end - return desc, false -end) - diff --git a/mods/HELP/mcl_tt/snippets_mcl.lua b/mods/HELP/mcl_tt/snippets_mcl.lua deleted file mode 100644 index 825776f5f..000000000 --- a/mods/HELP/mcl_tt/snippets_mcl.lua +++ /dev/null @@ -1,114 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Armor -tt.register_snippet(function(itemstring) - --local def = minetest.registered_items[itemstring] - local s = "" - local head = minetest.get_item_group(itemstring, "armor_head") - local torso = minetest.get_item_group(itemstring, "armor_torso") - local legs = minetest.get_item_group(itemstring, "armor_legs") - local feet = minetest.get_item_group(itemstring, "armor_feet") - if head > 0 then - s = s .. S("Head armor") - end - if torso > 0 then - s = s .. S("Torso armor") - end - if legs > 0 then - s = s .. S("Legs armor") - end - if feet > 0 then - s = s .. S("Feet armor") - end - if s == "" then - s = nil - end - return s -end) -tt.register_snippet(function(itemstring, _, itemstack) - --local def = minetest.registered_items[itemstring] - local s = "" - local use = minetest.get_item_group(itemstring, "mcl_armor_uses") - local pts = minetest.get_item_group(itemstring, "mcl_armor_points") - if pts > 0 then - s = s .. S("Armor points: @1", pts) - s = s .. "\n" - end - if itemstack then - local unbreaking = mcl_enchanting.get_enchantment(itemstack, "unbreaking") - if unbreaking > 0 then - use = math.floor(use / (0.6 + 0.4 / (unbreaking + 1))) - end - end - if use > 0 then - s = s .. S("Armor durability: @1", use) - end - if s == "" then - s = nil - end - return s -end) --- Horse armor -tt.register_snippet(function(itemstring) - local armor_g = minetest.get_item_group(itemstring, "horse_armor") - if armor_g and armor_g > 0 then - return S("Protection: @1%", 100 - armor_g) - end -end) - -tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] - local s = "" - if def.groups.eatable and def.groups.eatable > 0 then - s = s .. S("Hunger points: +@1", def.groups.eatable) - end - if def._mcl_saturation and def._mcl_saturation > 0 then - if s ~= "" then - s = s .. "\n" - end - s = s .. S("Saturation points: +@1", string.format("%.1f", def._mcl_saturation)) - end - if s == "" then - s = nil - end - return s -end) - -tt.register_snippet(function(itemstring) - --local def = minetest.registered_items[itemstring] - if minetest.get_item_group(itemstring, "crush_after_fall") == 1 then - return S("Deals damage when falling"), mcl_colors.YELLOW - end -end) - -tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] - if def.groups.place_flowerlike == 1 then - return S("Grows on grass blocks or dirt") - elseif def.groups.place_flowerlike == 2 then - return S("Grows on grass blocks, podzol, dirt or coarse dirt") - end -end) - -tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] - if def.groups.flammable then - return S("Flammable") - end -end) - -tt.register_snippet(function(itemstring) - if itemstring == "mcl_heads:zombie" then - return S("Zombie view range: -50%") - elseif itemstring == "mcl_heads:skeleton" then - return S("Skeleton view range: -50%") - elseif itemstring == "mcl_heads:creeper" then - return S("Creeper view range: -50%") - end -end) - -tt.register_snippet(function(itemstring, _, itemstack) - if itemstring:sub(1, 23) == "mcl_fishing:fishing_rod" or itemstring:sub(1, 12) == "mcl_bows:bow" then - return S("Durability: @1", S("@1 uses", mcl_util.calculate_durability(itemstack or ItemStack(itemstring)))) - end -end) diff --git a/mods/HELP/modpack.conf b/mods/HELP/modpack.conf deleted file mode 100644 index b53ceb61e..000000000 --- a/mods/HELP/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = HELP -description = Meta-modpack containing help-related mods for MineClone 2 diff --git a/mods/HELP/tt/API.md b/mods/HELP/tt/API.md deleted file mode 100644 index 37f34d335..000000000 --- a/mods/HELP/tt/API.md +++ /dev/null @@ -1,38 +0,0 @@ -# Tooltip API -This API explains how to handle the extended item tooltips (`description` field). - -## Fields - -Add these to the item definition. - -* `_tt_ignore`: If `true`, the `description` of this item won't be altered at all -* `_tt_help`: Custom help text - -Once this mod had overwritten the `description` field of an item was overwritten, it will save the original (unaltered) `description` in the `_tt_original_description` field. - -## `tt.register_snippet(func)` - -Register a custom snippet function. -`func` is a function of the form `func(itemstring, tool_capabilities, itemstack)`. -It will be called for (nearly) every itemstring at startup and when `tt.reload_itemstack_description` is called for an itemstack. -The `itemstack` parameter is only present when the snippet is called via `tt.reload_itemstack_description` and contains the itemstack. - -Returns: Two values, the first one is required. -1st return value: A string you want to append to this item or `nil` if nothing shall be appended. -2nd return value: If nil, `tt` will take of the text color. If a ColorString in `"#RRGGBB"` format, entire text is colorized in this color. Return `false` to force `tt` to not apply text any colorization (useful if you want to call `minetest.colorize` yourself. - -Example: - -``` -tt.register_snippet(function(itemstring) - if minetest.get_item_group(itemstring, "magic") == 1 then - return "This item is magic" - end -end) -``` - -## `tt.reload_itemstack_description(itemstack)` - -This function will dynamically reload the itemstack description, -it becomes handy when `ìtemstack:get_meta():set_tool_capabilities(...)` was used -or if some snippets are based on metadata. diff --git a/mods/HELP/tt/README.md b/mods/HELP/tt/README.md deleted file mode 100644 index f15599718..000000000 --- a/mods/HELP/tt/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Extended Tooltip (`tt`) -This mod extends the tooltip of items to add more informative texts. - -The mod itself does nothing and is meant to be integrated into -games to use the API to define custom tooltips (see `API.md`). - -## License -MIT License. diff --git a/mods/HELP/tt/init.lua b/mods/HELP/tt/init.lua deleted file mode 100644 index f2b83b612..000000000 --- a/mods/HELP/tt/init.lua +++ /dev/null @@ -1,81 +0,0 @@ -tt = {} -tt.COLOR_DEFAULT = mcl_colors.GREEN -tt.COLOR_DANGER = mcl_colors.YELLOW -tt.COLOR_GOOD = mcl_colors.GREEN -tt.NAME_COLOR = mcl_colors.YELLOW - --- API -tt.registered_snippets = {} - -function tt.register_snippet(func) - table.insert(tt.registered_snippets, func) -end - -function tt.register_priority_snippet(func) - table.insert(tt.registered_snippets, 1, func) -end - -dofile(minetest.get_modpath(minetest.get_current_modname()).."/snippets.lua") - --- Apply item description updates - -local function apply_snippets(desc, itemstring, toolcaps, itemstack) - local first = true - -- Apply snippets - for s=1, #tt.registered_snippets do - local str, snippet_color = tt.registered_snippets[s](itemstring, toolcaps, itemstack) - if snippet_color == nil then - snippet_color = tt.COLOR_DEFAULT - end - if str then - if first then - first = false - end - desc = desc .. "\n" - if snippet_color then - desc = desc .. minetest.colorize(snippet_color, str) - else - desc = desc .. str - end - end - end - return desc -end - -local function should_change(itemstring, def) - return itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def and def.description and def.description ~= "" and def._tt_ignore ~= true -end - -local function append_snippets() - for itemstring, def in pairs(minetest.registered_items) do - if should_change(itemstring, def) then - local orig_desc = def.description - local desc = apply_snippets(orig_desc, itemstring, def.tool_capabilities, nil) - if desc ~= orig_desc then - minetest.override_item(itemstring, { description = desc, _tt_original_description = orig_desc }) - end - end - end -end - -minetest.register_on_mods_loaded(append_snippets) - -function tt.reload_itemstack_description(itemstack) - local itemstring = itemstack:get_name() - local def = itemstack:get_definition() - local meta = itemstack:get_meta() - if def and def._mcl_generate_description then - def._mcl_generate_description(itemstack) - elseif should_change(itemstring, def) then - local toolcaps - if def.tool_capabilities then - toolcaps = itemstack:get_tool_capabilities() - end - local orig_desc = def._tt_original_description or def.description - if meta:get_string("name") ~= "" then - orig_desc = minetest.colorize(tt.NAME_COLOR, meta:get_string("name")) - end - local desc = apply_snippets(orig_desc, itemstring, toolcaps or def.tool_capabilities, itemstack) - meta:set_string("description", desc) - end -end diff --git a/mods/HELP/tt/mod.conf b/mods/HELP/tt/mod.conf deleted file mode 100644 index 2a260772d..000000000 --- a/mods/HELP/tt/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = tt -author = Wuzzy -description = Support for custom tooltip extensions for items -depends = mcl_colors diff --git a/mods/HELP/tt/snippets.lua b/mods/HELP/tt/snippets.lua deleted file mode 100644 index 694b22513..000000000 --- a/mods/HELP/tt/snippets.lua +++ /dev/null @@ -1,11 +0,0 @@ --- CUSTOM SNIPPETS -- - --- Custom text (_tt_help) -tt.register_snippet(function(itemstring) - local def = minetest.registered_items[itemstring] - if def._tt_help then - return def._tt_help - end -end) - - diff --git a/mods/HUD/awards/LICENSE.txt b/mods/HUD/awards/LICENSE.txt deleted file mode 100644 index 4362b4915..000000000 --- a/mods/HUD/awards/LICENSE.txt +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. 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 not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the 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 -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library 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. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/mods/HUD/awards/api.lua b/mods/HUD/awards/api.lua deleted file mode 100644 index 49b11a6cf..000000000 --- a/mods/HUD/awards/api.lua +++ /dev/null @@ -1,546 +0,0 @@ --- AWARDS --- --- Copyright (C) 2013-2015 rubenwardy --- 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. --- 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 Lesser General Public License for more details. --- You should have received a copy of the GNU Lesser General Public License along --- with this program; if not, write to the Free Software Foundation, Inc., --- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- - -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - --- The global award namespace -awards = { - show_mode = "hud", -} - -dofile(modpath.."/api_helpers.lua") - --- Table Save Load Functions -function awards.save() - local file = io.open(minetest.get_worldpath().."/awards.txt", "w") - if file then - file:write(minetest.serialize(awards.players)) - file:close() - end -end - -function awards.init() - awards.players = awards.load() - awards.def = {} - awards.trigger_types = {} - awards.on = {} - awards.on_unlock = {} -end - -function awards.load() - local file = io.open(minetest.get_worldpath().."/awards.txt", "r") - if file then - local table = minetest.deserialize(file:read("*all")) - if type(table) == "table" then - return table - end - end - return {} -end - -function awards.register_trigger(name, func) - awards.trigger_types[name] = func - awards.on[name] = {} - awards["register_on_"..name] = function(func) - table.insert(awards.on[name], func) - end -end - -function awards.run_trigger_callbacks(player, data, trigger, table_func) - for i = 1, #awards.on[trigger] do - local res = nil - local entry = awards.on[trigger][i] - if type(entry) == "function" then - res = entry(player, data) - elseif type(entry) == "table" and entry.award then - res = table_func(entry) - end - - if res then - awards.unlock(player:get_player_name(), res) - end - end -end - -function awards.increment_item_counter(data, field, itemname, count) - local name_split = string.split(itemname, ":") - if #name_split ~= 2 then - return false - end - local mod = name_split[1] - local item = name_split[2] - - if data and field and mod and item then - awards.assertPlayer(data) - awards.tbv(data, field) - awards.tbv(data[field], mod) - awards.tbv(data[field][mod], item, 0) - - data[field][mod][item] = data[field][mod][item] + (count or 1) - return true - else - return false - end -end - -function awards.get_item_count(data, field, itemname) - local name_split = string.split(itemname, ":") - if #name_split ~= 2 then - return false - end - local mod = name_split[1] - local item = name_split[2] - - if data and field and mod and item then - awards.assertPlayer(data) - awards.tbv(data, field) - awards.tbv(data[field], mod) - awards.tbv(data[field][mod], item, 0) - return data[field][mod][item] - end -end - -function awards.get_total_item_count(data, field) - local i = 0 - if data and field then - awards.assertPlayer(data) - awards.tbv(data, field) - for mod,_ in pairs(data[field]) do - awards.tbv(data[field], mod) - for item,_ in pairs(data[field][mod]) do - awards.tbv(data[field][mod], item, 0) - i = i + data[field][mod][item] - end - end - end - return i -end - -function awards.register_on_unlock(func) - table.insert(awards.on_unlock, func) -end - --- API Functions -function awards._additional_triggers(name, def) - -- Depreciated! -end - -function awards.register_achievement(name, def) - def.name = name - - -- Add Triggers - if def.trigger and def.trigger.type then - local func = awards.trigger_types[def.trigger.type] - - if func then - func(def) - else - awards._additional_triggers(name, def) - end - end - - -- Add Award - awards.def[name] = def - - local tdef = awards.def[name] - if def.description == nil and tdef.getDefaultDescription then - def.description = tdef:getDefaultDescription() - end -end - -function awards.enable(name) - local data = awards.player(name) - if data then - data.disabled = nil - end -end - -function awards.disable(name) - local data = awards.player(name) - if data then - data.disabled = true - end -end - -function awards.clear_player(name) - awards.players[name] = {} -end - --- Returns true if award exists, false otherwise -function awards.exists(award) - return awards.def[award] ~= nil -end - --- This function is called whenever a target condition is met. --- It checks if a player already has that achievement, and if they do not, --- it gives it to them ----------------------------------------------- ---awards.unlock(name, award) --- name - the name of the player --- award - the name of the award to give -function awards.unlock(name, award) - -- Access Player Data - local data = awards.players[name] - local awdef = awards.def[award] - - -- Perform checks - if not data then - return - end - if not awdef then - return - end - if data.disabled then - return - end - awards.tbv(data,"unlocked") - - -- Don't give the achievement if it has already been given - if data.unlocked[award] and data.unlocked[award] == award then - return - end - - -- Get award - minetest.log("action", name.." has gotten award "..award) - minetest.chat_send_all(S("@1 has made the achievement @2", name, minetest.colorize(mcl_colors.GREEN, "[" .. (awdef.title or award) .. "]"))) - data.unlocked[award] = award - awards.save() - - -- Give Prizes - if awdef and awdef.prizes then - for i = 1, #awdef.prizes do - local itemstack = ItemStack(awdef.prizes[i]) - if not itemstack:is_empty() then - local receiverref = minetest.get_player_by_name(name) - if receiverref then - receiverref:get_inventory():add_item("main", itemstack) - end - end - end - end - - -- Run callbacks - if awdef.on_unlock and awdef.on_unlock(name, awdef) then - return - end - for _, callback in pairs(awards.on_unlock) do - if callback(name, awdef) then - return - end - end - - -- Get Notification Settings - local title = awdef.title or award - local desc = awdef.description or "" - local background = awdef.background or "awards_bg_default.png" - local icon = awdef.icon or "awards_unknown.png" - local sound = awdef.sound - if sound == nil then - -- Explicit check for nil because sound could be `false` to disable it - sound = {name="awards_got_generic", gain=0.25} - end - local custom_announce = awdef.custom_announce - if not custom_announce then - if awdef.secret then - custom_announce = S("Secret achievement gotten:") - else - custom_announce = S("Achievement gotten:") - end - end - - -- Do Notification - if sound then - -- Enforce sound delay to prevent sound spamming - local lastsound = awards.players[name].lastsound - if lastsound == nil or os.difftime(os.time(), lastsound) >= 1 then - minetest.sound_play(sound, {to_player=name}, true) - awards.players[name].lastsound = os.time() - end - end - - if awards.show_mode == "formspec" then - -- use a formspec to send it - minetest.show_formspec(name, "achievements:unlocked", "size[4,2]".. - "image_button_exit[0,0;4,2;"..background..";close1; ]".. - "image_button_exit[0.2,0.8;1,1;"..icon..";close2; ]".. - "label[1.1,1;"..title.."]".. - "label[0.3,0.1;"..custom_announce.."]") - elseif awards.show_mode == "chat" then - local chat_announce - if awdef.secret == true then - chat_announce = S("Secret achievement gotten: @1") - else - chat_announce = S("Achievement gotten: @1") - end - -- use the chat console to send it - minetest.chat_send_player(name, string.format(chat_announce, title)) - if desc~="" then - minetest.chat_send_player(name, desc) - end - else - local player = minetest.get_player_by_name(name) - local one = player:hud_add({ - hud_elem_type = "image", - name = "award_bg", - scale = {x = 1, y = 1}, - text = background, - position = {x = 0.5, y = 0}, - offset = {x = 0, y = 138}, - alignment = {x = 0, y = -1}, - z_index = 101, - }) - local hud_announce - if awdef.secret == true then - hud_announce = S("Secret achievement gotten!") - else - hud_announce = S("Achievement gotten!") - end - local two = player:hud_add({ - hud_elem_type = "text", - name = "award_au", - number = 0xFFFF00, - scale = {x = 100, y = 20}, - text = hud_announce, - position = {x = 0.5, y = 0}, - offset = {x = 0, y = 40}, - alignment = {x = 0, y = -1}, - z_index = 102, - }) - local three = player:hud_add({ - hud_elem_type = "text", - name = "award_title", - number = 0xFFFFFF, - scale = {x = 100, y = 20}, - text = title, - position = {x = 0.5, y = 0}, - offset = {x = 30, y = 100}, - alignment = {x = 0, y = -1}, - z_index = 102, - }) - --[[ We use a statbar instead of image here because statbar allows us to scale the image - properly. Note that number is 2, thus leading to a single full image. - Yes, it's a hack, but it works for all texture sizes and is needed because the image - type does NOT allow us a simple scaling. ]] - local four = player:hud_add({ - hud_elem_type = "statbar", - name = "award_icon", - size = {x=64, y = 64}, - number = 2, - text = icon, - position = {x = 0.5, y = 0}, - offset = {x = -110, y = 62}, - alignment = {x = 0, y = 0}, - direction = 0, - z_index = 102, - }) - minetest.after(3, function(name) - local player = minetest.get_player_by_name(name) - if not player then - return - end - player:hud_remove(one) - player:hud_remove(two) - player:hud_remove(three) - player:hud_remove(four) - end, player:get_player_name()) - end -end - --- Backwards compatibility -awards.give_achievement = awards.unlock - ---[[minetest.register_chatcommand("gawd", { - params = "award name", - description = "gawd: give award to self", - func = function(name, param) - awards.unlock(name,param) - end -})]]-- - -function awards.getFormspec(name, to, sid) - local formspec = "" - local listofawards = awards._order_awards(name) - local playerdata = awards.players[name] - - if #listofawards == 0 then - formspec = formspec .. "label[3.9,1.5;"..minetest.formspec_escape(S("Error: No awards available.")).."]" - formspec = formspec .. "button_exit[4.2,2.3;3,1;close;"..minetest.formspec_escape(S("OK")).."]" - return formspec - end - - -- Sidebar - if sid then - local item = listofawards[sid+0] - local def = awards.def[item.name] - - if def and def.secret and not item.got then - formspec = formspec .. "label[1,2.75;"..minetest.formspec_escape(S("(Secret achievement)")).."]".. - "image[1,0;3,3;awards_unknown.png]" - if def and def.description then - formspec = formspec .. "textarea[0.25,3.25;4.8,1.7;;"..minetest.formspec_escape(S("Get this achievement to find out what it is."))..";]" - end - else - local title = item.name - if def and def.title then - title = def.title - end - local status - if item.got then - status = S("@1 (got)", title) - else - status = title - end - formspec = formspec .. "label[1,2.75;" .. - minetest.formspec_escape(status) .. - "]" - if def and def.icon then - formspec = formspec .. "image[1,0;3,3;" .. def.icon .. "]" - end - local barwidth = 4.6 - local perc = nil - local label = nil - if def.getProgress and playerdata then - local res = def:getProgress(playerdata) - perc = res.perc - label = res.label - end - if perc then - if perc > 1 then - perc = 1 - end - formspec = formspec .. "background[0,4.80;" .. barwidth ..",0.3;awards_progress_gray.png;false]" - if perc > 0 then - formspec = formspec .. "background[0,4.80;" .. (barwidth * perc) ..",0.3;awards_progress_green.png;false]" - end - if label then - formspec = formspec .. "label[1.75,4.63;" .. minetest.formspec_escape(label) .. "]" - end - end - if def and def.description then - formspec = formspec .. "textarea[0.25,3.25;4.8,1.7;;"..minetest.formspec_escape(def.description)..";]" - end - end - end - - -- Create list box - formspec = formspec .. - "textlist[4.75,0;6,5;awards;" - local first = true - for _,award in pairs(listofawards) do - local def = awards.def[award.name] - if def then - if not first then - formspec = formspec .. "," - end - first = false - - if def.secret and not award.got then - formspec = formspec .. "#707070" .. minetest.formspec_escape(S("(Secret Award)")) - else - local title = award.name - if def and def.title then - title = def.title - end - if award.got then - formspec = formspec .. minetest.formspec_escape(title) - else - formspec = formspec .. "#ACACAC" .. minetest.formspec_escape(title) - end - end - end - end - return formspec .. ";"..sid.."]" -end - -function awards.show_to(name, to, sid, text) - if name == "" or name == nil then - name = to - end - if name == to and awards.player(to).disabled then - minetest.chat_send_player(S("You've disabled awards. Type /awards enable to reenable.")) - return - end - if text then - local listofawards = awards._order_awards(name) - if #listofawards == 0 then - minetest.chat_send_player(to, S("Error: No awards available.")) - return - elseif not awards.players[name] or not awards.players[name].unlocked then - minetest.chat_send_player(to, S("You have not gotten any awards.")) - return - end - minetest.chat_send_player(to, S("@1’s awards:", name)) - - for _, str in pairs(awards.players[name].unlocked) do - local def = awards.def[str] - if def then - if def.title then - if def.description then - minetest.chat_send_player(to, S("@1: @2", def.title, def.description)) - else - minetest.chat_send_player(to, def.title) - end - else - minetest.chat_send_player(to, str) - end - end - end - else - if sid == nil or sid < 1 then - sid = 1 - end - local deco = "" - if minetest.global_exists("default") then - deco = default.gui_bg .. default.gui_bg_img - end - -- Show formspec to user - minetest.show_formspec(to,"awards:awards", - "size[11,5]" .. deco .. - awards.getFormspec(name, to, sid)) - end -end -awards.showto = awards.show_to - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "awards:awards" then - return false - end - if fields.quit then - return true - end - local name = player:get_player_name() - if fields.awards then - local event = minetest.explode_textlist_event(fields.awards) - if event.type == "CHG" then - awards.show_to(name, name, event.index, false) - end - end - - return true -end) - -awards.init() - -minetest.register_on_newplayer(function(player) - local playern = player:get_player_name() - awards.assertPlayer(playern) -end) - -minetest.register_on_shutdown(function() - awards.save() -end) diff --git a/mods/HUD/awards/api_helpers.lua b/mods/HUD/awards/api_helpers.lua deleted file mode 100644 index cd499ab42..000000000 --- a/mods/HUD/awards/api_helpers.lua +++ /dev/null @@ -1,58 +0,0 @@ -function awards.tbv(tb,value,default) - if not default then - default = {} - end - if not tb or type(tb) ~= "table" then - if not value then - value = "[NULL]" - end - minetest.log("error", "awards.tbv - table "..dump(value).." is null, or not a table! Dump: "..dump(tb)) - return - end - if not value then - error("[ERROR] awards.tbv was not used correctly!\n".. - "Value: '"..dump(value).."'\n".. - "Dump:"..dump(tb)) - return - end - if not tb[value] then - tb[value] = default - end -end - -function awards.assertPlayer(playern) - awards.tbv(awards.players, playern) - awards.tbv(awards.players[playern], "name", playern) - awards.tbv(awards.players[playern], "unlocked") - awards.tbv(awards.players[playern], "place") - awards.tbv(awards.players[playern], "count") - awards.tbv(awards.players[playern], "craft") - awards.tbv(awards.players[playern], "eat") - awards.tbv(awards.players[playern], "deaths", 0) - awards.tbv(awards.players[playern], "joins", 0) - awards.tbv(awards.players[playern], "chats", 0) -end - -function awards.player(name) - return awards.players[name] -end - -function awards._order_awards(name) - local done = {} - local retval = {} - local player = awards.player(name) - if player and player.unlocked then - for _,got in pairs(player.unlocked) do - if awards.def[got] then - done[got] = true - table.insert(retval,{name=got,got=true}) - end - end - end - for _,def in pairs(awards.def) do - if not done[def.name] then - table.insert(retval,{name=def.name,got=false}) - end - end - return retval -end diff --git a/mods/HUD/awards/chat_commands.lua b/mods/HUD/awards/chat_commands.lua deleted file mode 100644 index 9b990fd0c..000000000 --- a/mods/HUD/awards/chat_commands.lua +++ /dev/null @@ -1,99 +0,0 @@ --- AWARDS --- --- Copyright (C) 2013-2015 rubenwardy --- 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. --- 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 Lesser General Public License for more details. --- You should have received a copy of the GNU Lesser General Public License along --- with this program; if not, write to the Free Software Foundation, Inc., --- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- - -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_chatcommand("awards", { - params = S("[c|clear|disable|enable]"), - description = S("Show, clear, disable or enable your achievements"), - func = function(name, param) - if param == "clear" then - if awards.player(name).disabled ~= nil then - minetest.chat_send_player(name, S("Awards are disabled, enable them first by using /awards enable!")) - else - awards.clear_player(name) - minetest.chat_send_player(name, - S("All your awards and statistics have been cleared. You can now start again.")) - end - elseif param == "disable" then - awards.disable(name) - minetest.chat_send_player(name, S("You have disabled your achievements.")) - elseif param == "enable" then - awards.enable(name) - minetest.chat_send_player(name, S("You have enabled your achievements.")) - elseif param == "c" then - if awards.player(name).disabled ~= nil then - minetest.chat_send_player(name, S("Awards are disabled, enable them first by using /awards enable!")) - else - awards.show_to(name, name, nil, true) - end - else - if awards.player(name).disabled ~= nil then - minetest.chat_send_player(name, S("Awards are disabled, enable them first by using /awards enable!")) - else - awards.show_to(name, name, nil, false) - end - end - end -}) - -minetest.register_privilege("achievements", { - description = S("Can give achievements to any player"), - give_to_singleplayer = false, - give_to_admin = false, -}) - -minetest.register_chatcommand("achievement", { - params = S("(grant ( | all)) | list"), - privs = { achievements = true }, - description = S("Give achievement to player or list all achievements"), - func = function(name, param) - if param == "list" then - local list = {} - for k,_ in pairs(awards.def) do - table.insert(list, k) - end - table.sort(list) - for a=1, #list do - minetest.chat_send_player(name, S("@1 (@2)", awards.def[list[a]].title, list[a])) - end - return true - end - local keyword, playername, achievement = string.match(param, "([^ ]+) (.+) (.+)") - if not keyword or not playername or not achievement then - return false, S("Invalid syntax.") - end - if keyword ~= "grant" then - return false, S("Invalid action.") - end - local player = minetest.get_player_by_name(playername) - if not player then - return false, S("Player is not online.") - end - if achievement == "all" then - for k,_ in pairs(awards.def) do - awards.unlock(playername, k) - end - return true, S("Done.") - elseif awards.exists(achievement) then - awards.unlock(playername, achievement) - return true, S("Done.") - else - return false, S("Achievement “@1” does not exist.", achievement) - end - end -}) - diff --git a/mods/HUD/awards/init.lua b/mods/HUD/awards/init.lua deleted file mode 100644 index 9b46fd066..000000000 --- a/mods/HUD/awards/init.lua +++ /dev/null @@ -1,24 +0,0 @@ --- AWARDS --- --- Copyright (C) 2013-2015 rubenwardy --- 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. --- 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 Lesser General Public License for more details. --- You should have received a copy of the GNU Lesser General Public License along --- with this program; if not, write to the Free Software Foundation, Inc., --- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(modpath.."/api.lua") -dofile(modpath.."/chat_commands.lua") -dofile(modpath.."/sfinv.lua") -dofile(modpath.."/unified_inventory.lua") -dofile(modpath.."/triggers.lua") - diff --git a/mods/HUD/awards/locale/awards.de.tr b/mods/HUD/awards/locale/awards.de.tr deleted file mode 100644 index 19db5e0be..000000000 --- a/mods/HUD/awards/locale/awards.de.tr +++ /dev/null @@ -1,64 +0,0 @@ -# textdomain:awards -@1: @2=@1: @2 -@1 (got)=@1 (erhalten) -@1’s awards:=Auszeichnungen von @: -(Secret Award)=(Geheime Auszeichnung) -Achievement gotten!=Auszeichnung erhalten! -Achievement gotten:=Auszeichnung erhalten: -Achievement gotten: @1=Auszeichnung erhalten: @1 -Secret achievement gotten!=Geheime Auszeichnung erhalten! -Secret achievement gotten:=Geheime Auszeichnung erhalten: -Secret achievement gotten: @1=Geheime Auszeichnung erhalten: @1 -Get this achievement to find out what it is.=Verdienen Sie sich diese Auszeichnung, um herauszufinden, was sie ist. -You have not gotten any awards.=Sie haben noch keine Auszeichnungen. -You've disabled awards. Type /awards enable to reenable.=Sie haben die Auszeichnungen deaktiviert. Geben Sie »/awards enable« ein, um sie wieder zu aktivieren. -= -= -Achievement not found.=Auszeichnung nicht gefunden. -All your awards and statistics have been cleared. You can now start again.=All Ihre Auszeichnugen und Statistiken wurden zurückgesetzt. Sie können nun von vorne anfangen. -Get the achievements statistics for the given player or yourself=Die Statistik der Auszeichnungen eines Spielers zeigen -List awards in chat (deprecated)=Auszeichnungen im Chat anzeigen (veraltet) -Show, clear, disable or enable your achievements=Zeigen, löschen, deaktivieren oder aktivieren Sie Ihre Auszeichnungen -You have disabled your achievements.=Sie haben Ihre Auszeichnungen deaktiviert. -You have enabled your achievements.=Sie haben Ihre Auszeichnungen aktiviert. -[c|clear|disable|enable]=[c|clear|disable|enable] -Awards=Auszeichnungen -@1/@2 crafted=@1/@2 gefertigt -@1/@2 deaths=@1/@2 Tode -@1/@2 dug=@1/@2 abgebaut -@1/@2 game joins=@1/@2 Spielen beigetreten -@1/@2 placed=@1/@2 platziert -Die @1 times.=Sterben Sie @1 mal. -Die.=Sterben Sie. -Craft: @1×@2=Fertigen Sie an: @1×@2 -Craft: @1=Fertigen Sie an: @1 -Mine a block: @1=Bauen Sie einen Block ab: @1 -Mine blocks: @1×@2=Bauen Sie Blöcke ab: @1×@2 -Place a block: @1=Platzieren Sie einen Block: @1 -Place blocks: @1×@2=Platzieren Sie Blöcke: @1×@2 -Join the game.=Treten Sie dem Spiel bei. -Join the game @1 times.=Treten Sie dem Spiel @1 mal bei. -Show details of an achievement=Details einer Auszeichnung anzeigen -OK=OK -Error: No awards available.=Fehler: Keine Auszeichnungen vorhanden. -Eat: @1×@2=Essen Sie: @1×@2 -Eat: @1=Essen Sie: @1 -@1/@2 eaten=@1/@2 gegessen -Place @1 block(s).=Platzieren Sie @1 Blöcke. -Dig @1 block(s).=Bauen Sie @1 Blöcke ab. -Eat @1 item(s).=Essen Sie @1 Dinge. -Craft @1 item(s).=Fertigen Sie @1 Gegenstände. -Can give achievements to any player=Kann Spielern Auszeichnungen vergeben -(grant ( | all)) | list=(grant ( | all)) | list -Give achievement to player or list all achievements=Auszeichnung an Spieler vergeben oder alle Auszeichnungen auflisten -@1 (@2)=@1 (@2) -Invalid syntax.=Ungültige Syntax. -Invalid action.=Ungültige Aktion. -Player is not online.=Spieler ist nicht online. -Done.=Fertig. -Achievement “@1” does not exist.=Auszeichnung »@1« existiert nicht. -@1 has made the achievement @2=@1 hat die Auszeichnung @2 erhalten -Write something in chat.=Schreiben Sie etwas in den Chat. -Write @1 chat messages.=Schreiben Sie @1 Chatnachrichten. -@1/@2 chat messages=@1/@2 Chatnachrichten -Awards are disabled, enable them first by using /awards enable!=Ihre Auszeichnungen sind aktuell deaktiviert, bitte aktivieren Sie diese zuerst indem Sie /awards enable ausführen bevor Sie diesen Befehl erneut verwenden! \ No newline at end of file diff --git a/mods/HUD/awards/locale/awards.es.tr b/mods/HUD/awards/locale/awards.es.tr deleted file mode 100644 index 15e8c4670..000000000 --- a/mods/HUD/awards/locale/awards.es.tr +++ /dev/null @@ -1,51 +0,0 @@ -# textdomain:awards -@1: @2=@1: @2 -@1 (got)=@1 (Completado) -@1’s awards:=Premios de @1: -(Secret Award)=(Premio secreto) -Achievement gotten!=¡Logro conseguido! -Achievement gotten:=Logro conseguido: -Achievement gotten: @1=Logro conseguido: @1 -Secret achievement gotten!=¡Logro secreto conseguido! -Secret achievement gotten:=Logro secreto conseguido: -Secret achievement gotten: @1=Logro secreto conseguido: @1 -Get this achievement to find out what it is.=Obtén este logro para descubrir de qué se trata. -You have not gotten any awards.=No has recibido ningún premio. -You've disabled awards. Type /awards enable to reenable.=Has desactivado los premios. Introduce /awards enable para habilitarlos. -= -= -Achievement not found.=Logro no encontrado. -All your awards and statistics have been cleared. You can now start again.=Todos sus premios y estadísticas han sido borrados. Ahora puede comenzar de nuevo. -Get the achievements statistics for the given player or yourself=Obtén las estadísticas de logros para el jugador dado o para ti mismo -List awards in chat (deprecated)=Lista de premios en el chat (en desuso) -Show, clear, disable or enable your achievements=Muestra, borra, deshabilita o habilita tus logros -You have disabled your achievements.=Has deshabilitado tus logros. -You have enabled your achievements.=Has habilitado tus logros. -[c|clear|disable|enable]=[c|clear|disable|enable] -Awards=Premios -@1/@2 crafted=@1/@2 fabricado(s) -@1/@2 deaths=@1/@2 muertes -@1/@2 dug=@1/@2 excavado -@1/@2 game joins=@1/@2 inicios de sesión -@1/@2 lines of chat=@1/@2 líneas de chat -@1/@2 placed=@1/@2 metido -Die @1 times.=Muere @1 veces. -Die.=Muere. -Craft: @1×@2=Artista: @1×@2 -Craft: @1=Artista: @1 -Mine a block: @1=Mina un bloque: @1 -Mine blocks: @1×@2=Bloques de minas: @1×@2 -Place a block: @1=Coloca un bloque: @1 -Place blocks: @1×@2=Colocar bloques: @1×@2 -Join the game.=Unirse al juego. -Join the game @1 times.=Unirse al juego @1 veces. -Show details of an achievement=Mostrar detalles de un logro -OK=Aceptar -Error: No awards available.=Error: No hay premios disponibles. -Eat: @1×@2=Comer: @1×@2 -Eat: @1=Comer: @1 -@1/@2 eaten=@1/@2 comido -Place @1 block(s).=Posiciona @1 bloque(s). -Dig @1 block(s).=Cava @1 bloque(s). -Eat @1 item(s).=Come @1 alimento(s). -Craft @1 item(s).=Crea @1 artículo(s). diff --git a/mods/HUD/awards/locale/awards.fr.tr b/mods/HUD/awards/locale/awards.fr.tr deleted file mode 100644 index c227a9c07..000000000 --- a/mods/HUD/awards/locale/awards.fr.tr +++ /dev/null @@ -1,61 +0,0 @@ -# textdomain:awards -@1/@2 chat messages=@1/@2 chat messages -@1/@2 crafted=@1/@2 fabrication -@1/@2 deaths=@1/@2 Mort -@1/@2 dug=@1/@2 creusé -@1/@2 game joins=@1/@2 sessions -@1/@2 placed=@1/@2 mis -@1 (got)=@1 (obtenu) -@1: @1=@1: @1 -@1’s awards:=Récompenses de @1: -(Secret Award)=(Récompense Secrètte) -= -= -A Cat in a Pop-Tart?!=A Cat in a Pop-Tart?! -Achievement gotten!=Succès obtenu ! -Achievement gotten:=Succès obtenu : -Achievement gotten: @1=Succès obtenu : @1 -Achievement not found.=Succès inconnu -All your awards and statistics have been cleared. You can now start again.=Toutes vos récompenses et statistiques ont été effacées. Vous pouvez maintenant recommencer. -Awards=Récompenses -Craft: @1×@2=Frabrication: @1×@2 -Craft: @1=Frabrication: @1 -Die @1 times.=Mort @1 fois. -Die.=Mort. -Get the achievements statistics for the given player or yourself=Obtenez les statistiques de succès pour le joueur donné ou vous-même -Join the game @1 times.=Rejoignez le jeu @1 fois. -Join the game.=Rejoignez le jeu. -List awards in chat (deprecated)=Liste des récompenses dans le chat (obsolète) -Place a block: @1=Placer un bloc: @1 -Place blocks: @1×@2=Placer des blocs: @1×@2 -Secret Achievement gotten!=Succès secret obtenu ! -Secret Achievement gotten:=Succès secret obtenu : -Secret Achievement gotten: @1=Succès secret obtenu : @1 -Show details of an achievement=Afficher les détails d'un succès -Show, clear, disable or enable your achievements=Affichez, effacez, désactivez ou activez vos succès -Get this achievement to find out what it is.=Obtenez ce succès pour découvrir de quoi il s'agit. -Write @1 chat messages.=Écrivez @1 messages de chat. -Write something in chat.=Écrivez quelque chose dans le chat. -You have disabled your achievements.=Vous avez désactivé vos succès. -You have enabled your achievements.=Vous avez activé vos succès. -You have not gotten any awards.=Vous n'avez reçu aucune récompense. -You've disabled awards. Type /awards enable to reenable.=Vous avez désactivé les récompenses. Tapez "/awards enable" pour les réactiver. -[c|clear|disable|enable]=[c|clear|disable|enable] -OK=OK -Error: No awards available.=Erreur: aucune récompense disponible. -Eat: @1×@2=Manger: @1×@2 -Eat: @1=Manger: @1 -@1/@2 eaten=@1/@2 mangé -Place @1 block(s).=Placer @1 bloc(s). -Dig @1 block(s).=Creuser @1 bloc(s). -Eat @1 item(s).=Manger @1 aliment(s). -Craft @1 item(s).=Fabriquer @1 objet(s). -Can give achievements to any player=Peut donner des succès à n'importe quel joueur -(grant ( | all)) | list=(grant ( | all)) | list -Give achievement to player or list all achievements=Donner un succès à un joueur ou répertorier tous les succès -@1 (@2)=@1 (@2) -Invalid syntax.=Syntaxe invalide. -Invalid action.=Action invalide. -Player is not online.=Le joueur n'est pas en ligne. -Done.=Terminé. -Achievement “@1” does not exist.=Le succès «@1» n'existe pas. diff --git a/mods/HUD/awards/locale/awards.pl.tr b/mods/HUD/awards/locale/awards.pl.tr deleted file mode 100644 index 76d5b9161..000000000 --- a/mods/HUD/awards/locale/awards.pl.tr +++ /dev/null @@ -1,63 +0,0 @@ -# textdomain:awards -@1/@2 chat messages=@1/@2 wiadomości na czacie -@1/@2 crafted=Wytworzono @1/@2 -@1/@2 deaths=@1/@2 śmierci -@1/@2 dug=Wykopano @1/@2 -@1/@2 game joins=Dołączono do @1/@2 gier -@1/@2 placed=Postawiono @1/@2 -@1 (got)=@1 (zdobyto) -@1: @2=@1: @2 -@1’s awards:=Nagrody @1: -(Secret Award)=(Sekretna nagroda) -= -= -Achievement gotten!=Zdobyto osiągnięcie! -Achievement gotten:=Zdobyto osiągnięcie: -Achievement gotten: @1=Zdobyto osiągnięcie: @1 -Achievement not found.=Nie znaleziono osiągnięcia. -All your awards and statistics have been cleared. You can now start again.=Wszystkie twoje nagrody i statystyki zostały usunięte. Możesz zacząć ponownie. -Awards=Nagrody. -Craft: @1×@2=Wytwórz: @1×@2 -Craft: @1=Wytwórz: @1 -Die @1 times.=Zgiń @1 razy. -Die.=Zgiń. -Get the achievements statistics for the given player or yourself=Zobacz statystyki osiągnięć danego gracza lub siebie -Join the game @1 times.=Dołącz do gry @1 razy. -Join the game.=Dołącz do gry. -List awards in chat (deprecated)=Wypisz nagrody w czacie (przestarzałe) -Place a block: @1=Postaw blok: @1 -Place blocks: @1×@2=Postaw bloki: @1×@2 -Secret achievement gotten!=Zdobyto sekretne osiągnięcie! -Secret achievement gotten:=Zdobyto sekretne osiągnięcie: -Secret achievement gotten: @1=Zdobyto sekretne osiągnięcie: @1 -Show details of an achievement=Pokaż szczegóły osiągnięcia -Show, clear, disable or enable your achievements=Pokaż, wyczyść, wyłącz lub włącz swoje osiągnięcia -Get this achievement to find out what it is.=Zdobądź to osiągnięcie aby dowiedzieć się jakie ono jest. -Write @1 chat messages.=Napisz @1 wiadomości na czacie. -Write something in chat.=Napisz coś na czacie. -You have disabled your achievements.=Twoje osiągnięcia zostały wyłączone. -You have enabled your achievements.=Twoje osiągnięcia zostały włączone. -You have not gotten any awards.=Nie zdobyto żadnych osiągnięć. -You've disabled awards. Type /awards enable to reenable.=Wyłączono osiągnięcia. Napisz /awards by je włączyć. -[c|clear|disable|enable]=[c|clear|disable|enable] -OK=OK -Error: No awards available.=Błąd: Brak dostępnych nagród. -Eat: @1×@2=Zjedz: @1×@2 -Eat: @1=Zjedz: @1 -@1/@2 eaten=Zjedzono @1/@2 -Place @1 block(s).=Postaw bloki: @1. -Dig @1 block(s).=Wykop bloki: @1. -Eat @1 item(s).=Zjedz przedmioty: @1. -Craft @1 item(s).=Wytwórz przedmioty: @1. -Can give achievements to any player=Może przyznawać osiągnięcia dowolnemu graczowi. -(grant ( | all)) | list=(grant ( | all)) | list -Give achievement to player or list all achievements=Daj osiągnięcie graczowi lub wypisz wszystkie osiągnięcia -@1 (@2)=@1 (@2) -Invalid syntax.=Niepoprawna składnia. -Invalid action.=Niepoprawna czynność. -Player is not online.=Gracz nie jest online. -Done.=Gotowe. -Achievement “@1” does not exist.=Osiągnięcie "@1" nie istnieje. -@1 has made the achievement @2=@2 zostało zdobyte przez @1. -Mine a block: @1=Wykop blok: @1 -Mine blocks: @1×@2=Wykop blok: @1×@2 diff --git a/mods/HUD/awards/locale/awards.ru.tr b/mods/HUD/awards/locale/awards.ru.tr deleted file mode 100644 index 8495c270f..000000000 --- a/mods/HUD/awards/locale/awards.ru.tr +++ /dev/null @@ -1,62 +0,0 @@ -# textdomain:awards -@1/@2 chat messages=@1/@2 сообщений чата -@1/@2 crafted=@1/@2 скрафчено -@1/@2 deaths=@1/@2 смертей -@1/@2 dug=@1/@2 выкопано -@1/@2 game joins=@1/@2 присоединений к игре -@1/@2 placed=@1/@2 помещено -@1 (got)=@1 (получено) -@1: @1=@1: @1 -@1’s awards:=Награды @1: -(Secret Award)=(Секретная награда) -=<идентификатор достижения> -=<имя> -A Cat in a Pop-Tart?!=Кот в печеньке?! -Achievement gotten!=Получено достижение! -Achievement gotten:=Получено достижение: -Achievement gotten: @1=Получено достижение: @1 -Achievement not found.=Достижение не найдено. -All your awards and statistics have been cleared. You can now start again.=Ваши награды удалены вместе со всей статистикой. Теперь можно начать всё сначала. -Awards=Награды -Craft: @1×@2=Скрафчено: @1×@2 -Craft: @1=Скрафчено: @1 -Die @1 times.=Умер(ла) @1 раз(а). -Die.=Умер(ла). -Get the achievements statistics for the given player or yourself=Получение статистики достижений для заданного игрока или для себя -Join the game @1 times.=Присоединился(ась) к игре @1 раз(а). -Join the game.=Присоединился(ась) к игре. -List awards in chat (deprecated)=Вывести список наград в чат (устарело). -Place a block: @1=Разметил(а) блок: @1 -Place blocks: @1×@2=Разместил(а) блоки: @1×@2 -Secret Achievement gotten!=Секретное достижение получено! -Secret Achievement gotten:=Секретное достижение получено: -Secret Achievement gotten: @1=Секретное достижение получено: @1 -Show details of an achievement=Показать подробности достижения -Show, clear, disable or enable your achievements=Отобразить, очистить, запретить или разрешить ваши достижения -Get this achievement to find out what it is.=Получите это достижение, чтобы узнать, что это. -Write @1 chat messages.=Написано @1 сообщений(е,я) в чате. -Write something in chat.=Написал(а) что-то в чате. -You have disabled your achievements.=Вы запретили ваши достижения. -You have enabled your achievements.=Вы разрешили ваши достижения. -You have not gotten any awards.=Вы пока не получали наград. -You've disabled awards. Type /awards enable to reenable.=Вы запретили награды. Выполните /awards enable, чтобы разрешить их обратно. -[c|clear|disable|enable]=[c|clear - очистить|disable - запретить|enable - разрешить] -OK=О'кей -Error: No awards available.=Ошибка: Награды недоступны -Eat: @1×@2=Съедено: @1×@2 -Eat: @1=Съедено: @1 -@1/@2 eaten=@1/@2 съедено -Place @1 block(s).=Поместил(а) @1 блок(а,ов). -Dig @1 block(s).=Выкопал(а) @1 блок(а,ов). -Eat @1 item(s).=Съел(а) @1 предмет(а,ов). -Craft @1 item(s).=Скрафтил(а) @1 предмет(а,ов). -Can give achievements to any player=Может выдавать достижения любому игроку -(grant ( | all)) | list=(grant <игрок> (<достижение> | all - всем)) | список -Give achievement to player or list all achievements=Выдать достижение игроку или отобразить все достижения -@1 (@2)=@1 (@2) -Invalid syntax.=Неверный синтаксис. -Invalid action.=Непредусмотренное действие. -Player is not online.=Игрок не подключён. -Done.=Сделано. -Achievement “@1” does not exist.=Достижения “@1” не существует. -@1 has made the achievement @2=@1 получил(а) достижение @2 diff --git a/mods/HUD/awards/locale/template.txt b/mods/HUD/awards/locale/template.txt deleted file mode 100644 index fa05b22b3..000000000 --- a/mods/HUD/awards/locale/template.txt +++ /dev/null @@ -1,64 +0,0 @@ -# textdomain:awards -@1/@2 chat messages= -@1/@2 crafted= -@1/@2 deaths= -@1/@2 dug= -@1/@2 game joins= -@1/@2 placed= -@1 (got)= -@1: @2= -@1’s awards:= -(Secret Award)= -= -= -Achievement gotten!= -Achievement gotten:= -Achievement gotten: @1= -Achievement not found.= -All your awards and statistics have been cleared. You can now start again.= -Awards= -Craft: @1×@2= -Craft: @1= -Die @1 times.= -Die.= -Get the achievements statistics for the given player or yourself= -Join the game @1 times.= -Join the game.= -List awards in chat (deprecated)= -Place a block: @1= -Place blocks: @1×@2= -Secret achievement gotten!= -Secret achievement gotten:= -Secret achievement gotten: @1= -Show details of an achievement= -Show, clear, disable or enable your achievements= -Get this achievement to find out what it is.= -Write @1 chat messages.= -Write something in chat.= -You have disabled your achievements.= -You have enabled your achievements.= -You have not gotten any awards.= -You've disabled awards. Type /awards enable to reenable.= -[c|clear|disable|enable]= -OK= -Error: No awards available.= -Eat: @1×@2= -Eat: @1= -@1/@2 eaten= -Place @1 block(s).= -Dig @1 block(s).= -Eat @1 item(s).= -Craft @1 item(s).= -Can give achievements to any player= -(grant ( | all)) | list= -Give achievement to player or list all achievements= -@1 (@2)= -Invalid syntax.= -Invalid action.= -Player is not online.= -Done.= -Achievement “@1” does not exist.= -@1 has made the achievement @2= -Mine a block: @1= -Mine blocks: @1×@2= -Awards are disabled, enable them first by using /awards enable!= diff --git a/mods/HUD/awards/mod.conf b/mods/HUD/awards/mod.conf deleted file mode 100644 index 1657323e2..000000000 --- a/mods/HUD/awards/mod.conf +++ /dev/null @@ -1,9 +0,0 @@ -name = awards -title = Achievements -author = rubenwardy -description = Adds achievements to Minetest, and an API to register new ones. -license = LGPL 2.1 or later -forum = https://forum.minetest.net/viewtopic.php?t=4870 -version = 2.3.0 -optional_depends = sfinv, unified_inventory -depends = mcl_colors diff --git a/mods/HUD/awards/readme.md b/mods/HUD/awards/readme.md deleted file mode 100644 index 70c650c84..000000000 --- a/mods/HUD/awards/readme.md +++ /dev/null @@ -1,164 +0,0 @@ -# Awards - -by Andrew "Rubenwardy" Ward, LGPL 2.1 or later. - -This mod adds achievements to Minetest. - -Majority of awards are back ported from Calinou's -old fork in Carbone, under same license. - - -# Basic API - -* awards.register_achievement(name, def) - * name: Unique identifier for achievement. You can use anything except "all" - * desciption - * sound [optional] - set a custom sound (SimpleSoundSpec) or `false` to play no sound. - If not specified, a default sound is played - * image [optional] - texture name, eg: award_one.png - * background [optional] - texture name, eg: award_one.png - * trigger [optional] [table] - * type - "dig", "place", "craft", "death", "chat", "join" or "eat" - * dig type: Dig a node. - * node: the dug node type. If nil, all dug nodes are counted - * place type: Place a node. - * node: the placed node type. If nil, all placed nodes are counted - * eat type: Eat an item. - * item: the eaten item type. If nil, all eaten items are counted - * craft type: Craft something. - * item: the crafted item type. If nil, all crafted items are counted - * death type: Die. - * chat type: Write a chat message. - * join type: Join the server. - * (for all types) target - how many times to dig/place/craft/etc. - * See Triggers - * secret [optional] - if true, then player needs to unlock to find out what it is. - * on_unlock [optional] - func(name, def) - * name is player name - * return true to cancel register_on_unlock callbacks and HUD -* awards.register_trigger(name, func(awardname, def)) - * Note: awards.on[name] is automatically created for triggers -* awards.run_trigger_callbacks(player, data, trigger, table_func(entry)) - * Goes through and checks all triggers registered to a trigger type, - unlocking the award if conditions are met. - * data is the player's award data, ie: awards.players[player_name] - * trigger is the name of the trigger type. Ie: awards.on[trigger] - * table_func is called if the trigger is a table - simply return an - award name to unlock it - * See triggers.lua for examples -* awards.increment_item_counter(data, field, itemname) - * add to an item's statistic count - * for example, (data, "place", "default:stone") will add 1 to the number of - times default:stone has been placed. - * data is the player's award data, ie: awards.players[player_name] - * returns true on success, false on failure (eg: cannot get modname and item from itemname) -* awards.register_on_unlock(func(name, def)) - * name is the player name - * def is the award def. - * return true to cancel HUD -* awards.unlock(name, award) - * gives an award to a player - * name is the player name -* awards.exists(award) - * returns true if award exists, false otherwise - -# Included in the Mod - -The API, above, allows you to register awards -and triggers (things that look for events and unlock awards, they need -to be registered in order to get details from award_def.trigger). - -However, all awards and triggers are separate from the API. -They can be found in init.lua and triggers.lua - -## Triggers - -Callbacks (register a function to be run) - -### dig - - trigger = { - type = "dig", - node = "default:dirt", - target = 50 - } - -### place - - trigger = { - type = "place", - node = "default:dirt", - target = 50 - } - -### death - - trigger = { - type = "death", - target = 5 - } - -### chat - - trigger = { - type = "chat", - target = 100 - } - -### join - - trigger = { - type = "join", - target = 100 - } - -### eat - - trigger = { - type = "eat", - item = "default:apple", - target = 100 - } - -## Callbacks relating to triggers - -* awards.register_on_dig(func(player, data)) - * data is player data (see below) - * return award name or null -* awards.register_on_place(func(player, data)) - * data is player data (see below) - * return award name or null -* awards.register_on_eat(func(player, data)) - * data is player data (see below) - * return award name or null -* awards.register_on_death(func(player, data)) - * data is player data (see below) - * return award name or null -* awards.register_on_chat(func(player, data)) - * data is player data (see below) - * return award name or null -* awards.register_on_join(func(player, data) - * data is player data (see below) - * return award name or null - - -# Player Data - -A list of data referenced/hashed by the player's name. -* player name - * name [string] - * count [table] - dig counter - * modname [table] - * itemname [int] - * place [table] - place counter - * modname [table] - * itemname [int] - * craft [table] - craft counter - * modname [table] - * itemname [int] - * eat [table] - eat counter - * modname [table] - * itemname [int] - * deaths - * chats - * joins diff --git a/mods/HUD/awards/sfinv.lua b/mods/HUD/awards/sfinv.lua deleted file mode 100644 index 3b41d29ab..000000000 --- a/mods/HUD/awards/sfinv.lua +++ /dev/null @@ -1,25 +0,0 @@ -if minetest.get_modpath("sfinv") then - local S = minetest.get_translator(minetest.get_current_modname()) - - sfinv.register_page("awards:awards", { - title = S("Awards"), - on_enter = function(self, player, context) - context.awards_idx = 1 - end, - get = function(self, player, context) - local name = player:get_player_name() - return sfinv.make_formspec(player, context, - awards.getFormspec(name, name, context.awards_idx or 1), - false, "size[11,5]") - end, - on_player_receive_fields = function(self, player, context, fields) - if fields.awards then - local event = minetest.explode_textlist_event(fields.awards) - if event.type == "CHG" then - context.awards_idx = event.index - sfinv.set_player_inventory_formspec(player, context) - end - end - end - }) -end diff --git a/mods/HUD/awards/sounds/awards_got_generic.ogg b/mods/HUD/awards/sounds/awards_got_generic.ogg deleted file mode 100644 index 87666c8fe..000000000 Binary files a/mods/HUD/awards/sounds/awards_got_generic.ogg and /dev/null differ diff --git a/mods/HUD/awards/textures/awards_bg_default.png b/mods/HUD/awards/textures/awards_bg_default.png deleted file mode 100644 index 86130d01f..000000000 Binary files a/mods/HUD/awards/textures/awards_bg_default.png and /dev/null differ diff --git a/mods/HUD/awards/textures/awards_bg_mining.png b/mods/HUD/awards/textures/awards_bg_mining.png deleted file mode 100644 index a6987794f..000000000 Binary files a/mods/HUD/awards/textures/awards_bg_mining.png and /dev/null differ diff --git a/mods/HUD/awards/textures/awards_progress_gray.png b/mods/HUD/awards/textures/awards_progress_gray.png deleted file mode 100644 index ea60ae17b..000000000 Binary files a/mods/HUD/awards/textures/awards_progress_gray.png and /dev/null differ diff --git a/mods/HUD/awards/textures/awards_progress_green.png b/mods/HUD/awards/textures/awards_progress_green.png deleted file mode 100644 index 5f2bb3d28..000000000 Binary files a/mods/HUD/awards/textures/awards_progress_green.png and /dev/null differ diff --git a/mods/HUD/awards/textures/awards_template.png b/mods/HUD/awards/textures/awards_template.png deleted file mode 100644 index b29045480..000000000 Binary files a/mods/HUD/awards/textures/awards_template.png and /dev/null differ diff --git a/mods/HUD/awards/textures/awards_ui_icon.png b/mods/HUD/awards/textures/awards_ui_icon.png deleted file mode 100644 index 239ad71ec..000000000 Binary files a/mods/HUD/awards/textures/awards_ui_icon.png and /dev/null differ diff --git a/mods/HUD/awards/textures/awards_unknown.png b/mods/HUD/awards/textures/awards_unknown.png deleted file mode 100644 index b29045480..000000000 Binary files a/mods/HUD/awards/textures/awards_unknown.png and /dev/null differ diff --git a/mods/HUD/awards/triggers.lua b/mods/HUD/awards/triggers.lua deleted file mode 100644 index c7194d2c9..000000000 --- a/mods/HUD/awards/triggers.lua +++ /dev/null @@ -1,403 +0,0 @@ --- AWARDS --- --- Copyright (C) 2013-2015 rubenwardy --- 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. --- 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 Lesser General Public License for more details. --- You should have received a copy of the GNU Lesser General Public License along --- with this program; if not, write to the Free Software Foundation, Inc., --- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- - -local S = minetest.get_translator(minetest.get_current_modname()) - -awards.register_trigger("dig", function(def) - local tmp = { - award = def.name, - node = def.trigger.node, - target = def.trigger.target, - } - table.insert(awards.on.dig, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.node then - itemcount = awards.get_item_count(data, "count", tmp.node) or 0 - else - itemcount = awards.get_total_item_count(data, "count") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 dug", itemcount, tmp.target) - } - end - def.getDefaultDescription = function(self) - if self.trigger.node then - local nname = minetest.registered_nodes[self.trigger.node].description - if nname == nil then - nname = self.trigger.node - end - if self.trigger.target ~= 1 then - return S("Mine blocks: @1×@2", self.trigger.target, nname) - else - return S("Mine a block: @1", nname) - end - else - return S("Mine @1 block(s).", self.trigger.target) - end - end -end) - -awards.register_trigger("place", function(def) - local tmp = { - award = def.name, - node = def.trigger.node, - target = def.trigger.target, - } - table.insert(awards.on.place, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.node then - itemcount = awards.get_item_count(data, "place", tmp.node) or 0 - else - itemcount = awards.get_total_item_count(data, "place") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 placed"), itemcount, tmp.target - } - end - def.getDefaultDescription = function(self) - if self.trigger.node then - local nname = minetest.registered_nodes[self.trigger.node].description - if nname == nil then - nname = self.trigger.node - end - if self.trigger.target ~= 1 then - return S("Place blocks: @1×@2", self.trigger.target, nname) - else - return S("Place a block: @1", nname) - end - else - return S("Place @1 block(s).", self.trigger.target) - end - end -end) - -awards.register_trigger("eat", function(def) - local tmp = { - award = def.name, - item = def.trigger.item, - target = def.trigger.target, - } - table.insert(awards.on.eat, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.item then - itemcount = awards.get_item_count(data, "eat", tmp.item) or 0 - else - itemcount = awards.get_total_item_count(data, "eat") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 eaten", itemcount, tmp.target) - } - end - def.getDefaultDescription = function(self) - if self.trigger.item then - local iname = minetest.registered_items[self.trigger.item].description - if iname == nil then - iname = self.trigger.iode - end - if self.trigger.target ~= 1 then - return S("Eat: @1×@2", self.trigger.target, iname) - else - return S("Eat: @1", iname) - end - else - return S("Eat @1 item(s).", self.trigger.target) - end - end -end) - -awards.register_trigger("death", function(def) - local tmp = { - award = def.name, - target = def.trigger.target, - } - table.insert(awards.on.death, tmp) - def.getProgress = function(self, data) - local itemcount = data.deaths or 0 - return { - perc = itemcount / tmp.target, - label = S("@1/@2 deaths", itemcount, tmp.target) - } - end - def.getDefaultDescription = function(self) - if self.trigger.target ~= 1 then - return S("Die @1 times.", self.trigger.target) - else - return S("Die.") - end - end -end) - -awards.register_trigger("chat", function(def) - local tmp = { - award = def.name, - target = def.trigger.target, - } - table.insert(awards.on.chat, tmp) - def.getProgress = function(self, data) - local itemcount = data.chats or 0 - return { - perc = itemcount / tmp.target, - label = S("@1/@2 chat messages", itemcount, tmp.target) - } - end - def.getDefaultDescription = function(self) - if self.trigger.target ~= 1 then - return S("Write @1 chat messages.", self.trigger.target) - else - return S("Write something in chat.") - end - end -end) - -awards.register_trigger("join", function(def) - local tmp = { - award = def.name, - target = def.trigger.target, - } - table.insert(awards.on.join, tmp) - def.getProgress = function(self, data) - local itemcount = data.joins or 0 - return { - perc = itemcount / tmp.target, - label = S("@1/@2 game joins", itemcount, tmp.target) - } - end - def.getDefaultDescription = function(self) - if self.trigger.target ~= 1 then - return S("Join the game @1 times.", self.trigger.target) - else - return S("Join the game.") - end - end -end) - -awards.register_trigger("craft", function(def) - local tmp = { - award = def.name, - item = def.trigger.item, - target = def.trigger.target, - } - table.insert(awards.on.craft, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.item then - itemcount = awards.get_item_count(data, "craft", tmp.item) or 0 - else - itemcount = awards.get_total_item_count(data, "craft") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 crafted", itemcount, tmp.target) - } - end - def.getDefaultDescription = function(self) - if self.trigger.item then - local iname = minetest.registered_items[self.trigger.item].description - if iname == nil then - iname = self.trigger.item - end - if self.trigger.target ~= 1 then - return S("Craft: @1×@2", self.trigger.target, iname) - else - return S("Craft: @1", iname) - end - else - return S("Craft @1 item(s).", self.trigger.target) - end - end -end) - --- Backwards compatibility -awards.register_onDig = awards.register_on_dig -awards.register_onPlace = awards.register_on_place -awards.register_onDeath = awards.register_on_death -awards.register_onChat = awards.register_on_chat -awards.register_onJoin = awards.register_on_join -awards.register_onCraft = awards.register_on_craft - --- Trigger Handles -minetest.register_on_dignode(function(pos, oldnode, digger) - if not digger or not pos or not oldnode then - return - end - - local data = awards.players[digger:get_player_name()] - if not awards.increment_item_counter(data, "count", oldnode.name) then - return - end - awards.run_trigger_callbacks(digger, data, "dig", function(entry) - if entry.target then - if entry.node then - local tnodedug = string.split(entry.node, ":") - local tmod = tnodedug[1] - local titem = tnodedug[2] - if tmod and titem and data.count[tmod] and data.count[tmod][titem] and data.count[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "count") > entry.target-1 then - return entry.award - end - end - end) -end) - -minetest.register_on_placenode(function(pos, node, digger) - if not digger or not pos or not node or not digger:get_player_name() or digger:get_player_name()=="" then - return - end - local data = awards.players[digger:get_player_name()] - if not awards.increment_item_counter(data, "place", node.name) then - return - end - - awards.run_trigger_callbacks(digger, data, "place", function(entry) - if entry.target then - if entry.node then - local tnodedug = string.split(entry.node, ":") - local tmod = tnodedug[1] - local titem = tnodedug[2] - if tmod and titem and data.place[tmod] and data.place[tmod][titem] and data.place[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "place") > entry.target-1 then - return entry.award - end - end - end) -end) - -minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) - if not user or not itemstack or not user:get_player_name() or user:get_player_name()=="" then - return - end - local data = awards.players[user:get_player_name()] - if not awards.increment_item_counter(data, "eat", itemstack:get_name()) then - return - end - awards.run_trigger_callbacks(user, data, "eat", function(entry) - if entry.target then - if entry.item then - local titemstring = string.split(entry.item, ":") - local tmod = titemstring[1] - local titem = titemstring[2] - if tmod and titem and data.eat[tmod] and data.eat[tmod][titem] and data.eat[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "eat") > entry.target-1 then - return entry.award - end - end - end) -end) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if not player or not itemstack then - return - end - - local data = awards.players[player:get_player_name()] - if not awards.increment_item_counter(data, "craft", itemstack:get_name(), itemstack:get_count()) then - return - end - - awards.run_trigger_callbacks(player, data, "craft", function(entry) - if entry.target then - if entry.item then - local titemcrafted = string.split(entry.item, ":") - local tmod = titemcrafted[1] - local titem = titemcrafted[2] - if tmod and titem and data.craft[tmod] and data.craft[tmod][titem] and data.craft[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "craft") > entry.target-1 then - return entry.award - end - end - end) -end) - -minetest.register_on_dieplayer(function(player) - -- Run checks - local name = player:get_player_name() - if not player or not name or name=="" then - return - end - - -- Get player - awards.assertPlayer(name) - local data = awards.players[name] - - -- Increment counter - data.deaths = data.deaths + 1 - - awards.run_trigger_callbacks(player, data, "death", function(entry) - if entry.target and entry.award and data.deaths and - data.deaths >= entry.target then - return entry.award - end - end) -end) - -minetest.register_on_joinplayer(function(player) - -- Run checks - local name = player:get_player_name() - if not player or not name or name=="" then - return - end - - -- Get player - awards.assertPlayer(name) - local data = awards.players[name] - - -- Increment counter - data.joins = data.joins + 1 - - awards.run_trigger_callbacks(player, data, "join", function(entry) - if entry.target and entry.award and data.joins and - data.joins >= entry.target then - return entry.award - end - end) -end) - -minetest.register_on_chat_message(function(name, message) - -- Run checks - local idx = string.find(message,"/") - if not name or (idx and idx <= 1) then - return - end - - -- Get player - awards.assertPlayer(name) - local data = awards.players[name] - local player = minetest.get_player_by_name(name) - - -- Increment counter - data.chats = data.chats + 1 - - awards.run_trigger_callbacks(player, data, "chat", function(entry) - if entry.target and entry.award and data.chats and - data.chats >= entry.target then - return entry.award - end - end) -end) diff --git a/mods/HUD/awards/unified_inventory.lua b/mods/HUD/awards/unified_inventory.lua deleted file mode 100644 index 3dc238e1a..000000000 --- a/mods/HUD/awards/unified_inventory.lua +++ /dev/null @@ -1,12 +0,0 @@ -if minetest.get_modpath("unified_inventory") then - local S = minetest.get_translator(minetest.get_current_modname()) - unified_inventory.register_button("awards", { - type = "image", - image = "awards_ui_icon.png", - tooltip = S("Awards"), - action = function(player) - local name = player:get_player_name() - awards.show_to(name, name, nil, false) - end, - }) -end diff --git a/mods/HUD/hudbars/API.md b/mods/HUD/hudbars/API.md deleted file mode 100644 index ee112eceb..000000000 --- a/mods/HUD/hudbars/API.md +++ /dev/null @@ -1,211 +0,0 @@ -API documentation for the HUD bars mod -====================================== - -## Introduction -This API allows you to add, change, hide and unhide custom HUD bars for this mod. - -## Overview -To give you a *very* brief overview over this API, here is the basic workflow on how to add your own custom HUD bar: - -* Create images for your HUD bar -* Call `hb.register_hudbar` to make the definition of the HUD bar known to this mod -* Call `hb.init_hudbar` for each player for which you want to use previously defined HUD bar -* Use `hb.change_hudbar` whenever you need to change the values of a HUD bar of a certain player -* If you need it: Use `hb.hide_hudbar` and `hb.unhide_hudbar` to hide or unhide HUD bars of a certain player - -## The basic rules -In order to use this API, you should be aware of a few basic rules in order to understand it: - -* A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%. -* The current value must always be equal to or smaller then the maximum -* Both current value and maximum must not be smaller than 0 -* Both current value and maximum must be real numbers. So no NaN, infinity, etc. -* The HUD bar will be hidden if the maximum equals 0. This is intentional. -* The health and breath HUD bars are hardcoded. - -These are soft rules, the HUD bars mod will not enforce all of these. -But this mod has been programmed under the assumption that these rules are followed, for integrity. - -## Adding a HUD bar -To make a new HUD bar known to this mod, you need … - -* … an image of size 2×16 for the bar -* … an icon of size 16×16 (optional) -* … to register it with `hb.register_hudbar` - -### Bar image -The image for the bar will be repeated horizontally to denote the “value” of the HUD bar. -It **must** be of size 2×16. -If neccessary, the image will be split vertically in half, and only the left half of the image -is displayed. So the final HUD bar will always be displayed on a per-pixel basis. - -The default bar images are single-colored, but you can use other styles as well, for instance, -a vertical gradient. - -### Icon -A 16×16 image shown left of the HUD bar. This is optional. - -### `hb.register_hudbar(identifier, text_color, label, textures, direction, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)` -This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden -and unhidden on a per-player basis. -Note this does not yet display the HUD bar. - -The HUD bars will be displayed in a “first come, first serve” order. This API does not allow fow a custom order or a way to set it -manually in a reliable way. However, you can use the setting `hudbars_sorting` for this. See the advanced setting menu in Minetest -for more information. - - -#### Parameters -* `identifier`: A globally unique internal name for the HUD bar, will be used later to refer to it. Please only rely on alphanumeric characters for now. The identifiers “`health`” and “`breath`” are used internally for the built-in health and breath bar, respectively. Please do not use these names. -* `text_color`: A 3-octet number defining the color of the text. The octets denote, in this order red, green and blue and range from `0x00` (complete lack of this component) to `0xFF` (full intensity of this component). Example: `0xFFFFFF` for white. -* `label`: A string which is displayed on the HUD bar itself to describe the HUD bar. Try to keep this string short. -* `textures`: A table with the following fields: - * `bar`: The file name of the bar image (as string). This is only used for the `progress_bar` bar type (see `README.txt`, settings section). - * `icon`: The file name of the icon, as string. For the `progress_bar` type, it is shown as single image left of the bar, for the two statbar bar types, it is used as the statbar icon and will be repeated. This field can be `nil`, in which case no icon will be used, but this is not recommended, because the HUD bar will be invisible if the one of the statbar bar types is used. - * `bgicon`: The file name of the background icon, it is used as the background for the modern statbar mode only. This field can be `nil`, in which case no background icon will be displayed in this mode. -* `direction`: Either left to right(0), or right to left(1). -* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value -* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value -* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it. -* `format_string`: Optional; You can specify an alternative format string to use for the final text on the HUD bar. The default format string is “`@1: @2/@3`” (The “@” numbers are placeholders that have a meaning in this order: @1 = Label, @2 = current value, @3 = maximum value). Do *not* use minetest.translator on this string, the string will be translated by `hudbars`, but you still must put this string into the translation catalogue file. -* `format_string_config`: Required if `format_string` is set. This allows to change which parameters to use in the format string. It's a table with these fields: - * `textdomain`: Text domain of the format string, used by `minetest.translate` - * `order`: Table that contains the order of the placeholders. It's also possible to remove placeholders. Default order: `{ "label", "value", "max_value" }` - * `format_value`: Format string to apply when displaying `value`. Syntax is same as in `string.format`. Default: `"%d"` - * `format_max_value`: Same as `format_value` but is applied to `max_value` - -#### Example -Example (mostly) from `hbarmor` mod: - -``` -hb.register_hudbar("armor", 0xFFFFFF, minetest.translator("hbarmor", "Armor"), { icon = "hbarmor_icon.png", bgicon = "hbarmor_bgicon.png", bar = "hbarmor_bar.png" }, 0, 100, hbarmor.autohide, N("@1: @2%"), { order = { "label", "value" }, textdomain = "hbarmor" } ) -``` - -Displays an armor HUD bar with a label of the form „Armor: 53%“. (`N` is a dummy function that returns its argument, used to make the string visible for translator scripts.) - -#### Return value -Always `nil`. - - -## Displaying a HUD bar -After a HUD bar has been registered, they are not yet displayed yet for any player. HUD bars must be -explicitly initialized on a per-player basis. - -You probably want to do this in the `minetest.register_on_joinplayer`. - -### `hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)` -This function initialzes and activates a previously registered HUD bar and assigns it to a -certain client/player. This has only to be done once per player and after that, you can change -the values using `hb.change_hudbar`. - -However, if `start_hidden` was set to `true` for the HUD bar (in `hb.register_hudbar`), the HUD bar -will initially be hidden, but the HUD elements are still sent to the client. Otherwise, -the HUD bar will be initially be shown to the player. - -#### Parameters -* `player`: `ObjectRef` of the player to which the new HUD bar should be displayed to. -* `identifier`: The identifier of the HUD bar type, as specified in `hb.register_hudbar`. -* `start_value`: The initial current value of the HUD bar. This is optional, `default_start_value` of the registration function will be used, if this is `nil`. -* `start_max`: The initial maximum value of the HUD bar. This is optional, `default_start_max` of the registration function will be used, if this is `nil` -* `start_hidden`: Whether the HUD bar is initially hidden. This is optional, `default_start_hidden` of the registration function will be used as default - -#### Return value -`true` on success, `false` otherwise. - - -## Modifying a HUD bar -After a HUD bar has been added, you can change the current and maximum value and other attributes on a per-player basis. -You use the function `hb.change_hudbar` for this. - -### `hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color)` -Changes the values and the appearance of an initialized HUD bar for a certain player. `new_value` -and `new_max_value` are the most important parameters as they specify the new current and maximum new values, you do not need -to worry too much about the other parameters. - -The following parameters are less important and provided for styling the HUD bar after registration (if -this is desired). The “styling” parameters parallel the parameters of `hb.register_hudbar`. It is -recommended to not change the style of a HUD bar too often as this can be distracting or confusing -for players. - -`new_value`, `new_max_value` `new_icon`, `new_bgicon`, `new_bar`, `new_label` and `new_text_color` can be -`nil`; if one of them is `nil`, that means the value is unchanged. If all those values are `nil`, this -function is a no-op. - -This function tries to minimize the amount of calls to `hud_change` of the Minetest Lua API -(and thus, network traffic), when you only change the value and/or maximum value. In this case, -`hud_change` is only called if it is actually needed, e.g. when the actual length of the bar -or the displayed string changed, so you do not have to worry about it. There is, however, no -such network optimization for the “styling” parameters, so keep this in mind. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to change, as specified in `hb.register_hudbar`. -* `new_value`: The new current value of the HUD bar -* `new_max_value`: The new maximum value of the HUD bar -* `new_icon`: File name of the new icon -* `new_bgicon`: File name of the new background icon for the modern-style statbar -* `new_bar`: File name of the new bar segment image -* `new_label`: A new text label of the HUD bar. Note the format string still applies -* `new_text_color`: A 3-octet number defining the new color of the text. - -#### Return value -`true` on success, `false` otherwise. - - -## Hiding and unhiding a HUD bar -You can also hide custom HUD bars, meaning they will not be displayed for a certain player. You can still -use `hb.change_hudbar` on a hidden HUD bar, the new values will be correctly displayed after the HUD bar -has been unhidden. Both functions will only call `hud_change` if there has been an actual change to avoid -unneccessary traffic. - -Note that the hidden state of a HUD bar will *not* be saved by this mod on server shutdown, so you may need -to write your own routines for this or by setting the correct value for `start_hidden` when calling -`hb.init_hudbar`. - -### `hb.hide_hudbar(player, identifier)` -Hides the specified HUD bar from the screen of the specified player. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`. - -#### Return value -`true` on success, `false` otherwise. - - -### `hb.unhide_hudbar(player, identifier)` -Makes a previously hidden HUD bar visible again to a player. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to unhide, as specified in `hb.register_hudbar`. - -#### Return value -`true` on success, `false` otherwise. - - -## Reading HUD bar information -It is also possible to read information about existing HUD bars. - -### `hb.get_hudbar_state(player, identifier)` -Returns the current state of the active player's HUD bar. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`. - -#### Return value -On success, returns a table which holds information on the current state of the HUD bar. Note -the table is a deep copy of the internal HUD bar state, it is *not* a reference; the information -hold by the table is only true for the moment you called this function. The fields of this table are: - -* `value`: Current value of HUD bar. -* `max`: Current maximum value of HUD bar. -* `hidden`: Boolean denoting whether the HUD bar is hidden. -* `barlength`: The length of the HUD bar in pixels. This field is meaningless if the HUD bar is currently hidden. -* `text`: The text shown on the HUD bar. This fiels is meaningless if the HUD bar is currently hidden. - -If the player does not exist, returns `nil` instead. - -### `hb.get_hudbar_identifiers()` -Returns a table of all currently registered HUD bar identifiers. diff --git a/mods/HUD/hudbars/README.md b/mods/HUD/hudbars/README.md deleted file mode 100644 index 8e17edad7..000000000 --- a/mods/HUD/hudbars/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# HUD bars - -## Description -This mod changes the HUD of Minetest. It replaces the default health and breath -symbols by horizontal colored bars with text showing the number. - -Furthermore, it enables other mods to add their own custom bars to the HUD, -this mod will place them accordingly. - -**Important**: Keep in mind if running a server with this mod, that the custom -position should be displayed correctly on every screen size. - -## Current version -The current version is 2.3.2. -It works for Minetest 5.3.0. - -This software uses [semantic versioning](http://semver.org), as defined by version 2.0.0 of the SemVer -standard. - -## Settings -This mod can be configured quite a bit. You can change HUD bar appearance, offsets, ordering, and more. -Use the advanced settings menu in Minetest for detailed configuration. - -## API -The API is used to add your own custom HUD bars. -Documentation for the API of this mod can be found in `API.md`. - -## Legal -### License of source code -Author: Wuzzy (2015) - -Also: This mod was forked from the “Better HUD” [hud] mod by BlockMen. - -Translations: - -* German: Wuzzy -* Portuguese: BrunoMine -* Turkish: admicos -* Dutch: kingoscargames -* Italian: Hamlet -* Malay: muhdnurhidayat -* Russian: Imk -* Spanish: wuniversales - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the MIT License. - -### Licenses of textures - -* `hudbars_icon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen -* `hudbars_bgicon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen -* `hudbars_icon_breath.png`—kaeza (MIT License), modified by BlockMen, modified again by Wuzzy -* `hudbars_bgicon_breath.png`—based on previous image, edited by Wuzzy (MIT License) -* `hudbars_bar_health.png`—Wuzzy (MIT License) -* `hudbars_bar_breath.png`—Wuzzy (MIT License) -* `hudbars_bar_background.png`—Wuzzy (MIT License) - -### License references - -* [CC-BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) -* [MIT License](https://opensource.org/licenses/MIT) diff --git a/mods/HUD/hudbars/default_settings.lua b/mods/HUD/hudbars/default_settings.lua deleted file mode 100644 index 865a7cb6a..000000000 --- a/mods/HUD/hudbars/default_settings.lua +++ /dev/null @@ -1,54 +0,0 @@ --- (Hardcoded) default settings - -hb.settings.max_bar_length = 160 -hb.settings.statbar_length = 20 - --- Statbar positions -hb.settings.pos_left = {} -hb.settings.pos_right = {} -hb.settings.start_offset_left = {} -hb.settings.start_offset_right= {} -hb.settings.pos_left.x = hb.load_setting("hudbars_pos_left_x", "number", 0.5) -hb.settings.pos_left.y = hb.load_setting("hudbars_pos_left_y", "number", 1) -hb.settings.pos_right.x = hb.load_setting("hudbars_pos_right_x", "number", 0.5) -hb.settings.pos_right.y = hb.load_setting("hudbars_pos_right_y", "number", 1) --- Modified in MCL2! -hb.settings.bar_type = hb.load_setting("hudbars_bar_type", "string", "statbar_modern", {"progress_bar", "statbar_classic", "statbar_modern"}) -if hb.settings.bar_type == "progress_bar" then - hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_offset_left_x", "number", -175) - hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_offset_left_y", "number", -86) - hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_offset_right_x", "number", 15) - hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_offset_right_y", "number", -86) -else - hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_statbar_offset_left_x", "number", -258) - hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_statbar_offset_left_y", "number", -90) - hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_statbar_offset_right_x", "number", 16) - hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_statbar_offset_right_y", "number", -90) -end --- Modified in MCL2! -hb.settings.vmargin = hb.load_setting("hudbars_vmargin", "number", 28) -hb.settings.tick = hb.load_setting("hudbars_tick", "number", 0.1) - --- Experimental setting: Changing this setting is not officially supported, do NOT rely on it! -hb.settings.forceload_default_hudbars = hb.load_setting("hudbars_forceload_default_hudbars", "bool", true) - --- Misc. settings -hb.settings.alignment_pattern = hb.load_setting("hudbars_alignment_pattern", "string", "zigzag", {"zigzag", "stack_up", "stack_down"}) -hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true) - -local sorting = minetest.settings:get("hudbars_sorting") -if sorting then - hb.settings.sorting = {} - hb.settings.sorting_reverse = {} - for k,v in string.gmatch(sorting, "(%w+)=(%w+)") do - hb.settings.sorting[k] = tonumber(v) - hb.settings.sorting_reverse[tonumber(v)] = k - end -else - -- Modified in MCL2! - hb.settings.sorting = { ["health"] = 0, ["hunger"] = 1, ["armor"] = 2, ["breath"] = 3, ["exhaustion"] = 4, ["saturation"] = 5 } - hb.settings.sorting_reverse = {} - for k,v in pairs(hb.settings.sorting) do - hb.settings.sorting_reverse[tonumber(v)] = k - end -end diff --git a/mods/HUD/hudbars/init.lua b/mods/HUD/hudbars/init.lua deleted file mode 100644 index 505ff403b..000000000 --- a/mods/HUD/hudbars/init.lua +++ /dev/null @@ -1,590 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) - -local S = minetest.get_translator(modname) -local N = function(s) return s end - -local math = math -local table = table - -hb = { - hudtables = {}, - -- number of registered HUD bars - hudbars_count = 0, - -- table which records which HUD bar slots have been “registered” so far; used for automatic positioning - registered_slots = {}, - settings = {}, - -- Table which contains all players with active default HUD bars (only for internal use) - players = {}, -} - -function hb.load_setting(sname, stype, defaultval, valid_values) - local sval - if stype == "string" then - sval = minetest.settings:get(sname) - elseif stype == "bool" then - sval = minetest.settings:get_bool(sname) - elseif stype == "number" then - sval = tonumber(minetest.settings:get(sname)) - end - if sval then - if valid_values then - local valid = false - for i = 1, #valid_values do - if sval == valid_values[i] then - valid = true - end - end - if not valid then - minetest.log("error", "[hudbars] Invalid value for "..sname.."! Using default value ("..tostring(defaultval)..").") - return defaultval - else - return sval - end - else - return sval - end - else - return defaultval - end -end - --- Load default settings -dofile(modpath.."/default_settings.lua") - -if minetest.get_modpath("mcl_experience") and not minetest.is_creative_enabled("") then - -- reserve some space for experience bar: - hb.settings.start_offset_left.y = hb.settings.start_offset_left.y - 20 - hb.settings.start_offset_right.y = hb.settings.start_offset_right.y - 20 -end - -local function player_exists(player) - return player ~= nil and player:is_player() -end - -local function make_label(format_string, format_string_config, label, start_value, max_value) - local params = {} - local order = format_string_config.order - for o=1, #order do - if order[o] == "label" then - table.insert(params, label) - elseif order[o] == "value" then - if format_string_config.format_value then - table.insert(params, string.format(format_string_config.format_value, start_value)) - else - table.insert(params, start_value) - end - elseif order[o] == "max_value" then - if format_string_config.format_max_value then - table.insert(params, string.format(format_string_config.format_max_value, max_value)) - else - table.insert(params, max_value) - end - end - end - local ret - if format_string_config.textdomain then - ret = minetest.translate(format_string_config.textdomain, format_string, unpack(params)) - else - ret = S(format_string, unpack(params)) - end - return ret -end - -function hb.value_to_barlength(value, max) - if max == 0 then - return 0 - else - if hb.settings.bar_type == "progress_bar" then - local x - if value < 0 then x=-0.5 else x = 0.5 end - local ret = math.modf((value/max) * hb.settings.max_bar_length + x) - return ret - else - local x - if value < 0 then x=-0.5 else x = 0.5 end - local ret = math.modf((value/max) * hb.settings.statbar_length + x) - return ret - end - end -end - -function hb.get_hudtable(identifier) - return hb.hudtables[identifier] -end - -function hb.get_hudbar_position_index(identifier) - if hb.settings.sorting[identifier] then - return hb.settings.sorting[identifier] - else - local i = 0 - while true do - if hb.registered_slots[i] ~= true and hb.settings.sorting_reverse[i] == nil then - return i - end - i = i + 1 - end - end -end - -function hb.register_hudbar(identifier, text_color, label, textures, direction, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config) - minetest.log("action", "hb.register_hudbar: "..tostring(identifier)) - local hudtable = {} - local pos, offset - local index = math.floor(hb.get_hudbar_position_index(identifier)) - hb.registered_slots[index] = true - if hb.settings.alignment_pattern == "stack_up" then - pos = hb.settings.pos_left - offset = { - x = direction == 0 and hb.settings.start_offset_left.x or -hb.settings.start_offset_right.x, - y = hb.settings.start_offset_left.y - hb.settings.vmargin * index - } - elseif hb.settings.alignment_pattern == "stack_down" then - pos = hb.settings.pos_left - offset = { - x = direction == 0 and hb.settings.start_offset_right.x or -hb.settings.start_offset_left.x, - y = hb.settings.start_offset_left.y + hb.settings.vmargin * index - } - else -- zigzag - if index % 2 == 0 then - pos = hb.settings.pos_left - offset = { - -- -(24+18) = -42. using linear eq, -42 = -258m - 24. - x = direction == 0 and hb.settings.start_offset_left.x or (-42+24)/(-258.0) * hb.settings.start_offset_left.x - 24, - y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2) - } - else - pos = hb.settings.pos_right - offset = { - -- 24*10+30 - 24 = 234. using linear eq, 234 = 16m - 24. - x = direction == 0 and hb.settings.start_offset_right.x or (234+24)/(16) * hb.settings.start_offset_right.x - 24, - y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2) - } - end - end - - if format_string == nil then - format_string = N("@1: @2/@3") - end - if format_string_config == nil then - format_string_config = {} - end - if format_string_config.order == nil then - format_string_config.order = { "label", "value", "max_value" } - end - if format_string_config.format_value == nil then - format_string_config.format_value = "%d" - end - if format_string_config.format_max_value == nil then - format_string_config.format_max_value = "%d" - end - - function hudtable.add_all(player, hudtable, start_value, start_max, start_hidden) - if start_value == nil then start_value = hudtable.default_start_value end - if start_max == nil then start_max = hudtable.default_start_max end - if start_hidden == nil then start_hidden = hudtable.default_start_hidden end - local ids = {} - local state = {} - local name = player:get_player_name() - local bgscale, iconscale, text, barnumber, bgiconnumber - - if start_max == 0 or start_hidden then - bgscale = { x=0, y=0 } - else - bgscale = { x=1, y=1 } - end - if start_hidden then - iconscale = { x=0, y=0 } - barnumber = 0 - bgiconnumber = 0 - text = "" - else - iconscale = { x=1, y=1 } - barnumber = hb.value_to_barlength(start_value, start_max) - bgiconnumber = hb.settings.statbar_length - text = make_label(format_string, format_string_config, label, start_value, start_max) - end - - if hb.settings.bar_type == "progress_bar" then - ids.bg = player:hud_add({ - hud_elem_type = "image", - position = pos, - scale = bgscale, - text = "hudbars_bar_background.png", - alignment = {x=1,y=1}, - offset = { x = offset.x - 1, y = offset.y - 1 }, - z_index = 0, - }) - if textures.icon then - ids.icon = player:hud_add({ - hud_elem_type = "image", - position = pos, - scale = iconscale, - text = textures.icon, - alignment = {x=-1,y=1}, - offset = { x = offset.x - 3, y = offset.y }, - z_index = 1, - }) - end - end - - local bar_image, bgicon, bar_size - if hb.settings.bar_type == "progress_bar" then - bar_image = textures.bar - -- NOTE: Intentionally set to nil. For some reason, on some systems, - -- the progress bar is displaced when the bar_size is set explicitly here. - -- On the other hand, setting this to nil is deprecated in MT 5.0.0 due to - -- a debug log warning, but nothing is explained in lua_api.txt. - -- This section is a potential bug magnet, please watch with care! - -- The size of the bar image is expected to be exactly 2×16 pixels. - bar_size = nil - elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then - bar_image = textures.icon - bgicon = textures.bgicon - bar_size = {x=24, y=24} - end - - local text2 - if hb.settings.bar_type == "statbar_modern" then - text2 = bgicon - end - - ids.bar = player:hud_add({ - hud_elem_type = "statbar", - position = pos, - text = bar_image, - text2 = text2, - number = barnumber, - item = bgiconnumber, - alignment = {x=-1,y=-1}, - offset = offset, - direction = direction, - size = bar_size, - z_index = 1, - }) - if hb.settings.bar_type == "progress_bar" then - ids.text = player:hud_add({ - hud_elem_type = "text", - position = pos, - text = text, - alignment = {x=1,y=1}, - number = text_color, - direction = direction, - offset = { x = offset.x + 2, y = offset.y - 1}, - z_index = 2, - }) - end - -- Do not forget to update hb.get_hudbar_state if you add new fields to the state table - state.hidden = start_hidden - state.value = start_value - state.max = start_max - state.text = text - state.barlength = hb.value_to_barlength(start_value, start_max) - - local main_error_text = - "[hudbars] Bad initial values of HUD bar identifier “"..tostring(identifier).."” for player "..name..". " - - if start_max < start_value then - minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than start_value ("..start_value..")!") - end - if start_max < 0 then - minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than 0!") - end - if start_value < 0 then - minetest.log("error", main_error_text.."start_value ("..start_value..") is smaller than 0!") - end - - hb.hudtables[identifier].hudids[name] = ids - hb.hudtables[identifier].hudstate[name] = state - end - - hudtable.identifier = identifier - hudtable.format_string = format_string - hudtable.format_string_config = format_string_config - hudtable.label = label - hudtable.hudids = {} - hudtable.hudstate = {} - hudtable.default_start_hidden = default_start_hidden - hudtable.default_start_value = default_start_value - hudtable.default_start_max = default_start_max - - hb.hudbars_count= hb.hudbars_count + 1 - - hb.hudtables[identifier] = hudtable -end - -function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden) - if not player_exists(player) then return false end - local hudtable = hb.get_hudtable(identifier) - hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden) - return true -end - -function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color) - if new_value == nil and new_max_value == nil and new_icon == nil and new_bgicon == nil and new_bar == nil and new_label == nil and new_text_color == nil then - return true - end - if not player_exists(player) then - return false - end - - local name = player:get_player_name() - local hudtable = hb.get_hudtable(identifier) - if not hudtable.hudstate[name] then - return false - end - local value_changed, max_changed = false, false - - if new_value then - if new_value ~= hudtable.hudstate[name].value then - hudtable.hudstate[name].value = new_value - value_changed = true - end - else - new_value = hudtable.hudstate[name].value - end - if new_max_value then - if new_max_value ~= hudtable.hudstate[name].max then - hudtable.hudstate[name].max = new_max_value - max_changed = true - end - else - new_max_value = hudtable.hudstate[name].max - end - - if hb.settings.bar_type == "progress_bar" then - if new_icon and hudtable.hudids[name].icon then - player:hud_change(hudtable.hudids[name].icon, "text", new_icon) - end - if new_bgicon and hudtable.hudids[name].bgicon then - player:hud_change(hudtable.hudids[name].bgicon, "text", new_bgicon) - end - if new_bar then - player:hud_change(hudtable.hudids[name].bar , "text", new_bar) - end - if new_label then - hudtable.label = new_label - local new_text = make_label(hudtable.format_string, hudtable.format_string_config, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max) - player:hud_change(hudtable.hudids[name].text, "text", new_text) - end - if new_text_color then - player:hud_change(hudtable.hudids[name].text, "number", new_text_color) - end - - else - if new_icon and hudtable.hudids[name].bar then - player:hud_change(hudtable.hudids[name].bar, "text", new_icon) - end - if new_bgicon and hudtable.hudids[name].bg then - player:hud_change(hudtable.hudids[name].bg, "text", new_bgicon) - end - end - - local main_error_text = - "[hudbars] Bad call to hb.change_hudbar, identifier: “"..tostring(identifier).."”, player name: “"..name.."”. " - if new_max_value < new_value then - minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than new_value ("..new_value..")!") - end - if new_max_value < 0 then - minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than 0!") - end - if new_value < 0 then - minetest.log("error", main_error_text.."new_value ("..new_value..") is smaller than 0!") - end - - if hudtable.hudstate[name].hidden == false then - if max_changed and hb.settings.bar_type == "progress_bar" then - if hudtable.hudstate[name].max == 0 then - player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0}) - else - player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1}) - end - end - - if value_changed or max_changed then - local new_barlength = hb.value_to_barlength(new_value, new_max_value) - if new_barlength ~= hudtable.hudstate[name].barlength then - player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value)) - hudtable.hudstate[name].barlength = new_barlength - end - - if hb.settings.bar_type == "progress_bar" then - local new_text = make_label(hudtable.format_string, hudtable.format_string_config, hudtable.label, new_value, new_max_value) - if new_text ~= hudtable.hudstate[name].text then - player:hud_change(hudtable.hudids[name].text, "text", new_text) - hudtable.hudstate[name].text = new_text - end - end - end - end - return true -end - -function hb.hide_hudbar(player, identifier) - if not player_exists(player) then return false end - local name = player:get_player_name() - local hudtable = hb.get_hudtable(identifier) - if hudtable == nil then return false end - if hudtable.hudstate[name].hidden == true then return true end - if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon then - player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0}) - end - player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0}) - player:hud_change(hudtable.hudids[name].text, "text", "") - end - player:hud_change(hudtable.hudids[name].bar, "number", 0) - player:hud_change(hudtable.hudids[name].bar, "item", 0) - hudtable.hudstate[name].hidden = true - return true -end - -function hb.unhide_hudbar(player, identifier) - if not player_exists(player) then return false end - local name = player:get_player_name() - local hudtable = hb.get_hudtable(identifier) - if hudtable == nil then return false end - if hudtable.hudstate[name].hidden == false then return true end - local value = hudtable.hudstate[name].value - local max = hudtable.hudstate[name].max - if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon then - player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1}) - end - if hudtable.hudstate[name].max ~= 0 then - player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1}) - end - player:hud_change(hudtable.hudids[name].text, "text", make_label(hudtable.format_string, hudtable.format_string_config, hudtable.label, value, max)) - elseif hb.settings.bar_type == "statbar_modern" then - player:hud_change(hudtable.hudids[name].bar, "scale", {x=1,y=1}) - end - player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max)) - player:hud_change(hudtable.hudids[name].bar, "item", hb.value_to_barlength(max, max)) - hudtable.hudstate[name].hidden = false - return true -end - -function hb.get_hudbar_state(player, identifier) - if not player_exists(player) then return nil end - local ref = hb.get_hudtable(identifier).hudstate[player:get_player_name()] - -- Do not forget to update this chunk of code in case the state changes - local copy = { - hidden = ref.hidden, - value = ref.value, - max = ref.max, - text = ref.text, - barlength = ref.barlength, - } - return copy -end - -function hb.get_hudbar_identifiers() - local ids = {} - for id, _ in pairs(hb.hudtables) do - table.insert(ids, id) - end - return ids -end - ---register built-in HUD bars -if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then - hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 0, 20, 20, false) - hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 1, 10, 10, true) -end - -local function hide_builtin(player) - local flags = player:hud_get_flags() - flags.healthbar = false - flags.breathbar = false - player:hud_set_flags(flags) -end - - -local function custom_hud(player) - if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then - local hide - if minetest.settings:get_bool("enable_damage") then - hide = false - else - hide = true - end - local hp = player:get_hp() - local hp_max = player:get_properties().hp_max - hb.init_hudbar(player, "health", math.min(hp, hp_max), hp_max, hide) - local breath = player:get_breath() - local breath_max = player:get_properties().breath_max - local hide_breath - if breath >= breath_max and hb.settings.autohide_breath == true then hide_breath = true else hide_breath = false end - hb.init_hudbar(player, "breath", math.min(breath, breath_max), breath_max, hide_breath or hide) - end -end - -local function update_health(player) - local hp_max = player:get_properties().hp_max - hb.change_hudbar(player, "health", player:get_hp(), hp_max) -end - --- update built-in HUD bars -local function update_hud(player, has_damage) - if not player_exists(player) then return end - if has_damage then - if hb.settings.forceload_default_hudbars then - hb.unhide_hudbar(player, "health") - end - --air - local breath_max = player:get_properties().breath_max - local breath = player:get_breath() - - if breath >= breath_max and hb.settings.autohide_breath == true then - hb.hide_hudbar(player, "breath") - else - hb.unhide_hudbar(player, "breath") - hb.change_hudbar(player, "breath", math.min(breath, breath_max), breath_max) - end - --health - update_health(player) - elseif hb.settings.forceload_default_hudbars then - hb.hide_hudbar(player, "health") - hb.hide_hudbar(player, "breath") - end -end - -minetest.register_on_player_hpchange(function(player) - if hb.players[player:get_player_name()] then - update_health(player) - end -end) - -minetest.register_on_respawnplayer(function(player) - update_health(player) - hb.hide_hudbar(player, "breath") -end) - -minetest.register_on_joinplayer(function(player) - hide_builtin(player) - custom_hud(player) - hb.players[player:get_player_name()] = player -end) - -minetest.register_on_leaveplayer(function(player) - hb.players[player:get_player_name()] = nil -end) - -local main_timer = 0 -local timer = 0 -minetest.register_globalstep(function(dtime) - main_timer = main_timer + dtime - timer = timer + dtime - if main_timer > hb.settings.tick or timer > 4 then - if main_timer > hb.settings.tick then main_timer = 0 end - -- only proceed if damage is enabled - local has_dmg = minetest.settings:get_bool("enable_damage") - if has_dmg or hb.settings.forceload_default_hudbars then - for _, player in pairs(hb.players) do - -- update all hud elements - update_hud(player, has_dmg) - end - end - end - if timer > 4 then timer = 0 end -end) diff --git a/mods/HUD/hudbars/locale/hudbars.de.tr b/mods/HUD/hudbars/locale/hudbars.de.tr deleted file mode 100644 index 3d1e697cc..000000000 --- a/mods/HUD/hudbars/locale/hudbars.de.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: hudbars -Health=Leben -Breath=Atem -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.es.tr b/mods/HUD/hudbars/locale/hudbars.es.tr deleted file mode 100644 index bbf027953..000000000 --- a/mods/HUD/hudbars/locale/hudbars.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: hudbars -Health=Salud -Breath=Aliento -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.fr.tr b/mods/HUD/hudbars/locale/hudbars.fr.tr deleted file mode 100644 index b31b7b0c1..000000000 --- a/mods/HUD/hudbars/locale/hudbars.fr.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: hudbars -Health=Santé -Breath=Breath - -# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.it.tr b/mods/HUD/hudbars/locale/hudbars.it.tr deleted file mode 100644 index 3ada5b660..000000000 --- a/mods/HUD/hudbars/locale/hudbars.it.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: hudbars -Health=Salute -Breath=Ossigeno - -# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.ms.tr b/mods/HUD/hudbars/locale/hudbars.ms.tr deleted file mode 100644 index eb811ab66..000000000 --- a/mods/HUD/hudbars/locale/hudbars.ms.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: hudbars -Health=Kesihatan -Breath=Nafas -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.nl.tr b/mods/HUD/hudbars/locale/hudbars.nl.tr deleted file mode 100644 index b9c4a4170..000000000 --- a/mods/HUD/hudbars/locale/hudbars.nl.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: hudbars -Health=Gezondheid -Breath=Adem - -# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.pl.tr b/mods/HUD/hudbars/locale/hudbars.pl.tr deleted file mode 100644 index be06b3579..000000000 --- a/mods/HUD/hudbars/locale/hudbars.pl.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: hudbars -Health=Życie -Breath=Tlen - -# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -@1: @2/@3=@1: @2/@3 - diff --git a/mods/HUD/hudbars/locale/hudbars.pt.tr b/mods/HUD/hudbars/locale/hudbars.pt.tr deleted file mode 100644 index a818f092a..000000000 --- a/mods/HUD/hudbars/locale/hudbars.pt.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: hudbars -Health=Saude -Breath=Folego - -# Formato de string padrão para progresso bar-style de barras do HUD, por exemplo “Saude 5/20” -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.ru.tr b/mods/HUD/hudbars/locale/hudbars.ru.tr deleted file mode 100644 index 2d278e339..000000000 --- a/mods/HUD/hudbars/locale/hudbars.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: hudbars -Health=HP -Breath=дыхание -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.tr.tr b/mods/HUD/hudbars/locale/hudbars.tr.tr deleted file mode 100644 index 6a2ce0b57..000000000 --- a/mods/HUD/hudbars/locale/hudbars.tr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: hudbars -Health=Can -Breath=Nefes -@1: @2/@3=@1: @2/@3 diff --git a/mods/HUD/hudbars/locale/hudbars.zh_TW.tr b/mods/HUD/hudbars/locale/hudbars.zh_TW.tr deleted file mode 100644 index 2163c659e..000000000 --- a/mods/HUD/hudbars/locale/hudbars.zh_TW.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: hudbars -Health=生命 -Breath=氧氣 - -# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -@1: @2/@3= diff --git a/mods/HUD/hudbars/locale/template.txt b/mods/HUD/hudbars/locale/template.txt deleted file mode 100644 index 37b055913..000000000 --- a/mods/HUD/hudbars/locale/template.txt +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: hudbars -Health= -Breath= - -# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -@1: @2/@3= diff --git a/mods/HUD/hudbars/mod.conf b/mods/HUD/hudbars/mod.conf deleted file mode 100644 index 9d49f65ec..000000000 --- a/mods/HUD/hudbars/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = hudbars -author = Wuzzy -description = Replaces the health and breath symbols in the HUD by “progress bars” and shows exact values. Other mods can add more progress bars for custom player stats. diff --git a/mods/HUD/hudbars/settingtypes.txt b/mods/HUD/hudbars/settingtypes.txt deleted file mode 100644 index 3e4390e20..000000000 --- a/mods/HUD/hudbars/settingtypes.txt +++ /dev/null @@ -1,119 +0,0 @@ -[Appearance] -# Specifies how the value indicators (i.e. health, breah, etc.) look. There are 3 styles -# available. You can choose between the default progress-bar-like bars and the good -# old statbars like you know from vanilla Minetest. -# These values are possible: -# - progress_bar: A horizontal progress-bar-like bar with a label, showing numerical value -# (current, maximum), and an icon. These bars usually convey the most -# information. This is the default and recommended value. -# - statbar_classic: Classic statbar, like in vanilla Minetest. Made out of up to 20 -# half-symbols. Those bars represent the vague ratio between -# the current value and the maximum value. 1 half-symbol stands for -# approximately 5% of the maximum value. -# - statbar_modern: Like the classic statbar, but also supports background images, this -# kind of statbar may be considered to be more user-friendly than the -# classic statbar. This bar type closely resembles the mod -# “Better HUD” [hud] by BlockMen. -hudbars_bar_type (HUD bars style) enum progress_bar progress_bar,statbar_classic,statbar_modern - - -# If enabled (default), the breath indicators in the HUD will be automatically hidden shortly -# after the breath has been filled up. Otherwise, the breath will always be displayed. -hudbars_autohide_breath (Automatically hide breath indicators) bool true - -# This setting changes the way the HUD bars are ordered on the display. You can choose -# between a zig-zag pattern (default) or a vertically stacked pattern. -# The following values are allowed: -# - zigzag: Starting from the left bottom, the next is right from the first, -# the next is above the first, the next is right of the third, etc. -# - stack_up: The HUD bars are stacked vertically, going upwards. -# - stack_down: The HUD bars are stacked vertically, going downwards. -hudbars_alignment_pattern (HUD bars alignment pattern) enum zigzag zigzag,stack_up,stack_down - -# This setting allows you to specify the order of the HUD bars explicitly. If left empty -# (the default), the health and breath indicators come first, additional indicators -# may appear in any order. This setting is quite technical and normal users probably do not -# need to worry about it. -# -# Syntax: -# The setting has to be specified as a comma-seperated list of key=value pairs, where a key -# refers to the identifier of a HUD bar and the value refers to the slot number of where the -# HUD bar should be placed. The slot number must be an integer greater of equal to 0. Where -# the HUD bars will be displayed exactly depends on the alignment pattern being used. -# All HUD bars to which no order value has been applied will fill in all slots which have -# not been occupied by the HUD bars specified in this setting, the slots will be filled in -# from the lowest slot number. -# Note that the order of those remaining HUD bars is not fixed, it basically just boils -# down on which mod “came” first. Don't worry, the mod will still work perfectly fine, this -# setting is entirely optional. -# The identifier for the health bar is “health” and the identifier for the breath bar is -# “breath”. For other HUD bars, you have to learn it from the mod which is supplying them. -# -# Be careful not to use slot indices twice, or else different HUD bars will be drawn over -# each other! -# -# Example: “breath=0, health=1” -# This makes the breath bar first and the health bar second, which is the opposite order -# of the default one. -hudbars_sorting (HUD bars order) string - -[Positions and offsets] -# Horizontal (x) main position of the HUD bars over the entire screen. -# 0.0 is left-most, 1.0 is right-most. -# For the zig-zag alignment pattern, this is for the left HUD bars. -hudbars_pos_left_x (Left HUD bar screen x position) float 0.5 0.0 1.0 -# Vertical (y) main position of the HUD bars over the entire screen. -# 0.0 is top, 1.0 is bottom. -# For the zig-zag alignment pattern, this is for the left HUD bars. -hudbars_pos_left_y (Left HUD bar screen y position) float 1.0 0.0 1.0 -# Horizontal (x) main position of the right HUD bars over the entire screen. -# 0.0 is left-most, 1.0 is right-most. -# Only used for the zig-zag alignment pattern. -hudbars_pos_right_x (Right HUD bar screen x position) float 0.5 0.0 1.0 -# Vertical main position (y) of the right HUD bars over the entire screen. -# 0.0 is top, 1.0 is bottom. -# Only used for the zig-zag alignment pattern. -hudbars_pos_right_y (Right HUD bar screen y position) float 1.0 0.0 1.0 - -# Precise x offset in pixels from the basic screen x position of the HUD bars. -# For the zig-zag alignment pattern, this is for the left HUD bars. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_left_x (Left HUD bar x offset) int -175 -# Precise y offset in pixels from the basic screen y position of the HUD bars. -# For the zig-zag alignment pattern, this is for the left HUD bars. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_left_y (Left HUD bar y offset) int -86 -# Precise x offset in pixels from the basic screen x position of the right HUD bars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_right_x (Right HUD bar x offset) int 15 -# Precise y offset in pixels from the basic screen y position of the right HUD bars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_right_y (Right HUD bar y offset) int -86 - -# Precise x offset in pixels from the basic screen x position of the HUD statbars. -# For the zig-zag alignment pattern, this is for the left HUD statbars. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_left_x (Left HUD statbar x offset) int -265 -# Precise y offset in pixels from the basic screen y position of the HUD statbars. -# For the zig-zag alignment pattern, this is for the left HUD statbars. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_left_y (Left HUD statbar y offset) int -90 -# Precise x offset in pixels from the basic screen x position of the right HUD statbars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_right_x (Right HUD statbar x offset) int 25 -# Precise y offset in pixels from the basic screen y position of the right HUD statbars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_right_y (Right HUD statbar y offset) int -90 - -# The vertical distance between two HUD bars, in pixels. -hudbars_vmargin (Vertical distance between HUD bars) int 24 0 - -[Performance] -# The of seconds which need to pass before the server updates the default HUD bars -# (health and breath). Increase this number if you have a slow server or a slow network -# connection and experience performance problems. -hudbars_tick (Default HUD bars update interval) float 0.1 0.0 4.0 diff --git a/mods/HUD/hudbars/textures/hudbars_bar_background.png b/mods/HUD/hudbars/textures/hudbars_bar_background.png deleted file mode 100644 index cbc6c3f51..000000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bar_background.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bar_breath.png b/mods/HUD/hudbars/textures/hudbars_bar_breath.png deleted file mode 100644 index 7d19a5752..000000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bar_breath.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bar_health.png b/mods/HUD/hudbars/textures/hudbars_bar_health.png deleted file mode 100644 index 9043e1191..000000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bar_health.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bgicon_breath.png b/mods/HUD/hudbars/textures/hudbars_bgicon_breath.png deleted file mode 100644 index 51cb79aa7..000000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bgicon_breath.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bgicon_health.png b/mods/HUD/hudbars/textures/hudbars_bgicon_health.png deleted file mode 100644 index aa4a6123c..000000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bgicon_health.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_icon_breath.png b/mods/HUD/hudbars/textures/hudbars_icon_breath.png deleted file mode 100644 index f1d714fec..000000000 Binary files a/mods/HUD/hudbars/textures/hudbars_icon_breath.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_icon_health.png b/mods/HUD/hudbars/textures/hudbars_icon_health.png deleted file mode 100644 index d0e304100..000000000 Binary files a/mods/HUD/hudbars/textures/hudbars_icon_health.png and /dev/null differ diff --git a/mods/HUD/mcl_achievements/README.txt b/mods/HUD/mcl_achievements/README.txt deleted file mode 100644 index 352f9a184..000000000 --- a/mods/HUD/mcl_achievements/README.txt +++ /dev/null @@ -1 +0,0 @@ -License of this mod (including textures and other data): WTFPL diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua deleted file mode 100644 index c963773d1..000000000 --- a/mods/HUD/mcl_achievements/init.lua +++ /dev/null @@ -1,257 +0,0 @@ --- Settings - --- If true, activates achievements from other Minecraft editions (XBox, PS, etc.) -local non_pc_achievements = false - -local S = minetest.get_translator(minetest.get_current_modname()) - --- Achievements from PC Edition - -awards.register_achievement("mcl_buildWorkBench", { - title = S("Benchmarking"), - description = S("Craft a crafting table from 4 wooden planks."), - icon = "crafting_workbench_front.png", - trigger = { - type = "craft", - item = "mcl_crafting_table:crafting_table", - target = 1 - } -}) -awards.register_achievement("mcl:buildPickaxe", { - title = S("Time to Mine!"), - description = S("Use a crafting table to craft a wooden pickaxe from wooden planks and sticks."), - icon = "default_tool_woodpick.png", - trigger = { - type = "craft", - item = "mcl_tools:pick_wood", - target = 1 - } -}) -awards.register_achievement("mcl:buildFurnace", { - title = S("Hot Topic"), - description = S("Use 8 cobblestones to craft a furnace."), - icon = "default_furnace_front.png", - trigger = { - type = "craft", - item = "mcl_furnaces:furnace", - target = 1 - } -}) -awards.register_achievement("mcl:buildHoe", { - title = S("Time to Farm!"), - description = S("Use a crafting table to craft a wooden hoe from wooden planks and sticks."), - icon = "farming_tool_woodhoe.png", - trigger = { - type = "craft", - item = "mcl_farming:hoe_wood", - target = 1 - } -}) -awards.register_achievement("mcl:makeBread", { - title = S("Bake Bread"), - description = S("Use wheat to craft a bread."), - icon = "farming_bread.png", - trigger = { - type = "craft", - item = "mcl_farming:bread", - target = 1 - } -}) - -awards.register_achievement("mcl:bakeCake", { - title = S("The Lie"), - description = S("Craft a cake using wheat, sugar, milk and an egg."), - icon = "cake.png", - trigger = { - type = "craft", - item = "mcl_cake:cake", - target = 1 - } -}) -awards.register_achievement("mcl:buildBetterPickaxe", { - title = S("Getting an Upgrade"), - -- TODO: This achievement should support all non-wood pickaxes - description = S("Craft a stone pickaxe using sticks and cobblestone."), - icon = "default_tool_stonepick.png", - trigger = { - type = "craft", - item = "mcl_tools:pick_stone", - target = 1 - } -}) -awards.register_achievement("mcl:buildSword", { - title = S("Time to Strike!"), - description = S("Craft a wooden sword using wooden planks and sticks on a crafting table."), - icon = "default_tool_woodsword.png", - trigger = { - type = "craft", - item = "mcl_tools:sword_wood", - target = 1 - } -}) - -awards.register_achievement("mcl:bookcase", { - title = S("Librarian"), - description = S("Craft a bookshelf."), - icon = "default_bookshelf.png", - trigger = { - type = "craft", - item = "mcl_books:bookshelf", - target = 1 - } -}) - --- Item pickup achievements: These are awarded when picking up a certain item. --- The achivements are manually given in the mod mcl_item_entity. -awards.register_achievement("mcl:diamonds", { - title = S("DIAMONDS!"), - description = S("Pick up a diamond from the floor."), - icon = "mcl_core_diamond_ore.png", -}) -awards.register_achievement("mcl:blazeRod", { - title = S("Into Fire"), - description = S("Pick up a blaze rod from the floor."), - icon = "mcl_mobitems_blaze_rod.png", -}) - -awards.register_achievement("mcl:killCow", { - title = S("Cow Tipper"), - description = S("Pick up leather from the floor.\nHint: Cows and some other animals have a chance to drop leather, when killed."), - icon = "mcl_mobitems_leather.png", -}) -awards.register_achievement("mcl:mineWood", { - title = S("Getting Wood"), - description = S("Pick up a wood item from the ground.\nHint: Punch a tree trunk until it pops out as an item."), - icon = "default_tree.png", -}) - --- Smelting achivements: These are awarded when picking up an item from a furnace --- output. They are given in mcl_furnaces. -awards.register_achievement("mcl:acquireIron", { - title = S("Aquire Hardware"), - description = S("Take an iron ingot from a furnace's output slot.\nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace."), - icon = "default_steel_ingot.png", -}) -awards.register_achievement("mcl:cookFish", { - title = S("Delicious Fish"), - description = S("Take a cooked fish from a furnace.\nHint: Use a fishing rod to catch a fish and cook it in a furnace."), - icon = "mcl_fishing_fish_cooked.png", -}) - --- Other achievements triggered outside of mcl_achievements - --- Triggered in mcl_minecarts -awards.register_achievement("mcl:onARail", { - title = S("On A Rail"), - description = S("Travel by minecart for at least 1000 meters from your starting point in a single ride."), - icon = "default_rail.png", -}) - --- Triggered in mcl_bows -awards.register_achievement("mcl:snipeSkeleton", { - title = S("Sniper Duel"), - -- TODO: This achievement should be for killing, not hitting - -- TODO: The range should be 50, not 20. Nerfed because of reduced bow range - description = S("Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters."), - icon = "mcl_bows_bow.png", -}) - --- Triggered in mcl_portals -awards.register_achievement("mcl:buildNetherPortal", { - title = S("Into the Nether"), - description = S("Use obsidian and a fire starter to construct a Nether portal."), - icon = "default_obsidian.png", -}) - --- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) - -if non_pc_achievements then - awards.register_achievement("mcl:n_placeDispenser", { - title = S("Dispense With This"), - description = S("Place a dispenser."), - icon = "mcl_dispensers_dispenser_front_horizontal.png", - trigger = { - type = "place", - node = "mcl_dispensers:dispenser", - target = 1 - } - }) - - -- FIXME: Eating achievements don't work when you have exactly one of these items on hand - awards.register_achievement("mcl:n_eatPorkchop", { - title = S("Pork Chop"), - description = S("Eat a cooked porkchop."), - icon = "mcl_mobitems_porkchop_cooked.png", - trigger = { - type = "eat", - item= "mcl_mobitems:cooked_porkchop", - target = 1, - } - }) - awards.register_achievement("mcl:n_eatRabbit", { - title = S("Rabbit Season"), - icon = "mcl_mobitems_rabbit_cooked.png", - description = S("Eat a cooked rabbit."), - trigger = { - type = "eat", - item= "mcl_mobitems:cooked_rabbit", - target = 1, - } - }) - awards.register_achievement("mcl:n_eatRottenFlesh", { - title = S("Iron Belly"), - description = S("Get really desperate and eat rotten flesh."), - icon = "mcl_mobitems_rotten_flesh.png", - trigger = { - type = "eat", - item= "mcl_mobitems:rotten_flesh", - target = 1, - } - }) - awards.register_achievement("mcl:n_placeFlowerpot", { - title = S("Pot Planter"), - description = S("Place a flower pot."), - icon = "mcl_flowerpots_flowerpot_inventory.png", - trigger = { - type = "place", - node = "mcl_flowerpots:flower_pot", - target = 1, - } - }) - - awards.register_achievement("mcl:n_emeralds", { - title = S("The Haggler"), - description = S("Mine emerald ore."), - icon = "default_emerald.png", - trigger = { - type = "dig", - node = "mcl_core:stone_with_emerald", - target = 1, - } - }) -end - --- Show achievements formspec when the button was pressed -minetest.register_on_player_receive_fields(function(player, formname, fields) - if fields.__mcl_achievements then - local name = player:get_player_name() - awards.show_to(name, name, nil, false) - end -end) - - -awards.register_achievement("mcl:stoneAge", { - title = S("Stone Age"), - description = S("Mine a stone with new pickaxe."), - icon = "default_cobble.png", -}) -awards.register_achievement("mcl:hotStuff", { - title = S("Hot Stuff"), - description = S("Put lava in a bucket."), - icon = "bucket_lava.png", -}) -awards.register_achievement("mcl:obsidian", { - title = S("Ice Bucket Challenge"), - description = S("Obtain an obsidian block."), - icon = "default_obsidian.png", -}) diff --git a/mods/HUD/mcl_achievements/locale/mcl_achievements.de.tr b/mods/HUD/mcl_achievements/locale/mcl_achievements.de.tr deleted file mode 100644 index 49c486e48..000000000 --- a/mods/HUD/mcl_achievements/locale/mcl_achievements.de.tr +++ /dev/null @@ -1,49 +0,0 @@ -# textdomain:mcl_achievements -Aquire Hardware=Schmied -Bake Bread=Brot backen -Benchmarking=Tischler -Cow Tipper=Kuhschubser -Craft a bookshelf.=Fertigen Sie ein Bücherregal. -Craft a cake using wheat, sugar, milk and an egg.=Fertigen Sie einen Kuchen aus Weizen, Zucker, Milch und einem Ei. -Craft a crafting table from 4 wooden planks.=Fertigen Sie eine Werkbank aus 4 Holzplanken. -Craft a stone pickaxe using sticks and cobblestone.=Fertigen Sie eine Steinspitzhacke aus Stöcken und Kopfsteinpflaster. -Craft a wooden sword using wooden planks and sticks on a crafting table.=Fertigen Sie ein Holzschwert aus Holzplanken und Stöcken an einer Werkbank. -DIAMONDS!=DIAMANTEN! -Delicious Fish=Leckerer Fisch -Dispense With This=Ein Auge darauf werfen -Eat a cooked porkchop.=Essen Sie ein gekochtes Schweinekotelett -Eat a cooked rabbit.=Essen Sie ein gekochtes Kaninchen -Get really desperate and eat rotten flesh.=Verzweifeln Sie und essen Sie Gammelfleisch. -Getting Wood=Holzhacker -Getting an Upgrade=Aufwertung -Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.=Treffen Sie ein Skelett, Witherskelett oder einen Eiswanderer mit Bogen und Pfeil aus einer Entfernung von mindestens 20 Metern. -Hot Topic=Heißes Eisen -Into Fire=In das Feuer -Into the Nether=In den Nether -Iron Belly=Eiserner Magen -Librarian=Bibliothekar -Mine emerald ore.=Bauen Sie Smaragderz ab. -On A Rail=Auf der Schiene -Pick up a blaze rod from the floor.=Sammeln Sie eine Lohenrute vom Boden auf. -Pick up a diamond from the floor.=Sammeln Sie einen Diamanten vom Boden auf. -Pick up a wood item from the ground.@nHint: Punch a tree trunk until it pops out as an item.=Sammeln Sie ein Stück Holz vom Boden auf.@nTipp: Hauen Sie einen Baumstamm, bis er als Gegenstand herausploppt. -Pick up leather from the floor.@nHint: Cows and some other animals have a chance to drop leather, when killed.=Sammeln Sie Leder vom Boden auf.@nTipp: Kühe und einige andere Tiere werfen vielleicht Leder ab, wenn sie sterben. -Place a dispenser.=Platzieren Sie einen Werfer -Place a flower pot.=Platzieren Sie einen Blumentopf -Pork Chop=Kassler -Pot Planter=Topfpflanzer -Rabbit Season=Kaninchensaison -Sniper Duel=Scharfschützenduell -Take a cooked fish from a furnace.@nHint: Use a fishing rod to catch a fish and cook it in a furnace.=Nehmen Sie einen gekochten Fisch aus einem Ofen.@nTipp: Benutzen Sie eine Angel, um einen Fisch zu fangen und kochen Sie ihn in einem Ofen. -Take an iron ingot from a furnace's output slot.@nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace.=Nehmen Sie einen Eisenbarren aus dem Ausgabeschlitz eines Ofens.@nTipp: Um einen Eisenbarren zu erhalten, platzieren Sie einen Brennstoff (wie Kohle) und Eisenerz in einen Ofen. -The Haggler=Der Sammler -The Lie=Die Lüge -Time to Farm!=Bauernzeit -Time to Mine!=Zeit zum Graben! -Time to Strike!=Zuschlagen! -Travel by minecart for at least 1000 meters from your starting point in a single ride.=Reisen Sie mit einer Lore für mindestens 1000 Meter vom Startpunkt aus in einer einzigen Fahrt. -Use 8 cobblestones to craft a furnace.=Benutzen Sie 8 Kopfsteinpflaster, um einen Ofen zu fertigen. -Use a crafting table to craft a wooden hoe from wooden planks and sticks.=Benutzen Sie eine Werkbank, um eine Holzhacke aus Holzplanken und Stöcken zu fertigen. -Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Benutzen Sie eine Werkbank, um eine Holzspitzhacke aus Holzplanken und Stöcken zu fertigen. -Use obsidian and a fire starter to construct a Nether portal.=Benutzen Sie Obsidian und ein Feuerzeug, um ein Netherportal zu errichten. -Use wheat to craft a bread.=Benutzen Sie Weizen, um ein Brot zu machen. diff --git a/mods/HUD/mcl_achievements/locale/mcl_achievements.es.tr b/mods/HUD/mcl_achievements/locale/mcl_achievements.es.tr deleted file mode 100644 index 2044e8261..000000000 --- a/mods/HUD/mcl_achievements/locale/mcl_achievements.es.tr +++ /dev/null @@ -1,49 +0,0 @@ -# textdomain:mcl_achievements -Aquire Hardware=Obteniendo un lingote -Bake Bread=Horneando pan -Benchmarking=Crea tu mesa de trabajo -Cow Tipper=Consiguiendo cuero -Craft a bookshelf.=Crea una estantería. -Craft a cake using wheat, sugar, milk and an egg.=Crea una tarta con trigo, azúcar, leche y un huevo. -Craft a crafting table from 4 wooden planks.=Crea una mesa de trabajo con 4 tablas de madera procesada. -Craft a stone pickaxe using sticks and cobblestone.=Crea un pico de piedra con palos y rocas. -Craft a wooden sword using wooden planks and sticks on a crafting table.=Haz una espada de madera con tablas de madera y palos en una mesa de trabajo. -DIAMONDS!=¡Diamantes! -Delicious Fish=Delicioso pescado -Dispense With This=Prescinda de esto -Eat a cooked porkchop.=Come una chuleta de cerdo cocinado. -Eat a cooked rabbit.=Come un conejo cocinado. -Get really desperate and eat rotten flesh.=Desesperate y come carne podrida. -Getting Wood=Obtén madera -Getting an Upgrade=Obteniendo una mejora -Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.=Golpear un esqueleto, Wither o desviarle con arco y flecha desde una distancia de al menos 20 metros. -Hot Topic=Tema candente -Into Fire=En el fuego -Into the Nether=En el abismo -Iron Belly=Vientre de hierro -Librarian=Bibliotecario -Mine emerald ore.=Mina de esmeralda. -On A Rail=Viajando en un carril -Pick up a blaze rod from the floor.=Recoge una barra de fuego del suelo. -Pick up a diamond from the floor.=Recoge un diamante del suelo. -Pick up a wood item from the ground.@nHint: Punch a tree trunk until it pops out as an item.=Recoge un elemento de madera del suelo. @nSugerencia: Golpee el tronco de un árbol hasta que salga como un elemento. -Pick up leather from the floor.@nHint: Cows and some other animals have a chance to drop leather, when killed.=Recoja el cuero del suelo. @nSugerencia: Las vacas y algunos otros animales tienen la oportunidad de soltar el cuero cuando mueren. -Place a dispenser.=Coloca un dispensador. -Place a flower pot.=Coloca una maceta. -Pork Chop=Chuleta de cerdo -Pot Planter=Jardinero -Rabbit Season=Temporada del conejo -Sniper Duel=Duelo de arqueros -Take a cooked fish from a furnace.@nHint: Use a fishing rod to catch a fish and cook it in a furnace.=Tome un pescado cocido de un horno. @nSugerencia: Use una caña de pescar para atrapar un pez y cocínelo en un horno. -Take an iron ingot from a furnace's output slot.@nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace.=Obtén un lingote de hierro de un horno. @nSugerencia: Para fundir un lingote de hierro, coloque un combustible (como carbón) y mineral de hierro en un horno. -The Haggler=El regateador -The Lie=El cocinero -Time to Farm!=¡Hora de cultivar! -Time to Mine!=¡Hora de minar! -Time to Strike!=¡Hora de atacar! -Travel by minecart for at least 1000 meters from your starting point in a single ride.=Viaje en un carro minero durante al menos 1000 metros desde su punto de partida en un solo viaje. -Use 8 cobblestones to craft a furnace.=Usa 8 rocas para crear un horno. -Use a crafting table to craft a wooden hoe from wooden planks and sticks.=Usa una mesa de trabajo para hacer una azada de madera con tablas de madera procesada y palos de madera. -Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Usa una mesa de trabajo para hacer un pico de madera con tablas de madera procesada y palos de madera. -Use obsidian and a fire starter to construct a Nether portal.=Usa obsidiana y un iniciador de fuego para construir un portal abisal. -Use wheat to craft a bread.=Usa trigo para elaborar pan. diff --git a/mods/HUD/mcl_achievements/locale/mcl_achievements.fr.tr b/mods/HUD/mcl_achievements/locale/mcl_achievements.fr.tr deleted file mode 100644 index ae4941d2e..000000000 --- a/mods/HUD/mcl_achievements/locale/mcl_achievements.fr.tr +++ /dev/null @@ -1,49 +0,0 @@ -# textdomain:mcl_achievements -Aquire Hardware=Acquérir du matériel -Bake Bread=Faire du pain -Benchmarking=Fabriquer -Cow Tipper=Chevaucher une vache -Craft a bookshelf.=Fabriquez une Bibliothèque. -Craft a cake using wheat, sugar, milk and an egg.=Fabriquez un gâteau avec du blé, du sucre, du lait et un œuf. -Craft a crafting table from 4 wooden planks.=Fabriquez un établi à partir de 4 planches de bois. -Craft a stone pickaxe using sticks and cobblestone.=Fabriquez une pioche en pierre à l'aide de bâtons et de pierre. -Craft a wooden sword using wooden planks and sticks on a crafting table.=Fabriquez une épée en bois à l'aide de planches et de bâtons en bois sur un établi. -DIAMONDS!=DIAMANTS! -Delicious Fish=Délicieux Poisson -Dispense With This=Dispenser de ça -Eat a cooked porkchop.=Mangez du porc cuit. -Eat a cooked rabbit.=Mangez du lapin cuit. -Get really desperate and eat rotten flesh.=Soyez vraiment désespéré et mangez de la chair pourrie. -Getting Wood=Obtenir du bois -Getting an Upgrade=Obtenir une augmentaton de niveau -Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.=Frappez un squelette, wither squelette ou stray à l'arc et à la flèche à une distance d'au moins 20 mètres. -Hot Topic=Sujet brûlant -Into Fire=Dans le feu -Into the Nether=Dans le Nether -Iron Belly=Ventre de fer -Librarian=Bibliothécaire -Mine emerald ore.=Mine de minerai d'émeraude. -On A Rail=Sur un rail -Pick up a blaze rod from the floor.=Ramassez une tige de feu sur le sol. -Pick up a diamond from the floor.=Ramassez un diamant sur le sol. -Pick up a wood item from the ground.@nHint: Punch a tree trunk until it pops out as an item.=Ramassez un objet en bois du sol.@nConseil: Frappez un tronc d'arbre jusqu'à ce qu'il ressorte comme un objet. -Pick up leather from the floor.@nHint: Cows and some other animals have a chance to drop leather, when killed.=Ramassez le cuir du sol.@nConseil: Les vaches et certains autres animaux ont une chance de laisser tomber le cuir lorsqu'ils sont tués. -Place a dispenser.=Placez un distributeur. -Place a flower pot.=Placez un pot de fleurs. -Pork Chop=Côtelette de porc -Pot Planter=Jardinière en pot -Rabbit Season=Saison du lapin -Sniper Duel=Duel de sniper -Take a cooked fish from a furnace.@nHint: Use a fishing rod to catch a fish and cook it in a furnace.=Prenez un poisson cuit d'un four.@nConseil: Utilisez une canne à pêche pour attraper un poisson et faites-le cuire dans un four. -Take an iron ingot from a furnace's output slot.@nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace.=Prenez un lingot de fer dans la fente de sortie d'un four.@nConseil: Pour faire fondre un lingot de fer, mettez du combustible (comme du charbon) et du minerai de fer dans un four. -The Haggler=Le marchand -The Lie=Le mensonge -Time to Farm!=C'est l'heure du fermier! -Time to Mine!=C'est l'heure de miner! -Time to Strike!=C'est l'heure de combattre! -Travel by minecart for at least 1000 meters from your starting point in a single ride.=Voyagez en wagonnet sur au moins 1000 mètres de votre point de départ en une seule fois. -Use 8 cobblestones to craft a furnace.=Utilise 8 pierres pour fabriquer un four. -Use a crafting table to craft a wooden hoe from wooden planks and sticks.=Utilisez un établi pour fabriquer une houe en bois à partir de planches et de bâtons en bois. -Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Utilisez un établi pour fabriquer une pioche en bois à partir de planches et de bâtons en bois. -Use obsidian and a fire starter to construct a Nether portal.=Utilisez de l'obsidienne et un briquet pour construire un portail du Nether. -Use wheat to craft a bread.=Utilisez du blé pour fabriquer un pain. diff --git a/mods/HUD/mcl_achievements/locale/mcl_achievements.pl.tr b/mods/HUD/mcl_achievements/locale/mcl_achievements.pl.tr deleted file mode 100644 index 78ab53f82..000000000 --- a/mods/HUD/mcl_achievements/locale/mcl_achievements.pl.tr +++ /dev/null @@ -1,50 +0,0 @@ -# textdomain:mcl_achievements -Aquire Hardware=Zdobądź narzędzie -Bake Bread=Upiecz chleb -Benchmarking=Rzemieślnictwo -Cow Tipper=Raz krowie śmierć -Craft a bookshelf.=Wytwórz półkę z książkami. -Craft a cake using wheat, sugar, milk and an egg.=Wytwórz ciasto z pszenicy, cukru, mleka i jajka. -Craft a crafting table from 4 wooden planks.=Wytwórz stół rzemieślniczy z 4 desek. -Craft a stone pickaxe using sticks and cobblestone.=Wytwórz kamienny kilof korzystając z patyków i brukowca. -Craft a wooden sword using wooden planks and sticks on a crafting table.=Wytwórz drewniany miecz korzystając z desek i patyków na stole rzemieślniczym. -DIAMONDS!=DIAMENTY! -Delicious Fish=Pyszna ryba -Dispense With This=Dozuj to -Eat a cooked porkchop.=Zjedz upieczony kotlet. -Eat a cooked rabbit.=Zjedz pieczonego królika. -Get really desperate and eat rotten flesh.=Bądź zdesperowany i zjedz zgniłe mięso. -Getting Wood=Zbieranie drewna -Getting an Upgrade=Ulepszenie -Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.=Traf szkieleta, witherowego szkieleta lub tułacza strzałą z łuku z odległości co najmniej 20 metrów. -Hot Topic=Gorący temat -Into Fire=W ogień -Into the Nether=W Nether -Iron Belly=Żelazny żołądek -Librarian=Bibliotekarz -Mine emerald ore.=Wykop rudę szmaragdu. -On A Rail=Na torach -Pick up a blaze rod from the floor.=Podnieś płomienną różdżkę z podłogi. -Pick up a diamond from the floor.=Ponieś diament z podłogi. -Pick up a wood item from the ground.@nHint: Punch a tree trunk until it pops out as an item.=Podnieś drewniany przedmiot z ziemi.@nPodpowiedź: Uderzaj pień drzewa dopóki nie wyleci jako przedmiot. -Pick up leather from the floor.@nHint: Cows and some other animals have a chance to drop leather, when killed.=Podnieś skórkę z ziemi.@nPodpowiedź: Krowy i inne zwierzęta mają szansę upuścić skórę gdy zostaną zabite. -Place a dispenser.=Postaw dozownik. -Place a flower pot.=Postaw doniczkę. -Pork Chop=Kotlet -Pot Planter=Ogrodnik -Rabbit Season=Sezon na króliki -Sniper Duel=Pojedynek snajperów -Take a cooked fish from a furnace.@nHint: Use a fishing rod to catch a fish and cook it in a furnace.=Weź upieczoną rybę z pieca.@nPodpowiedź: Użyj wędki aby złapać rybę i upiecz ją w piecu. -Take an iron ingot from a furnace's output slot.@nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace.=Weź sztabkę żelaza z wyjściowego miejsca pieca.@nPodpowiedź: Aby wytopić sztabkę żelaza, umieść paliwo (np. węgiel) w piecu. -The Haggler=Handlarz -The Lie=Kłamstwo -Time to Farm!=Czas na rolnictwo! -Time to Mine!=Czas na kopanie! -Time to Strike!=Czas na atak! -Travel by minecart for at least 1000 meters from your starting point in a single ride.=Przejedź przez przynajmniej 1000 metrów od punktu startowego pojedynczą przejażdżką. -Use 8 cobblestones to craft a furnace.=Użyj 8 brukowców by wytworzyć piec. -Use a crafting table to craft a wooden hoe from wooden planks and sticks.=Użyj stołu rzemieślniczego aby wytworzyć drewnianą motykę z desek i patyków. -Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Użyj stołu rzemieślniczego aby wytworzyć drewniany kilof z desek i patyków. -Use obsidian and a fire starter to construct a Nether portal.=Użyj obsydianu i źródła ognia aby skonstruować portal do Netheru. -Use wheat to craft a bread.=Użyj pszenicy by wytworzyć chleb. - diff --git a/mods/HUD/mcl_achievements/locale/mcl_achievements.ru.tr b/mods/HUD/mcl_achievements/locale/mcl_achievements.ru.tr deleted file mode 100644 index 0db2ae99d..000000000 --- a/mods/HUD/mcl_achievements/locale/mcl_achievements.ru.tr +++ /dev/null @@ -1,49 +0,0 @@ -# textdomain:mcl_achievements -Aquire Hardware=Куй Железо -Bake Bread=Хлеб всему голова -Benchmarking=Верстак -Cow Tipper=Кожа да кости -Craft a bookshelf.=Создание книжной полки -Craft a cake using wheat, sugar, milk and an egg.=Создание торта из пшеницы, сахара, молока и яйца. -Craft a crafting table from 4 wooden planks.=Создание верстака из 4 досок. -Craft a stone pickaxe using sticks and cobblestone.=Создание каменного топора из палок и булыжников. -Craft a wooden sword using wooden planks and sticks on a crafting table.=Изготовление деревянного меча из досок и палок на верстаке. -DIAMONDS!=АЛМАЗЫ! -Delicious Fish=Вкусная Рыба -Dispense With This=Раздавай Это -Eat a cooked porkchop.=Употребление в пищу приготовленной свиной отбивной. -Eat a cooked rabbit.=Употребление в пищу приготовленного кролика. -Get really desperate and eat rotten flesh.=Отчаянное и необдуманное употребление в пищу гнилого мяса -Getting Wood=Рубка Леса -Getting an Upgrade=Модернизация -Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.=Удар по скелету, скелету-иссушителю либо уклонение от стрелы на расстоянии не менее 20 метров. -Hot Topic=Автор Жжёт -Into Fire=В Огне -Into the Nether=В Аду -Iron Belly=Железный Живот -Librarian=Библиотекарь -Mine emerald ore.=Добыча изумрудной руды. -On A Rail=На Рельсах -Pick up a blaze rod from the floor.=Поднятие огненного стержня с пола. -Pick up a diamond from the floor.=Поднятие алмаза с пола. -Pick up a wood item from the ground.@nHint: Punch a tree trunk until it pops out as an item.=Поднятие дерева с земли.@nПодсказка: Бейте по стволу, пока он не упадёт на землю, превратившись в предмет. -Pick up leather from the floor.@nHint: Cows and some other animals have a chance to drop leather, when killed.=Поднятие кожи с пола.@nПодсказка: Коровы и некоторые другие животные могут оставлять кожу, если их убивать. -Place a dispenser.=Установка диспенсера. -Place a flower pot.=Установка цветочного горшка. -Pork Chop=Свиная Отбивная -Pot Planter=Сажатель Горшков -Rabbit Season=Кроличий Сезон -Sniper Duel=Снайперская Дуэль -Take a cooked fish from a furnace.@nHint: Use a fishing rod to catch a fish and cook it in a furnace.=Приготовление рыбы в печи.@nПодсказка: Ловите рыбу удочкой и готовьте её в печи. -Take an iron ingot from a furnace's output slot.@nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace.=Получение слитка железа из печи.@nПодсказка: чтобы переплавить железную руду, нужно положить её в печь и туда же поместить топливо (уголь или другое). -The Haggler=Хагглер -The Lie=Тортик -Time to Farm!=Время фермерства! -Time to Mine!=Время добывать! -Time to Strike!=Время сражаться! -Travel by minecart for at least 1000 meters from your starting point in a single ride.=Поездка на вагонетке минимум на 1000 метров от стартовой точки за один раз. -Use 8 cobblestones to craft a furnace.=Создание печи из 8 булыжников. -Use a crafting table to craft a wooden hoe from wooden planks and sticks.=Создание деревянной мотыги из досок и палок на верстаке. -Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Создание деревянной кирки из досок и палок на верстаке. -Use obsidian and a fire starter to construct a Nether portal.=Создание Адского портала при помощи обсидиана и огнива. -Use wheat to craft a bread.=Использование пшеницы для приготовления хлеба. diff --git a/mods/HUD/mcl_achievements/locale/template.txt b/mods/HUD/mcl_achievements/locale/template.txt deleted file mode 100644 index ecdba2672..000000000 --- a/mods/HUD/mcl_achievements/locale/template.txt +++ /dev/null @@ -1,49 +0,0 @@ -# textdomain:mcl_achievements -Aquire Hardware= -Bake Bread= -Benchmarking= -Cow Tipper= -Craft a bookshelf.= -Craft a cake using wheat, sugar, milk and an egg.= -Craft a crafting table from 4 wooden planks.= -Craft a stone pickaxe using sticks and cobblestone.= -Craft a wooden sword using wooden planks and sticks on a crafting table.= -DIAMONDS!= -Delicious Fish= -Dispense With This= -Eat a cooked porkchop.= -Eat a cooked rabbit.= -Get really desperate and eat rotten flesh.= -Getting Wood= -Getting an Upgrade= -Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.= -Hot Topic= -Into Fire= -Into the Nether= -Iron Belly= -Librarian= -Mine emerald ore.= -On A Rail= -Pick up a blaze rod from the floor.= -Pick up a diamond from the floor.= -Pick up a wood item from the ground.@nHint: Punch a tree trunk until it pops out as an item.= -Pick up leather from the floor.@nHint: Cows and some other animals have a chance to drop leather, when killed.= -Place a dispenser.= -Place a flower pot.= -Pork Chop= -Pot Planter= -Rabbit Season= -Sniper Duel= -Take a cooked fish from a furnace.@nHint: Use a fishing rod to catch a fish and cook it in a furnace.= -Take an iron ingot from a furnace's output slot.@nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace.= -The Haggler= -The Lie= -Time to Farm!= -Time to Mine!= -Time to Strike!= -Travel by minecart for at least 1000 meters from your starting point in a single ride.= -Use 8 cobblestones to craft a furnace.= -Use a crafting table to craft a wooden hoe from wooden planks and sticks.= -Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.= -Use obsidian and a fire starter to construct a Nether portal.= -Use wheat to craft a bread.= diff --git a/mods/HUD/mcl_achievements/mod.conf b/mods/HUD/mcl_achievements/mod.conf deleted file mode 100644 index ed11618d7..000000000 --- a/mods/HUD/mcl_achievements/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_achievements -author = Wuzzy -description = Adds MCL2 Archivements -depends = awards diff --git a/mods/HUD/mcl_achievements/textures/mcl_achievements_button.png b/mods/HUD/mcl_achievements/textures/mcl_achievements_button.png deleted file mode 100644 index cef7e59cc..000000000 Binary files a/mods/HUD/mcl_achievements/textures/mcl_achievements_button.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/init.lua b/mods/HUD/mcl_base_textures/init.lua deleted file mode 100644 index 643c51108..000000000 --- a/mods/HUD/mcl_base_textures/init.lua +++ /dev/null @@ -1 +0,0 @@ --- This mod has no code and is only a collection of textures. diff --git a/mods/HUD/mcl_base_textures/mod.conf b/mods/HUD/mcl_base_textures/mod.conf deleted file mode 100644 index b36dccfe4..000000000 --- a/mods/HUD/mcl_base_textures/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_base_textures -author = Wuzzy -description = Provides core textures needed by Minetest. diff --git a/mods/HUD/mcl_base_textures/textures/bubble.png b/mods/HUD/mcl_base_textures/textures/bubble.png deleted file mode 100644 index f1d714fec..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/bubble.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/crack_anylength.png b/mods/HUD/mcl_base_textures/textures/crack_anylength.png deleted file mode 100644 index 7fe8721d9..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/crack_anylength.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/crosshair.png b/mods/HUD/mcl_base_textures/textures/crosshair.png deleted file mode 100644 index 8e94dcc6b..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/crosshair.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/heart.png b/mods/HUD/mcl_base_textures/textures/heart.png deleted file mode 100644 index d0e304100..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/heart.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_background.png b/mods/HUD/mcl_base_textures/textures/mcl_base_textures_background.png deleted file mode 100644 index e5d693e7b..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_background.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_background9.png b/mods/HUD/mcl_base_textures/textures/mcl_base_textures_background9.png deleted file mode 100644 index e5d693e7b..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_background9.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_button9.png b/mods/HUD/mcl_base_textures/textures/mcl_base_textures_button9.png deleted file mode 100644 index aab16013b..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_button9.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_button9_pressed.png b/mods/HUD/mcl_base_textures/textures/mcl_base_textures_button9_pressed.png deleted file mode 100644 index aeaea13a4..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/mcl_base_textures_button9_pressed.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/object_crosshair.png b/mods/HUD/mcl_base_textures/textures/object_crosshair.png deleted file mode 100644 index 8e94dcc6b..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/object_crosshair.png and /dev/null differ diff --git a/mods/HUD/mcl_base_textures/textures/smoke_puff.png b/mods/HUD/mcl_base_textures/textures/smoke_puff.png deleted file mode 100644 index b1be8d4e4..000000000 Binary files a/mods/HUD/mcl_base_textures/textures/smoke_puff.png and /dev/null differ diff --git a/mods/HUD/mcl_bossbars/init.lua b/mods/HUD/mcl_bossbars/init.lua deleted file mode 100644 index 96b6b4896..000000000 --- a/mods/HUD/mcl_bossbars/init.lua +++ /dev/null @@ -1,199 +0,0 @@ -mcl_bossbars = { - bars = {}, - huds = {}, - static = {}, - colors = {"light_purple", "blue", "red", "green", "yellow", "dark_purple", "white"}, - max_bars = tonumber(minetest.settings:get("max_bossbars")) or 4 -} - -function mcl_bossbars.recalculate_colors() - local sorted = {} - local colors = mcl_bossbars.colors - local color_count = #colors - local frame_count = color_count * 2 - for i, color in ipairs(colors) do - local idx = i * 2 - 1 - local image = "mcl_bossbars.png" - .. "^[transformR270" - .. "^[verticalframe:" .. frame_count .. ":" .. (idx - 1) - .. "^(mcl_bossbars_empty.png" - .. "^[lowpart:%d:mcl_bossbars.png" - .. "^[transformR270" - .. "^[verticalframe:" .. frame_count .. ":" .. idx .. ")" - local _, hex = mcl_util.get_color(color) - sorted[color] = { - image = image, - hex = hex, - } - end - mcl_bossbars.colors_sorted = sorted -end - -local function get_color_info(color, percentage) - local cdef = mcl_bossbars.colors_sorted[color] - return cdef.hex, string.format(cdef.image, percentage) -end - -local last_id = 0 - -function mcl_bossbars.add_bar(player, def, dynamic, priority) - local name = player:get_player_name() - local bars = mcl_bossbars.bars[name] - local bar = {text = def.text, priority = priority or 0, timeout = def.timeout} - bar.color, bar.image = get_color_info(def.color, def.percentage) - if dynamic then - for _, other in pairs(bars) do - if not other.id and other.color == bar.color and (other.original_text or other.text) == bar.text and other.image == bar.image then - if not other.count then - other.count = 1 - other.original_text = other.text - end - other.count = other.count + 1 - other.text = other.original_text .. " x" .. other.count - return - end - end - end - table.insert(bars, bar) - if not dynamic then - bar.raw_color = def.color - bar.id = last_id + 1 - last_id = bar.id - mcl_bossbars.static[bar.id] = bar - return bar.id - end -end - -function mcl_bossbars.remove_bar(id) - mcl_bossbars.static[id].id = nil - mcl_bossbars.static[id] = nil -end - -function mcl_bossbars.update_bar(id, def, priority) - local old = mcl_bossbars.static[id] - old.color = get_color_info(def.color or old.raw_color, def.percentage or old.percentage) - old.text = def.text or old.text - old.priority = priority or old.priority -end - -function mcl_bossbars.update_boss(object, name, color) - local props = object:get_luaentity() - if not props or not props.is_mob then - props = object:get_properties() - props.health = object:get_hp() - end - - local bardef = { - color = color, - text = props.nametag, - percentage = math.floor(props.health / props.hp_max * 100), - } - - if not bardef.text or bardef.text == "" then - bardef.text = name - end - - local pos = object:get_pos() - for _, player in pairs(minetest.get_connected_players()) do - local d = vector.distance(pos, player:get_pos()) - if d <= 80 then - mcl_bossbars.add_bar(player, bardef, true, d) - end - end -end - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - mcl_bossbars.huds[name] = {} - mcl_bossbars.bars[name] = {} -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - mcl_bossbars.huds[name] = nil - for _, bar in pairs(mcl_bossbars.bars[name]) do - if bar.id then - mcl_bossbars.static[bar.id] = nil - end - end - mcl_bossbars.bars[name] = nil -end) - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local bars = mcl_bossbars.bars[name] - local huds = mcl_bossbars.huds[name] - table.sort(bars, function(a, b) return a.priority < b.priority end) - local huds_new = {} - local bars_new = {} - local i = 0 - - while #huds > 0 or #bars > 0 do - local bar = table.remove(bars, 1) - local hud = table.remove(huds, 1) - - if bar and bar.id then - if bar.timeout then - bar.timeout = bar.timeout - dtime - end - if not bar.timeout or bar.timeout > 0 then - table.insert(bars_new, bar) - end - end - - if bar and not hud then - if i < mcl_bossbars.max_bars then - hud = { - color = bar.color, - image = bar.image, - text = bar.text, - text_id = player:hud_add({ - hud_elem_type = "text", - text = bar.text, - number = bar.color, - position = {x = 0.5, y = 0}, - alignment = {x = 0, y = 1}, - offset = {x = 0, y = i * 40}, - }), - image_id = player:hud_add({ - hud_elem_type = "image", - text = bar.image, - position = {x = 0.5, y = 0}, - alignment = {x = 0, y = 1}, - offset = {x = 0, y = i * 40 + 25}, - scale = {x = 3, y = 3}, - }), - } - end - elseif hud and not bar then - player:hud_remove(hud.text_id) - player:hud_remove(hud.image_id) - hud = nil - else - if bar.text ~= hud.text then - player:hud_change(hud.text_id, "text", bar.text) - hud.text = bar.text - end - - if bar.color ~= hud.color then - player:hud_change(hud.text_id, "number", bar.color) - hud.color = bar.color - end - - if bar.image ~= hud.image then - player:hud_change(hud.image_id, "text", bar.image) - hud.image = bar.image - end - end - - table.insert(huds_new, hud) - i = i + 1 - end - - mcl_bossbars.huds[name] = huds_new - mcl_bossbars.bars[name] = bars_new - end -end) - -mcl_bossbars.recalculate_colors() diff --git a/mods/HUD/mcl_bossbars/mod.conf b/mods/HUD/mcl_bossbars/mod.conf deleted file mode 100644 index 64cbd4c9f..000000000 --- a/mods/HUD/mcl_bossbars/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_bossbars -author = Fleckenstein -description = Show enderdragon & wither boss bars. Also allows custom bars. -depends = mcl_util, mcl_colors diff --git a/mods/HUD/mcl_bossbars/textures/mcl_bossbars.png b/mods/HUD/mcl_bossbars/textures/mcl_bossbars.png deleted file mode 100644 index 55bf36dc2..000000000 Binary files a/mods/HUD/mcl_bossbars/textures/mcl_bossbars.png and /dev/null differ diff --git a/mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png b/mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png deleted file mode 100644 index 1e50b6afc..000000000 Binary files a/mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png and /dev/null differ diff --git a/mods/HUD/mcl_credits/init.lua b/mods/HUD/mcl_credits/init.lua deleted file mode 100644 index db3ac8436..000000000 --- a/mods/HUD/mcl_credits/init.lua +++ /dev/null @@ -1,149 +0,0 @@ -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) - -mcl_credits = { - players = {}, - description = S("A faithful Open Source clone of Minecraft"), - people = dofile(minetest.get_modpath(modname) .. "/people.lua"), -} - -local function add_hud_element(def, huds, y) - def.alignment = {x = 0, y = 0} - def.position = {x = 0.5, y = 0} - def.offset = {x = 0, y = y} - def.z_index = 1001 - local id = huds.player:hud_add(def) - table.insert(huds.ids, id) - huds.moving[id] = y - return id -end - -function mcl_credits.show(player) - local name = player:get_player_name() - if mcl_credits.players[name] then - return - end - local huds = { - new = true, -- workaround for MT < 5.5 (sending hud_add and hud_remove in the same tick) - player = player, - moving = {}, - ids = { - player:hud_add({ - hud_elem_type = "image", - text = "credits_bg.png", - position = {x = 0, y = 0}, - alignment = {x = 1, y = 1}, - scale = {x = -100, y = -100}, - z_index = 1000, - }), - player:hud_add({ - hud_elem_type = "text", - text = S("Sneak to skip"), - position = {x = 1, y = 1}, - alignment = {x = -1, y = -1}, - offset = {x = -5, y = -5}, - z_index = 1001, - number = 0xFFFFFF, - }), - player:hud_add({ - hud_elem_type = "text", - text = " "..S("Jump to speed up (additionally sprint)"), - position = {x = 0, y = 1}, - alignment = {x = 1, y = -1}, - offset = {x = -5, y = -5}, - z_index = 1002, - number = 0xFFFFFF, - }), - }, - } - add_hud_element({ - hud_elem_type = "image", - text = "mineclone2_logo.png", - scale = {x = 1, y = 1}, - }, huds, 300, 0) - add_hud_element({ - hud_elem_type = "text", - text = mcl_credits.description, - number = 0x757575, - scale = {x = 5, y = 5}, - }, huds, 350, 0) - local y = 450 - for _, group in ipairs(mcl_credits.people) do - add_hud_element({ - hud_elem_type = "text", - text = group[1], - number = group[2], - scale = {x = 3, y = 3}, - }, huds, y, 0) - y = y + 25 - for _, name in ipairs(group[3]) do - y = y + 25 - add_hud_element({ - hud_elem_type = "text", - text = name, - number = 0xFFFFFF, - scale = {x = 1, y = 1}, - }, huds, y, 0) - end - y = y + 200 - end - huds.icon = add_hud_element({ - hud_elem_type = "image", - text = "mineclone2_icon.png", - scale = {x = 1, y = 1}, - }, huds, y) - mcl_credits.players[name] = huds -end - -function mcl_credits.hide(player) - local name = player:get_player_name() - local huds = mcl_credits.players[name] - if huds then - for _, id in pairs(huds.ids) do - player:hud_remove(id) - end - end - mcl_credits.players[name] = nil -end - -minetest.register_on_leaveplayer(function(player) - mcl_credits.players[player:get_player_name()] = nil -end) - -minetest.register_globalstep(function(dtime) - for _, huds in pairs(mcl_credits.players) do - local player = huds.player - local control = player:get_player_control() - if not huds.new and control.sneak then - mcl_credits.hide(player) - else - local moving = {} - local any - for id, y in pairs(huds.moving) do - y = y - 1 - - if control.jump then - y = y - 2 - if control.aux1 then - y = y - 5 - end - end - - if y > -100 then - if id == huds.icon then - y = math.max(400, y) - else - any = true - end - player:hud_change(id, "offset", {x = 0, y = y}) - moving[id] = y - end - end - if not any then - mcl_credits.hide(player) - end - huds.moving = moving - end - huds.new = false - end -end) diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.de.tr b/mods/HUD/mcl_credits/locale/mcl_credits.de.tr deleted file mode 100644 index fa26f5bc4..000000000 --- a/mods/HUD/mcl_credits/locale/mcl_credits.de.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_credits -3D Models=3D Modelle -A faithful Open Source clone of Minecraft=Ein treuer Open-Source-Klon von Minecraft -Contributors=Mitwirkende -Creator of MineClone=Schöpfer von MineClone -Creator of MineClone2=Schöpfer von MineClone2 -Developers=Entwickler -Jump to speed up (additionally sprint)=Springen, um zu beschleunigen (zusätzlich sprinten) -Maintainers=Betreuer -MineClone5=MineClone5 -Original Mod Authors=Original-Mod-Autoren -Sneak to skip=Schleichen zum Überspringen -Textures=Texturen -Translations=Übersetzungen diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.es.tr b/mods/HUD/mcl_credits/locale/mcl_credits.es.tr deleted file mode 100644 index a8886286e..000000000 --- a/mods/HUD/mcl_credits/locale/mcl_credits.es.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_credits -3D Models= -A faithful Open Source clone of Minecraft= -Contributors= -Creator of MineClone= -Creator of MineClone2= -Developers= -Jump to speed up (additionally sprint)= -Maintainers= -MineClone5= -Original Mod Authors= -Sneak to skip= -Textures= -Translations= \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.fr.tr b/mods/HUD/mcl_credits/locale/mcl_credits.fr.tr deleted file mode 100644 index b34249eff..000000000 --- a/mods/HUD/mcl_credits/locale/mcl_credits.fr.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_credits -3D Models=Modèles 3D -A faithful Open Source clone of Minecraft=Un clone open source de Minecraft -Contributors=Contributeurs -Creator of MineClone=Créateur de MineClone -Creator of MineClone2=Créateur de MineClone2 -Developers=Développeurs -Jump to speed up (additionally sprint)=Saut pour accélérer (peut être combiné avec sprint) -Maintainers=Mainteneurs -MineClone5=MineClone5 -Original Mod Authors=Auteurs des mods originaux -Sneak to skip=Shift pour passer -Textures=Textures -Translations=Traductions \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.pl.tr b/mods/HUD/mcl_credits/locale/mcl_credits.pl.tr deleted file mode 100644 index a8886286e..000000000 --- a/mods/HUD/mcl_credits/locale/mcl_credits.pl.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_credits -3D Models= -A faithful Open Source clone of Minecraft= -Contributors= -Creator of MineClone= -Creator of MineClone2= -Developers= -Jump to speed up (additionally sprint)= -Maintainers= -MineClone5= -Original Mod Authors= -Sneak to skip= -Textures= -Translations= \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.ru.tr b/mods/HUD/mcl_credits/locale/mcl_credits.ru.tr deleted file mode 100644 index a8886286e..000000000 --- a/mods/HUD/mcl_credits/locale/mcl_credits.ru.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_credits -3D Models= -A faithful Open Source clone of Minecraft= -Contributors= -Creator of MineClone= -Creator of MineClone2= -Developers= -Jump to speed up (additionally sprint)= -Maintainers= -MineClone5= -Original Mod Authors= -Sneak to skip= -Textures= -Translations= \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/template.txt b/mods/HUD/mcl_credits/locale/template.txt deleted file mode 100644 index 3ee9fa56c..000000000 --- a/mods/HUD/mcl_credits/locale/template.txt +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_credits -3D Models= -A faithful Open Source clone of Minecraft= -Contributors= -Creator of MineClone= -Creator of MineClone2= -Developers= -Jump to speed up (additionally sprint)= -Maintainers= -MineClone5= -Original Mod Authors= -Sneak to skip= -Textures= -Translations= diff --git a/mods/HUD/mcl_credits/mod.conf b/mods/HUD/mcl_credits/mod.conf deleted file mode 100644 index 3df6370af..000000000 --- a/mods/HUD/mcl_credits/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_credits -author = Fleckenstein -description = Show a HUD containing the credits diff --git a/mods/HUD/mcl_credits/people.lua b/mods/HUD/mcl_credits/people.lua deleted file mode 100644 index 4658393b6..000000000 --- a/mods/HUD/mcl_credits/people.lua +++ /dev/null @@ -1,157 +0,0 @@ -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) - -return { - {S("Creator of MineClone"), 0x0A9400, { - "davedevils", - }}, - {S("Creator of MineClone2"), 0xFBF837, { - "Wuzzy", - }}, - {S("Maintainers"), 0xFF51D5, { - "Nicu", - "cora", - }}, - {S("Previous Maintainers"), 0xFFFFFF, { - "Fleckenstein", - "jordan4ibanez", - }}, - {S("Developers"), 0xF84355, { - "bzoss", - "AFCMS", - "epCode", - "ryvnf", - "iliekprogrammar", - "MysticTempest", - "Rootyjr", - "aligator", - "Code-Sploit", - "NO11", - "kabou", - }}, - {S("Contributors"), 0x52FF00, { - "Laurent Rocher", - "HimbeerserverDE", - "TechDudie", - "Alexander Minges", - "ArTee3", - "ZeDique la Ruleta", - "pitchum", - "wuniversales", - "Bu-Gee", - "David McMackins II", - "Nicholas Niro", - "Wouters Dorian", - "Blue Blancmange", - "Jared Moody", - "Li0n", - "Midgard", - "Saku Laesvuori", - "Yukitty", - "ZedekThePD", - "aldum", - "dBeans", - "nickolas360", - "yutyo", - "Tianyang Zhang", - "j45", - "Marcin Serwin", - "erlehmann", - "E", - "Benjamin Schötz", - "Doloment", - "Sydney Gems", - "talamh", - "Emily2255", - "Emojigit", - "FinishedFragment", - "sfan5", - "Blue Blancmange", - "Jared Moody", - "SmallJoker", - "Sven792", - "aldum", - "Dieter44", - }}, - {S("MineClone5"), 0xA60014, { - "kay27", - "Debiankaios", - "epCode", - "NO11", - "j45", - "3raven", - "PrarieWind", - "Gustavo1", - "CableGuy67", - }}, - {S("Mineclonia"), 0xFFFFFF, { - "erlehmann", - "Li0n", - "E", - "n_to", - }}, - {S("Original Mod Authors"), 0x343434, { - "Wuzzy", - "Fleckenstein", - "BlockMen", - "TenPlus1", - "PilzAdam", - "ryvnf", - "stujones11", - "Arcelmi", - "celeron55", - "maikerumine", - "GunshipPenguin", - "Qwertymine3", - "Rochambeau", - "rubenwardy", - "stu", - "4aiman", - "Kahrl", - "Krock", - "UgnilJoZ", - "lordfingle", - "22i", - "bzoss", - "kilbith", - "xeranas", - "kddekadenz", - "sofar", - "4Evergreen4", - "jordan4ibanez", - "paramat", - }}, - {S("3D Models"), 0x0019FF, { - "22i", - "tobyplowy", - "epCode", - }}, - {S("Textures"), 0xFF9705, { - "XSSheep", - "Wuzzy", - "kingoscargames", - "leorockway", - "xMrVizzy", - "yutyo", - "NO11", - "kay27", - }}, - {S("Translations"), 0x00FF60, { - "Wuzzy", - "Rocher Laurent", - "wuniversales", - "kay27", - "pitchum", - "todoporlalibertad", - "Marcin Serwin", - }}, - {S("Funders"), 0xF7FF00, { - "40W", - }}, - {S("Special thanks"), 0x00E9FF, { - "celeron55 for creating Minetest", - "Jordach for the jukebox music compilation from Big Freaking Dig", - "The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game", - "Notch and Jeb for being the major forces behind Minecraft", - }}, -} diff --git a/mods/HUD/mcl_credits/textures/credits_bg.png b/mods/HUD/mcl_credits/textures/credits_bg.png deleted file mode 100644 index ad74cbd30..000000000 Binary files a/mods/HUD/mcl_credits/textures/credits_bg.png and /dev/null differ diff --git a/mods/HUD/mcl_credits/textures/mineclone2_icon.png b/mods/HUD/mcl_credits/textures/mineclone2_icon.png deleted file mode 100644 index e479dfff5..000000000 Binary files a/mods/HUD/mcl_credits/textures/mineclone2_icon.png and /dev/null differ diff --git a/mods/HUD/mcl_credits/textures/mineclone2_logo.png b/mods/HUD/mcl_credits/textures/mineclone2_logo.png deleted file mode 100644 index 11435df51..000000000 Binary files a/mods/HUD/mcl_credits/textures/mineclone2_logo.png and /dev/null differ diff --git a/mods/HUD/mcl_death_messages/init.lua b/mods/HUD/mcl_death_messages/init.lua deleted file mode 100644 index 91e13995b..000000000 --- a/mods/HUD/mcl_death_messages/init.lua +++ /dev/null @@ -1,246 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_death_messages = { - assist = {}, - messages = { - in_fire = { - _translator = S, - plain = "@1 went up in flames", - assist = "@1 walked into fire whilst fighting @2", - }, - lightning_bolt = { - _translator = S, - plain = "@1 was struck by lightning", - assist = "@1 was struck by lightning whilst fighting @2", - }, - on_fire = { - _translator = S, - plain = "@1 burned to death", - assist = "@1 was burnt to a crisp whilst fighting @2", - }, - lava = { - _translator = S, - plain = "@1 tried to swim in lava", - assist = "@1 tried to swim in lava to escape @2" - }, - hot_floor = { - _translator = S, - plain = "@1 discovered the floor was lava", - assist = "@1 walked into danger zone due to @2", - }, - in_wall = { - _translator = S, - plain = "@1 suffocated in a wall", - assist = "@1 suffocated in a wall whilst fighting @2", - }, - drown = { - _translator = S, - plain = "@1 drowned", - assist = "@1 drowned whilst trying to escape @2", - }, - starve = { - _translator = S, - plain = "@1 starved to death", - assist = "@1 starved to death whilst fighting @2", - }, - cactus = { - _translator = S, - plain = "@1 was pricked to death", - assist = "@1 walked into a cactus whilst trying to escape @2", - }, - fall = { - _translator = S, - plain = "@1 hit the ground too hard", - assist = "@1 hit the ground too hard whilst trying to escape @2", - -- "@1 fell from a high place" -- for fall distance > 5 blocks - -- "@1 fell while climbing" - -- "@1 fell off some twisting vines" - -- "@1 fell off some weeping vines" - -- "@1 fell off some vines" - -- "@1 fell off scaffolding" - -- "@1 fell off a ladder" - }, - fly_into_wall = { - _translator = S, - plain = "@1 experienced kinetic energy", - assist = "@1 experienced kinetic energy whilst trying to escape @2", - }, - out_of_world = { - _translator = S, - plain = "@1 fell out of the world", - assist = "@1 didn't want to live in the same world as @2", - }, - generic = { - _translator = S, - plain = "@1 died", - assist = "@1 died because of @2", - }, - magic = { - _translator = S, - plain = "@1 was killed by magic", - assist = "@1 was killed by magic whilst trying to escape @2", - killer = "@1 was killed by @2 using magic", - item = "@1 was killed by @2 using @3", - }, - dragon_breath = { - _translator = S, - plain = "@1 was roasted in dragon breath", - killer = "@1 was roasted in dragon breath by @2", - }, - wither = { - _translator = S, - plain = "@1 withered away", - escape = "@1 withered away whilst fighting @2", - }, - wither_skull = { - _translator = S, - plain = "@1 was killed by magic", - killer = "@1 was shot by a skull from @2", - }, - anvil = { - _translator = S, - plain = "@1 was squashed by a falling anvil", - escape = "@1 was squashed by a falling anvil whilst fighting @2", - }, - falling_node = { - _translator = S, - plain = "@1 was squashed by a falling block", - assist = "@1 was squashed by a falling block whilst fighting @2", - }, - mob = { - _translator = S, - killer = "@1 was slain by @2", - item = "@1 was slain by @2 using @3", - }, - player = { - _translator = S, - killer = "@1 was slain by @2", - item = "@1 was slain by @2 using @3" - }, - arrow = { - _translator = S, - killer = "@1 was shot by @2", - item = "@1 was shot by @2 using @3", - }, - fireball = { - _translator = S, - killer = "@1 was fireballed by @2", - item = "@1 was fireballed by @2 using @3", - }, - thorns = { - _translator = S, - killer = "@1 was killed trying to hurt @2", - item = "@1 was killed by @3 trying to hurt @2", -- yes, the order is intentional: @1 @3 @2 - }, - explosion = { - _translator = S, - plain = "@1 blew up", - killer = "@1 was blown up by @2", - item = "@1 was blown up by @2 using @3", - -- "@1 was killed by [Intentional Game Design]" -- for exploding bed in nether or end - }, - cramming = { - _translator = S, - plain = "@1 was squished too much", - assist = "@1 was squashed by @2", -- surprisingly "escape" is actually the correct subtype - }, - fireworks = { - _translator = S, - plain = "@1 went off with a bang", - item = "@1 went off with a bang due to a firework fired from @3 by @2", -- order is intentional - }, - -- Missing snowballs: The Minecraft wiki mentions them but the MC source code does not. - }, -} - -local function get_item_killer_message(obj, messages, reason) - if messages.item then - local wielded = mcl_util.get_wielded_item(reason.source) - local itemname = wielded:get_meta():get_string("name") - if itemname ~= "" then - itemname = "[" .. itemname .. "]" - if mcl_enchanting.is_enchanted(wielded:get_name()) then - itemname = minetest.colorize(mcl_colors.AQUA, itemname) - end - return messages._translator(messages.item, mcl_util.get_object_name(obj), mcl_util.get_object_name(reason.source), itemname) - end - end -end - -local function get_plain_killer_message(obj, messages, reason) - return messages.killer and messages._translator(messages.killer, mcl_util.get_object_name(obj), mcl_util.get_object_name(reason.source)) -end - -local function get_killer_message(obj, messages, reason) - return reason.source and (get_item_killer_message(obj, messages, reason) or get_plain_killer_message(obj, messages, reason)) -end - -local function get_assist_message(obj, messages, reason) - if messages.assist and mcl_death_messages.assist[obj] then - return messages._translator(messages.assist, mcl_util.get_object_name(obj), mcl_death_messages.assist[obj].name) - end -end - -local function get_plain_message(obj, messages, reason) - if messages.plain then - return messages._translator(messages.plain, mcl_util.get_object_name(obj)) - end -end - -local function get_fallback_message(obj, messages, reason) - return "mcl_death_messages.messages." .. reason.type .. " " .. mcl_util.get_object_name(obj) -end - -local function fallback_translator(s) - return s -end - -mcl_damage.register_on_death(function(obj, reason) - if not minetest.settings:get_bool("mcl_showDeathMessages", true) then - return - end - - local send_to - - if obj:is_player() then - send_to = true - end - - -- ToDo: add mob death messages for owned mobs, only send to owner (sent_to = "player name") - - if send_to then - local messages = mcl_death_messages.messages[reason.type] or {} - messages._translator = messages._translator or fallback_translator - - local message = - get_killer_message(obj, messages, reason) or - get_assist_message(obj, messages, reason) or - get_plain_message(obj, messages, reason) or - get_fallback_message(obj, messages, reason) - - if send_to == true then - minetest.chat_send_all(message) - else - minetest.chat_send_player(send_to, message) - end - end -end) - -mcl_damage.register_on_damage(function(obj, damage, reason) - if obj:get_hp() - damage > 0 then - if reason.source then - mcl_death_messages.assist[obj] = {name = mcl_util.get_object_name(reason.source), timeout = 5} - else - mcl_death_messages.assist[obj] = nil - end - end -end) - -minetest.register_globalstep(function(dtime) - for obj, tbl in pairs(mcl_death_messages.assist) do - tbl.timeout = tbl.timeout - dtime - if not obj:is_player() and not obj:get_luaentity() or tbl.timeout > 0 then - mcl_death_messages.assist[obj] = nil - end - end -end) diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.de.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.de.tr deleted file mode 100644 index 39235dff7..000000000 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.de.tr +++ /dev/null @@ -1,58 +0,0 @@ -# textdomain: mcl_death_messages -@1 went up in flames=@1 ging in Flammen auf -@1 walked into fire whilst fighting @2=@1 ist während eines Kampfes mit @2 in ein Feuer gelaufen -@1 was struck by lightning=@1 wurde von einem Blitz erschlagen -@1 was struck by lightning whilst fighting @2=@1 wurde während eines Kampfes mit @2 von einem Blitz erschlagen -@1 burned to death=@1 ist verbrannt -@1 was burnt to a crisp whilst fighting @2=@1 ist während eines Kampfes mit @2 verbrannt -@1 tried to swim in lava=@1 hat versucht, in Lava zu schwimmen -@1 tried to swim in lava to escape @2=@1 hat versucht, in Lava zu schwimmen, um @2 zu entkommen -@1 discovered the floor was lava=@1 hat festgestellt, dass der Boden Lava ist -@1 walked into danger zone due to @2=@1 ist wegen @2 in eine Gefahrenzone gelaufen -@1 suffocated in a wall=@1 ist in einer Mauer erstickt -@1 suffocated in a wall whilst fighting @2=@1 ist während eines Kampfes mit @2 in einer Mauer erstickt -@1 drowned=@1 ist ertrunken -@1 drowned whilst trying to escape @2=@1 ist während dem Versuch, @2 zu entkommen, ertrunken -@1 starved to death=@1 ist verhungert -@1 starved to death whilst fighting @2=@1 ist während eines Kampfes mit @2 verhungert -@1 was pricked to death=@1 wurde zu Tode gestochen -@1 walked into a cactus whilst trying to escape @2=@1 ist während dem Versuch, @2 zu entkommen, in einen Kaktus gelaufen -@1 hit the ground too hard=@1 ist zu hart auf dem Boden aufgetroffen -@1 hit the ground too hard whilst trying to escape @2=@1 ist während dem Versuch, @2 zu entkommen, zu hart auf dem Boden aufgetroffen -@1 experienced kinetic energy=@1 hat kinetische Energie erfahren -@1 experienced kinetic energy whilst trying to escape @2=@1 hat während dem Versuch, @2 zu entkommen, kinetische Energie erfahren -@1 fell out of the world=@1 ist aus der Welt gefallen -@1 didn't want to live in the same world as @2=@1 wollte nicht in der gleichen Welt wie @2 leben -@1 died=@1 ist gestorben -@1 died because of @2=@1 ist wegen @2 gestorben -@1 was killed by magic=@1 wurde von Magie getötet -@1 was killed by magic whilst trying to escape @2=@1 wurde während dem Versuch, @2 zu entkommen, von Magie getötet -@1 was killed by @2 using magic=@1 wurde von @2 mit Magie getötet -@1 was killed by @2 using @3=@1 wurde von @2 mit @3 getötet -@1 was roasted in dragon breath=@1 wurde in Drachenatem geröstet -@1 was roasted in dragon breath by @2=@1 wurde in Drachenatem von @2 geröstet -@1 withered away=@1 ist davon gewithert -@1 withered away whilst fighting @2=@1 ist während einem Kampf mit @2 davon gewithert -@1 was killed by magic=@1 wurde von Magie getötet -@1 was shot by a skull from @2=@1 wurde von einem Schädel von @2 erschossen -@1 was squashed by a falling anvil=@1 wurde von einem fallenden Amboss erquetscht -@1 was squashed by a falling anvil whilst fighting @2=@1 wurde während einem Kampf mit @2 von einem fallenden Amboss erquetscht -@1 was squashed by a falling block=@1 wurde von einem fallenden Block erquetscht -@1 was squashed by a falling block whilst fighting @2=@1 wurde während einem Kampf mit @2 von einem fallenden Block erquetscht -@1 was slain by @2=@1 wurde von @2 erschlagen -@1 was slain by @2 using @3=@1 wurde von @2 mit @3 erschlagen -@1 was slain by @2=@1 wurde von @2 erschlagen -@1 was slain by @2 using @3=@1 wurde von @2 mit @3 erschlagen -@1 was shot by @2=@1 wurde von @2 erschossen -@1 was shot by @2 using @3=@1 wurde von @2 mit @3 erschossen -@1 was fireballed by @2=@1 wurde von @2 gefeuerballt -@1 was fireballed by @2 using @3=@1 wurde von @2 mit @3 gefeuerballt -@1 was killed trying to hurt @2=@1 ist bei dem Versuch, @2 zu verletzten gestorben -@1 was killed by @3 trying to hurt @2=@1 ist bei dem Versuch, @2 zu verletzten, von @3 getötet worden -@1 blew up=@1 ist gesprengt worden -@1 was blown up by @2=@1 wurde von @2 gesprengt -@1 was blown up by @2 using @3=@1 wurde von @2 mit @3 gesprengt -@1 was squished too much=@1 war zu gequetscht -@1 was squashed by @2=@1 wurde von @2 erquetscht -@1 went off with a bang=@1 ging mit einem Knall ab -@1 went off with a bang due to a firework fired from @3 by @2=@1 ging mit einem Knall wegen eines Feuerwerks, das mit @3 von @2 gefeuert wurde, ab diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.es.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.es.tr deleted file mode 100644 index a56199e00..000000000 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.es.tr +++ /dev/null @@ -1,58 +0,0 @@ -# textdomain: mcl_death_messages -@1 was fatally hit by an arrow.=@1 fue golpeado muy duro por una flecha. -@1 has been killed by an arrow.=@1 ha sido asesinado por una flecha. -@1 was shot by an arrow from @2.=@1 fue disparado por una flecha de @2. -@1 was shot by an arrow from a skeleton.=@1 fue disparado por una flecha de un esqueleto. -@1 was shot by an arrow from a stray.=@1 fue disparado por una flecha de un extraviado. -@1 was shot by an arrow from an illusioner.=@1 fue disparado por una flecha de un ilusionista. -@1 was shot by an arrow.=@1 fue disparado por una flecha. -@1 forgot to breathe.=@1 olvidó respirar. -@1 drowned.=@1 ahogado. -@1 ran out of oxygen.=@1 se quedó sin oxígeno. -@1 was killed by @2.=@1 fue matado por @2. -@1 was killed by a mob.=@1 fue asesinado por un animal. -@1 was burned to death by a blaze's fireball.=@1 fue quemado hasta la muerte por la bola de fuego de un incendio. -@1 was killed by a fireball from a blaze.=@1 fue asesinado por una bola de fuego de un incendio. -@1 was burned by a fire charge.=@1 fue quemado por una carga de fuego. -A ghast scared @1 to death.=Se ha asustado @1 hasta morir. -@1 has been fireballed by a ghast.=@1 ha sido disparado por un fantasma. -@1 fell from a high cliff.=@1 cayó de un acantilado. -@1 took fatal fall damage.=@1 se hizo daño crítico por una caída. -@1 fell victim to gravity.=@1 cayó víctima de la gravedad. -@1 died.=@1 murió. -@1 was killed by a zombie.=@1 fue asesinado por un zombie. -@1 was killed by a baby zombie.=@1 fue asesinado por un bebé zombie. -@1 was killed by a blaze.=@1 fue asesinado por una llamarada. -@1 was killed by a slime.=@1 fue asesinado por un Slime. -@1 was killed by a witch.=@1 fue asesinado por una bruja. -@1 was killed by a magma cube.=@1 fue asesinado por un cubo de lava. -@1 was killed by a wolf.=@1 fue asesinado por un lobo. -@1 was killed by a cat.=@1 fue asesinado por un gato. -@1 was killed by an ocelot.=@1 fue asesinado por un ocelote. -@1 was killed by an ender dragon.=@1 fue asesinado por un dragón ender. -@1 was killed by a wither.=@1 fue asesinado por un Wither. -@1 was killed by an enderman.=@1 fue asesinado por un Enderman. -@1 was killed by an endermite.=@1 fue asesinado por un Endermite. -@1 was killed by a ghast.=@1 fue asesinado por un Ghast. -@1 was killed by an elder guardian.=@1 fue asesinado por un gran guardián. -@1 was killed by a guardian.=@1 fue asesinado por un guardián. -@1 was killed by an iron golem.=@1 fue asesinado por un golem de hierro. -@1 was killed by a polar_bear.=@1 fue asesinado por un oso polar. -@1 was killed by a killer bunny.=@1 fue asesinado por un conejo asesino. -@1 was killed by a shulker.=@1 fue asesinado por un shulker. -@1 was killed by a silverfish.=@1 fue asesinado por un pez plateado. -@1 was killed by a skeleton.=@1 fue asesinado por un esqueleto. -@1 was killed by a stray.=@1 fue asesinado por un extraviado. -@1 was killed by a slime.=@1 fue asesinado por un limo. -@1 was killed by a spider.=@1 fue asesinado por una araña. -@1 was killed by a cave spider.=@1 fue asesinado por una araña de cueva. -@1 was killed by a vex.=@1 fue asesinado por un vex. -@1 was killed by an evoker.=@1 fue asesinado por un mago. -@1 was killed by an illusioner.=@1 fue asesinado por un ilusionista. -@1 was killed by a vindicator.=@1 fue asesinado por un vindicador. -@1 was killed by a zombie villager.=@1 fue asesinado por un aldeano zombie. -@1 was killed by a husk.=@1 fue asesinado por un husk. -@1 was killed by a baby husk.=@1 fue asesinado por un bebé husk. -@1 was killed by a zombie pigman.=@1 fue asesinado por un cerdo zombie. -@1 was killed by a baby zombie pigman.=@1 fue asesinado por un bebé cerdo zombie. -@1 was slain by @2.= diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.fr.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.fr.tr deleted file mode 100644 index 05cf99976..000000000 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.fr.tr +++ /dev/null @@ -1,59 +0,0 @@ -# textdomain: mcl_death_messages -@1 was fatally hit by an arrow.=@1 a été mortellement touché par une flèche. -@1 has been killed with an arrow.=@1 a été tué avec une flèche. -@1 was shot by an arrow from @2.=@1 a été abattu par une flèche de @2. -@1 was shot by an arrow from a skeleton.=@1 a été abattu par une flèche d'un squelette. -@1 was shot by an arrow from a stray.=@1 a été abattu par une flèche d'un vagabond. -@1 was shot by an arrow from an illusioner.=@1 a été abattu par une flèche d'un illusionniste. -@1 was shot by an arrow.=@1 a été abattu par une flèche. -@1 forgot to breathe.=@1 a oublié de respirer. -@1 drowned.=@1 s'est noyé. -@1 ran out of oxygen.=@1 a manqué d'oxygène. -@1 was killed by @2.=@1 a été tué par @2. -@1 was killed.=@1 a été tué. -@1 was killed by a mob.=@1 a été tué par un mob. -@1 was burned to death by a blaze's fireball.=@1 a été brûlé vif par la boule de feu d'un blaze. -@1 was killed by a fireball from a blaze.=@1 a été tué par une boule de feu lors d'un blaze. -@1 was burned by a fire charge.=@1 a été brûlé par un incendie. -A ghast scared @1 to death.=Un ghast a éffrayé @1 à mort. -@1 has been fireballed by a ghast.=@1 a été pétrifié par un ghast. -@1 fell from a high cliff.=@1 est tombé d'une haute falaise. -@1 took fatal fall damage.=@1 a succombé à un chute mortelle. -@1 fell victim to gravity.=@1 a été victime de la gravité. -@1 died.=@1 est mort. -@1 was killed by a zombie.=@1 a été tué par un zombie. -@1 was killed by a baby zombie.=@1 a été tué par un bébé zombie. -@1 was killed by a blaze.=@1 a été tué par un blaze. -@1 was killed by a slime.=@1 a été tué par un slime. -@1 was killed by a witch.=@1 a été tué par un sorcier. -@1 was killed by a magma cube.=@1 a été tué par un cube de magma. -@1 was killed by a wolf.=@1 a été tué par un loup. -@1 was killed by a cat.=@1 a été tué par un chat. -@1 was killed by an ocelot.=@1 a été tué par un ocelot. -@1 was killed by an ender dragon.=@1 a été tué par un ender dragon. -@1 was killed by a wither.=@1 a été tué par un wither. -@1 was killed by an enderman.=@1 a été tué par un enderman. -@1 was killed by an endermite.=@1 a été tué par un endermite. -@1 was killed by a ghast.=@1 a été tué par un ghast. -@1 was killed by an elder guardian.=@1 a été tué par un grand gardien. -@1 was killed by a guardian.=@1 a été tué par un gardien. -@1 was killed by an iron golem.=@1 a été tué par un golem de fer. -@1 was killed by a polar_bear.=@1 a été tué par un ours blanc. -@1 was killed by a killer bunny.=@1 a été tué par un lapin tueur. -@1 was killed by a shulker.=@1 a été tué par un shulker. -@1 was killed by a silverfish.=@1 a été tué par un poisson d'argent. -@1 was killed by a skeleton.=@1 a été tué par un squelette. -@1 was killed by a stray.=@1 a été tué par un vagabond. -@1 was killed by a slime.=@1 a été tué par un slime. -@1 was killed by a spider.=@1 a été tué par une araignée. -@1 was killed by a cave spider.=@1 a été tué par une araignée venimeuse. -@1 was killed by a vex.=@1 a été tué par un vex. -@1 was killed by an evoker.=@1 a été tué par un invocateur. -@1 was killed by an illusioner.=@1 a été tué par un illusionniste. -@1 was killed by a vindicator.=@1 a été tué par un vindicateur. -@1 was killed by a zombie villager.=@1 a été tué par un villageois zombie. -@1 was killed by a husk.=@1 a été tué par un zombie momie. -@1 was killed by a baby husk.=@1 a été tué par un bébé zombie momie. -@1 was killed by a zombie pigman.=@1 a été tué par un zombie-couchon. -@1 was killed by a baby zombie pigman.=@1 a été tué par un bébé zombie-couchon -@1 was slain by @2.= diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.pl.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.pl.tr deleted file mode 100644 index 65fcde760..000000000 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.pl.tr +++ /dev/null @@ -1,59 +0,0 @@ -# textdomain: mcl_death_messages -@1 went up in flames=@1 stanęła w płomieniach -@1 walked into fire whilst fighting @2=@1 weszła w płomienie podczas walki z @2 -@1 was struck by lightning=@1 została trafiona piorunem -@1 was struck by lightning whilst fighting @2=@1 została trafiona piorunem z @2 -@1 burned to death=@1 została spalona żywcem -@1 was burnt to a crisp whilst fighting @2=@1 została usmażona podczas walki z @2 -@1 tried to swim in lava=@1 próbowała pływać w lawie -@1 tried to swim in lava to escape @2=@1 próbowała pływać w lawie by uciec od @20 -@1 discovered the floor was lava=@1 odkryła, że podłoga to lawa -@1 walked into danger zone due to @2=@1 weszła do niebezpiecznej strony przez @2 -@1 suffocated in a wall=@1 udusiła się w ścianie -@1 suffocated in a wall whilst fighting @2=@1 udusiła się w ścianie podczas walki z @2 -@1 drowned=@1 utopiła się -@1 drowned whilst trying to escape @2=@1 utopiła się podczas ucieczki przed @2 -@1 starved to death=@1 zagłodziła się na śmierć -@1 starved to death whilst fighting @2=@1 zagłodziła się na śmierć podczas walki z @2 -@1 was pricked to death=@1 została zakłuta na śmierć -@1 walked into a cactus whilst trying to escape @2=@1 weszła w kaktus podczas ucieczki przed @2 -@1 hit the ground too hard=@1 zbyt twardo wylądowała -@1 hit the ground too hard whilst trying to escape @2=@1 zby twardo wylądowała podczas walki z @2 -@1 experienced kinetic energy=@1 doświadczyła energii kinetycznej -@1 experienced kinetic energy whilst trying to escape @2=@1 doświadczyła energii kinetycznej podczas ucieczki przed @2 -@1 fell out of the world=@1 wyleciała poza świat -@1 didn't want to live in the same world as @2=@1 nie chciała żyć w tym samym świecie co @2 -@1 died=@1 umarła -@1 died because of @2=@1 umarła przez @2 -@1 was killed by magic=@1 została zabita magią -@1 was killed by magic whilst trying to escape @2=@1 została zabita magią podczas ucieczki przed @2 -@1 was killed by @2 using magic=@1 została zabita przez @2 korzystając z magii -@1 was killed by @2 using @3=@1 została zabita przez @2 korzystając z @3 -@1 was roasted in dragon breath=@1 została usmażona przez oddech smoka -@1 was roasted in dragon breath by @2=@1 została usmażona przez oddech smoka od @2 -@1 withered away=@1 odeszła na wieki -@1 withered away whilst fighting @2=@1 odeszła na wieki podczas walki z @2 -@1 was killed by magic=@1 została zabita magią -@1 was shot by a skull from @2=@1 została zastrzelona czaszką przez @2 -@1 was squashed by a falling anvil=@1 została zmiażdżona spadającym kowadłem -@1 was squashed by a falling anvil whilst fighting @2=@1 została zmiażdżona spadającym kowadłem podczas walki z @2 -@1 was squashed by a falling block=@1 została zmiażdżona spadającym blokiem -@1 was squashed by a falling block whilst fighting @2=@1 została zmiażdżona spadającym blokiem podczas walki z @2 -@1 was slain by @2=@1 została zabita przez @2 -@1 was slain by @2 using @3=@1 została zabita przez @2 przy użyciu @3 -@1 was slain by @2=@1 została zabita przez @2 -@1 was slain by @2 using @3=@1 została zabita przez @2 przy użyciu @3 -@1 was shot by @2=@1 została zastrzelona przez @2 -@1 was shot by @2 using @3=@1 została zastrzelona przez @2 przy użyciu @3 -@1 was fireballed by @2=@1 została zabita kulą ognia przez @2 -@1 was fireballed by @2 using @3=@1 została zabita kulą ognia przez @2 przy użyciu @3 -@1 was killed trying to hurt @2=@1 została zabita gdy próbowała skrzywdzić @2 -@1 was killed by @3 trying to hurt @2=@1 została zabita przez @3 gdy próbowała skrzywdzić @2 -@1 blew up=@1 wybuchła -@1 was blown up by @2=@1 została wysadzona przez @2 -@1 was blown up by @2 using @3=@1 została wysadzona przez @2 przy użyciu @3 -@1 was squished too much=@1 została zbyt mocno ściśnięta -@1 was squashed by @2=@1 została ściśnięta przez @2 -@1 went off with a bang=@1 odeszła z hukiem -@1 went off with a bang due to a firework fired from @3 by @2=@1 odeszła z hukiem przez fajerwerki wystrzelone z @3 przez @2 - diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.ru.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.ru.tr deleted file mode 100644 index d5b6ec396..000000000 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.ru.tr +++ /dev/null @@ -1,59 +0,0 @@ -# textdomain: mcl_death_messages -@1 was fatally hit by an arrow.=@1 застрелил лучник. -@1 has been killed with an arrow.=@1 убило стрелой из лука. -@1 was shot by an arrow from @2.=@1 убило стрелой @2. -@1 was shot by an arrow from a skeleton.=@1 был(а) убит(а) стрелой скелета. -@1 was shot by an arrow from a stray.=@1 был(а) убит(а) стрелой странника. -@1 was shot by an arrow from an illusioner.=@1 был(а) убит(а) стрелой иллюзора. -@1 was shot by an arrow.=@1 был(а) убит(а) стрелой. -@1 forgot to breathe.=@1 забыл(а) подышать. -@1 drowned.=@1 утонул(а). -@1 ran out of oxygen.=У @1 закончился кислород. -@1 was killed by @2.=@1 был(а) убит(а) @2. -@1 was killed.=@1 был(а) убит(а). -@1 was killed by a mob.=@1 был(а) убит(а) мобом. -@1 was burned to death by a blaze's fireball.=@1 до смерти прожарило файерболом ифрита. -@1 was killed by a fireball from a blaze.=@1 был(а) убит(а) файерболом ифрита. -@1 was burned by a fire charge.=@1 сожгло огненным разрядом. -A ghast scared @1 to death.=Гаст напугал @1 до смерти. -@1 has been fireballed by a ghast.=@1 настиг файербол Гаста. -@1 fell from a high cliff.=@1 свалился(ась) с высокого утёса. -@1 took fatal fall damage.=@1 получил(а) смертельный урон от падения. -@1 fell victim to gravity.=@1 стал(а) жертвой гравитации. -@1 died.=@1 умер(ла). -@1 was killed by a zombie.=@1 был(а) убит(а) зомби. -@1 was killed by a baby zombie.=@1 был(а) убит(а) малышом-зомби. -@1 was killed by a blaze.=@1 был(а) убит(а) ифритом. -@1 was killed by a slime.=@1 был(а) убит(а) слизняком. -@1 was killed by a witch.=@1 был(а) убит(а) ведьмой. -@1 was killed by a magma cube.=@1 был(а) убит(а) лавовым кубом. -@1 was killed by a wolf.=@1 был(а) убит(а) волком. -@1 was killed by a cat.=@1 был(а) убит(а) кошкой. -@1 was killed by an ocelot.=@1 был(а) убит(а) оцелотом. -@1 was killed by an ender dragon.=@1 был(а) убит(а) драконом предела. -@1 was killed by a wither.=@1 был(а) убит(а) иссушителем. -@1 was killed by an enderman.=@1 был(а) убит(а) эндерменом. -@1 was killed by an endermite.=@1 был(а) убит(а) эндермитом. -@1 was killed by a ghast.=@1 был(а) убит(а) гастом. -@1 was killed by an elder guardian.=@1 был(а) убит(а) древним стражем. -@1 was killed by a guardian.=@1 был(а) убит(а) стражем. -@1 was killed by an iron golem.=@1 был(а) убит(а) железным големом. -@1 was killed by a polar_bear.=@1 был(а) убит(а) полярным медведем. -@1 was killed by a killer bunny.=@1 был(а) убит(а) кроликом-убийцей. -@1 was killed by a shulker.=@1 был(а) убит(а) шалкером. -@1 was killed by a silverfish.=@1 был(а) убит(а) чешуйницей. -@1 was killed by a skeleton.=@1 был(а) убит(а) скелетом. -@1 was killed by a stray.=@1 был(а) убит(а) странником. -@1 was killed by a slime.=@1 был(а) убит(а) слизняком. -@1 was killed by a spider.=@1 был(а) убит(а) пауком. -@1 was killed by a cave spider.=@1 был(а) убит(а) пещерным пауком. -@1 was killed by a vex.=@1 был(а) убит(а) досаждателем. -@1 was killed by an evoker.=@1 был(а) убит(а) магом. -@1 was killed by an illusioner.=@1 был(а) убит(а) иллюзором. -@1 was killed by a vindicator.=@1 был(а) убит(а) поборником. -@1 was killed by a zombie villager.=@1 был(а) убит(а) зомби-жителем. -@1 was killed by a husk.=@1 был(а) убит(а) кадавром. -@1 was killed by a baby husk.=@1 был(а) убит(а) машылом-кадавром. -@1 was killed by a zombie pigman.=@1 был(а) убит(а) зомби-свиночеловеком. -@1 was killed by a baby zombie pigman.=@1 был(а) убит(а) малышом-зомби-свиночеловеком. -@1 was slain by @2.= diff --git a/mods/HUD/mcl_death_messages/locale/template.txt b/mods/HUD/mcl_death_messages/locale/template.txt deleted file mode 100644 index 67ba9fd1c..000000000 --- a/mods/HUD/mcl_death_messages/locale/template.txt +++ /dev/null @@ -1,58 +0,0 @@ -# textdomain: mcl_death_messages -@1 went up in flames= -@1 walked into fire whilst fighting @2= -@1 was struck by lightning= -@1 was struck by lightning whilst fighting @2= -@1 burned to death= -@1 was burnt to a crisp whilst fighting @2= -@1 tried to swim in lava= -@1 tried to swim in lava to escape @2= -@1 discovered the floor was lava= -@1 walked into danger zone due to @2= -@1 suffocated in a wall= -@1 suffocated in a wall whilst fighting @2= -@1 drowned= -@1 drowned whilst trying to escape @2= -@1 starved to death= -@1 starved to death whilst fighting @2= -@1 was pricked to death= -@1 walked into a cactus whilst trying to escape @2= -@1 hit the ground too hard= -@1 hit the ground too hard whilst trying to escape @2= -@1 experienced kinetic energy= -@1 experienced kinetic energy whilst trying to escape @2= -@1 fell out of the world= -@1 didn't want to live in the same world as @2= -@1 died= -@1 died because of @2= -@1 was killed by magic= -@1 was killed by magic whilst trying to escape @2= -@1 was killed by @2 using magic= -@1 was killed by @2 using @3= -@1 was roasted in dragon breath= -@1 was roasted in dragon breath by @2= -@1 withered away= -@1 withered away whilst fighting @2= -@1 was killed by magic= -@1 was shot by a skull from @2= -@1 was squashed by a falling anvil= -@1 was squashed by a falling anvil whilst fighting @2= -@1 was squashed by a falling block= -@1 was squashed by a falling block whilst fighting @2= -@1 was slain by @2= -@1 was slain by @2 using @3= -@1 was slain by @2= -@1 was slain by @2 using @3= -@1 was shot by @2= -@1 was shot by @2 using @3= -@1 was fireballed by @2= -@1 was fireballed by @2 using @3= -@1 was killed trying to hurt @2= -@1 was killed by @3 trying to hurt @2= -@1 blew up= -@1 was blown up by @2= -@1 was blown up by @2 using @3= -@1 was squished too much= -@1 was squashed by @2= -@1 went off with a bang= -@1 went off with a bang due to a firework fired from @3 by @2= diff --git a/mods/HUD/mcl_death_messages/mod.conf b/mods/HUD/mcl_death_messages/mod.conf deleted file mode 100644 index a634e16de..000000000 --- a/mods/HUD/mcl_death_messages/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_death_messages -author = 4Evergreen4 -description = Shows messages in chat when a player dies. -depends = mcl_colors diff --git a/mods/HUD/mcl_experience/README.md b/mods/HUD/mcl_experience/README.md deleted file mode 100644 index f59eab20f..000000000 --- a/mods/HUD/mcl_experience/README.md +++ /dev/null @@ -1,6 +0,0 @@ --- eXPerience mod --- This mod has adopted from oil_boi's Crafter-minetest --- ( https://www.patreon.com/oil_boi ) by kay27@bk.ru --- for MineClone 2 under GNU General Public License v3.0. --- Copyright (c) Oil_boi, Wuzzy, kay27, --- experience_orb texture by github.com/Gerold55 diff --git a/mods/HUD/mcl_experience/bottle.lua b/mods/HUD/mcl_experience/bottle.lua deleted file mode 100644 index 17a70054d..000000000 --- a/mods/HUD/mcl_experience/bottle.lua +++ /dev/null @@ -1,68 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_target = minetest.get_modpath("mcl_target") - -minetest.register_entity("mcl_experience:bottle",{ - textures = {"mcl_experience_bottle.png"}, - hp_max = 1, - visual_size = {x = 0.35, y = 0.35}, - collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, - pointable = false, - on_step = function(self, dtime) - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - local n = node.name - if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and minetest.get_item_group(n, "liquid") == 0 then - minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) - mcl_experience.throw_xp(pos, math.random(3, 11)) - minetest.add_particlespawner({ - amount = 50, - time = 0.1, - minpos = vector.add(pos, vector.new(-0.1, 0.5, -0.1)), - maxpos = vector.add(pos, vector.new( 0.1, 0.6, 0.1)), - minvel = vector.new(-2, 0, -2), - maxvel = vector.new( 2, 2, 2), - minacc = vector.new(0, 0, 0), - maxacc = vector.new(0, 0, 0), - minexptime = 0.5, - maxexptime = 1.25, - minsize = 1, - maxsize = 2, - collisiondetection = true, - vertical = false, - texture = "mcl_particles_effect.png^[colorize:blue:127", - }) - if mod_target and n == "mcl_target:target_off" then - mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks - end - self.object:remove() - end - end, -}) - -local function throw_xp_bottle(pos, dir, velocity) - minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true) - local obj = minetest.add_entity(pos, "mcl_experience:bottle") - obj:set_velocity(vector.multiply(dir, velocity)) - local acceleration = vector.multiply(dir, -3) - acceleration.y = -9.81 - obj:set_acceleration(acceleration) -end - -minetest.register_craftitem("mcl_experience:bottle", { - description = "Bottle o' Enchanting", - inventory_image = "mcl_experience_bottle.png", - wield_image = "mcl_experience_bottle.png", - stack_max = 64, - on_use = function(itemstack, placer, pointed_thing) - throw_xp_bottle(vector.add(placer:get_pos(), vector.new(0, 1.5, 0)), placer:get_look_dir(), 10) - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end, - _on_dispense = function(_, pos, _, _, dir) - throw_xp_bottle(vector.add(pos, vector.multiply(dir, 0.51)), dir, 10) - end -}) - diff --git a/mods/HUD/mcl_experience/command.lua b/mods/HUD/mcl_experience/command.lua deleted file mode 100644 index 040031b5a..000000000 --- a/mods/HUD/mcl_experience/command.lua +++ /dev/null @@ -1,39 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_chatcommand("xp", { - params = S("[[] ]"), - description = S("Gives a player some XP"), - privs = {server=true}, - func = function(name, params) - local player, xp = nil, 1000 - local P, i = {}, 0 - for str in string.gmatch(params, "([^ ]+)") do - i = i + 1 - P[i] = str - end - if i > 2 then - return false, S("Error: Too many parameters!") - end - if i > 0 then - xp = tonumber(P[i]) - end - if i < 2 then - player = minetest.get_player_by_name(name) - end - if i == 2 then - player = minetest.get_player_by_name(P[1]) - end - - if not xp then - return false, S("Error: Incorrect value of XP") - end - - if not player then - return false, S("Error: Player not found") - end - - mcl_experience.add_xp(player, xp) - - return true, S("Added @1 XP to @2, total: @3, experience level: @4", tostring(xp), player:get_player_name(), tostring(mcl_experience.get_xp(player)), tostring(mcl_experience.get_level(player))) - end, -}) diff --git a/mods/HUD/mcl_experience/init.lua b/mods/HUD/mcl_experience/init.lua deleted file mode 100644 index 37250ee2f..000000000 --- a/mods/HUD/mcl_experience/init.lua +++ /dev/null @@ -1,246 +0,0 @@ -mcl_experience = { - on_add_xp = {}, -} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(modpath .. "/command.lua") -dofile(modpath .. "/orb.lua") -dofile(modpath .. "/bottle.lua") - --- local storage - -local hud_bars = {} -local hud_levels = {} -local caches = {} - --- helpers - -local function xp_to_level(xp) - local xp = xp or 0 - local a, b, c, D - - if xp > 1507 then - a, b, c = 4.5, -162.5, 2220 - xp - elseif xp > 352 then - a, b, c = 2.5, -40.5, 360 - xp - else - a, b, c = 1, 6, -xp - end - - D = b * b - 4 * a * c - - if D == 0 then - return math.floor(-b / 2 / a) - elseif D > 0 then - local v1, v2 = -b / 2 / a, math.sqrt(D) / 2 / a - return math.floor(math.max(v1 - v2, v1 + v2)) - end - - return 0 -end - -local function level_to_xp(level) - if level >= 1 and level <= 16 then - return math.floor(math.pow(level, 2) + 6 * level) - elseif level >= 17 and level <= 31 then - return math.floor(2.5 * math.pow(level, 2) - 40.5 * level + 360) - elseif level >= 32 then - return math.floor(4.5 * math.pow(level, 2) - 162.5 * level + 2220) - end - - return 0 -end - -local function calculate_bounds(level) - return level_to_xp(level), level_to_xp(level + 1) -end - -local function xp_to_bar(xp, level) - local xp_min, xp_max = calculate_bounds(level) - - return (xp - xp_min) / (xp_max - xp_min) -end - -local function bar_to_xp(bar, level) - local xp_min, xp_max = calculate_bounds(level) - - return xp_min + bar * (xp_max - xp_min) -end - -local function get_time() - return minetest.get_us_time() / 1000000 -end - --- api - -function mcl_experience.get_level(player) - return caches[player].level -end - -function mcl_experience.set_level(player, level) - local cache = caches[player] - - if level ~= cache.level then - mcl_experience.set_xp(player, math.floor(bar_to_xp(xp_to_bar(mcl_experience.get_xp(player), cache.level), level))) - end -end - -function mcl_experience.get_xp(player) - return player:get_meta():get_int("xp") -end - -function mcl_experience.set_xp(player, xp) - player:get_meta():set_int("xp", xp) - - mcl_experience.update(player) -end - -function mcl_experience.add_xp(player, xp) - for _, cb in ipairs(mcl_experience.on_add_xp) do - xp = cb.func(player, xp) or xp - - if xp == 0 then - break - end - end - - local cache = caches[player] - local old_level = cache.level - - mcl_experience.set_xp(player, mcl_experience.get_xp(player) + xp) - - local current_time = get_time() - - if current_time - cache.last_time > 0.01 then - local name = player:get_player_name() - - if old_level == cache.level then - minetest.sound_play("mcl_experience", { - to_player = name, - gain = 0.1, - pitch = math.random(75, 99) / 100, - }) - - cache.last_time = current_time - else - minetest.sound_play("mcl_experience_level_up", { - to_player = name, - gain = 0.2, - }) - - cache.last_time = current_time + 0.2 - end - end -end - -function mcl_experience.throw_xp(pos, total_xp) - local i, j = 0, 0 - - while i < total_xp and j < 100 do - local xp = math.min(math.random(1, math.min(32767, total_xp - math.floor(i / 2))), total_xp - i) - local obj = minetest.add_entity(pos, "mcl_experience:orb", tostring(xp)) - - if not obj then - return false - end - - obj:set_velocity(vector.new( - math.random(-2, 2) * math.random(), - math.random( 2, 5), - math.random(-2, 2) * math.random() - )) - - i = i + xp - j = j + 1 - end -end - -function mcl_experience.remove_hud(player) - if hud_bars[player] then - player:hud_remove(hud_bars[player]) - hud_bars[player] = nil - end - if hud_levels[player] then - player:hud_remove(hud_levels[player]) - hud_levels[player] = nil - end -end - -function mcl_experience.setup_hud(player) - if hud_bars[player] and hud_levels[player] then return end - mcl_experience.remove_hud(player) - caches[player] = { - last_time = get_time(), - } - - if not minetest.is_creative_enabled(player:get_player_name()) then - hud_bars[player] = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 1}, - offset = {x = (-9 * 28) - 3, y = -(48 + 24 + 16 - 5)}, - scale = {x = 2.8, y = 3.0}, - alignment = {x = 1, y = 1}, - z_index = 11, - }) - - hud_levels[player] = player:hud_add({ - hud_elem_type = "text", - position = {x = 0.5, y = 1}, - number = 0x80FF20, - offset = {x = 0, y = -(48 + 24 + 24)}, - z_index = 12, - }) - end -end - -function mcl_experience.update(player) - local xp = mcl_experience.get_xp(player) - local cache = caches[player] - - cache.level = xp_to_level(xp) - - if not minetest.is_creative_enabled(player:get_player_name()) then - if not hud_bars[player] then - mcl_experience.setup_hud(player) - end - player:hud_change(hud_bars[player], "text", "mcl_experience_bar_background.png^[lowpart:" - .. math.floor(math.floor(xp_to_bar(xp, cache.level) * 18) / 18 * 100) - .. ":mcl_experience_bar.png^[transformR270" - ) - - if cache.level == 0 then - player:hud_change(hud_levels[player], "text", "") - else - player:hud_change(hud_levels[player], "text", tostring(cache.level)) - end - end -end - -function mcl_experience.register_on_add_xp(func, priority) - table.insert(mcl_experience.on_add_xp, {func = func, priority = priority or 0}) -end - --- callbacks - -minetest.register_on_joinplayer(function(player) - mcl_experience.setup_hud(player) - mcl_experience.update(player) -end) - -minetest.register_on_leaveplayer(function(player) - hud_bars[player] = nil - hud_levels[player] = nil - caches[player] = nil -end) - -minetest.register_on_dieplayer(function(player) - if not minetest.settings:get_bool("mcl_keepInventory", false) then - mcl_experience.throw_xp(player:get_pos(), mcl_experience.get_xp(player)) - mcl_experience.set_xp(player, 0) - end -end) - -minetest.register_on_mods_loaded(function() - table.sort(mcl_experience.on_add_xp, function(a, b) return a.priority < b.priority end) -end) diff --git a/mods/HUD/mcl_experience/locale/mcl_experience.de.tr b/mods/HUD/mcl_experience/locale/mcl_experience.de.tr deleted file mode 100644 index 351cf1911..000000000 --- a/mods/HUD/mcl_experience/locale/mcl_experience.de.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_experience -[[] ]=[[] ] -Gives a player some XP=Gibt einen Spieler ein paar EP -Error: Too many parameters!=Fehler: Zu viele Parameter! -Error: Incorrect value of XP=Fehler: Ungültiger EP-Wert -Error: Player not found=Fehler: Spieler nicht gefunden -Added @1 XP to @2, total: @3, experience level: @4=@1 EP an @2 gegeben, gesamt: @3, Erfahrungsstufe: @4 diff --git a/mods/HUD/mcl_experience/locale/mcl_experience.pl.tr b/mods/HUD/mcl_experience/locale/mcl_experience.pl.tr deleted file mode 100644 index 5834bac14..000000000 --- a/mods/HUD/mcl_experience/locale/mcl_experience.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_experience -[[] ]=[[] ] ]=[[<игрок>] ] -Gives a player some XP=Даёт игроку XP -Error: Too many parameters!=Ошибка: слишком много параметров! -Error: Incorrect value of XP=Ошибка: Недопустимое значение XP -Error: Player not found=Ошибка: Игрок не найден -Added @1 XP to @2, total: @3, experience level: @4=Добавляем @1 XP игроку @2, итого: @3, уровень опыта: @4 diff --git a/mods/HUD/mcl_experience/locale/mcl_experience.zh_TW.tr b/mods/HUD/mcl_experience/locale/mcl_experience.zh_TW.tr deleted file mode 100644 index a10e47e61..000000000 --- a/mods/HUD/mcl_experience/locale/mcl_experience.zh_TW.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_experience -[[] ]=[[<玩家名字>] <經驗值>] -Gives a player some XP=給予玩家經驗值 -Error: Too many parameters!=錯誤:太多參數! -Error: Incorrect value of XP=錯誤:經驗值數值不當! -Error: Player not found=錯誤:找不到玩家! -Added @1 XP to @2, total: @3, experience level: @4=已給予 @2 @1 點經驗值,共有 @3 點,經驗等級:@4 diff --git a/mods/HUD/mcl_experience/locale/mlc_experience.fr.tr b/mods/HUD/mcl_experience/locale/mlc_experience.fr.tr deleted file mode 100644 index 0644e2596..000000000 --- a/mods/HUD/mcl_experience/locale/mlc_experience.fr.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_experience -[[] ]=[[] ] -Gives a player some XP=Donne de l'XP à un joueur -Error: Too many parameters!=Erreur: Trop de paramètres! -Error: Incorrect value of XP=Erreur: Valeur incorrecte de XP -Error: Player not found=Erreur: Joueur introuvable -Added @1 XP to @2, total: @3, experience level: @4=Ajout de @1 XP à @2, total: @3, niveau d'expérience: @4 diff --git a/mods/HUD/mcl_experience/locale/template.txt b/mods/HUD/mcl_experience/locale/template.txt deleted file mode 100644 index a355cbbac..000000000 --- a/mods/HUD/mcl_experience/locale/template.txt +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_experience -[[] ]= -Gives a player some XP= -Error: Too many parameters!= -Error: Incorrect value of XP= -Error: Player not found= -Added @1 XP to @2, total: @3, experience level: @4= diff --git a/mods/HUD/mcl_experience/mod.conf b/mods/HUD/mcl_experience/mod.conf deleted file mode 100644 index 211249b30..000000000 --- a/mods/HUD/mcl_experience/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_experience -author = oilboi -description = eXPerience mod diff --git a/mods/HUD/mcl_experience/orb.lua b/mods/HUD/mcl_experience/orb.lua deleted file mode 100644 index 9aecce00d..000000000 --- a/mods/HUD/mcl_experience/orb.lua +++ /dev/null @@ -1,220 +0,0 @@ -local size_min, size_max = 20, 59 -local delta_size = size_max - size_min - -local size_to_xp = { - {-32768, 2}, -- 1 - { 3, 6}, -- 2 - { 7, 16}, -- 3 - { 17, 36}, -- 4 - { 37, 72}, -- 5 - { 73, 148}, -- 6 - { 149, 306}, -- 7 - { 307, 616}, -- 8 - { 617, 1236}, -- 9 - { 1237, 2476}, -- 10 - { 2477, 32767} -- 11 -} - -local function xp_to_size(xp) - local i, l = 1, #size_to_xp - - while xp > size_to_xp[i][1] and i < l do - i = i + 1 - end - - return ((i - 1) / (l - 1) * delta_size + size_min) / 100 -end - -local max_orb_age = 300 -- seconds -local gravity = vector.new(0, -((tonumber(minetest.settings:get("movement_gravity"))) or 9.81), 0) - -local collector, pos, pos2 -local direction, distance, player_velocity, goal -local currentvel, acceleration, multiplier, velocity -local node, vel, def -local is_moving, is_slippery, slippery, slip_factor -local size -local function xp_step(self, dtime) - --if item set to be collected then only execute go to player - if self.collected == true then - if not self.collector then - self.collected = false - return - end - collector = minetest.get_player_by_name(self.collector) - if collector and collector:get_hp() > 0 and vector.distance(self.object:get_pos(),collector:get_pos()) < 7.25 then - self.object:set_acceleration(vector.new(0,0,0)) - self.disable_physics(self) - --get the variables - pos = self.object:get_pos() - pos2 = collector:get_pos() - - player_velocity = collector:get_velocity() or collector:get_player_velocity() - - pos2.y = pos2.y + 0.8 - - direction = vector.direction(pos,pos2) - distance = vector.distance(pos2,pos) - multiplier = distance - if multiplier < 1 then - multiplier = 1 - end - goal = vector.multiply(direction,multiplier) - currentvel = self.object:get_velocity() - - if distance > 1 then - multiplier = 20 - distance - velocity = vector.multiply(direction,multiplier) - goal = velocity - acceleration = vector.new(goal.x-currentvel.x,goal.y-currentvel.y,goal.z-currentvel.z) - self.object:add_velocity(vector.add(acceleration,player_velocity)) - elseif distance < 0.8 then - mcl_experience.add_xp(collector, self._xp) - self.object:remove() - end - return - else - self.collector = nil - self.enable_physics(self) - end - end - - - self.age = self.age + dtime - if self.age > max_orb_age then - self.object:remove() - return - end - - pos = self.object:get_pos() - - if pos then - node = minetest.get_node_or_nil({ - x = pos.x, - y = pos.y -0.25, - z = pos.z - }) - else - return - end - - -- Remove nodes in 'ignore' - if node and node.name == "ignore" then - self.object:remove() - return - end - - if not self.physical_state then - return -- Don't do anything - end - - -- Slide on slippery nodes - vel = self.object:get_velocity() - def = node and minetest.registered_nodes[node.name] - is_moving = (def and not def.walkable) or - vel.x ~= 0 or vel.y ~= 0 or vel.z ~= 0 - is_slippery = false - - if def and def.walkable then - slippery = minetest.get_item_group(node.name, "slippery") - is_slippery = slippery ~= 0 - if is_slippery and (math.abs(vel.x) > 0.2 or math.abs(vel.z) > 0.2) then - -- Horizontal deceleration - slip_factor = 4.0 / (slippery + 4) - self.object:set_acceleration({ - x = -vel.x * slip_factor, - y = 0, - z = -vel.z * slip_factor - }) - elseif vel.y == 0 then - is_moving = false - end - end - - if self.moving_state == is_moving and self.slippery_state == is_slippery then - -- Do not update anything until the moving state changes - return - end - - self.moving_state = is_moving - self.slippery_state = is_slippery - - if is_moving then - self.object:set_acceleration(gravity) - else - self.object:set_acceleration({x = 0, y = 0, z = 0}) - self.object:set_velocity({x = 0, y = 0, z = 0}) - end -end - -minetest.register_entity("mcl_experience:orb", { - initial_properties = { - hp_max = 1, - physical = true, - collide_with_objects = false, - collisionbox = {-0.2, -0.2, -0.2, 0.2, 0.2, 0.2}, - visual = "sprite", - visual_size = {x = 0.4, y = 0.4}, - textures = {name="mcl_experience_orb.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}}, - spritediv = {x = 1, y = 14}, - initial_sprite_basepos = {x = 0, y = 0}, - is_visible = true, - pointable = false, - static_save = false, - }, - moving_state = true, - slippery_state = false, - physical_state = true, - -- Item expiry - age = 0, - -- Pushing item out of solid nodes - force_out = nil, - force_out_start = nil, - --Collection Variables - collectable = false, - try_timer = 0, - collected = false, - delete_timer = 0, - radius = 4, - - - on_activate = function(self, staticdata, dtime_s) - self.object:set_velocity(vector.new( - math.random(-2,2)*math.random(), - math.random(2,5), - math.random(-2,2)*math.random() - )) - self.object:set_armor_groups({immortal = 1}) - self.object:set_velocity({x = 0, y = 2, z = 0}) - self.object:set_acceleration(gravity) - local xp = tonumber(staticdata) - self._xp = xp - size = xp_to_size(xp) - self.object:set_properties({ - visual_size = {x = size, y = size}, - glow = 14, - }) - self.object:set_sprite({x=1,y=math.random(1,14)}, 14, 0.05, false) - end, - - enable_physics = function(self) - if not self.physical_state then - self.physical_state = true - self.object:set_properties({physical = true}) - self.object:set_velocity({x=0, y=0, z=0}) - self.object:set_acceleration(gravity) - end - end, - - disable_physics = function(self) - if self.physical_state then - self.physical_state = false - self.object:set_properties({physical = false}) - self.object:set_velocity({x=0, y=0, z=0}) - self.object:set_acceleration({x=0, y=0, z=0}) - end - end, - on_step = function(self, dtime) - xp_step(self, dtime) - end, -}) diff --git a/mods/HUD/mcl_experience/sounds/attributes.txt b/mods/HUD/mcl_experience/sounds/attributes.txt deleted file mode 100644 index 26200b934..000000000 --- a/mods/HUD/mcl_experience/sounds/attributes.txt +++ /dev/null @@ -1,2 +0,0 @@ - -experience/level_up - https://freesound.org/people/geraldfiebig/sounds/323123/ diff --git a/mods/HUD/mcl_experience/sounds/mcl_experience.ogg b/mods/HUD/mcl_experience/sounds/mcl_experience.ogg deleted file mode 100644 index ed050d739..000000000 Binary files a/mods/HUD/mcl_experience/sounds/mcl_experience.ogg and /dev/null differ diff --git a/mods/HUD/mcl_experience/sounds/mcl_experience_level_up.ogg b/mods/HUD/mcl_experience/sounds/mcl_experience_level_up.ogg deleted file mode 100644 index 9f0a9754b..000000000 Binary files a/mods/HUD/mcl_experience/sounds/mcl_experience_level_up.ogg and /dev/null differ diff --git a/mods/HUD/mcl_experience/textures/attributes.txt b/mods/HUD/mcl_experience/textures/attributes.txt deleted file mode 100644 index 892455baa..000000000 --- a/mods/HUD/mcl_experience/textures/attributes.txt +++ /dev/null @@ -1 +0,0 @@ -experience_orb - https://github.com/Gerold55/Experience-Mod/blob/master/textures/orb.png \ No newline at end of file diff --git a/mods/HUD/mcl_experience/textures/mcl_experience_bar.png b/mods/HUD/mcl_experience/textures/mcl_experience_bar.png deleted file mode 100644 index 19a2c029d..000000000 Binary files a/mods/HUD/mcl_experience/textures/mcl_experience_bar.png and /dev/null differ diff --git a/mods/HUD/mcl_experience/textures/mcl_experience_bar_background.png b/mods/HUD/mcl_experience/textures/mcl_experience_bar_background.png deleted file mode 100644 index f28a0e0dd..000000000 Binary files a/mods/HUD/mcl_experience/textures/mcl_experience_bar_background.png and /dev/null differ diff --git a/mods/HUD/mcl_experience/textures/mcl_experience_bottle.png b/mods/HUD/mcl_experience/textures/mcl_experience_bottle.png deleted file mode 100644 index 51b6e3406..000000000 Binary files a/mods/HUD/mcl_experience/textures/mcl_experience_bottle.png and /dev/null differ diff --git a/mods/HUD/mcl_experience/textures/mcl_experience_orb.png b/mods/HUD/mcl_experience/textures/mcl_experience_orb.png deleted file mode 100644 index 4d553833c..000000000 Binary files a/mods/HUD/mcl_experience/textures/mcl_experience_orb.png and /dev/null differ diff --git a/mods/HUD/mcl_formspec/init.lua b/mods/HUD/mcl_formspec/init.lua deleted file mode 100644 index 7013fc0ee..000000000 --- a/mods/HUD/mcl_formspec/init.lua +++ /dev/null @@ -1,11 +0,0 @@ -mcl_formspec = {} - -function mcl_formspec.get_itemslot_bg(x, y, w, h) - local out = "" - for i = 0, w - 1, 1 do - for j = 0, h - 1, 1 do - out = out .."image["..x+i..","..y+j..";1,1;mcl_formspec_itemslot.png]" - end - end - return out -end diff --git a/mods/HUD/mcl_formspec/mod.conf b/mods/HUD/mcl_formspec/mod.conf deleted file mode 100644 index 8bc1ca7c3..000000000 --- a/mods/HUD/mcl_formspec/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_formspec -author = Wuzzy -description = Helper mod to simplify creation of formspecs a little bit diff --git a/mods/HUD/mcl_formspec/textures/mcl_formspec_itemslot.png b/mods/HUD/mcl_formspec/textures/mcl_formspec_itemslot.png deleted file mode 100644 index 84958ecd4..000000000 Binary files a/mods/HUD/mcl_formspec/textures/mcl_formspec_itemslot.png and /dev/null differ diff --git a/mods/HUD/mcl_formspec_prepend/init.lua b/mods/HUD/mcl_formspec_prepend/init.lua deleted file mode 100644 index 2230a9831..000000000 --- a/mods/HUD/mcl_formspec_prepend/init.lua +++ /dev/null @@ -1,3 +0,0 @@ -minetest.register_on_joinplayer(function(player) - player:set_formspec_prepend(mcl_vars.gui_nonbg .. mcl_vars.gui_bg_color .. mcl_vars.gui_bg_img) -end) diff --git a/mods/HUD/mcl_formspec_prepend/mod.conf b/mods/HUD/mcl_formspec_prepend/mod.conf deleted file mode 100644 index 544ab4ec7..000000000 --- a/mods/HUD/mcl_formspec_prepend/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_formspec_prepend -author = Wuzzy -description = Formspec prepend for MCL2 -depends = mcl_init diff --git a/mods/HUD/mcl_hbarmor/README.md b/mods/HUD/mcl_hbarmor/README.md deleted file mode 100644 index 0eccd6916..000000000 --- a/mods/HUD/mcl_hbarmor/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# MineClone 2 HUD bar for `mcl_armor` [`mcl_hbarmor`] - -## Description -This mod adds a simple HUD bar which displays the player's armor points. -The players has 0-20 armor points. - -The armor bar is hidden if the player wears no armor. - -## Licensing -This mod is entirly free softare. - -### Source code -License: MIT License (see below) - -### Textures - -See MineClone 2 license. - -### MIT License -Everything else is under the MIT License: -© Copyright BlockMen (2013-2014) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the MIT License. -See for more details. diff --git a/mods/HUD/mcl_hbarmor/init.lua b/mods/HUD/mcl_hbarmor/init.lua deleted file mode 100644 index 34ac205ac..000000000 --- a/mods/HUD/mcl_hbarmor/init.lua +++ /dev/null @@ -1,132 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math -local tonumber = tonumber - -local get_connected_players = minetest.get_connected_players - -local mcl_hbarmor = { - -- HUD statbar values - armor = {}, - -- Stores if player's HUD bar has been initialized so far. - player_active = {}, - -- Time difference in seconds between updates to the HUD armor bar. - -- Increase this number for slow servers. - tick = 0.1, - -- If true, the armor bar is hidden when the player does not wear any armor - autohide = true, -} - -local tick_config = minetest.settings:get("mcl_hbarmor_tick") - -if tonumber(tick_config) then - mcl_hbarmor.tick = tonumber(tick_config) -end - - -local function must_hide(playername, arm) - return arm == 0 -end - -local function arm_printable(arm) - return math.ceil(math.floor(arm+0.5)) -end - -local function custom_hud(player) - local name = player:get_player_name() - - if minetest.settings:get_bool("enable_damage") then - local ret = mcl_hbarmor.get_armor(player) - if ret == false then - minetest.log("error", "[mcl_hbarmor] Call to mcl_hbarmor.get_armor in custom_hud returned with false!") - return - end - local arm = tonumber(mcl_hbarmor.armor[name]) - if not arm then - arm = 0 - end - local hide - if mcl_hbarmor.autohide then - hide = must_hide(name, arm) - else - hide = false - end - hb.init_hudbar(player, "armor", arm_printable(arm), nil, hide) - end -end - ---register and define armor HUD bar -hb.register_hudbar("armor", 0xFFFFFF, S("Armor"), { icon = "hbarmor_icon.png", bgicon = "hbarmor_bgicon.png", bar = "hbarmor_bar.png" }, 0, 0, 20, mcl_hbarmor.autohide) - -function mcl_hbarmor.get_armor(player) - local name = player:get_player_name() - local pts = player:get_meta():get_int("mcl_armor:armor_points") - if not pts then - return false - else - mcl_hbarmor.set_armor(name, pts) - end - return true -end - -function mcl_hbarmor.set_armor(player_name, pts) - mcl_hbarmor.armor[player_name] = math.max(0, math.min(20, pts)) -end - --- update hud elemtens if value has changed -local function update_hud(player) - local name = player:get_player_name() - --armor - local arm = tonumber(mcl_hbarmor.armor[name]) - if not arm then - arm = 0 - mcl_hbarmor.armor[name] = 0 - end - if mcl_hbarmor.autohide then - -- hide armor bar completely when there is none - if must_hide(name, arm) then - hb.hide_hudbar(player, "armor") - else - hb.change_hudbar(player, "armor", arm_printable(arm)) - hb.unhide_hudbar(player, "armor") - end - else - hb.change_hudbar(player, "armor", arm_printable(arm)) - end -end - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - custom_hud(player) - mcl_hbarmor.player_active[name] = true -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - mcl_hbarmor.player_active[name] = false -end) - -local main_timer = 0 -local timer = 0 -minetest.register_globalstep(function(dtime) - --TODO: replace this by playerglobalstep API then implemented - main_timer = main_timer + dtime - timer = timer + dtime - if main_timer > mcl_hbarmor.tick or timer > 4 then - if minetest.settings:get_bool("enable_damage") then - if main_timer > mcl_hbarmor.tick then main_timer = 0 end - for _,player in pairs(get_connected_players()) do - local name = player:get_player_name() - if mcl_hbarmor.player_active[name] == true then - local ret = mcl_hbarmor.get_armor(player) - if ret == false then - minetest.log("error", "[mcl_hbarmor] Call to mcl_hbarmor.get_armor in globalstep returned with false!") - end - -- update all hud elements - update_hud(player) - end - end - end - end - if timer > 4 then timer = 0 end -end) diff --git a/mods/HUD/mcl_hbarmor/locale/hbarmor.de.tr b/mods/HUD/mcl_hbarmor/locale/hbarmor.de.tr deleted file mode 100644 index e7aa7d785..000000000 --- a/mods/HUD/mcl_hbarmor/locale/hbarmor.de.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:hbarmor -Armor=Panzerung diff --git a/mods/HUD/mcl_hbarmor/locale/hbarmor.es.tr b/mods/HUD/mcl_hbarmor/locale/hbarmor.es.tr deleted file mode 100644 index f9529b482..000000000 --- a/mods/HUD/mcl_hbarmor/locale/hbarmor.es.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:hbarmor -Armor=Armadura diff --git a/mods/HUD/mcl_hbarmor/locale/hbarmor.fr.tr b/mods/HUD/mcl_hbarmor/locale/hbarmor.fr.tr deleted file mode 100644 index c5addfa5a..000000000 --- a/mods/HUD/mcl_hbarmor/locale/hbarmor.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:hbarmor -Armor=Armure diff --git a/mods/HUD/mcl_hbarmor/locale/hbarmor.it.tr b/mods/HUD/mcl_hbarmor/locale/hbarmor.it.tr deleted file mode 100644 index f02b5c435..000000000 --- a/mods/HUD/mcl_hbarmor/locale/hbarmor.it.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:hbarmor -Armor=Armatura diff --git a/mods/HUD/mcl_hbarmor/locale/hbarmor.ru.tr b/mods/HUD/mcl_hbarmor/locale/hbarmor.ru.tr deleted file mode 100644 index 0b938a594..000000000 --- a/mods/HUD/mcl_hbarmor/locale/hbarmor.ru.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:hbarmor -Armor=Защита diff --git a/mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.pl.tr b/mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.pl.tr deleted file mode 100644 index ff43d7e81..000000000 --- a/mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.pl.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain:hbarmor -Armor=Zbroja - diff --git a/mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.zh_TW.tr b/mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.zh_TW.tr deleted file mode 100644 index a0dc8174e..000000000 --- a/mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.zh_TW.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:hbarmor -Armor=防禦點數 diff --git a/mods/HUD/mcl_hbarmor/locale/template.txt b/mods/HUD/mcl_hbarmor/locale/template.txt deleted file mode 100644 index 80e7a09e8..000000000 --- a/mods/HUD/mcl_hbarmor/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:hbarmor -Armor= diff --git a/mods/HUD/mcl_hbarmor/mod.conf b/mods/HUD/mcl_hbarmor/mod.conf deleted file mode 100644 index 258395875..000000000 --- a/mods/HUD/mcl_hbarmor/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_hbarmor -author = BlockMen -description = Adds a HUD bar displaying the current damage of the player's armor. -depends = hudbars, mcl_armor diff --git a/mods/HUD/mcl_hbarmor/settingtypes.txt b/mods/HUD/mcl_hbarmor/settingtypes.txt deleted file mode 100644 index cfd875dfe..000000000 --- a/mods/HUD/mcl_hbarmor/settingtypes.txt +++ /dev/null @@ -1,3 +0,0 @@ -#Time difference in seconds between updates to the armor HUD bar. -#Increase this number for slow servers. -hbarmor_tick (Armor HUD bar update frequency) float 0.1 0.0 4.0 diff --git a/mods/HUD/mcl_hbarmor/textures/hbarmor_bar.png b/mods/HUD/mcl_hbarmor/textures/hbarmor_bar.png deleted file mode 100644 index ce0aa78ec..000000000 Binary files a/mods/HUD/mcl_hbarmor/textures/hbarmor_bar.png and /dev/null differ diff --git a/mods/HUD/mcl_hbarmor/textures/hbarmor_bgicon.png b/mods/HUD/mcl_hbarmor/textures/hbarmor_bgicon.png deleted file mode 100644 index 86e68e403..000000000 Binary files a/mods/HUD/mcl_hbarmor/textures/hbarmor_bgicon.png and /dev/null differ diff --git a/mods/HUD/mcl_hbarmor/textures/hbarmor_icon.png b/mods/HUD/mcl_hbarmor/textures/hbarmor_icon.png deleted file mode 100644 index e0066a387..000000000 Binary files a/mods/HUD/mcl_hbarmor/textures/hbarmor_icon.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/README.txt b/mods/HUD/mcl_inventory/README.txt deleted file mode 100644 index 7dd80f1a4..000000000 --- a/mods/HUD/mcl_inventory/README.txt +++ /dev/null @@ -1,29 +0,0 @@ -Minetest mod "Crafting" -======================= -Version: 2.0.1 - -License of source code and Textures: WTFPL ------------------------------------- -copyright (c) 2013-2014 by BlockMen - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - - ---USING the mod-- -================= - -This mod changes the players inventory (survival and creative) with more slots (9*4 instead of 8*4) -Like known from Minecraft you have a 2x2 crafting grid at inventory now. Furthermore a categorized creative -inventory and a support for stu's 3d armor mod (To use the armor and a preview of player). - -Left items in the crafting slots are dropped infront of you. - - -Crafting table -_________ - -Has been moved to mcl_crafting_table diff --git a/mods/HUD/mcl_inventory/creative.lua b/mods/HUD/mcl_inventory/creative.lua deleted file mode 100644 index 4c2faaef6..000000000 --- a/mods/HUD/mcl_inventory/creative.lua +++ /dev/null @@ -1,701 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local F = minetest.formspec_escape -local C = minetest.colorize - --- Prepare player info table -local players = {} - --- Containing all the items for each Creative Mode tab -local inventory_lists = {} - ---local mod_player = minetest.get_modpath("mcl_player") - --- Create tables -local builtin_filter_ids = {"blocks","deco","redstone","rail","food","tools","combat","mobs","brew","matr","misc","all"} -for _, f in pairs(builtin_filter_ids) do - inventory_lists[f] = {} -end - -local function replace_enchanted_books(tbl) - for k, item in ipairs(tbl) do - if item:find("mcl_enchanting:book_enchanted") == 1 then - local _, enchantment, level = item:match("(%a+) ([_%w]+) (%d+)") - level = level and tonumber(level) - if enchantment and level then - tbl[k] = mcl_enchanting.enchant(ItemStack("mcl_enchanting:book_enchanted"), enchantment, level) - end - end - end -end - ---[[ Populate all the item tables. We only do this once. Note this code must be -executed after loading all the other mods in order to work. ]] -minetest.register_on_mods_loaded(function() - for name,def in pairs(minetest.registered_items) do - if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then - local function is_redstone(def) - return def.mesecons or def.groups.mesecon or def.groups.mesecon_conductor_craftable or def.groups.mesecon_effecor_off - end - local function is_tool(def) - return def.groups.tool or (def.tool_capabilities and def.tool_capabilities.damage_groups == nil) - end - local function is_weapon_or_armor(def) - return def.groups.weapon or def.groups.weapon_ranged or def.groups.ammo or def.groups.combat_item or ((def.groups.armor_head or def.groups.armor_torso or def.groups.armor_legs or def.groups.armor_feet or def.groups.horse_armor) and def.groups.non_combat_armor ~= 1) - end - -- Is set to true if it was added in any category besides misc - local nonmisc = false - if def.groups.building_block then - table.insert(inventory_lists["blocks"], name) - nonmisc = true - end - if def.groups.deco_block then - table.insert(inventory_lists["deco"], name) - nonmisc = true - end - if is_redstone(def) then - table.insert(inventory_lists["redstone"], name) - nonmisc = true - end - if def.groups.transport then - table.insert(inventory_lists["rail"], name) - nonmisc = true - end - if (def.groups.food and not def.groups.brewitem) or def.groups.eatable then - table.insert(inventory_lists["food"], name) - nonmisc = true - end - if is_tool(def) then - table.insert(inventory_lists["tools"], name) - nonmisc = true - end - if is_weapon_or_armor(def) then - table.insert(inventory_lists["combat"], name) - nonmisc = true - end - if def.groups.spawn_egg == 1 then - table.insert(inventory_lists["mobs"], name) - nonmisc = true - end - if def.groups.brewitem then - table.insert(inventory_lists["brew"], name) - nonmisc = true - end - if def.groups.craftitem then - table.insert(inventory_lists["matr"], name) - nonmisc = true - end - -- Misc. category is for everything which is not in any other category - if not nonmisc then - table.insert(inventory_lists["misc"], name) - end - - table.insert(inventory_lists["all"], name) - end - end - - for ench, def in pairs(mcl_enchanting.enchantments) do - local str = "mcl_enchanting:book_enchanted " .. ench .. " " .. def.max_level - if def.inv_tool_tab then - table.insert(inventory_lists["tools"], str) - end - if def.inv_combat_tab then - table.insert(inventory_lists["combat"], str) - end - table.insert(inventory_lists["all"], str) - end - - for _, to_sort in pairs(inventory_lists) do - table.sort(to_sort) - replace_enchanted_books(to_sort) - end -end) - -local function filter_item(name, description, lang, filter) - local desc - if not lang then - desc = string.lower(description) - else - desc = string.lower(minetest.get_translated_string(lang, description)) - end - return string.find(name, filter) or string.find(desc, filter) -end - -local function set_inv_search(filter, player) - local playername = player:get_player_name() - local inv = minetest.get_inventory({type="detached", name="creative_"..playername}) - local creative_list = {} - local lang = minetest.get_player_information(playername).lang_code - for name,def in pairs(minetest.registered_items) do - if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then - if filter_item(string.lower(def.name), def.description, lang, filter) then - table.insert(creative_list, name) - end - end - end - for ench, def in pairs(mcl_enchanting.enchantments) do - for i = 1, def.max_level do - local stack = mcl_enchanting.enchant(ItemStack("mcl_enchanting:book_enchanted"), ench, i) - if filter_item("mcl_enchanting:book_enchanted", minetest.strip_colors(stack:get_description()), lang, filter) then - table.insert(creative_list, "mcl_enchanting:book_enchanted " .. ench .. " " .. i) - end - end - end - table.sort(creative_list) - replace_enchanted_books(creative_list) - - inv:set_size("main", #creative_list) - inv:set_list("main", creative_list) -end - -local function set_inv_page(page, player) - local playername = player:get_player_name() - local inv = minetest.get_inventory({type="detached", name="creative_"..playername}) - inv:set_size("main", 0) - local creative_list = {} - if inventory_lists[page] then -- Standard filter - creative_list = inventory_lists[page] - end - inv:set_size("main", #creative_list) - inv:set_list("main", creative_list) -end - -local function init(player) - local playername = player:get_player_name() - minetest.create_detached_inventory("creative_"..playername, { - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - if minetest.is_creative_enabled(playername) then - return count - else - return 0 - end - end, - allow_put = function(inv, listname, index, stack, player) - return 0 - end, - allow_take = function(inv, listname, index, stack, player) - if minetest.is_creative_enabled(player:get_player_name()) then - return -1 - else - return 0 - end - end, - }, playername) - set_inv_page("all", player) -end - --- Create the trash field -local trash = minetest.create_detached_inventory("trash", { - allow_put = function(inv, listname, index, stack, player) - if minetest.is_creative_enabled(player:get_player_name()) then - return stack:get_count() - else - return 0 - end - end, - on_put = function(inv, listname, index, stack, player) - inv:set_stack(listname, index, "") - end, -}) -trash:set_size("main", 1) - -local noffset = {} -- numeric tab offset -local offset = {} -- string offset: -local boffset = {} -- -local hoch = {} -local filtername = {} ---local bg = {} - -local noffset_x_start = -0.24 -local noffset_x = noffset_x_start -local noffset_y = -0.25 -local function next_noffset(id, right) - if right then - noffset[id] = { 8.94, noffset_y } - else - noffset[id] = { noffset_x, noffset_y } - noffset_x = noffset_x + 1.25 - end -end - --- Upper row -next_noffset("blocks") -next_noffset("deco") -next_noffset("redstone") -next_noffset("rail") -next_noffset("brew") -next_noffset("misc") -next_noffset("nix", true) - -noffset_x = noffset_x_start -noffset_y = 8.12 - --- Lower row -next_noffset("food") -next_noffset("tools") -next_noffset("combat") -next_noffset("mobs") -next_noffset("matr") -next_noffset("inv", true) - -for k,v in pairs(noffset) do - offset[k] = tostring(v[1]) .. "," .. tostring(v[2]) - boffset[k] = tostring(v[1]+0.19) .. "," .. tostring(v[2]+0.25) -end - -hoch["blocks"] = "" -hoch["deco"] = "" -hoch["redstone"] = "" -hoch["rail"] = "" -hoch["brew"] = "" -hoch["misc"] = "" -hoch["nix"] = "" -hoch["default"] = "" -hoch["food"] = "_down" -hoch["tools"] = "_down" -hoch["combat"] = "_down" -hoch["mobs"] = "_down" -hoch["matr"] = "_down" -hoch["inv"] = "_down" - -filtername["blocks"] = S("Building Blocks") -filtername["deco"] = S("Decoration Blocks") -filtername["redstone"] = S("Redstone") -filtername["rail"] = S("Transportation") -filtername["misc"] = S("Miscellaneous") -filtername["nix"] = S("Search Items") -filtername["food"] = S("Foodstuffs") -filtername["tools"] = S("Tools") -filtername["combat"] = S("Combat") -filtername["mobs"] = S("Mobs") -filtername["brew"] = S("Brewing") -filtername["matr"] = S("Materials") -filtername["inv"] = S("Survival Inventory") - ---local dark_bg = "crafting_creative_bg_dark.png" - ---[[local function reset_menu_item_bg() - bg["blocks"] = dark_bg - bg["deco"] = dark_bg - bg["redstone"] = dark_bg - bg["rail"] = dark_bg - bg["misc"] = dark_bg - bg["nix"] = dark_bg - bg["food"] = dark_bg - bg["tools"] = dark_bg - bg["combat"] = dark_bg - bg["mobs"] = dark_bg - bg["brew"] = dark_bg - bg["matr"] = dark_bg - bg["inv"] = dark_bg - bg["default"] = dark_bg -end]] - -local function get_stack_size(player) - return player:get_meta():get_int("mcl_inventory:switch_stack") -end - -local function set_stack_size(player, n) - player:get_meta():set_int("mcl_inventory:switch_stack", n) -end - -minetest.register_on_joinplayer(function (player) - if get_stack_size(player) == 0 then - set_stack_size(player, 64) - end -end) - -function mcl_inventory.set_creative_formspec(player, start_i, pagenum, inv_size, show, page, filter) - --reset_menu_item_bg() - pagenum = math.floor(pagenum) or 1 - - local playername = player:get_player_name() - - if not inv_size then - if page == "nix" then - local inv = minetest.get_inventory({type="detached", name="creative_"..playername}) - inv_size = inv:get_size("main") - elseif page and page ~= "inv" then - inv_size = #(inventory_lists[page]) - else - inv_size = 0 - end - end - local pagemax = math.max(1, math.floor((inv_size-1) / (9*5) + 1)) - local name = "nix" - local main_list - local listrings = "listring[detached:creative_"..playername..";main]".. - "listring[current_player;main]".. - "listring[detached:trash;main]" - - if page then - name = page - if players[playername] then - players[playername].page = page - end - end - --bg[name] = "crafting_creative_bg.png" - - local inv_bg = "crafting_inventory_creative.png" - if name == "inv" then - inv_bg = "crafting_inventory_creative_survival.png" - - -- Background images for armor slots (hide if occupied) - local armor_slot_imgs = "" - local inv = player:get_inventory() - if inv:get_stack("armor", 2):is_empty() then - armor_slot_imgs = armor_slot_imgs .. "image[2.5,1.3;1,1;mcl_inventory_empty_armor_slot_helmet.png]" - end - if inv:get_stack("armor", 3):is_empty() then - armor_slot_imgs = armor_slot_imgs .. "image[2.5,2.75;1,1;mcl_inventory_empty_armor_slot_chestplate.png]" - end - if inv:get_stack("armor", 4):is_empty() then - armor_slot_imgs = armor_slot_imgs .. "image[5.5,1.3;1,1;mcl_inventory_empty_armor_slot_leggings.png]" - end - if inv:get_stack("armor", 5):is_empty() then - armor_slot_imgs = armor_slot_imgs .. "image[5.5,2.75;1,1;mcl_inventory_empty_armor_slot_boots.png]" - end - - if inv:get_stack("offhand", 1):is_empty() then - armor_slot_imgs = armor_slot_imgs .. "image[1.5,2.025;1,1;mcl_inventory_empty_armor_slot_shield.png]" - end - - local stack_size = get_stack_size(player) - - -- Survival inventory slots - main_list = "list[current_player;main;0,3.75;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,3.75,9,3).. - -- armor - "list[current_player;armor;2.5,1.3;1,1;1]".. - "list[current_player;armor;2.5,2.75;1,1;2]".. - "list[current_player;armor;5.5,1.3;1,1;3]".. - "list[current_player;armor;5.5,2.75;1,1;4]".. - mcl_formspec.get_itemslot_bg(2.5,1.3,1,1).. - mcl_formspec.get_itemslot_bg(2.5,2.75,1,1).. - mcl_formspec.get_itemslot_bg(5.5,1.3,1,1).. - mcl_formspec.get_itemslot_bg(5.5,2.75,1,1).. - "list[current_player;offhand;1.5,2.025;1,1]".. - mcl_formspec.get_itemslot_bg(1.5,2.025,1,1).. - armor_slot_imgs.. - -- player preview - mcl_player.get_player_formspec_model(player, 3.9, 1.4, 1.2333, 2.4666, "").. - -- crafting guide button - "image_button[9,1;1,1;craftguide_book.png;__mcl_craftguide;]".. - "tooltip[__mcl_craftguide;"..F(S("Recipe book")).."]".. - -- help button - "image_button[9,2;1,1;doc_button_icon_lores.png;__mcl_doc;]".. - "tooltip[__mcl_doc;"..F(S("Help")).."]".. - -- skins button - "image_button[9,3;1,1;mcl_skins_button.png;__mcl_skins;]".. - "tooltip[__mcl_skins;"..F(S("Select player skin")).."]".. - -- achievements button - "image_button[9,4;1,1;mcl_achievements_button.png;__mcl_achievements;]".. - --"style_type[image_button;border=;bgimg=;bgimg_pressed=]".. - "tooltip[__mcl_achievements;"..F(S("Achievements")).."]".. - -- switch stack size button - "image_button[9,5;1,1;default_apple.png;__switch_stack;]".. - "label[9.4,5.4;".. F(C("#FFFFFF", stack_size ~= 1 and stack_size or "")) .."]".. - "tooltip[__switch_stack;"..F(S("Switch stack size")).."]" - - -- For shortcuts - listrings = listrings .. - "listring[detached:"..playername.."_armor;armor]".. - "listring[current_player;main]" - else - -- Creative inventory slots - main_list = "list[detached:creative_"..playername..";main;0,1.75;9,5;"..tostring(start_i).."]".. - mcl_formspec.get_itemslot_bg(0,1.75,9,5).. - -- Page buttons - "label[9.0,5.5;"..F(S("@1/@2", pagenum, pagemax)).."]".. - "image_button[9.0,6.0;0.7,0.7;crafting_creative_prev.png;creative_prev;]".. - "image_button[9.5,6.0;0.7,0.7;crafting_creative_next.png;creative_next;]" - end - - local tab_icon = { - blocks = "mcl_core:brick_block", - deco = "mcl_flowers:peony", - redstone = "mesecons:redstone", - rail = "mcl_minecarts:golden_rail", - misc = "mcl_buckets:bucket_lava", - nix = "mcl_compass:compass", - food = "mcl_core:apple", - tools = "mcl_core:axe_iron", - combat = "mcl_core:sword_gold", - mobs = "mobs_mc:cow", - brew = "mcl_potions:dragon_breath", - matr = "mcl_core:stick", - inv = "mcl_chests:chest", - } - local function tab(current_tab, this_tab) - local bg_img - if current_tab == this_tab then - bg_img = "crafting_creative_active"..hoch[this_tab]..".png" - else - bg_img = "crafting_creative_inactive"..hoch[this_tab]..".png" - end - return - "style["..this_tab..";border=false;bgimg=;bgimg_pressed=]".. - "item_image_button[" .. boffset[this_tab] ..";1,1;"..tab_icon[this_tab]..";"..this_tab..";]".. - "image[" .. offset[this_tab] .. ";1.5,1.44;" .. bg_img .. "]" - end - local caption = "" - if name ~= "inv" and filtername[name] then - caption = "label[0,1.2;"..F(minetest.colorize("#313131", filtername[name])).."]" - end - - local formspec = "size[10,9.3]".. - "no_prepend[]".. - mcl_vars.gui_nonbg..mcl_vars.gui_bg_color.. - "background[-0.19,-0.25;10.5,9.87;"..inv_bg.."]".. - "label[-5,-5;"..name.."]".. - tab(name, "blocks") .. - "tooltip[blocks;"..F(filtername["blocks"]).."]".. - tab(name, "deco") .. - "tooltip[deco;"..F(filtername["deco"]).."]".. - tab(name, "redstone") .. - "tooltip[redstone;"..F(filtername["redstone"]).."]".. - tab(name, "rail") .. - "tooltip[rail;"..F(filtername["rail"]).."]".. - tab(name, "misc") .. - "tooltip[misc;"..F(filtername["misc"]).."]".. - tab(name, "nix") .. - "tooltip[nix;"..F(filtername["nix"]).."]".. - caption.. - "list[current_player;main;0,7;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7,9,1).. - main_list.. - tab(name, "food") .. - "tooltip[food;"..F(filtername["food"]).."]".. - tab(name, "tools") .. - "tooltip[tools;"..F(filtername["tools"]).."]".. - tab(name, "combat") .. - "tooltip[combat;"..F(filtername["combat"]).."]".. - tab(name, "mobs") .. - "tooltip[mobs;"..F(filtername["mobs"]).."]".. - tab(name, "brew") .. - "tooltip[brew;"..F(filtername["brew"]).."]".. - tab(name, "matr") .. - "tooltip[matr;"..F(filtername["matr"]).."]".. - tab(name, "inv") .. - "tooltip[inv;"..F(filtername["inv"]).."]".. - "list[detached:trash;main;9,7;1,1;]".. - mcl_formspec.get_itemslot_bg(9,7,1,1).. - "image[9,7;1,1;crafting_creative_trash.png]".. - listrings - - if name == "nix" then - if filter == nil then - filter = "" - end - formspec = formspec .. "field[5.3,1.34;4,0.75;search;;"..minetest.formspec_escape(filter).."]" - formspec = formspec .. "field_close_on_enter[search;false]" - end - if pagenum then formspec = formspec .. "p"..tostring(pagenum) end - player:set_inventory_formspec(formspec) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - local page = nil - - if not minetest.is_creative_enabled(player:get_player_name()) then - return - end - if formname ~= "" or fields.quit == "true" then - -- No-op if formspec closed or not player inventory (formname == "") - return - end - - local name = player:get_player_name() - - if fields.blocks then - if players[name].page == "blocks" then return end - set_inv_page("blocks",player) - page = "blocks" - elseif fields.deco then - if players[name].page == "deco" then return end - set_inv_page("deco",player) - page = "deco" - elseif fields.redstone then - if players[name].page == "redstone" then return end - set_inv_page("redstone",player) - page = "redstone" - elseif fields.rail then - if players[name].page == "rail" then return end - set_inv_page("rail",player) - page = "rail" - elseif fields.misc then - if players[name].page == "misc" then return end - set_inv_page("misc",player) - page = "misc" - elseif fields.nix then - set_inv_page("all",player) - page = "nix" - elseif fields.food then - if players[name].page == "food" then return end - set_inv_page("food",player) - page = "food" - elseif fields.tools then - if players[name].page == "tools" then return end - set_inv_page("tools",player) - page = "tools" - elseif fields.combat then - if players[name].page == "combat" then return end - set_inv_page("combat",player) - page = "combat" - elseif fields.mobs then - if players[name].page == "mobs" then return end - set_inv_page("mobs",player) - page = "mobs" - elseif fields.brew then - if players[name].page == "brew" then return end - set_inv_page("brew",player) - page = "brew" - elseif fields.matr then - if players[name].page == "matr" then return end - set_inv_page("matr",player) - page = "matr" - elseif fields.inv then - if players[name].page == "inv" then return end - page = "inv" - elseif fields.search == "" and not fields.creative_next and not fields.creative_prev then - set_inv_page("all", player) - page = "nix" - elseif fields.search and not fields.creative_next and not fields.creative_prev then - set_inv_search(string.lower(fields.search),player) - page = "nix" - elseif fields.__switch_stack then - local switch = 1 - if get_stack_size(player) == 1 then - switch = 64 - end - set_stack_size(player, switch) - end - - if page then - players[name].page = page - end - if players[name].page then - page = players[name].page - end - - -- Figure out current scroll bar from formspec - --local formspec = player:get_inventory_formspec() - - local start_i = players[name].start_i - - if fields.creative_prev then - start_i = start_i - 9*5 - elseif fields.creative_next then - start_i = start_i + 9*5 - else - -- Reset scroll bar if not scrolled - start_i = 0 - end - if start_i < 0 then - start_i = start_i + 9*5 - end - - local inv_size - if page == "nix" then - local inv = minetest.get_inventory({type="detached", name="creative_"..name}) - inv_size = inv:get_size("main") - elseif page and page ~= "inv" then - inv_size = #(inventory_lists[page]) - else - inv_size = 0 - end - - if start_i >= inv_size then - start_i = start_i - 9*5 - end - if start_i < 0 or start_i >= inv_size then - start_i = 0 - end - players[name].start_i = start_i - - local filter = "" - if not fields.nix and fields.search and fields.search ~= "" then - filter = fields.search - players[name].filter = filter - end - - mcl_inventory.set_creative_formspec(player, start_i, start_i / (9*5) + 1, inv_size, false, page, filter) -end) - - -if minetest.is_creative_enabled("") then - minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) - -- Place infinite nodes, except for shulker boxes - local group = minetest.get_item_group(itemstack:get_name(), "shulker_box") - return group == 0 or group == nil - end) - - function minetest.handle_node_drops(pos, drops, digger) - if not digger or not digger:is_player() then - for _,item in ipairs(drops) do - minetest.add_item(pos, item) - end - end - local inv = digger:get_inventory() - if inv then - for _,item in ipairs(drops) do - if not inv:contains_item("main", item, true) then - inv:add_item("main", item) - end - end - end - end - - mcl_inventory.update_inventory_formspec = function(player) - local page - - local name = player:get_player_name() - - if players[name].page then - page = players[name].page - else - page = "nix" - end - - -- Figure out current scroll bar from formspec - --local formspec = player:get_inventory_formspec() - local start_i = players[name].start_i - - local inv_size - if page == "nix" then - local inv = minetest.get_inventory({type="detached", name="creative_"..name}) - inv_size = inv:get_size("main") - elseif page and page ~= "inv" then - inv_size = #(inventory_lists[page]) - else - inv_size = 0 - end - - local filter = players[name].filter - if filter == nil then - filter = "" - end - - mcl_inventory.set_creative_formspec(player, start_i, start_i / (9*5) + 1, inv_size, false, page, filter) - end -end - -minetest.register_on_joinplayer(function(player) - -- Initialize variables and inventory - local name = player:get_player_name() - if not players[name] then - players[name] = {} - players[name].page = "nix" - players[name].filter = "" - players[name].start_i = 0 - end - init(player) - mcl_inventory.set_creative_formspec(player, 0, 1, nil, false, "nix", "") -end) - -minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info) - if minetest.is_creative_enabled(player:get_player_name()) and get_stack_size(player) == 64 and action == "put" and inventory_info.listname == "main" then - local stack = inventory_info.stack - stack:set_count(stack:get_stack_max()) - player:get_inventory():set_stack("main", inventory_info.index, stack) - end -end) diff --git a/mods/HUD/mcl_inventory/init.lua b/mods/HUD/mcl_inventory/init.lua deleted file mode 100644 index 1a73e59df..000000000 --- a/mods/HUD/mcl_inventory/init.lua +++ /dev/null @@ -1,242 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local F = minetest.formspec_escape - -mcl_inventory = {} - ---local mod_player = minetest.get_modpath("mcl_player") ---local mod_craftguide = minetest.get_modpath("mcl_craftguide") - --- Returns a single itemstack in the given inventory to the main inventory, or drop it when there's no space left -function return_item(itemstack, dropper, pos, inv) - if dropper:is_player() then - -- Return to main inventory - if inv:room_for_item("main", itemstack) then - inv:add_item("main", itemstack) - else - -- Drop item on the ground - local v = dropper:get_look_dir() - local p = {x=pos.x, y=pos.y+1.2, z=pos.z} - p.x = p.x+(math.random(1,3)*0.2) - p.z = p.z+(math.random(1,3)*0.2) - local obj = minetest.add_item(p, itemstack) - if obj then - v.x = v.x*4 - v.y = v.y*4 + 2 - v.z = v.z*4 - obj:set_velocity(v) - obj:get_luaentity()._insta_collect = false - end - end - else - -- Fallback for unexpected cases - minetest.add_item(pos, itemstack) - end - return itemstack -end - --- Return items in the given inventory list (name) to the main inventory, or drop them if there is no space left -function return_fields(player, name) - local inv = player:get_inventory() - local list = inv:get_list(name) - if not list then return end - for i,stack in ipairs(list) do - return_item(stack, player, player:get_pos(), inv) - stack:clear() - inv:set_stack(name, i, stack) - end -end - -local function set_inventory(player, armor_change_only) - if minetest.is_creative_enabled(player:get_player_name()) then - if armor_change_only then - -- Stay on survival inventory plage if only the armor has been changed - mcl_inventory.set_creative_formspec(player, 0, 0, nil, nil, "inv") - else - mcl_inventory.set_creative_formspec(player, 0, 1) - end - return - end - local inv = player:get_inventory() - inv:set_width("craft", 2) - inv:set_size("craft", 4) - - local armor_slots = {"helmet", "chestplate", "leggings", "boots"} - local armor_slot_imgs = "" - for a=1,4 do - if inv:get_stack("armor", a+1):is_empty() then - armor_slot_imgs = armor_slot_imgs .. "image[0,"..(a-1)..";1,1;mcl_inventory_empty_armor_slot_"..armor_slots[a]..".png]" - end - end - - if inv:get_stack("offhand", 1):is_empty() then - armor_slot_imgs = armor_slot_imgs .. "image[3,2;1,1;mcl_inventory_empty_armor_slot_shield.png]" - end - - local form = "size[9,8.75]".. - "background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png]".. - mcl_player.get_player_formspec_model(player, 1.0, 0.0, 2.25, 4.5, "").. - --armor - "list[current_player;armor;0,0;1,1;1]".. - "list[current_player;armor;0,1;1,1;2]".. - "list[current_player;armor;0,2;1,1;3]".. - "list[current_player;armor;0,3;1,1;4]".. - mcl_formspec.get_itemslot_bg(0,0,1,1).. - mcl_formspec.get_itemslot_bg(0,1,1,1).. - mcl_formspec.get_itemslot_bg(0,2,1,1).. - mcl_formspec.get_itemslot_bg(0,3,1,1).. - "list[current_player;offhand;3,2;1,1]".. - mcl_formspec.get_itemslot_bg(3,2,1,1).. - armor_slot_imgs.. - -- craft and inventory - "label[0,4;"..F(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - "list[current_player;main;0,7.74;9,1;]".. - "label[4,0.5;"..F(minetest.colorize("#313131", S("Crafting"))).."]".. - "list[current_player;craft;4,1;2,2]".. - "list[current_player;craftpreview;7,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - mcl_formspec.get_itemslot_bg(4,1,2,2).. - mcl_formspec.get_itemslot_bg(7,1.5,1,1).. - -- crafting guide button - "image_button[4.5,3;1,1;craftguide_book.png;__mcl_craftguide;]".. - "tooltip[__mcl_craftguide;"..F(S("Recipe book")).."]".. - -- help button - "image_button[8,3;1,1;doc_button_icon_lores.png;__mcl_doc;]".. - "tooltip[__mcl_doc;"..F(S("Help")).."]".. - -- skins button - "image_button[3,3;1,1;mcl_skins_button.png;__mcl_skins;]".. - "tooltip[__mcl_skins;"..F(S("Select player skin")).."]".. - -- achievements button - "image_button[7,3;1,1;mcl_achievements_button.png;__mcl_achievements;]".. - "tooltip[__mcl_achievements;"..F(S("Achievements")).."]".. - -- for shortcuts - "listring[current_player;main]".. - "listring[current_player;armor]".. - "listring[current_player;main]" .. - "listring[current_player;craft]" .. - "listring[current_player;main]" - player:set_inventory_formspec(form) -end - --- Drop items in craft grid and reset inventory on closing -minetest.register_on_player_receive_fields(function(player, formname, fields) - if fields.quit then - return_fields(player,"craft") - return_fields(player,"enchanting_lapis") - return_fields(player,"enchanting_item") - if not minetest.is_creative_enabled(player:get_player_name()) and (formname == "" or formname == "main") then - set_inventory(player) - end - end -end) - -if not minetest.is_creative_enabled("") then - function mcl_inventory.update_inventory_formspec(player) - set_inventory(player) - end -end - --- Drop crafting grid items on leaving -minetest.register_on_leaveplayer(function(player) - return_fields(player, "craft") - return_fields(player, "enchanting_lapis") - return_fields(player, "enchanting_item") -end) - -minetest.register_on_joinplayer(function(player) - --init inventory - local inv = player:get_inventory() - inv:set_width("main", 9) - inv:set_size("main", 36) - inv:set_size("offhand", 1) - - --set hotbar size - player:hud_set_hotbar_itemcount(9) - --add hotbar images - player:hud_set_hotbar_image("mcl_inventory_hotbar.png") - player:hud_set_hotbar_selected_image("mcl_inventory_hotbar_selected.png") - - local old_update_player = mcl_armor.update_player - function mcl_armor.update_player(player, info) - old_update_player(player, info) - set_inventory(player, true) - end - - -- In Creative Mode, the initial inventory setup is handled in creative.lua - if not minetest.is_creative_enabled(player:get_player_name()) then - set_inventory(player) - end - - --[[ Make sure the crafting grid is empty. Why? Because the player might have - items remaining in the crafting grid from the previous join; this is likely - when the server has been shutdown and the server didn't clean up the player - inventories. ]] - return_fields(player, "craft") - return_fields(player, "enchanting_item") - return_fields(player, "enchanting_lapis") -end) - - -dofile(minetest.get_modpath(minetest.get_current_modname()).."/creative.lua") - -local mt_is_creative_enabled = minetest.is_creative_enabled - -function minetest.is_creative_enabled(name) - if mt_is_creative_enabled(name) then return true end - local p = minetest.get_player_by_name(name) - if p then - return p:get_meta():get_string("gamemode") == "creative" - end - return false -end - -local function in_table(n,h) - for k,v in pairs(h) do - if v == n then return true end - end - return false -end - -local gamemodes = { - "survival", - "creative" -} - -function mcl_inventory.player_set_gamemode(p,g) - local m = p:get_meta() - m:set_string("gamemode",g) - if g == "survival" then - mcl_experience.setup_hud(p) - mcl_experience.update(p) - elseif g == "creative" then - mcl_experience.remove_hud(p) - end - set_inventory(p) -end - -minetest.register_chatcommand("gamemode",{ - params = S("[] []"), - description = S("Change gamemode (survival/creative) for yourself or player"), - privs = { server = true }, - func = function(n,param) - -- Full input validation ( just for @erlehmann <3 ) - local p = minetest.get_player_by_name(n) - local args = param:split(" ") - if args[2] ~= nil then - p = minetest.get_player_by_name(args[2]) - end - if not p then - return false, S("Player not online") - end - if args[1] ~= nil and not in_table(args[1],gamemodes) then - return false, S("Gamemode " .. args[1] .. " does not exist.") - elseif args[1] ~= nil then - mcl_inventory.player_set_gamemode(p,args[1]) - end - --Result message - show effective game mode - local gm = p:get_meta():get_string("gamemode") - if gm == "" then gm = gamemodes[1] end - return true, S("Gamemode for player ")..n..S(": "..gm) - end -}) diff --git a/mods/HUD/mcl_inventory/locale/mcl_inventory.de.tr b/mods/HUD/mcl_inventory/locale/mcl_inventory.de.tr deleted file mode 100644 index d565240d1..000000000 --- a/mods/HUD/mcl_inventory/locale/mcl_inventory.de.tr +++ /dev/null @@ -1,21 +0,0 @@ -# textdomain: mcl_inventory -Recipe book=Fertigungsbuch -Help=Hilfe -Select player skin=Spieleraussehen ändern -Achievements=Errungenschaften -Building Blocks=Baublöcke -Decoration Blocks=Dekoblöcke -Redstone=Redstone -Transportation=Transport -Brewing=Gebräu -Miscellaneous=Sonstiges -Search Items=Gegenstände durchsuchen -Foodstuffs=Lebensmittel -Tools=Werkzeuge -Combat=Kampf -Mobs=Mobs -Materials=Materialien -Survival Inventory=Überlebensinventar -Crafting=Fertigen -Inventory=Inventar -@1/@2=@1/@2 diff --git a/mods/HUD/mcl_inventory/locale/mcl_inventory.es.tr b/mods/HUD/mcl_inventory/locale/mcl_inventory.es.tr deleted file mode 100644 index d097daa14..000000000 --- a/mods/HUD/mcl_inventory/locale/mcl_inventory.es.tr +++ /dev/null @@ -1,20 +0,0 @@ -# textdomain: mcl_inventory -Recipe book=Libro de recetas -Help=Ayuda -Select player skin=Seleccionar skin -Achievements=Logros -Building Blocks=Bloques de construcción -Decoration Blocks=Bloques de decoración -Redstone=Redstone -Transportation=Transporte -Brewing= -Miscellaneous=Variado -Search Items=Buscar artículos -Foodstuffs=Productos alimenticios -Tools=Herramientas -Combat=Combate -Mobs=Mobs -Materials=Materiales -Survival Inventory=Inventario de supervivencia -Crafting=Elaboración -Inventory=Inventario diff --git a/mods/HUD/mcl_inventory/locale/mcl_inventory.fr.tr b/mods/HUD/mcl_inventory/locale/mcl_inventory.fr.tr deleted file mode 100644 index 208eb01dc..000000000 --- a/mods/HUD/mcl_inventory/locale/mcl_inventory.fr.tr +++ /dev/null @@ -1,21 +0,0 @@ -# textdomain: mcl_inventory -Recipe book=Livre de recettes -Help=Aide -Select player skin=Sélectionnez l'apparence du joueur -Achievements=Accomplissements -Building Blocks=Blocs de Construction -Decoration Blocks=Blocs de Décoration -Redstone=Redstone -Transportation=Transport -Brewing=Potion -Miscellaneous=Divers -Search Items=Rechercher des objets -Foodstuffs=Denrées alimentaires -Tools=Outils -Combat=Combat -Mobs=Mobs -Materials=Matériaux -Survival Inventory=Inventaire de survie -Crafting=Artisanat -Inventory=Inventaire -@1/@2=@1/@2 diff --git a/mods/HUD/mcl_inventory/locale/mcl_inventory.pl.tr b/mods/HUD/mcl_inventory/locale/mcl_inventory.pl.tr deleted file mode 100644 index 3817d88a1..000000000 --- a/mods/HUD/mcl_inventory/locale/mcl_inventory.pl.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mcl_inventory -Recipe book=Książka z recepturami -Help=Pomoc -Select player skin=Wybierz skin gracza -Achievements=Osiągnięcia -Building Blocks=Bloki budowlane -Decoration Blocks=Bloki dekoracyjne -Redstone=Czerwienit -Transportation=Transport -Brewing=Warzenie -Miscellaneous=Różne -Search Items=Wyszukaj przedmioty -Foodstuffs=Jedzenie -Tools=Narzędzia -Combat=Walka -Mobs=Moby -Materials=Materiały -Survival Inventory=Ekwipunek przetrwania -Crafting=Wytwarzanie -Inventory=Ekwipunek -@1/@2=@1/@2 - diff --git a/mods/HUD/mcl_inventory/locale/mcl_inventory.ru.tr b/mods/HUD/mcl_inventory/locale/mcl_inventory.ru.tr deleted file mode 100644 index d378e168b..000000000 --- a/mods/HUD/mcl_inventory/locale/mcl_inventory.ru.tr +++ /dev/null @@ -1,21 +0,0 @@ -# textdomain: mcl_inventory -Recipe book=Книга рецептов -Help=Помощь -Select player skin=Выбор скина -Achievements=Достижения -Building Blocks=Строительные блоки -Decoration Blocks=Декоративные блоки -Redstone=Редстоун (красный камень) -Transportation=Транспорт -Brewing=Зелья -Miscellaneous=Прочее -Search Items=Искать предметы -Foodstuffs=Продовольствие -Tools=Инструменты -Combat=Битва -Mobs=Мобы -Materials=Материалы -Survival Inventory=Инвентарь выживания -Crafting=Крафтинг (изготовление) -Inventory=Инвентарь -@1/@2=@1/@2 diff --git a/mods/HUD/mcl_inventory/locale/mcl_inventory.zh_TW.tr b/mods/HUD/mcl_inventory/locale/mcl_inventory.zh_TW.tr deleted file mode 100644 index 880d224f2..000000000 --- a/mods/HUD/mcl_inventory/locale/mcl_inventory.zh_TW.tr +++ /dev/null @@ -1,21 +0,0 @@ -# textdomain: mcl_inventory -Recipe book=合成教學 -Help=幫助 -Select player skin=選擇玩家皮膚 -Achievements=成就 -Building Blocks=建築方塊 -Decoration Blocks=裝飾性方塊 -Redstone=紅石 -Transportation=交通 -Brewing=釀造 -Miscellaneous=雜項 -Search Items=搜尋 -Foodstuffs=食物 -Tools=工具 -Combat=戰鬥 -Mobs=生物 -Materials=材料 -Survival Inventory=生存模式物品欄 -Crafting=合成 -Inventory=物品欄 -@1/@2= diff --git a/mods/HUD/mcl_inventory/locale/template.txt b/mods/HUD/mcl_inventory/locale/template.txt deleted file mode 100644 index 7f1c9769d..000000000 --- a/mods/HUD/mcl_inventory/locale/template.txt +++ /dev/null @@ -1,21 +0,0 @@ -# textdomain: mcl_inventory -Recipe book= -Help= -Select player skin= -Achievements= -Building Blocks= -Decoration Blocks= -Redstone= -Transportation= -Brewing= -Miscellaneous= -Search Items= -Foodstuffs= -Tools= -Combat= -Mobs= -Materials= -Survival Inventory= -Crafting= -Inventory= -@1/@2= diff --git a/mods/HUD/mcl_inventory/mod.conf b/mods/HUD/mcl_inventory/mod.conf deleted file mode 100644 index 10e669265..000000000 --- a/mods/HUD/mcl_inventory/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_inventory -author = BlockMen -description = Adds the player inventory and creative inventory. -depends = mcl_init, mcl_formspec, mcl_enchanting -optional_depends = mcl_armor, mcl_brewing, mcl_potions, mcl_enchanting, mcl_craftguide, mcl_player diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_active.png b/mods/HUD/mcl_inventory/textures/crafting_creative_active.png deleted file mode 100644 index a1dcc7135..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_active.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_active_down.png b/mods/HUD/mcl_inventory/textures/crafting_creative_active_down.png deleted file mode 100644 index f24d04724..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_active_down.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_bg.png b/mods/HUD/mcl_inventory/textures/crafting_creative_bg.png deleted file mode 100644 index a98183223..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_bg.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_bg_dark.png b/mods/HUD/mcl_inventory/textures/crafting_creative_bg_dark.png deleted file mode 100644 index 5f06ee857..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_bg_dark.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_inactive.png b/mods/HUD/mcl_inventory/textures/crafting_creative_inactive.png deleted file mode 100644 index cf2ebe83e..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_inactive.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_inactive_down.png b/mods/HUD/mcl_inventory/textures/crafting_creative_inactive_down.png deleted file mode 100644 index c117b5dc5..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_inactive_down.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_marker.png b/mods/HUD/mcl_inventory/textures/crafting_creative_marker.png deleted file mode 100644 index 18ae1eea9..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_marker.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_next.png b/mods/HUD/mcl_inventory/textures/crafting_creative_next.png deleted file mode 100644 index 65586775c..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_next.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_prev.png b/mods/HUD/mcl_inventory/textures/crafting_creative_prev.png deleted file mode 100644 index 30e4bc311..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_prev.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_creative_trash.png b/mods/HUD/mcl_inventory/textures/crafting_creative_trash.png deleted file mode 100644 index ec567d741..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_creative_trash.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_formspec_bg.png b/mods/HUD/mcl_inventory/textures/crafting_formspec_bg.png deleted file mode 100644 index 5fd888dec..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_formspec_bg.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_inventory_creative.png b/mods/HUD/mcl_inventory/textures/crafting_inventory_creative.png deleted file mode 100644 index b0348629e..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_inventory_creative.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/crafting_inventory_creative_survival.png b/mods/HUD/mcl_inventory/textures/crafting_inventory_creative_survival.png deleted file mode 100644 index 828404ea2..000000000 Binary files a/mods/HUD/mcl_inventory/textures/crafting_inventory_creative_survival.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_button9.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_button9.png deleted file mode 100644 index aab16013b..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_button9.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_button9_pressed.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_button9_pressed.png deleted file mode 100644 index aeaea13a4..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_button9_pressed.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_boots.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_boots.png deleted file mode 100644 index cb9f2bec3..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_boots.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_chestplate.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_chestplate.png deleted file mode 100644 index b6445cbd5..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_chestplate.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_helmet.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_helmet.png deleted file mode 100644 index 58bd6a006..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_helmet.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_leggings.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_leggings.png deleted file mode 100644 index 8d5e70a84..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_leggings.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_shield.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_shield.png deleted file mode 100644 index af0dd1f0c..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_empty_armor_slot_shield.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_hotbar.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_hotbar.png deleted file mode 100644 index d3dd364d6..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_hotbar.png and /dev/null differ diff --git a/mods/HUD/mcl_inventory/textures/mcl_inventory_hotbar_selected.png b/mods/HUD/mcl_inventory/textures/mcl_inventory_hotbar_selected.png deleted file mode 100644 index 1f7e26350..000000000 Binary files a/mods/HUD/mcl_inventory/textures/mcl_inventory_hotbar_selected.png and /dev/null differ diff --git a/mods/HUD/mcl_offhand/init.lua b/mods/HUD/mcl_offhand/init.lua deleted file mode 100644 index 5f48eede9..000000000 --- a/mods/HUD/mcl_offhand/init.lua +++ /dev/null @@ -1,172 +0,0 @@ -local minetest, math = minetest, math -mcl_offhand = {} - -local max_offhand_px = 128 --- only supports up to 128px textures - -function mcl_offhand.get_offhand(player) - return player:get_inventory():get_stack("offhand", 1) -end - -local function offhand_get_wear(player) - return mcl_offhand.get_offhand(player):get_wear() -end - -local function offhand_get_count(player) - return mcl_offhand.get_offhand(player):get_count() -end - -minetest.register_on_joinplayer(function(player, last_login) - mcl_offhand[player] = { - hud = {}, - last_wear = offhand_get_wear(player), - last_count = offhand_get_count(player), - } -end) - -local function remove_hud(player, hud) - local offhand_hud = mcl_offhand[player].hud[hud] - if offhand_hud then - player:hud_remove(offhand_hud) - mcl_offhand[player].hud[hud] = nil - end -end - -function rgb_to_hex(r, g, b) - return string.format("%02x%02x%02x", r, g, b) -end - -local function update_wear_bar(player, itemstack) - local wear_bar_percent = (65535 - offhand_get_wear(player)) / 65535 - - local color = {255, 255, 255} - local wear = itemstack:get_wear() / 65535; - local wear_i = math.min(math.floor(wear * 600), 511); - wear_i = math.min(wear_i + 10, 511); - if wear_i <= 255 then - color = {wear_i, 255, 0} - else - color = {255, 511 - wear_i, 0} - end - local wear_bar = mcl_offhand[player].hud.wear_bar - player:hud_change(wear_bar, "text", "mcl_wear_bar.png^[colorize:#" .. rgb_to_hex(color[1], color[2], color[3])) - player:hud_change(wear_bar, "scale", {x = 40 * wear_bar_percent, y = 3}) - player:hud_change(wear_bar, "offset", {x = -320 - (20 - player:hud_get(wear_bar).scale.x / 2), y = -13}) -end - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local itemstack = mcl_offhand.get_offhand(player) - local offhand_item = itemstack:get_name() - local offhand_hud = mcl_offhand[player].hud - local item = minetest.registered_items[offhand_item] - if offhand_item ~= "" and item then - local item_texture = item.inventory_image .. "^[resize:" .. max_offhand_px .. "x" .. max_offhand_px - local position = {x = 0.5, y = 1} - local offset = {x = -320, y = -32} - - if not offhand_hud.slot then - offhand_hud.slot = player:hud_add({ - hud_elem_type = "image", - position = position, - offset = offset, - scale = {x = 2.75, y = 2.75}, - text = "mcl_offhand_slot.png", - z_index = 0, - }) - end - if not offhand_hud.item then - offhand_hud.item = player:hud_add({ - hud_elem_type = "image", - position = position, - offset = offset, - scale = {x = 0.4, y = 0.4}, - text = item_texture, - z_index = 1, - }) - else - player:hud_change(offhand_hud.item, "text", item_texture) - end - if not offhand_hud.wear_bar_bg and minetest.registered_tools[offhand_item] then - if offhand_get_wear(player) > 0 then - local texture = "mcl_wear_bar.png^[colorize:#000000" - offhand_hud.wear_bar_bg = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 1}, - offset = {x = -320, y = -13}, - scale = {x = 40, y = 3}, - text = texture, - z_index = 2, - }) - offhand_hud.wear_bar = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 1}, - offset = {x = -320, y = -13}, - scale = {x = 10, y = 3}, - text = texture, - z_index = 3, - }) - update_wear_bar(player, itemstack) - end - end - - if not offhand_hud.item_count and offhand_get_count(player) > 1 then - offhand_hud.item_count = player:hud_add({ - hud_elem_type = "text", - position = {x = 0.5, y = 1}, - offset = {x = -298, y = -18}, - scale = {x = 1, y = 1}, - alignment = {x = -1, y = 0}, - text = offhand_get_count(player), - z_index = 4, - number = 0xFFFFFF, - }) - end - - if offhand_hud.wear_bar then - if offhand_hud.last_wear ~= offhand_get_wear(player) then - update_wear_bar(player, itemstack) - offhand_hud.last_wear = offhand_get_wear(player) - end - if offhand_get_wear(player) <= 0 or not minetest.registered_tools[offhand_item] then - remove_hud(player, "wear_bar_bg") - remove_hud(player, "wear_bar") - end - end - - if offhand_hud.item_count then - if offhand_hud.last_count ~= offhand_get_count(player) then - player:hud_change(offhand_hud.item_count, "text", offhand_get_count(player)) - offhand_hud.last_count = offhand_get_count(player) - end - if offhand_get_count(player) <= 1 then - remove_hud(player, "item_count") - end - end - - elseif offhand_hud.slot then - for index, _ in pairs(mcl_offhand[player].hud) do - remove_hud(player, index) - end - end - end -end) - -minetest.register_allow_player_inventory_action(function(player, action, inventory, inventory_info) - if action == "move" and inventory_info.to_list == "offhand" then - local itemstack = inventory:get_stack(inventory_info.from_list, inventory_info.from_index) - if not (minetest.get_item_group(itemstack:get_name(), "offhand_item") > 0) then - return 0 - else - return itemstack:get_stack_max() - end - end -end) - -minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info) - local from_offhand = inventory_info.from_list == "offhand" - local to_offhand = inventory_info.to_list == "offhand" - if action == "move" and from_offhand or to_offhand then - mcl_inventory.update_inventory_formspec(player) - end -end) diff --git a/mods/HUD/mcl_offhand/mod.conf b/mods/HUD/mcl_offhand/mod.conf deleted file mode 100644 index f0260f35c..000000000 --- a/mods/HUD/mcl_offhand/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_offhand -author = NO11 -depends = mcl_inventory diff --git a/mods/HUD/mcl_offhand/textures/mcl_offhand_slot.png b/mods/HUD/mcl_offhand/textures/mcl_offhand_slot.png deleted file mode 100644 index 69ceb5973..000000000 Binary files a/mods/HUD/mcl_offhand/textures/mcl_offhand_slot.png and /dev/null differ diff --git a/mods/HUD/mcl_offhand/textures/mcl_wear_bar.png b/mods/HUD/mcl_offhand/textures/mcl_wear_bar.png deleted file mode 100644 index 6fee6bba6..000000000 Binary files a/mods/HUD/mcl_offhand/textures/mcl_wear_bar.png and /dev/null differ diff --git a/mods/HUD/mcl_title/API.md b/mods/HUD/mcl_title/API.md deleted file mode 100644 index 37f1c279f..000000000 --- a/mods/HUD/mcl_title/API.md +++ /dev/null @@ -1,50 +0,0 @@ -# mcl_title - -Allow mods to show messages in the hud of players. - -## mcl_title.set(player, type, data) - -Show a hud message of `type` to player `player` with `data` as params. - -The element will stay for the per-player param `stay` or `data.stay` (in gametick which is 1/20 second). - -Here is a usage exemple: - -```lua ---show a title in the HUD with minecraft color "gold" -mcl_title.set(player, "title", {text="dummy text", color="gold"}) - ---show a subtitle in the HUD with hex color "#612D2D" -mcl_title.set(player, "subtitle", {text="dummy subtitle", color="#612D2D"}) - ---show an actionbar in the HUD (above the hotbar) with minecraft color "red" -mcl_title.set(player, "subtitle", {text="dummy actionbar", color="red"}) - ---show a title in the HUD with minecraft color "gold" staying for 3 seconds (override stay setting) -mcl_title.set(player, "title", {text="dummy text", color="gold", stay=60}) -``` - -## mcl_title.remove(player, type) - -Hide HUD element of type `type` for player `player`. - -## mcl_title.clear(player) - -Remove every title/subtitle/actionbar from a player. -Basicaly run `mcl_title.remove(player, type)` for every type. - -## mcl_title.params_set(player, params) - -Allow mods to set `stay` and upcomming `fadeIn`/`fadeOut` params. - -```lua -mcl_title.params_set(player, {stay = 600}) --elements with no 'data.stay' field will stay during 30s (600/20) -``` - -## mcl_title.params_get(player) - -Get `stay` and upcomming `fadeIn` and `fadeOut` params of a player as a table. - -```lua -mcl_title.params_get(player) -``` \ No newline at end of file diff --git a/mods/HUD/mcl_title/init.lua b/mods/HUD/mcl_title/init.lua deleted file mode 100644 index 2ea1571c8..000000000 --- a/mods/HUD/mcl_title/init.lua +++ /dev/null @@ -1,236 +0,0 @@ ---Based on: ---https://www.digminecraft.com/game_commands/title_command.php ---https://youtu.be/oVrtQRO2hpY - ---TODO: use SSCSM to reduce lag and network trafic (just send modchannel messages) ---TODO: fadeIn and fadeOut animation (needs engine change: SSCSM or native support) ---TODO: allow obfuscating text (needs engine change: SSCSM or native support) ---TODO: allow colorizing and styling of part of the text (NEEDS ENGINE CHANGE!!!) ---TODO: exactly mc like layout - ---Note that the table storing timeouts use playername as index insteed of player objects (faster) ---This is intended in order to speedup the process of removing HUD elements the the timeout is up - -local huds_idx = {} - -local hud_hide_timeouts = {} - -hud_hide_timeouts.title = {} -hud_hide_timeouts.subtitle = {} -hud_hide_timeouts.actionbar = {} - -huds_idx.title = {} -huds_idx.subtitle = {} -huds_idx.actionbar = {} - -mcl_title = {} -mcl_title.defaults = {fadein = 10, stay = 70, fadeout = 20} -mcl_title.layout = {} -mcl_title.layout.title = {position = {x = 0.5, y = 0.5}, alignment = {x = 0, y = -1.3}, size = 7} -mcl_title.layout.subtitle = {position = {x = 0.5, y = 0.5}, alignment = {x = 0, y = 1.7}, size = 4} -mcl_title.layout.actionbar = {position = {x = 0.5, y = 1}, alignment = {x = 0, y = 0}, size = 1} - -local get_color = mcl_util.get_color - ---local string = string -local pairs = pairs - -local function gametick_to_secondes(gametick) - if gametick then - return gametick / 20 - else - return nil - end -end - ---https://github.com/minetest/minetest/blob/b3b075ea02034306256b486dd45410aa765f035a/doc/lua_api.txt#L8477 ---[[ -local function style_to_bits(bold, italic) - if bold then - if italic then - return 3 - else - return 1 - end - else - if italic then - return 2 - else - return 0 - end - end -end -]] - ---PARAMS SYSTEM -local player_params = {} - -minetest.register_on_joinplayer(function(player) - --local playername = player:get_player_name() - player_params[player] = { - stay = mcl_title.defaults.stay, - --fadeIn = mcl_title.defaults.fadein, - --fadeOut = mcl_title.defaults.fadeout, - } - local _, hex_color = get_color("white") - huds_idx.title[player] = player:hud_add({ - hud_elem_type = "text", - position = mcl_title.layout.title.position, - alignment = mcl_title.layout.title.alignment, - text = "", - --style = 0, - size = {x = mcl_title.layout.title.size}, - number = hex_color, - z_index = 100, - }) - huds_idx.subtitle[player] = player:hud_add({ - hud_elem_type = "text", - position = mcl_title.layout.subtitle.position, - alignment = mcl_title.layout.subtitle.alignment, - text = "", - --style = 0, - size = {x = mcl_title.layout.subtitle.size}, - number = hex_color, - z_index = 100, - }) - huds_idx.actionbar[player] = player:hud_add({ - hud_elem_type = "text", - position = mcl_title.layout.actionbar.position, - offset = {x = 0, y = -210}, - alignment = mcl_title.layout.actionbar.alignment, - --style = 0, - text = "", - size = {x = mcl_title.layout.actionbar.size}, - number = hex_color, - z_index = 100, - }) -end) - -minetest.register_on_leaveplayer(function(player) - local playername = player:get_player_name() - - --remove player params from the list - player_params[player] = nil - - --remove HUD idx from the list (HUD elements are removed by the engine) - huds_idx.title[player] = nil - huds_idx.subtitle[player] = nil - huds_idx.actionbar[player] = nil - - --remove timers from list - hud_hide_timeouts.title[playername] = nil - hud_hide_timeouts.subtitle[playername] = nil - hud_hide_timeouts.actionbar[playername] = nil -end) - -function mcl_title.params_set(player, data) - player_params[player] = { - stay = data.stay or mcl_title.defaults.stay, - --fadeIn = data.fadeIn or mcl_title.defaults.fadein, - --fadeOut = data.fadeOut or mcl_title.defaults.fadeout, - } -end - -function mcl_title.params_get(player) - return player_params[player] -end - ---API FUNCTIONS - -function mcl_title.set(player, type, data) - if not data.color then - data.color = "white" - end - local _, hex_color = get_color(data.color) - if not hex_color then - return false - end - - player:hud_change(huds_idx[type][player], "text", data.text) - player:hud_change(huds_idx[type][player], "number", hex_color) - - --apply bold and italic - --player:hud_change(huds_idx[type][player], "style", style_to_bits(data.bold, data.italic)) - - hud_hide_timeouts[type][player:get_player_name()] = gametick_to_secondes(data.stay) or gametick_to_secondes(mcl_title.params_get(player).stay) - return true -end - -function mcl_title.remove(player, type) - if player then - player:hud_change(huds_idx[type][player], "text", "") - --player:hud_change(huds_idx[type][player], "style", 0) --no styling - end -end - -function mcl_title.clear(player) - mcl_title.remove(player, "title") - mcl_title.remove(player, "subtitle") - mcl_title.remove(player, "actionbar") -end - -minetest.register_on_dieplayer(function(player) - mcl_title.clear(player) -end) - -minetest.register_globalstep(function(dtime) - local new_timeouts = { - title = {}, - subtitle = {}, - actionbar = {}, - } - for element, content in pairs(hud_hide_timeouts) do - for name, timeout in pairs(content) do - timeout = timeout - dtime - if timeout <= 0 then - local player = minetest.get_player_by_name(name) - mcl_title.remove(player, element) - else - new_timeouts[element][name] = timeout - end - end - end - hud_hide_timeouts = new_timeouts -end) - - ---DEBUG STUFF!! ---[[ -minetest.register_chatcommand("title", { - func = function(name, param) - local player = minetest.get_player_by_name(name) - mcl_title.set(player, "title", {text=param, color="gold", bold=true, italic=true}) - end, -}) - -minetest.register_chatcommand("subtitle", { - func = function(name, param) - local player = minetest.get_player_by_name(name) - mcl_title.set(player, "subtitle", {text=param, color="gold"}) - end, -}) - -minetest.register_chatcommand("actionbar", { - func = function(name, param) - local player = minetest.get_player_by_name(name) - mcl_title.set(player, "actionbar", {text=param, color="gold"}) - end, -}) - -minetest.register_chatcommand("timeout", { - func = function(name, param) - local player = minetest.get_player_by_name(name) - mcl_title.params_set(player, {stay = 600}) - end, -}) - -minetest.register_chatcommand("all", { - func = function(name, param) - local player = minetest.get_player_by_name(name) - mcl_title.params_set(player, {stay = 600}) - mcl_title.set(player, "title", {text=param, color="gold"}) - mcl_title.set(player, "subtitle", {text=param, color="gold"}) - mcl_title.set(player, "actionbar", {text=param, color="gold"}) - end, -}) -]] \ No newline at end of file diff --git a/mods/HUD/mcl_title/mod.conf b/mods/HUD/mcl_title/mod.conf deleted file mode 100644 index 0f29a8118..000000000 --- a/mods/HUD/mcl_title/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_title -description = Add an API to add in HUD title -depends = mcl_colors -author = AFCMS \ No newline at end of file diff --git a/mods/HUD/modpack.conf b/mods/HUD/modpack.conf deleted file mode 100644 index 97471a432..000000000 --- a/mods/HUD/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = HUD -description = Meta-modpack containing HUD-related mods for MineClone 2 diff --git a/mods/HUD/show_wielded_item/README.md b/mods/HUD/show_wielded_item/README.md deleted file mode 100644 index bba27b6ed..000000000 --- a/mods/HUD/show_wielded_item/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Show Wielded Item [`show_wielded_item`] -This Minetest mod displays the name of the wielded item above the hotbar and -statbars. - -This mod is compatible with the HUD Bars [`hudbars`] mod. -Compability with other HUD-related mods is possible, but not guaranteed. - -Version: 1.0.0 - -## Credits -Released by Wuzzy. -The original mod code was taken from the file “`item_names.lua`” -found in the Unified Inventory mod maintained by VanessaE. This code -has been later modified. -Original author: 4aiman - -## License -This mod is licensed under GNU LGPLv2 or later -(see ). diff --git a/mods/HUD/show_wielded_item/init.lua b/mods/HUD/show_wielded_item/init.lua deleted file mode 100644 index dfa87a85c..000000000 --- a/mods/HUD/show_wielded_item/init.lua +++ /dev/null @@ -1,117 +0,0 @@ --- Based on 4itemnames mod by 4aiman - -local wield = {} -local wieldindex = {} -local huds = {} -local dtimes = {} -local dlimit = 3 -- HUD element will be hidden after this many seconds - -local math = math -local string = string -local tonumber = tonumber - -local hudbars_mod = minetest.get_modpath("hudbars") -local xp_mod = minetest.get_modpath("mcl_experience") - -local function set_hud(player) - if not player:is_player() then return end - local player_name = player:get_player_name() - -- Fixed offset in config file - local fixed = tonumber(minetest.settings:get("show_wielded_item_y_offset")) - local off - if fixed and fixed ~= -1 then - -- Manual offset - off = {x=0, y=-fixed} - else - -- Default offset - off = {x=0, y=-101} - - if hudbars_mod then - -- Tweak offset if hudbars mod was found - - local rows = math.floor((#hb.get_hudbar_identifiers()-1) / 2) + 1 - local vmargin = tonumber(minetest.settings:get("hudbars_vmargin")) or 28 - off.y = -76 - vmargin*rows - end - if xp_mod then - off.y = off.y - 25 - end - - -- Dirty trick to avoid collision with Minetest's status text (e.g. “Volume changed to 0%”) - if off.y >= -167 and off.y <= -156 then - off.y = -181 - end - end - - huds[player_name] = player:hud_add({ - hud_elem_type = "text", - position = {x=0.5, y=1}, - offset = off, - alignment = {x=0, y=0}, - number = 0xFFFFFF , - text = "", - z_index = 100, - }) -end - -minetest.register_on_joinplayer(function(player) - set_hud(player) - - local name = player:get_player_name() - wield[name] = player:get_wielded_item():get_name() - wieldindex[name] = player:get_wield_index() -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - wield[name] = nil - wieldindex[name] = nil -end) - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local player_name = player:get_player_name() - local wstack = player:get_wielded_item() - local wname = wstack:get_name() - local windex = player:get_wield_index() - - if dtimes[player_name] and dtimes[player_name] < dlimit then - dtimes[player_name] = dtimes[player_name] + dtime - if dtimes[player_name] > dlimit and huds[player_name] then - player:hud_change(huds[player_name], "text", "") - end - end - - -- Update HUD when wielded item or wielded index changed - if wname ~= wield[player_name] or windex ~= wieldindex[player_name] then - wieldindex[player_name] = windex - wield[player_name] = wname - dtimes[player_name] = 0 - - if huds[player_name] then - - local def = minetest.registered_items[wname] - local meta = wstack:get_meta() - - --[[ Get description. Order of preference: - * description from metadata - * description from item definition - * itemstring ]] - local desc = meta:get_string("description") - if (desc == nil or desc == "") and def then - desc = def.description - end - if desc == nil or desc == "" then - desc = wname - end - -- Cut off item description after first newline - local firstnewline = string.find(desc, "\n") - if firstnewline then - desc = string.sub(desc, 1, firstnewline-1) - end - player:hud_change(huds[player_name], "text", desc) - end - end - end -end) - diff --git a/mods/HUD/show_wielded_item/mod.conf b/mods/HUD/show_wielded_item/mod.conf deleted file mode 100644 index 50648dc6a..000000000 --- a/mods/HUD/show_wielded_item/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = show_wielded_item -author = 4aiman -description = Displays the name of the wielded item. -optional_depends = hudbars diff --git a/mods/HUD/show_wielded_item/settingtypes.txt b/mods/HUD/show_wielded_item/settingtypes.txt deleted file mode 100644 index 3f53edd88..000000000 --- a/mods/HUD/show_wielded_item/settingtypes.txt +++ /dev/null @@ -1,5 +0,0 @@ -#Use this setting to manually set the vertical offset of the label which shows -#the name of the wielded item. The offset is in pixels from the bottom of the -#screen. -#Set this to -1 to let the mod guess the offset automatically (recommended). -show_wielded_item_y_offset (Vertical offset of wielded item name display) int -1 -1 diff --git a/mods/ITEMS/REDSTONE/README b/mods/ITEMS/REDSTONE/README deleted file mode 100644 index 779cfa416..000000000 --- a/mods/ITEMS/REDSTONE/README +++ /dev/null @@ -1,28 +0,0 @@ --- |\ /| ____ ____ ____ _____ ____ _____ --- | \ / | | | | | | | |\ | | --- | \/ | |___ ____ |___ | | | | \ | |____ --- | | | | | | | | | \ | | --- | | |___ ____| |___ |____ |____| | \| ____| --- by Jeija and contributors - -Credits: -Jeija: main developer -VanessaE: Awesome textures & design, coding -sfan5: coding, textures -temperest: coding, textures -Jordach: Sounds for the noteblock -minerd247: Some textures -suzenako: Piston sounds -...other contributors - -This is a mod for minetest-c55. -Copy the minetest-mod-mesecons directory into you game's mod folder -(e.g. games/minetest_game/mods/minetest-mod-mesecons) - -You can remove modules of this mod by deleting the mesecons_* -folders in the minetest-mod-mesecons directory. - -Mod dependencies: none - -Code license: LGPLv3 or later -Media license: CC BY-SA 3.0 diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/init.lua b/mods/ITEMS/REDSTONE/mcl_comparators/init.lua deleted file mode 100644 index 01b42c340..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/init.lua +++ /dev/null @@ -1,365 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Functions that get the input/output rules of the comparator - -local function comparator_get_output_rules(node) - local rules = {{x = -1, y = 0, z = 0, spread=true}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - - -local function comparator_get_input_rules(node) - local rules = { - -- we rely on this order in update_self below - {x = 1, y = 0, z = 0}, -- back - {x = 0, y = 0, z = -1}, -- side - {x = 0, y = 0, z = 1}, -- side - } - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - - --- Functions that are called after the delay time - -local function comparator_turnon(params) - local rules = comparator_get_output_rules(params.node) - mesecon.receptor_on(params.pos, rules) -end - - -local function comparator_turnoff(params) - local rules = comparator_get_output_rules(params.node) - mesecon.receptor_off(params.pos, rules) -end - - --- Functions that set the correct node type an schedule a turnon/off - -local function comparator_activate(pos, node) - local def = minetest.registered_nodes[node.name] - local onstate = def.comparator_onstate - if onstate then - minetest.swap_node(pos, { name = onstate, param2 = node.param2 }) - end - minetest.after(0.1, comparator_turnon , {pos = pos, node = node}) -end - - -local function comparator_deactivate(pos, node) - local def = minetest.registered_nodes[node.name] - local offstate = def.comparator_offstate - if offstate then - minetest.swap_node(pos, { name = offstate, param2 = node.param2 }) - end - minetest.after(0.1, comparator_turnoff, {pos = pos, node = node}) -end - - --- weather pos has an inventory that contains at least one item -local function container_inventory_nonempty(pos) - local invnode = minetest.get_node(pos) - local invnodedef = minetest.registered_nodes[invnode.name] - -- Ignore stale nodes - if not invnodedef then return false end - - -- Only accept containers. When a container is dug, it's inventory - -- seems to stay. and we don't want to accept the inventory of an air - -- block - if not invnodedef.groups.container then return false end - - local inv = minetest.get_inventory({type="node", pos=pos}) - if not inv then return false end - - for listname, _ in pairs(inv:get_lists()) do - if not inv:is_empty(listname) then return true end - end - - return false -end - --- weather pos has an constant signal output for the comparator -local function static_signal_output(pos) - local node = minetest.get_node(pos) - local g = minetest.get_item_group(node.name, "comparator_signal") - return g > 0 -end - --- whether the comparator should be on according to its inputs -local function comparator_desired_on(pos, node) - local my_input_rules = comparator_get_input_rules(node); - local back_rule = my_input_rules[1] - local state - if back_rule then - local back_pos = vector.add(pos, back_rule) - state = mesecon.is_power_on(back_pos) or container_inventory_nonempty(back_pos) or static_signal_output(back_pos) - end - - -- if back input if off, we don't need to check side inputs - if not state then return false end - - -- without power levels, side inputs have no influence on output in compare - -- mode - local mode = minetest.registered_nodes[node.name].comparator_mode - if mode == "comp" then return state end - - -- subtract mode, subtract max(side_inputs) from back input - local side_state = false - for ri = 2,3 do - if my_input_rules[ri] then - side_state = mesecon.is_power_on(vector.add(pos, my_input_rules[ri])) - end - if side_state then break end - end - -- state is known to be true - return not side_state -end - - --- update comparator state, if needed -local function update_self(pos, node) - node = node or minetest.get_node(pos) - local old_state = mesecon.is_receptor_on(node.name) - local new_state = comparator_desired_on(pos, node) - if new_state ~= old_state then - if new_state then - comparator_activate(pos, node) - else - comparator_deactivate(pos, node) - end - end -end - - --- compute tile depending on state and mode -local function get_tiles(state, mode) - local top = "mcl_comparators_"..state..".png^".. - "mcl_comparators_"..mode..".png" - local sides = "mcl_comparators_sides_"..state..".png^".. - "mcl_comparators_sides_"..mode..".png" - local ends = "mcl_comparators_ends_"..state..".png^".. - "mcl_comparators_ends_"..mode..".png" - return { - top, "mcl_stairs_stone_slab_top.png", - sides, sides.."^[transformFX", - ends, ends, - } -end - --- Given one mode, get the other mode -local function flipmode(mode) - if mode == "comp" then return "sub" - elseif mode == "sub" then return "comp" - end -end - -local function make_rightclick_handler(state, mode) - local newnodename = - "mcl_comparators:comparator_"..state.."_"..flipmode(mode) - return function (pos, node, clicker) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = newnodename, param2 = node.param2 }) - end -end - - --- Register the 2 (states) x 2 (modes) comparators - -local icon = "mcl_comparators_item.png" - -local node_boxes = { - comp = { - { -8/16, -8/16, -8/16, - 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, - 1/16, -4/16, 4/16 }, -- front torch - { -4/16, -6/16, -5/16, - -2/16, -1/16, -3/16 }, -- left back torch - { 2/16, -6/16, -5/16, - 4/16, -1/16, -3/16 }, -- right back torch - }, - sub = { - { -8/16, -8/16, -8/16, - 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, - 1/16, -3/16, 4/16 }, -- front torch (active) - { -4/16, -6/16, -5/16, - -2/16, -1/16, -3/16 }, -- left back torch - { 2/16, -6/16, -5/16, - 4/16, -1/16, -3/16 }, -- right back torch - }, -} - -local collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -} - -local state_strs = { - [ mesecon.state.on ] = "on", - [ mesecon.state.off ] = "off", -} - -local groups = { - dig_immediate = 3, - dig_by_water = 1, - destroy_by_lava_flow = 1, - dig_by_piston = 1, - attached_node = 1, -} - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.disallow -end - -for _, mode in pairs{"comp", "sub"} do - for _, state in pairs{mesecon.state.on, mesecon.state.off} do - local state_str = state_strs[state] - local nodename = - "mcl_comparators:comparator_"..state_str.."_"..mode - - -- Help - local longdesc, usagehelp, use_help - if state_str == "off" and mode == "comp" then - longdesc = S("Redstone comparators are multi-purpose redstone components.").."\n".. - S("They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.") - - usagehelp = S("A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.").."\n".. - S("The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.").."\n".. - S("The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.").."\n\n".. - S("Transmission mode:\nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.").."\n".. - S("Subtraction mode:\nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.") - else - use_help = false - end - - local nodedef = { - description = S("Redstone Comparator"), - inventory_image = icon, - wield_image = icon, - _doc_items_create_entry = use_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = get_tiles(state_str, mode), - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - --wield_image = "mcl_comparators_off.png", - walkable = true, - selection_box = collision_box, - collision_box = collision_box, - node_box = { - type = "fixed", - fixed = node_boxes[mode], - }, - groups = groups, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mcl_comparators:comparator_off_comp", - on_construct = update_self, - on_rightclick = - make_rightclick_handler(state_str, mode), - comparator_mode = mode, - comparator_onstate = "mcl_comparators:comparator_on_"..mode, - comparator_offstate = "mcl_comparators:comparator_off_"..mode, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = { - state = state, - rules = comparator_get_output_rules, - }, - effector = { - rules = comparator_get_input_rules, - action_change = update_self, - } - }, - on_rotate = on_rotate, - } - - if mode == "comp" and state == mesecon.state.off then - -- This is the prototype - nodedef._doc_items_create_entry = true - else - nodedef.groups = table.copy(nodedef.groups) - nodedef.groups.not_in_creative_inventory = 1 - --local extra_desc = {} - if mode == "sub" or state == mesecon.state.on then - nodedef.inventory_image = nil - end - local desc = nodedef.description - if mode ~= "sub" and state == mesecon.state.on then - desc = S("Redstone Comparator (Powered)") - elseif mode == "sub" and state ~= mesecon.state.on then - desc = S("Redstone Comparator (Subtract)") - elseif mode == "sub" and state == mesecon.state.on then - desc = S("Redstone Comparator (Subtract, Powered)") - end - nodedef.description = desc - end - - minetest.register_node(nodename, nodedef) - mcl_wip.register_wip_item(nodename) - end -end - --- Register recipies -local rstorch = "mesecons_torch:mesecon_torch_on" -local quartz = "mcl_nether:quartz" -local stone = "mcl_core:stone" - -minetest.register_craft({ - output = "mcl_comparators:comparator_off_comp", - recipe = { - { "", rstorch, "" }, - { rstorch, quartz, rstorch }, - { stone, stone, stone }, - } -}) - --- Register active block handlers -minetest.register_abm({ - label = "Comparator signal input check (comparator is off)", - nodenames = { - "mcl_comparators:comparator_off_comp", - "mcl_comparators:comparator_off_sub", - }, - neighbors = {"group:container", "group:comparator_signal"}, - interval = 1, - chance = 1, - action = update_self, -}) - -minetest.register_abm({ - label = "Comparator signal input check (comparator is on)", - nodenames = { - "mcl_comparators:comparator_on_comp", - "mcl_comparators:comparator_on_sub", - }, - -- needs to run regardless of neighbors to make sure we detect when a - -- container is dug - interval = 1, - chance = 1, - action = update_self, -}) - - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_comparators:comparator_off_comp", - "nodes", "mcl_comparators:comparator_off_sub") - doc.add_entry_alias("nodes", "mcl_comparators:comparator_off_comp", - "nodes", "mcl_comparators:comparator_on_comp") - doc.add_entry_alias("nodes", "mcl_comparators:comparator_off_comp", - "nodes", "mcl_comparators:comparator_on_sub") -end diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.de.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.de.tr deleted file mode 100644 index d9f6eb463..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.de.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Redstonekomparatoren sind Redstonekomponenten mit vielen Verwendungszwecken. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Sie können ein Redstonesignal übertragen, erkennen, ob ein Block Gegenstände enthält und mehrere Signale vergleichen. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Ein Redstonekomparator hat 1 Haupteingang, 2 Seiteneingänge und 1 Ausgang. Der Ausgang ist in Pfeilrichtung, der Haupteingang ist in der gegenüberliegenden Richtung. Die anderen 2 Seiten sind die Seiteneingänge. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=Der Haupteingang kann auf 2 Weisen versorgt werden: Erstens, kann er direkt von Redstoneenergie wie bei jeder anderen Komponente versorgt werden. Zweitens wird er versorgt, wenn, und nur wenn ein Behälter (wie eine Truhe) vor dem Komporator platziert wurde und der Behälter mindestens einen Gegenstand enthält. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Die Seiteneingänge akzeptieren nur normale Redstoneenergie. Der Redstonekomparator kann in zwei Modi agieren: Übertragungsmodus und Subtraktionsmodus. Er fängt im Übertragungsmodus an. Der Modus wird beim Benutzen des Blocks geändert. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Übertragungsmodus:@nDie vordere Fackel ist eingefahren und leuchtet nicht auf. Die Ausgabe gibt ein Signal, wenn, nur nur wenn der Haupteingang bestromt wird. Die zwei Seiteneingänge werden ignoriert. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Subtraktionsmodus:@nDie vordere Fackel leuchtet auf. Die Ausgabe gibt ein Signal wenn, nur nur wenn der Haupteingang versorgt wird und keiner der Seiteneingänge bestromt ist. -Redstone Comparator=Redstonekomparator -Redstone Comparator (Subtract)=Redstonekomparator (subtrahieren) -Redstone Comparator (Powered)=Redstonekomparator (bestromt) -Redstone Comparator (Subtract, Powered)=Redstonekomparator (subtrahieren, bestromt) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.es.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.es.tr deleted file mode 100644 index 581c0ab14..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.es.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Los comparadores de Redstone son componentes multipropósito de redstone. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Pueden transmitir una señal de redstone, detectar si un bloque contiene algún elemento y comparar múltiples señales. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Un comparador redstone tiene 1 entrada principal, 2 entradas laterales y 1 salida. La salida está en la dirección de la flecha, la entrada principal está en la dirección opuesta. Los otros 2 lados son las entradas laterales. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=La entrada principal puede alimentarse de 2 maneras: en primer lugar, puede alimentarse directamente mediante redstone como cualquier otro componente. En segundo lugar, se alimenta si, y solo si se coloca un contenedor (como un cofre) frente a él y el contenedor contiene al menos un elemento. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Las entradas laterales solo están alimentadas por la alimentación normal de redstone. El comparador de redstone puede funcionar en dos modos: modo de transmisión y modo de resta. Comienza en modo de transmisión y el modo se puede cambiar usando el bloque. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Modo de transmisión: @nLa antorcha delantera está apagada y baja. La salida se alimenta solo si se alimenta la entrada principal. Las dos entradas laterales se ignoran. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Modo de resta: @nLa antorcha delantera está encendida. La salida se alimenta si, y solo si la entrada principal está alimentada y ninguna de las entradas laterales está alimentada. -Redstone Comparator=Comparador de redstone -Redstone Comparator (Subtract)=Comparador de redstone (Negativo) -Redstone Comparator (Powered)=Comparador de redstone (Motorizado) -Redstone Comparator (Subtract, Powered)=Redstonekomparator (Negativo, Motorizado) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.fr.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.fr.tr deleted file mode 100644 index 38a03d311..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.fr.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Les comparateurs Redstone sont des composants Redstone polyvalents. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Ils peuvent transmettre un signal redstone, détecter si un bloc contient des éléments et comparer plusieurs signaux. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Un comparateur redstone a 1 entrée principale, 2 entrées latérales et 1 sortie. La sortie est dans le sens de la flèche, l'entrée principale est dans le sens opposé. Les 2 autres côtés sont les entrées latérales. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=L'entrée principale peut être alimentée de 2 manières: Premièrement, elle peut être alimentée directement par une alimentation redstone comme n'importe quel autre composant. Deuxièmement, il est alimenté si et seulement si un conteneur (comme un coffre) est placé devant lui et que le conteneur contient au moins un article. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Les entrées latérales sont uniquement alimentées par une alimentation Redstone normale. Le comparateur redstone peut fonctionner en deux modes: le mode de transmission et le mode de soustraction. Il démarre en mode transmission et le mode peut être changé en utilisant le bloc. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Mode de transmission: @nLa torche avant est éteinte et abaissée. La sortie est alimentée si et seulement si l'entrée principale est alimentée. Les deux entrées latérales sont ignorées. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Mode de soustraction: @nLa torche avant est allumée. La sortie est alimentée si et seulement si l'entrée principale est alimentée et qu'aucune des entrées latérales n'est alimentée. -Redstone Comparator=Comparateur Redstone -Redstone Comparator (Subtract)=Comparateur Redstone (Soustraction) -Redstone Comparator (Powered)=Comparateur Redstone (Alimenté) -Redstone Comparator (Subtract, Powered)=Comparateur Redstone (Soustraction, Alimenté) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.pl.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.pl.tr deleted file mode 100644 index e20d253c8..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.pl.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Komparatory są wielofunkcyjnymi mechanizmami czerwienitowymi. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Mogą one przesyłać sygnał czerwienitowy, wykrywać czy blok zawiera przedmioty i porównywać wiele sygnałów. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Komparator ma jedno główne wejście, 2 wejścia poboczne i jedno wyjście. Wyjście jest wskazywane przez strzałkę, wejście jest na przeciwko. Pozostałe dwa wejścia są poboczne. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=Główny wejście można zasilać na 2 sposoby: Może być zasilany bezpośrednio energią czerwienitową jak każdy inny komponent, lub gdy przed nim postawiony jest kontener zawierający przynajmniej jeden przedmiot. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Wejścia poboczne są aktywowane przez zwykłą energię czerwienitową. Komparator może działać w dwóch trybach: tryb przekazywania oraz tryb odejmowania. Początkowo jest w trybie przekazywania, a tryb może być zmienione przez użycie go. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Tryb przekazywania:@nPrzednia pochodnia jest niezaświecona i obniżona. Wyjście jest zasilane wtedy i tylko wtedy gdy wejście główne jest zasilane. Wejścia boczne są ignorowane. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Tryb odejmowania:@nPrzednia pochodnia jest zaświecona. Wyjście jest zasilane wtedy i tylko gdy zasilane jest główne wejście, a wejścia boczne nie są. -Redstone Comparator=Komparator -Redstone Comparator (Subtract)=Komparator (odejmowanie) -Redstone Comparator (Powered)=Komparator (zasilony) -Redstone Comparator (Subtract, Powered)=Komparator (odejmowanie, zasilony) - diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.ru.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.ru.tr deleted file mode 100644 index 39a845d6e..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.ru.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Компаратор это многофункциональный элемент редстоуна. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Он может передавать сигнал редстоуна, определять, содержит ли блок какой-либо предмет, и сравнивать сигналы. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Компаратор имеет 1 основной вход, 2 боковых входа и 1 выход. Выход расположен по направлению стрелки, основной вход в противоположном направлении. Оставшиеся 2 стороны это боковые входы. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=Основной вход можно подключать 2 способами: 1) напрямую к энергии редстоуна, как и любой другой компонент; 2) перед компаратором можно установить контейнер (например, сундук), тогда сигнал будет поступать, если в нём содержится хотя бы один предмет. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=К боковым входам можно подводить только обычную энергию редстоуна. Компаратор может работать в двух режимах: ПЕРЕДАЧА и ВЫЧИТАНИЕ. Он изначально находится в режиме передачи; режим меняется при [Использовании] данного блока. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Режим ПЕРЕДАЧИ:@nПередний индикатор погашен. На выходе появляется энергия редстоуна, только если она подаётся на основной вход. Состояние боковых входов при этом игнорируются. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Режим ВЫЧИТАНИЯ:@nПередний индикатор светится. На выходе есть сигнал только в том случае, если сигнал есть на основной входе, но при этом его нет ни на одном из боковых входов. -Redstone Comparator=Компаратор -Redstone Comparator (Subtract)=Компаратор (ВЫЧИТАНИЕ) -Redstone Comparator (Powered)=Компаратор (ВКЛЮЧЁН) -Redstone Comparator (Subtract, Powered)=Компаратор (ВЫЧИТАНИЕ, ВКЛЮЧЁН) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_comparators/locale/template.txt deleted file mode 100644 index d22d01765..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/template.txt +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.= -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.= -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.= -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.= -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.= -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.= -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.= -Redstone Comparator= -Redstone Comparator (Subtract)= -Redstone Comparator (Powered)= -Redstone Comparator (Subtract, Powered)= diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/mod.conf b/mods/ITEMS/REDSTONE/mcl_comparators/mod.conf deleted file mode 100644 index 100e42814..000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_comparators -depends = mcl_wip, mesecons, mcl_sounds -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_comp.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_comp.png deleted file mode 100644 index 9967cf5c1..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_comp.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_comp.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_comp.png deleted file mode 100644 index 3b8e7477b..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_comp.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_off.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_off.png deleted file mode 100644 index 02ccb50ae..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_on.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_on.png deleted file mode 100644 index 33505b383..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_sub.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_sub.png deleted file mode 100644 index f0697465d..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_sub.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_item.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_item.png deleted file mode 100644 index 7febe579c..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_item.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_off.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_off.png deleted file mode 100644 index b7affc2ea..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_on.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_on.png deleted file mode 100644 index c2e250d50..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_comp.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_comp.png deleted file mode 100644 index 536d61bf9..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_comp.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_off.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_off.png deleted file mode 100644 index ba70c3efe..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_on.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_on.png deleted file mode 100644 index bb683c933..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_sub.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_sub.png deleted file mode 100644 index 76d9187d3..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_sub.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sub.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sub.png deleted file mode 100644 index a62e6c7f6..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sub.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/API.md b/mods/ITEMS/REDSTONE/mcl_dispensers/API.md deleted file mode 100644 index 419c3ac40..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/API.md +++ /dev/null @@ -1,27 +0,0 @@ -# API documentation for dispensers - -The dispensers API allows you to add custom code which is called when a -particular item is dispensed. -Just add the `_on_dispense` function to the item definition. -By default, items are just thrown out as item entities. - -## Additional fields for item definitions - -### `_on_dispense(stack, pos, droppos, dropnode, dropdir)` - -This is a function which is called when an item is dispensed by the dispenser. -These are the parameters: - -* stack: Itemstack which is dispense. This is always exactly 1 item -* pos: Position of dispenser -* droppos: Position to which to dispense item -* dropnode: Node of droppos -* dropdir: Drop direction - -By default (return value: `nil`), the itemstack is consumed by the dispenser afterwards. -Optionally, you can explicitly set the return value to a custom leftover itemstack. - -### `_dispense_into_walkable` - -By default, items will only be dispensed into non-walkable nodes. -But if this value is set If `true`, the item can be dispensed into walkable nodes. diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua b/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua deleted file mode 100644 index aa20fc813..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua +++ /dev/null @@ -1,369 +0,0 @@ ---[[ This mod registers 3 nodes: -- One node for the horizontal-facing dispensers (mcl_dispensers:dispenser) -- One node for the upwards-facing dispensers (mcl_dispenser:dispenser_up) -- One node for the downwards-facing dispensers (mcl_dispenser:dispenser_down) - -3 node definitions are needed because of the way the textures are defined. -All node definitions share a lot of code, so this is the reason why there -are so many weird tables below. -]] -local S = minetest.get_translator(minetest.get_current_modname()) - --- For after_place_node -local function setup_dispenser(pos) - -- Set formspec and inventory - local form = "size[9,8.75]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dispenser"))).."]".. - "list[context;main;3,0.5;3,3;]".. - mcl_formspec.get_itemslot_bg(3,0.5,3,3).. - "listring[context;main]".. - "listring[current_player;main]" - local meta = minetest.get_meta(pos) - meta:set_string("formspec", form) - local inv = meta:get_inventory() - inv:set_size("main", 9) -end - -local function orientate_dispenser(pos, placer) - -- Not placed by player - if not placer then return end - - -- Pitch in degrees - local pitch = placer:get_look_vertical() * (180 / math.pi) - - local node = minetest.get_node(pos) - if pitch > 55 then - minetest.swap_node(pos, {name="mcl_dispensers:dispenser_up", param2 = node.param2}) - elseif pitch < -55 then - minetest.swap_node(pos, {name="mcl_dispensers:dispenser_down", param2 = node.param2}) - end -end - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple -end - --- Shared core definition table -local dispenserdef = { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for i=1, inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - mesecons = { - effector = { - -- Dispense random item when triggered - action_on = function(pos, node) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local droppos, dropdir - if node.name == "mcl_dispensers:dispenser" then - dropdir = vector.multiply(minetest.facedir_to_dir(node.param2), -1) - droppos = vector.add(pos, dropdir) - elseif node.name == "mcl_dispensers:dispenser_up" then - dropdir = {x=0, y=1, z=0} - droppos = {x=pos.x, y=pos.y+1, z=pos.z} - elseif node.name == "mcl_dispensers:dispenser_down" then - dropdir = {x=0, y=-1, z=0} - droppos = {x=pos.x, y=pos.y-1, z=pos.z} - end - local dropnode = minetest.get_node(droppos) - local dropnodedef = minetest.registered_nodes[dropnode.name] - local stacks = {} - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - table.insert(stacks, {stack = stack, stackpos = i}) - end - end - if #stacks >= 1 then - local r = math.random(1, #stacks) - local stack = stacks[r].stack - local dropitem = ItemStack(stack) - dropitem:set_count(1) - local stack_id = stacks[r].stackpos - local stackdef = stack:get_definition() - - if not stackdef then - return - end - - local iname = stack:get_name() - local igroups = stackdef.groups - - --[===[ Dispense item ]===] - - -- Hardcoded dispensions -- - - -- Armor, mob heads and pumpkins - if igroups.armor then - local droppos_below = {x = droppos.x, y = droppos.y - 1, z = droppos.z} - - for _, objs in ipairs({minetest.get_objects_inside_radius(droppos, 1), minetest.get_objects_inside_radius(droppos_below, 1)}) do - for _, obj in ipairs(objs) do - stack = mcl_armor.equip(stack, obj) - if stack:is_empty() then - break - end - end - if stack:is_empty() then - break - end - end - - -- Place head or pumpkin as node, if equipping it as armor has failed - if not stack:is_empty() then - if igroups.head or iname == "mcl_farming:pumpkin_face" then - if dropnodedef.buildable_to then - minetest.set_node(droppos, {name = iname, param2 = node.param2}) - stack:take_item() - end - end - end - - inv:set_stack("main", stack_id, stack) - - -- Use shears on sheeps - elseif igroups.shears then - for _, obj in pairs(minetest.get_objects_inside_radius(droppos, 1)) do - local entity = obj:get_luaentity() - if entity and not entity.child and not entity.gotten then - local entname = entity.name - local pos = obj:get_pos() - local used, texture = false - if entname == "mobs_mc:sheep" then - minetest.add_item(pos, entity.drops[2].name .. " " .. math.random(1, 3)) - if not entity.color then - entity.color = "unicolor_white" - end - entity.base_texture = { "blank.png", "mobs_mc_sheep.png" } - texture = entity.base_texture - entity.drops = { - { name = "mcl_mobitems:mutton", chance = 1, min = 1, max = 2 }, - } - used = true - elseif entname == "mobs_mc:snowman" then - texture = { - "mobs_mc_snowman.png", - "blank.png", "blank.png", - "blank.png", "blank.png", - "blank.png", "blank.png", - } - used = true - elseif entname == "mobs_mc:mooshroom" then - local droppos = vector.offset(pos, 0, 1.4, 0) - if entity.base_texture[1] == "mobs_mc_mooshroom_brown.png" then - minetest.add_item(droppos, "mcl_mushrooms:mushroom_brown 5") - else - minetest.add_item(droppos, "mcl_mushrooms:mushroom_red 5") - end - obj = mcl_util.replace_mob(obj, "mobs_mc:cow") - entity = obj:get_luaentity() - used = true - end - if used then - obj:set_properties({ textures = texture }) - entity.gotten = true - minetest.sound_play("mcl_tools_shears_cut", { pos = pos }, true) - stack:add_wear(65535 / stackdef._mcl_diggroups.shearsy.uses) - inv:set_stack("main", stack_id, stack) - break - end - end - end - - -- Spawn Egg - elseif igroups.spawn_egg then - -- Spawn mob - if not dropnodedef.walkable then - --pointed_thing = { above = droppos, under = { x=droppos.x, y=droppos.y-1, z=droppos.z } } - minetest.add_entity(droppos, stack:get_name()) - - stack:take_item() - inv:set_stack("main", stack_id, stack) - end - - -- Generalized dispension - elseif (not dropnodedef.walkable or stackdef._dispense_into_walkable) then - --[[ _on_dispense(stack, pos, droppos, dropnode, dropdir) - * stack: Itemstack which is dispense - * pos: Position of dispenser - * droppos: Position to which to dispense item - * dropnode: Node of droppos - * dropdir: Drop direction - - _dispense_into_walkable: If true, can dispense into walkable nodes - ]] - if stackdef._on_dispense then - -- Item-specific dispension (if defined) - local od_ret = stackdef._on_dispense(dropitem, pos, droppos, dropnode, dropdir) - if od_ret then - local newcount = stack:get_count() - 1 - stack:set_count(newcount) - inv:set_stack("main", stack_id, stack) - if newcount == 0 then - inv:set_stack("main", stack_id, od_ret) - elseif inv:room_for_item("main", od_ret) then - inv:add_item("main", od_ret) - else - minetest.add_item(droppos, dropitem) - end - else - stack:take_item() - inv:set_stack("main", stack_id, stack) - end - else - -- Drop item otherwise - minetest.add_item(droppos, dropitem) - stack:take_item() - inv:set_stack("main", stack_id, stack) - end - end - - - end - end, - rules = mesecon.rules.alldirs, - }, - }, - on_rotate = on_rotate, -} - --- Horizontal dispenser - -local horizontal_def = table.copy(dispenserdef) -horizontal_def.description = S("Dispenser") -horizontal_def._tt_help = S("9 inventory slots").."\n"..S("Launches item when powered by redstone power") -horizontal_def._doc_items_longdesc = S("A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.") -horizontal_def._doc_items_usagehelp = S("Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.").."\n\n".. - -S("The dispenser will do different things, depending on the dispensed item:").."\n\n".. - -S("• Arrows: Are launched").."\n".. -S("• Eggs and snowballs: Are thrown").."\n".. -S("• Fire charges: Are fired in a straight line").."\n".. -S("• Armor: Will be equipped to players and armor stands").."\n".. -S("• Boats: Are placed on water or are dropped").."\n".. -S("• Minecart: Are placed on rails or are dropped").."\n".. -S("• Bone meal: Is applied on the block it is facing").."\n".. -S("• Empty buckets: Are used to collect a liquid source").."\n".. -S("• Filled buckets: Are used to place a liquid source").."\n".. -S("• Heads, pumpkins: Equipped to players and armor stands, or placed as a block").."\n".. -S("• Shulker boxes: Are placed as a block").."\n".. -S("• TNT: Is placed and ignited").."\n".. -S("• Flint and steel: Is used to ignite a fire in air and to ignite TNT").."\n".. -S("• Spawn eggs: Will summon the mob they contain").."\n".. -S("• Other items: Are simply dropped") - -function horizontal_def.after_place_node(pos, placer, itemstack, pointed_thing) - setup_dispenser(pos) - orientate_dispenser(pos, placer) -end - -horizontal_def.tiles = { - "default_furnace_top.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "mcl_dispensers_dispenser_front_horizontal.png" -} -horizontal_def.paramtype2 = "facedir" -horizontal_def.groups = {pickaxey=1, container=2, material_stone=1} - -minetest.register_node("mcl_dispensers:dispenser", horizontal_def) - --- Down dispenser -local down_def = table.copy(dispenserdef) -down_def.description = S("Downwards-Facing Dispenser") -down_def.after_place_node = setup_dispenser -down_def.tiles = { - "default_furnace_top.png", "mcl_dispensers_dispenser_front_vertical.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png" -} -down_def.groups = {pickaxey=1, container=2,not_in_creative_inventory=1, material_stone=1} -down_def._doc_items_create_entry = false -down_def.drop = "mcl_dispensers:dispenser" -minetest.register_node("mcl_dispensers:dispenser_down", down_def) - --- Up dispenser --- The up dispenser is almost identical to the down dispenser , it only differs in textures -local up_def = table.copy(down_def) -up_def.description = S("Upwards-Facing Dispenser") -up_def.tiles = { - "mcl_dispensers_dispenser_front_vertical.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png" -} -minetest.register_node("mcl_dispensers:dispenser_up", up_def) - - -minetest.register_craft({ - output = "mcl_dispensers:dispenser", - recipe = { - {"mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble",}, - {"mcl_core:cobble", "mcl_bows:bow", "mcl_core:cobble",}, - {"mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble",}, - } -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_dispensers:dispenser", "nodes", "mcl_dispensers:dispenser_down") - doc.add_entry_alias("nodes", "mcl_dispensers:dispenser", "nodes", "mcl_dispensers:dispenser_up") -end - --- Legacy -minetest.register_lbm({ - label = "Update dispenser formspecs (0.60.0)", - name = "mcl_dispensers:update_formspecs_0_60_0", - nodenames = { "mcl_dispensers:dispenser", "mcl_dispensers:dispenser_down", "mcl_dispensers:dispenser_up" }, - action = function(pos, node) - setup_dispenser(pos) - minetest.log("action", "[mcl_dispenser] Node formspec updated at "..minetest.pos_to_string(pos)) - end, -}) diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.de.tr b/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.de.tr deleted file mode 100644 index 129350e59..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.de.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_dispensers -Dispenser=Werfer -A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.=Ein Werfer ist ein Block, der als eine Redstonekomponente fungiert, die, wenn sie mit Redstoneenergie versorgt ist, einen Gegenstand auswirft. Er hat einen Behälter mit 9 Inventarplätzen. -Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.=Platzieren Sie den Werfer in einer von 6 möglichen Richtungen. Das „Loch“ ist die Stelle, aus der Dinge aus dem Werfer fliegen. Benutzen Sie den Werfer, um auf das Inventar zuzugreifen. -The dispenser will do different things, depending on the dispensed item:=Der Werfer wird, abhängig vom geworfenem Gegenstand, unterschiedliche Dinge tun: -• Arrows: Are launched=• Pfeile: Werden gefeuert -• Eggs and snowballs: Are thrown=• Eier und Schneebälle: Werden geworfen -• Fire charges: Are fired in a straight line=• Feuerkugeln: Werden schnurgerade abgefeuert -• Armor: Will be equipped to players and armor stands=• Rüstung: Spieler und Rüstungsständer werden ausgerüstet -• Boats: Are placed on water or are dropped=• Boote: Werden auf Wasser platziert oder abgeworfen -• Minecart: Are placed on rails or are dropped=• Loren: Werden auf Schienen platziert oder abgeworfen -• Bone meal: Is applied on the block it is facing=• Knochenmehl: Wird auf den Block, auf den er zeigt, angewandt -• Empty buckets: Are used to collect a liquid source=• Leere Eimer: Sammeln Flüssigkeitsquelle auf -• Filled buckets: Are used to place a liquid source=• Volle Eimer: Platzieren eine Flüssigkeitsquelle -• Heads, pumpkins: Equipped to players and armor stands, or placed as a block=• Köpfe, Kürbisse: Spieler und Rüstungsständer werden ausgerüstet, alternativ werden diese Gegenstände als Block platziert -• Shulker boxes: Are placed as a block=• Schulkerkisten: Werden als Block platziert -• TNT: Is placed and ignited=• TNT: Wird platziert und angezündet -• Flint and steel: Is used to ignite a fire in air and to ignite TNT=• Feuerzeuge: Endzündet ein Feuer in der Luft und zündet TNT an -• Spawn eggs: Will summon the mob they contain=• Spawn-Eier: Beschwören einen Mob -• Other items: Are simply dropped=• Andere Gegenstände: Werden fallen gelassen -Downwards-Facing Dispenser=Nach unten zeigender Werfer -Upwards-Facing Dispenser=Nach oben zeigender Werfer -Inventory=Inventar -9 inventory slots=9 Inventarplätze -Launches item when powered by redstone power=Wirft Gegenstand aus, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.es.tr b/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.es.tr deleted file mode 100644 index cf695307a..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.es.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mcl_dispensers -Dispenser=Dispensador -A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.=Un dispensador es un bloque que actúa como un componente de redstone que, cuando se alimenta con energía de redstone, dispensa un artículo. Tiene un contenedor con 9 ranuras de inventario. -Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.=Coloque el dispensador en una de las 6 direcciones posibles. El "agujero" es donde los artículos saldrán volando del dispensador. Use el dispensador para acceder a su inventario. Inserte los artículos que desea dispensar. Proporcione al dispensador energía de redstone una vez para dispensar un elemento aleatorio: -• Arrows: Are launched=• Flechas: Se lanzan -• Eggs and snowballs: Are thrown=• Huevos y bolas de nieve: Son lanzados -• Fire charges: Are fired in a straight line=• Cargas de fuego: Se disparan en línea recta -• Armor: Will be equipped to players and armor stands=• Armadura: Estará equipada para jugadores y armaduras -• Boats: Are placed on water or are dropped=• Barcas: Se colocan en el agua o se dejan caer -• Minecart: Are placed on rails or are dropped=• Carro de minas: Se colocan sobre rieles o se dejan caer = -• Bone meal: Is applied on the block it is facing=• Harina de hueso: Se aplica en el bloque que está enfrentando -• Empty buckets: Are used to collect a liquid source=• Cubos vacíos: Se utilizan para recolectar una fuente líquida -• Filled buckets: Are used to place a liquid source=• Cubos llenos: Se utilizan para colocar una fuente de líquido -• Heads, pumpkins: Equipped to players and armor stands, or placed as a block=• Cabezas, calabazas: Equipadas para jugadores y armaduras, o colocadas como un bloque -• Shulker boxes: Are placed as a block=• Cajas de Shulker: Se colocan como un bloque -• TNT: Is placed and ignited=• TNT: Se coloca y se enciende -• Flint and steel: Is used to ignite a fire in air and to ignite TNT=• Mechero: Se usa para encender un fuego en el aire y para encender TNT -• Spawn eggs: Will summon the mob they contain=• Huevos de desove: Convocarán al animal que contienen -• Other items: Are simply dropped=• Otros artículos: Simplemente se dejan caer -Downwards-Facing Dispenser=Dispensador orientado hacia abajo -Upwards-Facing Dispenser=Dispensador orientado hacia arriba -Inventory=Inventario diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.fr.tr b/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.fr.tr deleted file mode 100644 index 622d0a70e..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.fr.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_dispensers -Dispenser=Dispenser -A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.=Un distributeur est un bloc qui agit comme un composant redstone qui, lorsqu'il est alimenté avec une puissance redstone, distribue un article. Il a un conteneur avec 9 emplacements d'inventaire. -Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.=Placez le distributeur dans l'une des 6 directions possibles. Le "trou" est l'endroit où les articles sortiront du distributeur. Utilisez le distributeur pour accéder à son inventaire. Insérez les articles que vous souhaitez distribuer. Fournissez au distributeur de l'énergie de redstone une fois pour distribuer un objet aléatoire. -The dispenser will do different things, depending on the dispensed item:=Le distributeur fera différentes choses, selon l'article distribué: -• Arrows: Are launched=• Flèches: Sont lancées -• Eggs and snowballs: Are thrown=• Oeufs et boules de neige: Sont jetés -• Fire charges: Are fired in a straight line=• Feu d'artifice: Sont tirés en ligne droite -• Armor: Will be equipped to players and armor stands=• Armure: Sera équipée pour les joueurs et les porte-armures -• Boats: Are placed on water or are dropped=• Bateaux: Sont placés sur l'eau ou sont lâchés -• Minecart: Are placed on rails or are dropped=• Minecart: Sont placés sur des rails ou sont lâchés -• Bone meal: Is applied on the block it is facing=• Farine d'os: Est appliquée sur le bloc auquel elle fait face -• Empty buckets: Are used to collect a liquid source=• Seaux vides: Sont utilisés pour collecter une source de liquide -• Filled buckets: Are used to place a liquid source=• Seaux remplis: Sont utilisés pour placer une source de liquide -• Heads, pumpkins: Equipped to players and armor stands, or placed as a block=• Têtes, citrouilles: Seront équipées pour les joueurs et les armures, ou placées en bloc -• Shulker boxes: Are placed as a block=• Boîtes de Shulker: Sont placées comme un bloc -• TNT: Is placed and ignited=• TNT: Est placé et allumé -• Flint and steel: Is used to ignite a fire in air and to ignite TNT=• Briquet: Sert à allumer un feu dans l'air et à allumer du TNT -• Spawn eggs: Will summon the mob they contain=• Silex et acier: Sert à allumer un feu dans l'air et à allumer du TNT -• Other items: Are simply dropped=• Autres articles: Sont simplement lâchés -Downwards-Facing Dispenser=Distributeur orienté vers le bas -Upwards-Facing Dispenser=Distributeur orienté vers le haut -Inventory=Inventaire -9 inventory slots=9 emplacements d'inventaire -Launches item when powered by redstone power=Lance un objet lorsqu'il est alimenté par la puissance Redstone diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.pl.tr b/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.pl.tr deleted file mode 100644 index ee2b3cffe..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.pl.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_dispensers -Dispenser=Dozownik -A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.=Dozownik jest mechanizmem czerwienitowym, który po zasileniu wystrzeli lub wyrzuci przedmiot. Jest on pojemnikiem z 9 miejscami. -Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.=Postaw dozownik w jednym z 6 możliwych kierunków. "Dziura" wskazuje z której strony przedmioty będą dozowane. Użyj dozownika, aby zarządzać jego ekwipunkiem. Zasil dozownik czerwienitem aby wyrzucić losowy przedmiot. -The dispenser will do different things, depending on the dispensed item:=Dozownik będzie zachowywał się inaczej w zależności od przedmiotu: -• Arrows: Are launched=• Strzały: są wystrzelone -• Eggs and snowballs: Are thrown=• Jaja i śnieżki: są wyrzucane -• Fire charges: Are fired in a straight line=• Ładunki ogniowe: Są wystrzelone w linii prostej -• Armor: Will be equipped to players and armor stands=• Zbroja: będzie ekwipowana graczom, lub stojakom na zbroję -• Boats: Are placed on water or are dropped=• Łódki: Będą postawione na wodzie, lub wypuszczone -• Minecart: Are placed on rails or are dropped=• Wagoniki: będą postawione na torach, lub upuszczone -• Bone meal: Is applied on the block it is facing=• Mączka kostna: będzie zaaplikowana do bloku -• Empty buckets: Are used to collect a liquid source=• Puste wiadra: będą wykorzystane do zebrania źródła płynu -• Filled buckets: Are used to place a liquid source=• Pełne wiadra: będą wykorzystane do postawienia źródła płynu -• Heads, pumpkins: Equipped to players and armor stands, or placed as a block=• Głowy, dynie: będą ekwipowane graczom i stojakom na zbroję, lub postawione jako bloki -• Shulker boxes: Are placed as a block=Shulkerowe skrzynie: są postawione jako blok -• TNT: Is placed and ignited=• Trotyl: będzie postawiony i zapalony -• Flint and steel: Is used to ignite a fire in air and to ignite TNT=• Krzesiwo: będzie wykorzystane do rozpalenia ognia w powietrzu i zapalenia trotylu -• Spawn eggs: Will summon the mob they contain=• Jaja przywołujące: przywołają moba, którego zawierają -• Other items: Are simply dropped=• Inne przedmioty: zostaną upuszczone -Downwards-Facing Dispenser=Dozownik skierowany w dół -Upwards-Facing Dispenser=Dozownik skierowany w górę -Inventory=Ekwipunek -9 inventory slots=9 miejsc ekwipunku -Launches item when powered by redstone power=Wystrzela przedmiot gdy zasilony czerwienitem diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.ru.tr b/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.ru.tr deleted file mode 100644 index af4d856ec..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.ru.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_dispensers -Dispenser=Диспенсер -A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.=Диспенсер это элемент редстоуна, который при подаче энергии редстоуна выбрасывает предмет. В нём есть контейнер из 9 отсеков инвентаря. -Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.=Направьте диспенсер в одном из 6 возможных направлений. Предметы будут вылетать из отверстия. [Используйте] диспенсер для доступа к его инвентарю. Загрузите туда предметы, которые должны из него выбрасываться. Подайте однократно на диспенсер энергию редстоуна, чтобы выпал случайный предмет. -The dispenser will do different things, depending on the dispensed item:=Диспенсер будет делать разные вещи, в зависимости от выдаваемых предметов: -• Arrows: Are launched=• Стрелы: выстреливают -• Eggs and snowballs: Are thrown=• Яйца и снежки: происходит бросок -• Fire charges: Are fired in a straight line=• Огненные шары: стреляют по прямой линии -• Armor: Will be equipped to players and armor stands=• Защита: экипирует игроков или стенд защиты -• Boats: Are placed on water or are dropped=• Лодки: спускаются на воду -• Minecart: Are placed on rails or are dropped=• Вагонетка: помещается на рельсы -• Bone meal: Is applied on the block it is facing=• Костная мука: применяется к блоку перед диспенсером -• Empty buckets: Are used to collect a liquid source=• Пустые вёдра: используются для набора источника жидкости -• Filled buckets: Are used to place a liquid source=• Полные вёдра: используются для размещения источника жидкости -• Heads, pumpkins: Equipped to players and armor stands, or placed as a block=• Головы, тыквы: экипирует игроков, или стенд защиты, или устанавливаются как блоки -• Shulker boxes: Are placed as a block=• Ящик шалкера: устанавливается как блок -• TNT: Is placed and ignited=• Тротил: устанавливается и поджигается -• Flint and steel: Is used to ignite a fire in air and to ignite TNT=• Огниво: используется для зажигания огня в воздухе и для подрыва тротила -• Spawn eggs: Will summon the mob they contain=• Порождающие яйца: будут вызывать мобов, содержащихся в них -• Other items: Are simply dropped=• Другие предметы: просто выдаются -Downwards-Facing Dispenser=• Диспенсер, направленный вниз -Upwards-Facing Dispenser=• Диспенсер, направленный вверх -Inventory=Инвентарь -9 inventory slots=9 отсеков инвентаря -Launches item when powered by redstone power=Выбрасывает предметы при подаче энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_dispensers/locale/template.txt deleted file mode 100644 index 91129aac1..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/locale/template.txt +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_dispensers -Dispenser= -A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.= -Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.= -The dispenser will do different things, depending on the dispensed item:= -• Arrows: Are launched= -• Eggs and snowballs: Are thrown= -• Fire charges: Are fired in a straight line= -• Armor: Will be equipped to players and armor stands= -• Boats: Are placed on water or are dropped= -• Minecart: Are placed on rails or are dropped= -• Bone meal: Is applied on the block it is facing= -• Empty buckets: Are used to collect a liquid source= -• Filled buckets: Are used to place a liquid source= -• Heads, pumpkins: Equipped to players and armor stands, or placed as a block= -• Shulker boxes: Are placed as a block= -• TNT: Is placed and ignited= -• Flint and steel: Is used to ignite a fire in air and to ignite TNT= -• Spawn eggs: Will summon the mob they contain= -• Other items: Are simply dropped= -Downwards-Facing Dispenser= -Upwards-Facing Dispenser= -Inventory= -9 inventory slots= -Launches item when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/mod.conf b/mods/ITEMS/REDSTONE/mcl_dispensers/mod.conf deleted file mode 100644 index 13cdb5f5a..000000000 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_dispensers -depends = mcl_init, mcl_formspec, mesecons, mcl_sounds, mcl_tnt, mcl_worlds, mcl_core, mcl_nether, mcl_armor_stand, mcl_armor -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/textures/mcl_dispensers_dispenser_front_horizontal.png b/mods/ITEMS/REDSTONE/mcl_dispensers/textures/mcl_dispensers_dispenser_front_horizontal.png deleted file mode 100644 index ca08f4f3c..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_dispensers/textures/mcl_dispensers_dispenser_front_horizontal.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/textures/mcl_dispensers_dispenser_front_vertical.png b/mods/ITEMS/REDSTONE/mcl_dispensers/textures/mcl_dispensers_dispenser_front_vertical.png deleted file mode 100644 index 2b2328afa..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_dispensers/textures/mcl_dispensers_dispenser_front_vertical.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua b/mods/ITEMS/REDSTONE/mcl_droppers/init.lua deleted file mode 100644 index abb351091..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua +++ /dev/null @@ -1,221 +0,0 @@ ---[[ This mod registers 3 nodes: -- One node for the horizontal-facing dropper (mcl_droppers:dropper) -- One node for the upwards-facing droppers (mcl_droppers:dropper_up) -- One node for the downwards-facing droppers (mcl_droppers:dropper_down) - -3 node definitions are needed because of the way the textures are defined. -All node definitions share a lot of code, so this is the reason why there -are so many weird tables below. -]] - -local S = minetest.get_translator(minetest.get_current_modname()) - --- For after_place_node -local function setup_dropper(pos) - -- Set formspec and inventory - local form = "size[9,8.75]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dropper"))).."]".. - "list[context;main;3,0.5;3,3;]".. - mcl_formspec.get_itemslot_bg(3,0.5,3,3).. - "listring[context;main]".. - "listring[current_player;main]" - local meta = minetest.get_meta(pos) - meta:set_string("formspec", form) - local inv = meta:get_inventory() - inv:set_size("main", 9) -end - -local function orientate_dropper(pos, placer) - -- Not placed by player - if not placer then return end - - -- Pitch in degrees - local pitch = placer:get_look_vertical() * (180 / math.pi) - - if pitch > 55 then - minetest.swap_node(pos, {name="mcl_droppers:dropper_up"}) - elseif pitch < -55 then - minetest.swap_node(pos, {name="mcl_droppers:dropper_down"}) - end -end - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple -end - --- Shared core definition table -local dropperdef = { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for i=1, inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - mesecons = {effector = { - -- Drop random item when triggered - action_on = function(pos, node) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local droppos - if node.name == "mcl_droppers:dropper" then - droppos = vector.subtract(pos, minetest.facedir_to_dir(node.param2)) - elseif node.name == "mcl_droppers:dropper_up" then - droppos = {x=pos.x, y=pos.y+1, z=pos.z} - elseif node.name == "mcl_droppers:dropper_down" then - droppos = {x=pos.x, y=pos.y-1, z=pos.z} - end - local dropnode = minetest.get_node(droppos) - -- Do not drop into solid nodes, unless they are containers - local dropnodedef = minetest.registered_nodes[dropnode.name] - if dropnodedef.walkable and not dropnodedef.groups.container then - return - end - local stacks = {} - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - table.insert(stacks, {stack = stack, stackpos = i}) - end - end - if #stacks >= 1 then - local r = math.random(1, #stacks) - local stack = stacks[r].stack - local dropitem = ItemStack(stack) - dropitem:set_count(1) - local stack_id = stacks[r].stackpos - - -- If it's a container, attempt to put it into the container - local dropped = mcl_util.move_item_container(pos, droppos, nil, stack_id) - -- No container? - if not dropped and not dropnodedef.groups.container then - -- Drop item normally - minetest.add_item(droppos, dropitem) - stack:take_item() - inv:set_stack("main", stack_id, stack) - end - end - end, - rules = mesecon.rules.alldirs, - }}, - on_rotate = on_rotate, -} - --- Horizontal dropper - -local horizontal_def = table.copy(dropperdef) -horizontal_def.description = S("Dropper") -horizontal_def._tt_help = S("9 inventory slots").."\n"..S("Drops item when powered by redstone power") -horizontal_def._doc_items_longdesc = S("A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.") -horizontal_def._doc_items_usagehelp = S("Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.") -function horizontal_def.after_place_node(pos, placer, itemstack, pointed_thing) - setup_dropper(pos) - orientate_dropper(pos, placer) -end -horizontal_def.tiles = { - "default_furnace_top.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "mcl_droppers_dropper_front_horizontal.png" -} -horizontal_def.paramtype2 = "facedir" -horizontal_def.groups = {pickaxey=1, container=2, material_stone=1} - -minetest.register_node("mcl_droppers:dropper", horizontal_def) - --- Down dropper -local down_def = table.copy(dropperdef) -down_def.description = S("Downwards-Facing Dropper") -down_def.after_place_node = setup_dropper -down_def.tiles = { - "default_furnace_top.png", "mcl_droppers_dropper_front_vertical.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png" -} -down_def.groups = {pickaxey=1, container=2,not_in_creative_inventory=1, material_stone=1} -down_def._doc_items_create_entry = false -down_def.drop = "mcl_droppers:dropper" -minetest.register_node("mcl_droppers:dropper_down", down_def) - --- Up dropper --- The up dropper is almost identical to the down dropper, it only differs in textures -local up_def = table.copy(down_def) -up_def.description = S("Upwards-Facing Dropper") -up_def.tiles = { - "mcl_droppers_dropper_front_vertical.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png" -} -minetest.register_node("mcl_droppers:dropper_up", up_def) - - - --- Ladies and gentlemen, I present to you: the crafting recipe! -minetest.register_craft({ - output = "mcl_droppers:dropper", - recipe = { - {"mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble",}, - {"mcl_core:cobble", "", "mcl_core:cobble",}, - {"mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble",}, - } -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_droppers:dropper", "nodes", "mcl_droppers:dropper_down") - doc.add_entry_alias("nodes", "mcl_droppers:dropper", "nodes", "mcl_droppers:dropper_up") -end - --- Legacy -minetest.register_lbm({ - label = "Update dropper formspecs (0.60.0)", - name = "mcl_droppers:update_formspecs_0_60_0", - nodenames = { "mcl_droppers:dropper", "mcl_droppers:dropper_down", "mcl_droppers:dropper_up" }, - action = function(pos, node) - setup_dropper(pos) - minetest.log("action", "[mcl_droppers] Node formspec updated at "..minetest.pos_to_string(pos)) - end, -}) diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.de.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.de.tr deleted file mode 100644 index a4eb2eb08..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Spender -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Ein Spender ist eine Redstonekomponente und ein Behälter mit 9 Inventarplätzen. Er wird, wenn mit Redstoneenergie versorgt, einen Gegenstand abwerfen oder in einen Behälter, auf den er zeigt, ablegen. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Spender können in 6 mögliche Richtungen platziert werden, Gegenstände fallen aus dem Loch hinaus. Benutzen Sie den Spender, um auf sein Inventar zuzugreifen. Versorgen Sie ihn mit Redstoneenergie, um den Spender einen Gegenstand abwerfen oder in einen Behälter ablegen zu lassen. -Downwards-Facing Dropper=Nach unten zeigender Spender -Upwards-Facing Dropper=Nach oben zeigender Spender -Inventory=Inventar -9 inventory slots=9 Inventarplätze -Drops item when powered by redstone power=Gibt einen Gegenstand aus, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.es.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.es.tr deleted file mode 100644 index 8fd8104a6..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.es.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Soltador -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Un Soltador es un componente de redstone y un contenedor con 9 ranuras de inventario que, cuando se suministra con redstone power, deja caer un artículo o lo coloca en un contenedor frente a él. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Los soltadores se pueden colocar en 6 direcciones posibles, los artículos se sacarán del agujero. Usa el cuentagotas para acceder a su inventario. Proporcione energía de redstone una vez para hacer que el soltador caiga o transfiera un elemento aleatorio. -Downwards-Facing Dropper=Soltador orientado hacia abajo -Upwards-Facing Dropper=Soltador orientado hacia arriba -Inventory=Inventario diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.fr.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.fr.tr deleted file mode 100644 index 137400d31..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Dropper -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Un dropper est un composant redstone et un conteneur avec 9 emplacements d'inventaire qui, lorsqu'ils sont alimentés en puissance redstone, déposent un objet ou le placent dans un conteneur en face de lui. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Les droppers peuvent être placés dans 6 directions possibles, les objets seront déposés hors du trou. Utilisez le dropper pour accéder à son inventaire. Fournissez-lui de l'énergie redstone pour faire tomber un élement ou transférer un élément aléatoire. -Downwards-Facing Dropper=Dropper orienté vers le bas -Upwards-Facing Dropper=Dropper orienté vers le haut -Inventory=Inventaire -9 inventory slots=9 emplacements d'inventaire -Drops item when powered by redstone power=Obtient un objet lorsqu'il est alimenté par la puissance Redstone diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.pl.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.pl.tr deleted file mode 100644 index 7b0fd3c0d..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Podajnik -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Podajnik jest urządzeniem czerwienitowym i pojemnikiem z 9 miejscami, który po dostarczeniu energii czerwienitowej wyrzuca przedmiot lub umieszcza go w pojemniku przed nim. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Podajniki mogą być skierowane w 6 możliwych kierunkach, przedmioty będą wyrzucane z dziury. Użyj podajnika aby zyskać dostęp do jego ekwipunku. Dostarcz do niego energii czerwienitowej aby sprawić by wyrzucił lub przeniósł losowy przedmiot. -Downwards-Facing Dropper=Podajnik skierowany w dół -Upwards-Facing Dropper=Podajnik skierowany w górę -Inventory=Ekwipunek -9 inventory slots=9 miejsc ekwipunku -Drops item when powered by redstone power=Wyrzuca przedmiot gdy zasilony czerwienitem diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.ru.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.ru.tr deleted file mode 100644 index 22358678a..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Выбрасыватель -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Выбрасыватель это элемент редстоуна и контейнер с 9 отсеками инвентаря, срабатывающий по сигналу редстоуна и выбрасывающий предмет, либо выталкивающий его в контейнер, стоящий перед ним. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Выбрасыватель может быть установлен в 6 возможных направлениях, предметы будут выбрасываться в соответствующем направлении из отверстия. [Используйте] выбрасыватель для доступа к его инвентарю. Подайте на него энергию редстоуна однократно, чтобы заставить его выбросить либо предать один случайный предмет. -Downwards-Facing Dropper=Выбрасыватель, смотрящий вниз -Upwards-Facing Dropper=Выбрасыватель, смотрящий вверх -Inventory=Инвентарь -9 inventory slots=9 отсеков инвентаря -Drops item when powered by redstone power=Выбрасывает предмет при подаче энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_droppers/locale/template.txt deleted file mode 100644 index 24b2bc109..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper= -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.= -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.= -Downwards-Facing Dropper= -Upwards-Facing Dropper= -Inventory= -9 inventory slots= -Drops item when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/mod.conf b/mods/ITEMS/REDSTONE/mcl_droppers/mod.conf deleted file mode 100644 index bbb1c19f2..000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_droppers -depends = mcl_init, mcl_formspec, mesecons, mcl_util -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_horizontal.png b/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_horizontal.png deleted file mode 100644 index e247e92c8..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_horizontal.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_vertical.png b/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_vertical.png deleted file mode 100644 index 37bc9fa20..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_vertical.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/init.lua b/mods/ITEMS/REDSTONE/mcl_observers/init.lua deleted file mode 100644 index 6045b5677..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/init.lua +++ /dev/null @@ -1,470 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_observers = {} - -local string = string - -local get_node = minetest.get_node - --- Warning! TODO: Remove this message. --- 'realtime' is experimental feature! It can slow down the everything! --- Please set it to false and restart the game if something's wrong: -local realtime = true ---local realtime = false - -local rules_flat = { - { x = 0, y = 0, z = -1, spread = true }, -} -local function get_rules_flat(node) - local rules = rules_flat - for i=1, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local rules_down = {{ x = 0, y = 1, z = 0, spread = true }} -local rules_up = {{ x = 0, y = -1, z = 0, spread = true }} - -function mcl_observers.observer_activate(pos) - minetest.after(mcl_vars.redstone_tick, function(pos) - local node = get_node(pos) - if not node then - return - end - local nn = node.name - if nn == "mcl_observers:observer_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_on", param2 = node.param2}) - mesecon.receptor_on(pos, get_rules_flat(node)) - elseif nn == "mcl_observers:observer_down_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_down_on"}) - mesecon.receptor_on(pos, rules_down) - elseif nn == "mcl_observers:observer_up_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_up_on"}) - mesecon.receptor_on(pos, rules_up) - end - end, {x=pos.x, y=pos.y, z=pos.z}) -end - --- Scan the node in front of the observer --- and update the observer state if needed. --- TODO: Also scan metadata changes. --- TODO: Ignore some node changes. -local function observer_scan(pos, initialize) - local node = get_node(pos) - local front - if node.name == "mcl_observers:observer_up_off" or node.name == "mcl_observers:observer_up_on" then - front = vector.add(pos, {x=0, y=1, z=0}) - elseif node.name == "mcl_observers:observer_down_off" or node.name == "mcl_observers:observer_down_on" then - front = vector.add(pos, {x=0, y=-1, z=0}) - else - front = vector.add(pos, minetest.facedir_to_dir(node.param2)) - end - local frontnode = get_node(front) - local meta = minetest.get_meta(pos) - local oldnode = meta:get_string("node_name") - local oldparam2 = meta:get_string("node_param2") - local meta_needs_updating = false - if oldnode ~= "" and not initialize then - if not (frontnode.name == oldnode and tostring(frontnode.param2) == oldparam2) then - -- Node state changed! Activate observer - if node.name == "mcl_observers:observer_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_on", param2 = node.param2}) - mesecon.receptor_on(pos, get_rules_flat(node)) - elseif node.name == "mcl_observers:observer_down_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_down_on"}) - mesecon.receptor_on(pos, rules_down) - elseif node.name == "mcl_observers:observer_up_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_up_on"}) - mesecon.receptor_on(pos, rules_up) - end - meta_needs_updating = true - end - else - meta_needs_updating = true - end - if meta_needs_updating then - meta:set_string("node_name", frontnode.name) - meta:set_string("node_param2", tostring(frontnode.param2)) - end - return frontnode -end - --- Vertical orientation (CURRENTLY DISABLED) -local function observer_orientate(pos, placer) - -- Not placed by player - if not placer then return end - - -- Placer pitch in degrees - local pitch = placer:get_look_vertical() * (180 / math.pi) - - --local node = get_node(pos) - if pitch > 55 then -- player looking upwards - -- Observer looking downwards - minetest.set_node(pos, {name="mcl_observers:observer_down_off"}) - elseif pitch < -55 then -- player looking downwards - -- Observer looking upwards - minetest.set_node(pos, {name="mcl_observers:observer_up_off"}) - end -end - -mesecon.register_node("mcl_observers:observer", { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype2 = "facedir", - on_rotate = false, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - }, { - description = S("Observer"), - _tt_help = S("Emits redstone pulse when block in front changes"), - _doc_items_longdesc = S("An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes."), - _doc_items_usagehelp = S("Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here."), - - groups = {pickaxey=1, material_stone=1, not_opaque=1, }, - tiles = { - "mcl_observers_observer_top.png^[transformR180", "default_furnace_bottom.png", - "mcl_observers_observer_side.png", "mcl_observers_observer_side.png", - "mcl_observers_observer_front.png", "mcl_observers_observer_back.png", - }, - mesecons = { - receptor = { - state = mesecon.state.off, - rules = get_rules_flat, - }, - }, - on_construct = function(pos) - if not realtime then - observer_scan(pos, true) - end - end, - after_place_node = observer_orientate, - }, { - _doc_items_create_entry = false, - groups = {pickaxey=1, material_stone=1, not_opaque=1, not_in_creative_inventory=1 }, - tiles = { - "mcl_observers_observer_top.png^[transformR180", "default_furnace_bottom.png", - "mcl_observers_observer_side.png", "mcl_observers_observer_side.png", - "mcl_observers_observer_front.png", "mcl_observers_observer_back_lit.png", - }, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = get_rules_flat, - } - }, - - -- VERY quickly disable observer after construction - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(mcl_vars.redstone_tick) - end, - on_timer = function(pos, elapsed) - local node = get_node(pos) - minetest.set_node(pos, {name = "mcl_observers:observer_off", param2 = node.param2}) - mesecon.receptor_off(pos, get_rules_flat(node)) - end, - } -) - -mesecon.register_node("mcl_observers:observer_down", { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - groups = {pickaxey=1, material_stone=1, not_opaque=1, not_in_creative_inventory=1 }, - on_rotate = false, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - drop = "mcl_observers:observer_off", - }, { - tiles = { - "mcl_observers_observer_back.png", "mcl_observers_observer_front.png", - "mcl_observers_observer_side.png^[transformR90", "mcl_observers_observer_side.png^[transformR90", - "mcl_observers_observer_top.png", "mcl_observers_observer_top.png", - }, - mesecons = { - receptor = { - state = mesecon.state.off, - rules = rules_down, - }, - }, - on_construct = function(pos) - if not realtime then - observer_scan(pos, true) - end - end, - }, { - _doc_items_create_entry = false, - tiles = { - "mcl_observers_observer_back_lit.png", "mcl_observers_observer_front.png", - "mcl_observers_observer_side.png^[transformR90", "mcl_observers_observer_side.png^[transformR90", - "mcl_observers_observer_top.png", "mcl_observers_observer_top.png", - }, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = rules_down, - }, - }, - - -- VERY quickly disable observer after construction - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(mcl_vars.redstone_tick) - end, - on_timer = function(pos, elapsed) - local node = get_node(pos) - minetest.set_node(pos, {name = "mcl_observers:observer_down_off", param2 = node.param2}) - mesecon.receptor_off(pos, rules_down) - end, - } -) - -mesecon.register_node("mcl_observers:observer_up", { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - groups = {pickaxey=1, material_stone=1, not_opaque=1, not_in_creative_inventory=1 }, - on_rotate = false, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - drop = "mcl_observers:observer_off", - }, { - tiles = { - "mcl_observers_observer_front.png", "mcl_observers_observer_back.png", - "mcl_observers_observer_side.png^[transformR270", "mcl_observers_observer_side.png^[transformR270", - "mcl_observers_observer_top.png^[transformR180", "mcl_observers_observer_top.png^[transformR180", - }, - mesecons = { - receptor = { - state = mesecon.state.off, - rules = rules_up, - }, - }, - on_construct = function(pos) - if not realtime then - observer_scan(pos, true) - end - end, - }, { - _doc_items_create_entry = false, - tiles = { - "mcl_observers_observer_front.png", "mcl_observers_observer_back_lit.png", - "mcl_observers_observer_side.png^[transformR270", "mcl_observers_observer_side.png^[transformR270", - "mcl_observers_observer_top.png^[transformR180", "mcl_observers_observer_top.png^[transformR180", - }, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = rules_up, - }, - }, - - -- VERY quickly disable observer after construction - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(mcl_vars.redstone_tick) - end, - on_timer = function(pos, elapsed) - minetest.set_node(pos, {name = "mcl_observers:observer_up_off"}) - mesecon.receptor_off(pos, rules_up) - end, - } -) - -minetest.register_craft({ - output = "mcl_observers:observer_off", - recipe = { - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - { "mcl_nether:quartz", "mesecons:redstone", "mesecons:redstone" }, - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - }, -}) -minetest.register_craft({ - output = "mcl_observers:observer_off", - recipe = { - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - { "mesecons:redstone", "mesecons:redstone", "mcl_nether:quartz" }, - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - }, -}) - -if realtime then - -- Override basic functions for observing: - mcl_observers.add_node = minetest.add_node - mcl_observers.set_node = minetest.set_node - mcl_observers.swap_node = minetest.swap_node - mcl_observers.remove_node = minetest.remove_node - mcl_observers.bulk_set_node = minetest.bulk_set_node - - function minetest.add_node(pos,node) - mcl_observers.add_node(pos,node) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.set_node(pos,node) - mcl_observers.set_node(pos,node) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.swap_node(pos,node) - mcl_observers.swap_node(pos,node) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.remove_node(pos) - mcl_observers.remove_node(pos) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.bulk_set_node(lst, node) - mcl_observers.bulk_set_node(lst, node) - for _, pos in pairs(lst) do - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - end - -else -- if realtime then ^^^ else: - minetest.register_abm({ - label = "Observer node check", - nodenames = {"mcl_observers:observer_off", "mcl_observers:observer_down_off", "mcl_observers:observer_up_off"}, - interval = 1, - chance = 1, - action = function(pos, node) - observer_scan(pos) - end, - }) -end ---[[ - With the following code the observer will detect loading of areas where it is placed. - We need to restore signal generated by it before the area was unloaded. - - Observer movement and atomic clock (one observer watches another) fails without this often. - - But it WILL cause wrong single signal for all other cases, and I hope it's nothing. - After all, why it can't detect the loading of areas, if we haven't a better solution... -]] -minetest.register_lbm({ - name = "mcl_observers:activate_lbm", - nodenames = { - "mcl_observers:observer_off", - "mcl_observers:observer_down_off", - "mcl_observers:observer_up_off", - "mcl_observers:observer_on", - "mcl_observers:observer_down_on", - "mcl_observers:observer_up_on", - }, - run_at_every_load = true, - action = function(pos) - minetest.after(1, mcl_observers.observer_activate, {x=pos.x, y=pos.y, z=pos.z}) - end, -}) diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.de.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.de.tr deleted file mode 100644 index 3ce085ad7..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer=Wächter -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Ein Wächter ist eine Redstonekomponente, die den Block vor ihm beobachtet und einen sehr kurzen Redstoneimpuls sendet, wenn sich dieser Block ändert. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Platzieren Sie den Wächter direkt vor dem Block, den Sie beobachten wollen, so dass das „Gesicht“ zum Block schaut. Der Pfeil zeigt auf die Seite des Signalausgangs, der sich gegenüber vom „Gesicht“ befindet. Hier können Sie Ihren Restonestaub oder eine beliebige andere Komponente platzieren. -Emits redstone pulse when block in front changes=Macht einen Redstonepuls, wenn der Block vor ihm sich ändert diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.es.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.es.tr deleted file mode 100644 index 146b72b81..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_observers -Observer=Observador -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Un observador es un componente de redstone que observa el bloque frente a él y envía un pulso muy corto de redstone cada vez que este bloque cambia. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Coloque el observador directamente en frente del bloque que desea observar con la "cara" mirando el bloque. La flecha apunta al lado de la salida, que está en el lado opuesto de la "cara". Puede colocar su polvo de redstone o cualquier otro componente aquí. diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.fr.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.fr.tr deleted file mode 100644 index 3295335a2..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer=Observateur -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Un observateur est un composant de redstone qui observe le bloc en face de lui et envoie une impulsion de redstone très courte chaque fois que ce bloc change. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Placez l'observateur directement devant le bloc que vous souhaitez observer avec le "visage" regardant le bloc. La flèche pointe vers le côté de la sortie, qui est du côté opposé du "visage". Vous pouvez placer votre poussière de redstone ou tout autre composant ici. -Emits redstone pulse when block in front changes=Émet une impulsion de redstone lorsque le bloc à l'avant change diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.pl.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.pl.tr deleted file mode 100644 index 9c789be00..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.pl.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_observers -Observer=Detektor -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Detektor jest mechanizmem czerwienitowym, który obserwuje blok przed sobą i wysyła krótki puls energii czerwienitowej gdy blok ten się zmienia. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Postaw detektor przed blokiem, który chcesz obserwować z "twarzą" wskazującą na ten blok. Strzałka wskazuje na stronę z wyjściem, która jest po przeciwnej stronie do "twarzy". Możesz postawić tutaj czerwienit lub dowolny inny komponent. -Emits redstone pulse when block in front changes=Wysyła sygnał czerwienitowy gdy blok przed nim się zmienia - diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.ru.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.ru.tr deleted file mode 100644 index ac8c658c3..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer=Наблюдатель -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Наблюдатель это элемент редстоуна, который следит за блоком перед собой и посылает короткий импульс редстоуна, если этот блок меняется. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Поместите наблюдателя прямо перед блоком, за которым хотите наблюдать, так, чтобы “лицо” смотрело на этот блок. Стрелка показывает выходную сторону, находящуюся на противоположной стороне от “лица”. Вы можете разместить там пыль редстоуна или любой другой компонент. -Emits redstone pulse when block in front changes=Генерирует импульс редстоуна при смене блока, находящегося перед ним diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_observers/locale/template.txt deleted file mode 100644 index 7f5991501..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer= -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.= -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.= -Emits redstone pulse when block in front changes= diff --git a/mods/ITEMS/REDSTONE/mcl_observers/mod.conf b/mods/ITEMS/REDSTONE/mcl_observers/mod.conf deleted file mode 100644 index fce00191a..000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_observers -depends = mesecons, mcl_util diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back.png deleted file mode 100644 index 5ecef7dad..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back_lit.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back_lit.png deleted file mode 100644 index da70498f7..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back_lit.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_front.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_front.png deleted file mode 100644 index 115f5cacd..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_front.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_side.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_side.png deleted file mode 100644 index 84cd4065d..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_side.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_top.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_top.png deleted file mode 100644 index 73dab21be..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_top.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_target/init.lua b/mods/ITEMS/REDSTONE/mcl_target/init.lua deleted file mode 100644 index 268c6ebe3..000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/init.lua +++ /dev/null @@ -1,70 +0,0 @@ -local S = minetest.get_translator("mcl_target") - -local mod_farming = minetest.get_modpath("mcl_farming") - -mcl_target = {} - -function mcl_target.hit(pos, time) - minetest.set_node(pos, {name="mcl_target:target_on"}) - mesecon.receptor_on(pos, mesecon.rules.alldirs) - - local timer = minetest.get_node_timer(pos) - timer:start(time) -end - -minetest.register_node("mcl_target:target_off", { - description = S("Target"), - _doc_items_longdesc = S("A target is a block that provides a temporary redstone charge when hit by a projectile."), - _doc_items_usagehelp = S("Throw a projectile on the target to activate it."), - tiles = {"mcl_target_target_top.png", "mcl_target_target_top.png", "mcl_target_target_side.png"}, - groups = {hoey = 1}, - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.1}, - }), - mesecons = { - receptor = { - state = mesecon.state.off, - rules = mesecon.rules.alldirs, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_node("mcl_target:target_on", { - description = S("Target"), - _doc_items_create_entry = false, - tiles = {"mcl_target_target_top.png", "mcl_target_target_top.png", "mcl_target_target_side.png"}, - groups = {hoey = 1, not_in_creative_inventory = 1}, - drop = "mcl_target:target_off", - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.1}, - }), - on_timer = function(pos, elapsed) - local node = minetest.get_node(pos) - if node.name == "mcl_target:target_on" then --has not been dug - minetest.set_node(pos, {name="mcl_target:target_off"}) - mesecon.receptor_off(pos, mesecon.rules.alldirs) - end - end, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = mesecon.rules.alldirs, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - - -if mod_farming then - minetest.register_craft({ - output = "mcl_target:target_off", - recipe = { - {"", "mesecons:redstone", ""}, - {"mesecons:redstone", "mcl_farming:hay_block", "mesecons:redstone"}, - {"", "mesecons:redstone", ""}, - }, - }) -end \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/locale/mcl_target.fr.tr b/mods/ITEMS/REDSTONE/mcl_target/locale/mcl_target.fr.tr deleted file mode 100644 index 6c558683d..000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/locale/mcl_target.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_target -Target=Cible -A target is a block that provides a temporary redstone charge when hit by a projectile.=La cible est un bloc qui se comporte comme une source d'énergie temporaire quand elle est frappée par un projectile. -Throw a projectile on the target to activate it.=Lancer un projectile sur la cible pour l'activer. \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_target/locale/template.txt deleted file mode 100644 index 18bc7708c..000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_target -Target= -A target is a block that provides a temporary redstone charge when hit by a projectile.= -Throw a projectile on the target to activate it.= \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/mod.conf b/mods/ITEMS/REDSTONE/mcl_target/mod.conf deleted file mode 100644 index 16f70ed12..000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_target -author = AFCMS -depends = mesecons, mcl_sounds \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_side.png b/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_side.png deleted file mode 100755 index 286f7767e..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_side.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_top.png b/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_top.png deleted file mode 100755 index b55ef3ec8..000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_top.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons/actionqueue.lua b/mods/ITEMS/REDSTONE/mesecons/actionqueue.lua deleted file mode 100644 index 489a81b4a..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/actionqueue.lua +++ /dev/null @@ -1,107 +0,0 @@ -local table = table - -mesecon.queue.actions={} -- contains all ActionQueue actions - -function mesecon.queue:add_function(name, func) - mesecon.queue.funcs[name] = func -end - --- If add_action with twice the same overwritecheck and same position are called, the first one is overwritten --- use overwritecheck nil to never overwrite, but just add the event to the queue --- priority specifies the order actions are executed within one globalstep, highest first --- should be between 0 and 1 -function mesecon.queue:add_action(pos, func, params, time, overwritecheck, priority) - -- Create Action Table: - time = time or 0 -- time <= 0 --> execute, time > 0 --> wait time until execution - priority = priority or 1 - local action = { pos=mesecon.tablecopy(pos), - func=func, - params=mesecon.tablecopy(params or {}), - time=time, - owcheck=(overwritecheck and mesecon.tablecopy(overwritecheck)) or nil, - priority=priority} - - local toremove = nil - -- Otherwise, add the action to the queue - if overwritecheck then -- check if old action has to be overwritten / removed: - for i, ac in pairs(mesecon.queue.actions) do - if(vector.equals(pos, ac.pos) - and mesecon.cmpAny(overwritecheck, ac.owcheck)) then - toremove = i - break - end - end - end - - if toremove then - table.remove(mesecon.queue.actions, toremove) - end - - table.insert(mesecon.queue.actions, action) -end - --- execute the stored functions on a globalstep --- if however, the pos of a function is not loaded (get_node_or_nil == nil), do NOT execute the function --- this makes sure that resuming mesecons circuits when restarting minetest works fine --- However, even that does not work in some cases, that's why we delay the time the globalsteps --- start to be execute by 5 seconds -local function get_highest_priority(actions) - local highestp = -1 - local highesti - for i, ac in ipairs(actions) do - if ac.priority > highestp then - highestp = ac.priority - highesti = i - end - end - - return highesti -end - -local m_time = 0 -local resumetime = mesecon.setting("resumetime", 4) -minetest.register_globalstep(function (dtime) - m_time = m_time + dtime - -- don't even try if server has not been running for XY seconds; resumetime = time to wait - -- after starting the server before processing the ActionQueue, don't set this too low - if (m_time < resumetime) then return end - local actions = mesecon.tablecopy(mesecon.queue.actions) - local actions_now={} - - mesecon.queue.actions = {} - - -- sort actions into two categories: - -- those toexecute now (actions_now) and those to execute later (mesecon.queue.actions) - for i, ac in ipairs(actions) do - if ac.time > 0 then - ac.time = ac.time - dtime -- executed later - table.insert(mesecon.queue.actions, ac) - else - table.insert(actions_now, ac) - end - end - - while(#actions_now > 0) do -- execute highest priorities first, until all are executed - local hp = get_highest_priority(actions_now) - mesecon.queue:execute(actions_now[hp]) - table.remove(actions_now, hp) - end -end) - -function mesecon.queue:execute(action) - -- ignore if action queue function name doesn't exist, - -- (e.g. in case the action queue savegame was written by an old mesecons version) - if mesecon.queue.funcs[action.func] then - mesecon.queue.funcs[action.func](action.pos, unpack(action.params)) - end -end - - --- Store and read the ActionQueue to / from a file --- so that upcoming actions are remembered when the game --- is restarted -mesecon.queue.actions = mesecon.file2table("mesecon_actionqueue") - -minetest.register_on_shutdown(function() - mesecon.table2file("mesecon_actionqueue", mesecon.queue.actions) -end) diff --git a/mods/ITEMS/REDSTONE/mesecons/init.lua b/mods/ITEMS/REDSTONE/mesecons/init.lua deleted file mode 100644 index 18965287e..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/init.lua +++ /dev/null @@ -1,121 +0,0 @@ --- |\ /| ____ ____ ____ _____ ____ _____ --- | \ / | | | | | | | |\ | | --- | \/ | |___ ____ |___ | | | | \ | |____ --- | | | | | | | | | \ | | --- | | |___ ____| |___ |____ |____| | \| ____| --- by Jeija, Uberi (Temperest), sfan5, VanessaE, Hawk777 and contributors --- --- --- --- This mod adds mesecons[=minecraft redstone] and different receptors/effectors to minetest. --- See the documentation on the forum for additional information, especially about crafting --- --- --- For basic development resources, see http://mesecons.net/developers.html --- --- --- ---Quick draft for the mesecons array in the node's definition ---mesecons = ---{ --- receptor = --- { --- state = mesecon.state.on/off --- rules = rules/get_rules --- }, --- effector = --- { --- action_on = function --- action_off = function --- action_change = function --- rules = rules/get_rules --- }, --- conductor = --- { --- state = mesecon.state.on/off --- offstate = opposite state (for state = on only) --- onstate = opposite state (for state = off only) --- rules = rules/get_rules --- } ---} - --- PUBLIC VARIABLES -mesecon={} -- contains all functions and all global variables -mesecon.queue={} -- contains the ActionQueue -mesecon.queue.funcs={} -- contains all ActionQueue functions - --- Settings -dofile(minetest.get_modpath("mesecons").."/settings.lua") - --- Utilities like comparing positions, --- adding positions and rules, --- mostly things that make the source look cleaner -dofile(minetest.get_modpath("mesecons").."/util.lua"); - --- Presets (eg default rules) -dofile(minetest.get_modpath("mesecons").."/presets.lua"); - --- The ActionQueue --- Saves all the actions that have to be execute in the future -dofile(minetest.get_modpath("mesecons").."/actionqueue.lua"); - --- Internal stuff --- This is the most important file --- it handles signal transmission and basically everything else --- It is also responsible for managing the nodedef things, --- like calling action_on/off/change -dofile(minetest.get_modpath("mesecons").."/internal.lua"); - --- API --- these are the only functions you need to remember - -mesecon.queue:add_function("receptor_on", function (pos, rules) - mesecon.vm_begin() - - rules = rules or mesecon.rules.default - - -- Call turnon on all linking positions - for _, rule in pairs(mesecon.flattenrules(rules)) do - local np = vector.add(pos, rule) - local rulenames = mesecon.rules_link_rule_all(pos, rule) - for _, rulename in pairs(rulenames) do - mesecon.turnon(np, rulename) - end - end - - mesecon.vm_commit() -end) - -function mesecon.receptor_on(pos, rules) - mesecon.queue:add_action(pos, "receptor_on", {rules}, nil, rules) -end - -mesecon.queue:add_function("receptor_off", function (pos, rules) - rules = rules or mesecon.rules.default - - -- Call turnoff on all linking positions - for _, rule in ipairs(mesecon.flattenrules(rules)) do - local np = vector.add(pos, rule) - local rulenames = mesecon.rules_link_rule_all(pos, rule) - for _, rulename in ipairs(rulenames) do - mesecon.vm_begin() - mesecon.changesignal(np, minetest.get_node(np), rulename, mesecon.state.off, 2) - - -- Turnoff returns true if turnoff process was successful, no onstate receptor - -- was found along the way. Commit changes that were made in voxelmanip. If turnoff - -- returns true, an onstate receptor was found, abort voxelmanip transaction. - if (mesecon.turnoff(np, rulename)) then - mesecon.vm_commit() - else - mesecon.vm_abort() - end - end - end -end) - -function mesecon.receptor_off(pos, rules) - mesecon.queue:add_action(pos, "receptor_off", {rules}, nil, rules) -end - ---Services like turnoff receptor on dignode and so on -dofile(minetest.get_modpath("mesecons").."/services.lua"); diff --git a/mods/ITEMS/REDSTONE/mesecons/internal.lua b/mods/ITEMS/REDSTONE/mesecons/internal.lua deleted file mode 100644 index dbe3ebe12..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/internal.lua +++ /dev/null @@ -1,641 +0,0 @@ --- Internal.lua - The core of mesecons --- --- For more practical developer resources see http://mesecons.net/developers.php --- --- Function overview --- mesecon.get_effector(nodename) --> Returns the mesecons.effector -specifictation in the nodedef by the nodename --- mesecon.get_receptor(nodename) --> Returns the mesecons.receptor -specifictation in the nodedef by the nodename --- mesecon.get_conductor(nodename) --> Returns the mesecons.conductor-specifictation in the nodedef by the nodename --- mesecon.get_any_inputrules (node) --> Returns the rules of a node if it is a conductor or an effector --- mesecon.get_any_outputrules (node) --> Returns the rules of a node if it is a conductor or a receptor - --- RECEPTORS --- mesecon.is_receptor(nodename) --> Returns true if nodename is a receptor --- mesecon.is_receptor_on(nodename --> Returns true if nodename is an receptor with state = mesecon.state.on --- mesecon.is_receptor_off(nodename) --> Returns true if nodename is an receptor with state = mesecon.state.off --- mesecon.receptor_get_rules(node) --> Returns the rules of the receptor (mesecon.rules.default if none specified) - --- EFFECTORS --- mesecon.is_effector(nodename) --> Returns true if nodename is an effector --- mesecon.is_effector_on(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_off --- mesecon.is_effector_off(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_on --- mesecon.effector_get_rules(node) --> Returns the input rules of the effector (mesecon.rules.default if none specified) - --- SIGNALS --- mesecon.activate(pos, node, depth) --> Activates the effector node at the specific pos (calls nodedef.mesecons.effector.action_on), higher depths are executed later --- mesecon.deactivate(pos, node, depth) --> Deactivates the effector node at the specific pos (calls nodedef.mesecons.effector.action_off), higher depths are executed later --- mesecon.changesignal(pos, node, rulename, newstate, depth) --> Changes the effector node at the specific pos (calls nodedef.mesecons.effector.action_change), higher depths are executed later - --- CONDUCTORS --- mesecon.is_conductor(nodename) --> Returns true if nodename is a conductor --- mesecon.is_conductor_on(node --> Returns true if node is a conductor with state = mesecon.state.on --- mesecon.is_conductor_off(node) --> Returns true if node is a conductor with state = mesecon.state.off --- mesecon.get_conductor_on(node_off) --> Returns the onstate nodename of the conductor --- mesecon.get_conductor_off(node_on) --> Returns the offstate nodename of the conductor --- mesecon.conductor_get_rules(node) --> Returns the input+output rules of a conductor (mesecon.rules.default if none specified) - --- HIGH-LEVEL Internals --- mesecon.is_power_on(pos) --> Returns true if pos emits power in any way --- mesecon.is_power_off(pos) --> Returns true if pos does not emit power in any way --- mesecon.is_powered(pos) --> Returns bool, spread. bool is true if pos is powered by a receptor, a conductor or an opaque block. - -- spread is true if it is powered AND also transmits its power one block further. - --- RULES ROTATION helpers --- mesecon.rotate_rules_right(rules) --- mesecon.rotate_rules_left(rules) --- mesecon.rotate_rules_up(rules) --- mesecon.rotate_rules_down(rules) --- These functions return rules that have been rotated in the specific direction - -local equals = vector.equals -local get_node_force = mesecon.get_node_force -local invertRule = mesecon.invertRule -local copy, insert = table.copy, table.insert -local registered_nodes = minetest.registered_nodes - --- General -function mesecon.get_effector(nodename) - if registered_nodes[nodename] - and registered_nodes[nodename].mesecons - and registered_nodes[nodename].mesecons.effector then - return registered_nodes[nodename].mesecons.effector - end -end - -function mesecon.get_receptor(nodename) - if registered_nodes[nodename] - and registered_nodes[nodename].mesecons - and registered_nodes[nodename].mesecons.receptor then - return registered_nodes[nodename].mesecons.receptor - end -end - -function mesecon.get_conductor(nodename) - if registered_nodes[nodename] - and registered_nodes[nodename].mesecons - and registered_nodes[nodename].mesecons.conductor then - return registered_nodes[nodename].mesecons.conductor - end -end - -function mesecon.get_any_outputrules(node) - if not node then return nil end - - if mesecon.is_conductor(node.name) then - return mesecon.conductor_get_rules(node) - elseif mesecon.is_receptor(node.name) then - return mesecon.receptor_get_rules(node) - elseif minetest.get_item_group(node.name, "opaque") == 1 then - return mesecon.rules.alldirs - end -end - -function mesecon.get_any_inputrules(node) - if not node then return nil end - - if mesecon.is_conductor(node.name) then - return mesecon.conductor_get_rules(node) - elseif mesecon.is_effector(node.name) then - return mesecon.effector_get_rules(node) - elseif minetest.get_item_group(node.name, "opaque") == 1 then - return mesecon.rules.alldirs - end -end - -function mesecon.get_any_rules(node) - return mesecon.mergetable(mesecon.get_any_inputrules(node) or {}, - mesecon.get_any_outputrules(node) or {}) -end - --- Receptors --- Nodes that can power mesecons -local function is_receptor_on(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor and receptor.state == mesecon.state.on then - return true - end - return false -end -mesecon.is_receptor_on = is_receptor_on - -function mesecon.is_receptor_off(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor and receptor.state == mesecon.state.off then - return true - end - return false -end - -function mesecon.is_receptor(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor then - return true - end - return false -end - -local function receptor_get_rules(node) - local receptor = mesecon.get_receptor(node.name) - if receptor then - local rules = receptor.rules - if type(rules) == "function" then - return rules(node) - elseif rules then - return rules - end - end - - return mesecon.rules.default -end -mesecon.receptor_get_rules = receptor_get_rules - --- Effectors --- Nodes that can be powered by mesecons -function mesecon.is_effector_on(nodename) - local effector = mesecon.get_effector(nodename) - if effector and effector.action_off then - return true - end - return false -end - -function mesecon.is_effector_off(nodename) - local effector = mesecon.get_effector(nodename) - if effector and effector.action_on then - return true - end - return false -end - -function mesecon.is_effector(nodename) - local effector = mesecon.get_effector(nodename) - if effector then - return true - end - return false -end - -function mesecon.effector_get_rules(node) - local effector = mesecon.get_effector(node.name) - if effector then - local rules = effector.rules - if type(rules) == "function" then - return rules(node) - elseif rules then - return rules - end - end - return mesecon.rules.default -end - --- ####################### --- # Signals (effectors) # --- ####################### - --- Activation: -mesecon.queue:add_function("activate", function (pos, rulename) - local node = get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_on then - effector.action_on(pos, node, rulename) - end -end) - -function mesecon.activate(pos, node, rulename, depth) - if rulename == nil then - for _,rule in pairs(mesecon.effector_get_rules(node)) do - mesecon.activate(pos, node, rule, depth + 1) - end - return - end - mesecon.queue:add_action(pos, "activate", {rulename}, nil, rulename, 1 / depth) -end - - --- Deactivation -mesecon.queue:add_function("deactivate", function (pos, rulename) - local node = get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_off then - effector.action_off(pos, node, rulename) - end -end) - -function mesecon.deactivate(pos, node, rulename, depth) - if rulename == nil then - for _,rule in pairs(mesecon.effector_get_rules(node)) do - mesecon.deactivate(pos, node, rule, depth + 1) - end - return - end - mesecon.queue:add_action(pos, "deactivate", {rulename}, nil, rulename, 1 / depth) -end - - --- Change -mesecon.queue:add_function("change", function (pos, rulename, changetype) - local node = get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_change then - effector.action_change(pos, node, rulename, changetype) - end -end) - -function mesecon.changesignal(pos, node, rulename, newstate, depth) - if rulename == nil then - for _,rule in pairs(mesecon.effector_get_rules(node)) do - mesecon.changesignal(pos, node, rule, newstate, depth + 1) - end - return - end - - -- Include "change" in overwritecheck so that it cannot be overwritten - -- by "active" / "deactivate" that will be called upon the node at the same time. - local overwritecheck = {"change", rulename} - mesecon.queue:add_action(pos, "change", {rulename, newstate}, nil, overwritecheck, 1 / depth) -end - --- Conductors - -function mesecon.is_conductor_on(node, rulename) - if not node then return false end - - local conductor = mesecon.get_conductor(node.name) - if conductor then - if conductor.state then - return conductor.state == mesecon.state.on - end - if conductor.states then - if not rulename then - return mesecon.getstate(node.name, conductor.states) ~= 1 - end - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) - local binstate = mesecon.getbinstate(node.name, conductor.states) - return mesecon.get_bit(binstate, bit) - end - end - - return false -end - -function mesecon.is_conductor_off(node, rulename) - if not node then return false end - - local conductor = mesecon.get_conductor(node.name) - if conductor then - if conductor.state then - return conductor.state == mesecon.state.off - end - if conductor.states then - if not rulename then - return mesecon.getstate(node.name, conductor.states) == 1 - end - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) - local binstate = mesecon.getbinstate(node.name, conductor.states) - return not mesecon.get_bit(binstate, bit) - end - end - - return false -end - -function mesecon.is_conductor(nodename) - local conductor = mesecon.get_conductor(nodename) - if conductor then - return true - end - return false -end - -function mesecon.get_conductor_on(node_off, rulename) - local conductor = mesecon.get_conductor(node_off.name) - if conductor then - if conductor.onstate then - return conductor.onstate - end - if conductor.states then - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_off)) - local binstate = mesecon.getbinstate(node_off.name, conductor.states) - binstate = mesecon.set_bit(binstate, bit, "1") - return conductor.states[tonumber(binstate,2)+1] - end - end - return conductor.offstate -end - -function mesecon.get_conductor_off(node_on, rulename) - local conductor = mesecon.get_conductor(node_on.name) - if conductor then - if conductor.offstate then - return conductor.offstate - end - if conductor.states then - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_on)) - local binstate = mesecon.getbinstate(node_on.name, conductor.states) - binstate = mesecon.set_bit(binstate, bit, "0") - return conductor.states[tonumber(binstate,2)+1] - end - end - return conductor.onstate -end - -function mesecon.conductor_get_rules(node) - local conductor = mesecon.get_conductor(node.name) - if conductor then - local rules = conductor.rules - if type(rules) == "function" then - return rules(node) - elseif rules then - return rules - end - end - return mesecon.rules.default -end - --- some more general high-level stuff - -function mesecon.is_power_on(pos, rulename) - local node = get_node_force(pos) - if node and (mesecon.is_conductor_on(node, rulename) or is_receptor_on(node.name)) then - return true - end - return false -end - -function mesecon.is_power_off(pos, rulename) - local node = get_node_force(pos) - if node and (mesecon.is_conductor_off(node, rulename) or mesecon.is_receptor_off(node.name)) then - return true - end - return false -end - --- Turn off an equipotential section starting at `pos`, which outputs in the direction of `link`. --- Breadth-first search. Map is abstracted away in a voxelmanip. --- Follow all all conductor paths replacing conductors that were already --- looked at, activating / changing all effectors along the way. -function mesecon.turnon(pos, link) - local frontiers = {{pos = pos, link = link}} - - local depth = 1 - while frontiers[1] do - local f = table.remove(frontiers, 1) - local node = get_node_force(f.pos) - - if node and mesecon.is_conductor_off(node, f.link) then - local rules = mesecon.conductor_get_rules(node) - - -- Call turnon on neighbors - for _, r in pairs(mesecon.rule2meta(f.link, rules)) do - local np = vector.add(f.pos, r) - for _, l in pairs(mesecon.rules_link_rule_all(f.pos, r)) do - insert(frontiers, {pos = np, link = l}) - end - end - - mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link)) - elseif mesecon.is_effector(node.name) then - mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth) - if mesecon.is_effector_off(node.name) then - mesecon.activate(f.pos, node, f.link, depth) - end - end - if node and f.link.spread and minetest.get_item_group(node.name, "opaque") == 1 then - -- Call turnon on neighbors - -- Warning: A LOT of nodes need to be looked at for this to work - for _, r in pairs(mesecon.rule2meta(f.link, mesecon.rules.mcl_alldirs_spread)) do - local np = vector.add(f.pos, r) - for _, l in pairs(mesecon.rules_link_rule_all(f.pos, r)) do - local nlink = copy(l) - nlink.spread = false - insert(frontiers, {pos = np, link = nlink}) - end - end - end - - depth = depth + 1 - end -end - --- Turn off an equipotential section starting at `pos`, which outputs in the direction of `link`. --- Breadth-first search. Map is abstracted away in a voxelmanip. --- Follow all all conductor paths replacing conductors that were already --- looked at, deactivating / changing all effectors along the way. --- In case an onstate receptor is discovered, abort the process by returning false, which will --- cause `receptor_off` to discard all changes made in the voxelmanip. --- Contrary to turnon, turnoff has to cache all change and deactivate signals so that they will only --- be called in the very end when we can be sure that no conductor was found along the path. --- --- Signal table entry structure: --- { --- pos = position of effector, --- node = node descriptor (name, param1 and param2), --- link = link the effector is connected to, --- depth = indicates order in which signals wire fired, higher is later --- } -function mesecon.turnoff(pos, link) - local frontiers = {{pos = pos, link = link}} - local signals = {} - - local depth = 1 - while frontiers[1] do - local f = table.remove(frontiers, 1) - local node = get_node_force(f.pos) - - if node and mesecon.is_conductor_on(node, f.link) then - local rules = mesecon.conductor_get_rules(node) - for _, r in pairs(mesecon.rule2meta(f.link, rules)) do - local np = vector.add(f.pos, r) - - -- Check if an onstate receptor is connected. If that is the case, - -- abort this turnoff process by returning false. `receptor_off` will - -- discard all the changes that we made in the voxelmanip: - for _, l in pairs(mesecon.rules_link_rule_all_inverted(f.pos, r)) do - if is_receptor_on(get_node_force(np).name) then - return false - end - end - - -- Call turnoff on neighbors - for _, l in pairs(mesecon.rules_link_rule_all(f.pos, r)) do - insert(frontiers, {pos = np, link = l}) - end - end - - mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link)) - elseif mesecon.is_effector(node.name) then - insert(signals, { - pos = f.pos, - node = node, - link = f.link, - depth = depth - }) - end - - if node and f.link.spread and minetest.get_item_group(node.name, "opaque") == 1 then - -- Call turnoff on neighbors - -- Warning: A LOT of nodes need to be looked at for this to work - local fpos = f.pos - for _, r in pairs(mesecon.rule2meta(f.link, mesecon.rules.mcl_alldirs_spread)) do - local np = {x=fpos.x+r.x, y=fpos.y+r.y, z=fpos.z+r.z} - local n = get_node_force(np) - if n and is_receptor_on(n.name) then - local receptorrules = receptor_get_rules(n) - for _, rr in pairs(receptorrules) do - if rr.spread and equals(invertRule(rr), r) then - return false - end - end - end - for _, l in pairs(mesecon.rules_link_rule_all(fpos, r)) do - local nlink = copy(l) - nlink.spread = false - insert(frontiers, {pos = np, link = nlink}) - end - end - end - - depth = depth + 1 - end - - for _, sig in pairs(signals) do - mesecon.changesignal(sig.pos, sig.node, sig.link, mesecon.state.off, sig.depth) - if mesecon.is_effector_on(sig.node.name) and not mesecon.is_powered(sig.pos) then - mesecon.deactivate(sig.pos, sig.node, sig.link, sig.depth) - end - end - - return true -end - --- Get all linking inputrules of inputnode (effector or conductor) that is connected to --- outputnode (receptor or conductor) at position `output` and has an output in direction `rule` -function mesecon.rules_link_rule_all(output, rule) - local input = vector.add(output, rule) - local inputnode = get_node_force(input) - local inputrules = mesecon.get_any_inputrules(inputnode) - if not inputrules then - return {} - end - local rules = {} - - for _, inputrule in pairs(mesecon.flattenrules(inputrules)) do - -- Check if input accepts from output - if equals(vector.add(input, inputrule), output) then - local newrule = copy(inputrule) - newrule.spread = rule.spread - insert(rules, newrule) - end - end - - return rules -end - --- Get all linking outputnodes of outputnode (receptor or conductor) that is connected to --- inputnode (effector or conductor) at position `input` and has an input in direction `rule` -function mesecon.rules_link_rule_all_inverted(input, rule) - local output = vector.add(input, rule) - local outputnode = get_node_force(output) - local outputrules = mesecon.get_any_outputrules(outputnode) - if not outputrules then - return {} - end - local rules = {} - - for _, outputrule in pairs(mesecon.flattenrules(outputrules)) do - if equals(vector.add(output, outputrule), input) then - local newrule = copy(outputrule) - newrule = invertRule(newrule) - newrule.spread = rule.spread - insert(rules, newrule) - end - end - return rules -end - -function mesecon.is_powered(pos, rule, depth, sourcepos, home_pos) - if depth == nil then depth = 0 end - if depth > 1 then - return false, false - end - local node = get_node_force(pos) - local rules = mesecon.get_any_inputrules(node) - if not rules then - return false, false - end - if not home_pos then - home_pos = pos - end - - -- List of nodes that send out power to pos - if sourcepos == nil then - sourcepos = {} - end - - local function power_walk(pos, home_pos, sourcepos, rulenames, rule, depth) - local spread = false - for _, rname in pairs(rulenames) do - local np = vector.add(pos, rname) - local nn = get_node_force(np) - if (mesecon.is_conductor_on (nn, invertRule(rname)) - or is_receptor_on (nn.name)) then - if not equals(home_pos, np) then - local rulez = mesecon.get_any_outputrules(nn) - local spread_tmp = false - for r=1, #rulez do - if equals(invertRule(rname), rulez[r]) then - if rulez[r].spread then - spread_tmp = true - end - end - end - if depth == 0 or spread_tmp then - insert(sourcepos, np) - if spread_tmp then - spread = true - end - end - end - elseif depth == 0 and minetest.get_item_group(nn.name, "opaque") == 1 then - local more_sourcepos = mesecon.is_powered(np, nil, depth + 1, sourcepos, home_pos) - if more_sourcepos and #more_sourcepos > 0 then - mesecon.mergetable(sourcepos, more_sourcepos) - end - end - end - return sourcepos, spread - end - - local spread = false - if not rule then - for _, rule in pairs(mesecon.flattenrules(rules)) do - local spread_temp - local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) - sourcepos, spread_temp = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth) - if spread_temp then - spread = true - end - end - else - local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) - sourcepos, spread = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth) - end - - -- Return FALSE if not powered, return list of sources if is powered - - if (#sourcepos == 0) then - return false, false - else - return sourcepos, spread - end -end - diff --git a/mods/ITEMS/REDSTONE/mesecons/mod.conf b/mods/ITEMS/REDSTONE/mesecons/mod.conf deleted file mode 100644 index 94be76509..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons -depends = mcl_sounds, mcl_core -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons/presets.lua b/mods/ITEMS/REDSTONE/mesecons/presets.lua deleted file mode 100644 index d9d8418d8..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/presets.lua +++ /dev/null @@ -1,110 +0,0 @@ -mesecon.rules = {} -mesecon.state = {} - -mesecon.rules.default = -{{x=0, y=0, z=-1}, - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=0, y=1, z=0}, - {x=0, y=-1, z=0}, - - {x=1, y=1, z=0}, - {x=1, y=-1, z=0}, - {x=-1, y=1, z=0}, - {x=-1, y=-1, z=0}, - {x=0, y=1, z=1}, - {x=0, y=-1, z=1}, - {x=0, y=1, z=-1}, - {x=0, y=-1, z=-1}} - -mesecon.rules.alldirs = -{{x= 1, y= 0, z= 0}, - {x=-1, y= 0, z= 0}, - {x= 0, y= 1, z= 0}, - {x= 0, y=-1, z= 0}, - {x= 0, y= 0, z= 1}, - {x= 0, y= 0, z=-1}} - -mesecon.rules.pplate = -{{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y =-1, z = 0, spread = true}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}} - -mesecon.rules.buttonlike = -{{x = 0, y = 0, z =-1}, - {x = 0, y = 0, z = 1}, - {x = 0, y =-1, z = 0}, - {x = 0, y = 1, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 1, y = 0, z = 0, spread = true}} - -mesecon.rules.floor = -{{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y =-1, z = 0, spread = true}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}} - -mesecon.rules.flat = -{{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}} - - - --- NOT IN ORIGNAL MESECONS -mesecon.rules.mcl_alldirs_spread = -{{x= 1, y= 0, z= 0, spread = true}, - {x=-1, y= 0, z= 0, spread = true}, - {x= 0, y= 1, z= 0, spread = true}, - {x= 0, y=-1, z= 0, spread = true}, - {x= 0, y= 0, z= 1, spread = true}, - {x= 0, y= 0, z=-1, spread = true}} - --- END OF UNOFFICIAL RULES - -local rules_buttonlike = { - xp = mesecon.rules.buttonlike, - xn = mesecon.rotate_rules_right(mesecon.rotate_rules_right(mesecon.rules.buttonlike)), - yp = mesecon.rotate_rules_down(mesecon.rules.buttonlike), - yn = mesecon.rotate_rules_up(mesecon.rules.buttonlike), - zp = mesecon.rotate_rules_right(mesecon.rules.buttonlike), - zn = mesecon.rotate_rules_left(mesecon.rules.buttonlike), -} - -local rules_wallmounted = { - xp = mesecon.rotate_rules_down(mesecon.rules.floor), - xn = mesecon.rotate_rules_up(mesecon.rules.floor), - yp = mesecon.rotate_rules_up(mesecon.rotate_rules_up(mesecon.rules.floor)), - yn = mesecon.rules.floor, - zp = mesecon.rotate_rules_left(mesecon.rotate_rules_up(mesecon.rules.floor)), - zn = mesecon.rotate_rules_right(mesecon.rotate_rules_up(mesecon.rules.floor)), -} - -local function rules_from_dir(ruleset, dir) - if dir.x == 1 then return ruleset.xp end - if dir.y == 1 then return ruleset.yp end - if dir.z == 1 then return ruleset.zp end - if dir.x == -1 then return ruleset.xn end - if dir.y == -1 then return ruleset.yn end - if dir.z == -1 then return ruleset.zn end -end - -function mesecon.rules.buttonlike_get(node) - local dir = minetest.facedir_to_dir(node.param2) - return rules_from_dir(rules_buttonlike, dir) -end - -function mesecon.rules.wallmounted_get(node) - local dir = minetest.wallmounted_to_dir(node.param2) - return rules_from_dir(rules_wallmounted, dir) -end - -mesecon.state.on = "on" -mesecon.state.off = "off" diff --git a/mods/ITEMS/REDSTONE/mesecons/services.lua b/mods/ITEMS/REDSTONE/mesecons/services.lua deleted file mode 100644 index 7d1fce2d8..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/services.lua +++ /dev/null @@ -1,168 +0,0 @@ --- Dig and place services - -function mesecon.on_placenode(pos, node) - mesecon.execute_autoconnect_hooks_now(pos, node) - - -- Receptors: Send on signal when active - if mesecon.is_receptor_on(node.name) then - mesecon.receptor_on(pos, mesecon.receptor_get_rules(node)) - end - - -- Conductors: Send turnon signal when powered or replace by respective offstate conductor - -- if placed conductor is an onstate one - if mesecon.is_conductor(node.name) then - local sources = mesecon.is_powered(pos) - if sources then - -- also call receptor_on if itself is powered already, so that neighboring - -- conductors will be activated (when pushing an on-conductor with a piston) - for _, s in ipairs(sources) do - local rule = vector.subtract(pos, s) - mesecon.turnon(pos, rule) - end - mesecon.receptor_on (pos, mesecon.conductor_get_rules(node)) - elseif mesecon.is_conductor_on(node) then - minetest.swap_node(pos, {name = mesecon.get_conductor_off(node)}) - end - end - - -- Effectors: Send changesignal and activate or deactivate - if mesecon.is_effector(node.name) then - local powered_rules = {} - local unpowered_rules = {} - - -- for each input rule, check if powered - for _, r in ipairs(mesecon.effector_get_rules(node)) do - local powered = mesecon.is_powered(pos, r) - if powered then table.insert(powered_rules, r) - else table.insert(unpowered_rules, r) end - - local state = powered and mesecon.state.on or mesecon.state.off - mesecon.changesignal(pos, node, r, state, 1) - end - - if (#powered_rules > 0) then - for _, r in ipairs(powered_rules) do - mesecon.activate(pos, node, r, 1) - end - else - for _, r in ipairs(unpowered_rules) do - mesecon.deactivate(pos, node, r, 1) - end - end - end - - if minetest.get_item_group(node.name, "opaque") == 1 then - local neighbors = mesecon.mcl_get_neighbors(pos) - local is_powered, direct_source = mesecon.is_powered(pos) - if is_powered and direct_source then - for n=1, #neighbors do - local npos = neighbors[n].pos - local nnode = minetest.get_node(npos) - if mesecon.is_conductor_off(nnode) then - mesecon.receptor_on(npos, mesecon.conductor_get_rules(nnode)) - -- Redstone torch is a special case and must be ignored - elseif mesecon.is_effector_on(nnode.name) and minetest.get_item_group(nnode.name, "redstone_torch") == 0 then - mesecon.changesignal(npos, nnode, neighbors[n].link, mesecon.state.on, 1) - mesecon.activate(npos, nnode, neighbors[n].link, 1) - end - end - end - end -end - -function mesecon.on_dignode(pos, node) - if mesecon.is_conductor_on(node) then - mesecon.receptor_off(pos, mesecon.conductor_get_rules(node)) - elseif mesecon.is_receptor_on(node.name) then - mesecon.receptor_off(pos, mesecon.receptor_get_rules(node)) - end - if minetest.get_item_group(node.name, "opaque") == 1 then - --local sources = mesecon.is_powered(pos) - local neighbors = mesecon.mcl_get_neighbors(pos) - for n=1, #neighbors do - local npos = neighbors[n].pos - local nlink = neighbors[n].link - local nnode = minetest.get_node(npos) - if mesecon.is_conductor_on(nnode) then - mesecon.receptor_off(npos, mesecon.conductor_get_rules(nnode)) - -- Disable neighbor effectors unless they are in a special ignore group - elseif mesecon.is_effector_on(nnode.name) and mesecon.is_powered(npos) == false and minetest.get_item_group(nnode.name, "mesecon_ignore_opaque_dig") == 0 then - mesecon.changesignal(npos, nnode, nlink, mesecon.state.off, 1) - mesecon.deactivate(npos, nnode, nlink, 1) - end - end - end - mesecon.execute_autoconnect_hooks_queue(pos, node) -end - -function mesecon.on_blastnode(pos, node) - local node = minetest.get_node(pos) - minetest.remove_node(pos) - mesecon.on_dignode(pos, node) - return minetest.get_node_drops(node.name, "") -end - -minetest.register_on_placenode(mesecon.on_placenode) -minetest.register_on_dignode(mesecon.on_dignode) - --- Overheating service for fast circuits -local OVERHEAT_MAX = mesecon.setting("overheat_max", 8) -local COOLDOWN_TIME = mesecon.setting("cooldown_time", 3.0) -local COOLDOWN_STEP = mesecon.setting("cooldown_granularity", 0.5) -local COOLDOWN_MULTIPLIER = OVERHEAT_MAX / COOLDOWN_TIME -local cooldown_timer = 0.0 -local object_heat = {} - --- returns true if heat is too high -function mesecon.do_overheat(pos) - local id = minetest.hash_node_position(pos) - local heat = (object_heat[id] or 0) + 1 - object_heat[id] = heat - if heat >= OVERHEAT_MAX then - minetest.log("action", "Node overheats at " .. minetest.pos_to_string(pos)) - object_heat[id] = nil - return true - end - return false -end - -function mesecon.do_cooldown(pos) - local id = minetest.hash_node_position(pos) - object_heat[id] = nil -end - -function mesecon.get_heat(pos) - local id = minetest.hash_node_position(pos) - return object_heat[id] or 0 -end - -function mesecon.move_hot_nodes(moved_nodes) - local new_heat = {} - for _, n in ipairs(moved_nodes) do - local old_id = minetest.hash_node_position(n.oldpos) - local new_id = minetest.hash_node_position(n.pos) - new_heat[new_id] = object_heat[old_id] - object_heat[old_id] = nil - end - for id, heat in pairs(new_heat) do - object_heat[id] = heat - end -end - -local function global_cooldown(dtime) - cooldown_timer = cooldown_timer + dtime - if cooldown_timer < COOLDOWN_STEP then - return -- don't overload the CPU - end - local cooldown = COOLDOWN_MULTIPLIER * cooldown_timer - cooldown_timer = 0 - for id, heat in pairs(object_heat) do - heat = heat - cooldown - if heat <= 0 then - object_heat[id] = nil -- free some RAM - else - object_heat[id] = heat - end - end -end -minetest.register_globalstep(global_cooldown) diff --git a/mods/ITEMS/REDSTONE/mesecons/settings.lua b/mods/ITEMS/REDSTONE/mesecons/settings.lua deleted file mode 100644 index 02207073c..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/settings.lua +++ /dev/null @@ -1,15 +0,0 @@ --- SETTINGS -function mesecon.setting(setting, default) - if type(default) == "boolean" then - local read = minetest.settings:get_bool("mesecon."..setting) - if read == nil then - return default - else - return read - end - elseif type(default) == "string" then - return minetest.settings:get("mesecon."..setting) or default - elseif type(default) == "number" then - return tonumber(minetest.settings:get("mesecon."..setting) or default) - end -end diff --git a/mods/ITEMS/REDSTONE/mesecons/util.lua b/mods/ITEMS/REDSTONE/mesecons/util.lua deleted file mode 100644 index b6602526a..000000000 --- a/mods/ITEMS/REDSTONE/mesecons/util.lua +++ /dev/null @@ -1,461 +0,0 @@ -function mesecon.move_node(pos, newpos) - local node = minetest.get_node(pos) - local meta = minetest.get_meta(pos):to_table() - minetest.remove_node(pos) - minetest.set_node(newpos, node) - minetest.get_meta(pos):from_table(meta) -end - ---Rules rotation Functions: -function mesecon.rotate_rules_right(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = -rule.z, - y = rule.y, - z = rule.x, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.rotate_rules_left(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = rule.z, - y = rule.y, - z = -rule.x, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.rotate_rules_down(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = -rule.y, - y = rule.x, - z = rule.z, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.rotate_rules_up(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = rule.y, - y = -rule.x, - z = rule.z, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.flattenrules(allrules) ---[[ - { - { - {xyz}, - {xyz}, - }, - { - {xyz}, - {xyz}, - }, - } ---]] - if allrules[1] and - allrules[1].x then - return allrules - end - - local shallowrules = {} - for _, metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - table.insert(shallowrules, rule) - end - end - return shallowrules ---[[ - { - {xyz}, - {xyz}, - {xyz}, - {xyz}, - } ---]] -end - -function mesecon.rule2bit(findrule, allrules) - --get the bit of the metarule the rule is in, or bit 1 - if (allrules[1] and - allrules[1].x) or - not findrule then - return 1 - end - for m,metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - if vector.equals(findrule, rule) then - return m - end - end - end -end - -function mesecon.rule2metaindex(findrule, allrules) - --get the metarule the rule is in, or allrules - if allrules[1].x then - return nil - end - - if not(findrule) then - return mesecon.flattenrules(allrules) - end - - for m, metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - if vector.equals(findrule, rule) then - return m - end - end - end -end - -function mesecon.rule2meta(findrule, allrules) - if #allrules == 0 then return {} end - - local index = mesecon.rule2metaindex(findrule, allrules) - if index == nil then - if allrules[1].x then - return allrules - else - return {} - end - end - return allrules[index] -end - --- Returns the 6 immediate neighbors of pos --- (nodes which touch the sides of pos). --- NOT PART OF ORIGINAL MESECONS! -function mesecon.mcl_get_neighbors(pos) - local r = mesecon.rules.alldirs - local e = {} - for i=1, #r do - table.insert(e, { pos = vector.add(pos, r[i]), link = r[i] }) - end - return e -end - -function mesecon.dec2bin(n) - local x, y = math.floor(n / 2), n % 2 - if (n > 1) then - return mesecon.dec2bin(x)..y - else - return ""..y - end -end - -function mesecon.getstate(nodename, states) - for state, name in ipairs(states) do - if name == nodename then - return state - end - end - error(nodename.." doesn't mention itself in "..dump(states)) -end - -function mesecon.getbinstate(nodename, states) - return mesecon.dec2bin(mesecon.getstate(nodename, states)-1) -end - -function mesecon.get_bit(binary,bit) - bit = bit or 1 - local c = binary:len()-(bit-1) - return binary:sub(c,c) == "1" -end - -function mesecon.set_bit(binary,bit,value) - if value == "1" then - if not mesecon.get_bit(binary,bit) then - return mesecon.dec2bin(tonumber(binary,2)+math.pow(2,bit-1)) - end - elseif value == "0" then - if mesecon.get_bit(binary,bit) then - return mesecon.dec2bin(tonumber(binary,2)-math.pow(2,bit-1)) - end - end - return binary - -end - -function mesecon.invertRule(r) - local spread = r.spread - r = vector.multiply(r, -1) - if spread then - r.spread = true - end - return r -end - -function mesecon.tablecopy(table) -- deep table copy - if type(table) ~= "table" then return table end -- no need to copy - local newtable = {} - - for idx, item in pairs(table) do - if type(item) == "table" then - newtable[idx] = mesecon.tablecopy(item) - else - newtable[idx] = item - end - end - - return newtable -end - -function mesecon.cmpAny(t1, t2) - if type(t1) ~= type(t2) then return false end - if type(t1) ~= "table" and type(t2) ~= "table" then return t1 == t2 end - - for i, e in pairs(t1) do - if not mesecon.cmpAny(e, t2[i]) then return false end - end - - return true -end - --- does not overwrite values; number keys (ipairs) are appended, not overwritten -function mesecon.mergetable(source, dest) - local rval = mesecon.tablecopy(dest) - - for k, v in pairs(source) do - rval[k] = dest[k] or mesecon.tablecopy(v) - end - for i, v in ipairs(source) do - table.insert(rval, mesecon.tablecopy(v)) - end - - return rval -end - -function mesecon.register_node(name, spec_common, spec_off, spec_on) - spec_common.drop = spec_common.drop or name .. "_off" - spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode - spec_common.__mesecon_basename = name - spec_on.__mesecon_state = "on" - spec_off.__mesecon_state = "off" - - spec_on = mesecon.mergetable(spec_common, spec_on); - spec_off = mesecon.mergetable(spec_common, spec_off); - - minetest.register_node(name .. "_on", spec_on) - minetest.register_node(name .. "_off", spec_off) -end - --- swap onstate and offstate nodes, returns new state -function mesecon.flipstate(pos, node) - local nodedef = minetest.registered_nodes[node.name] - local newstate - if (nodedef.__mesecon_state == "on") then newstate = "off" end - if (nodedef.__mesecon_state == "off") then newstate = "on" end - - minetest.swap_node(pos, {name = nodedef.__mesecon_basename .. "_" .. newstate, - param2 = node.param2}) - - return newstate -end - --- File writing / reading utilities -local wpath = minetest.get_worldpath() -function mesecon.file2table(filename) - local f = io.open(wpath..DIR_DELIM..filename, "r") - if f == nil then return {} end - local t = f:read("*all") - f:close() - if t == "" or t == nil then return {} end - return minetest.deserialize(t) -end - -function mesecon.table2file(filename, table) - local f = io.open(wpath..DIR_DELIM..filename, "w") - f:write(minetest.serialize(table)) - f:close() -end - --- Block position "hashing" (convert to integer) functions for voxelmanip cache -local BLOCKSIZE = 16 - --- convert node position --> block hash -local function hash_blockpos(pos) - return minetest.hash_node_position({ - x = math.floor(pos.x/BLOCKSIZE), - y = math.floor(pos.y/BLOCKSIZE), - z = math.floor(pos.z/BLOCKSIZE) - }) -end - --- Maps from a hashed mapblock position (as returned by hash_blockpos) to a --- table. --- --- Contents of the table are: --- “vm” → the VoxelManipulator --- “va” → the VoxelArea --- “data” → the data array --- “param1” → the param1 array --- “param2” → the param2 array --- “dirty” → true if data has been modified --- --- Nil if no VM-based transaction is in progress. -local vm_cache = nil - --- Starts a VoxelManipulator-based transaction. --- --- During a VM transaction, calls to vm_get_node and vm_swap_node operate on a --- cached copy of the world loaded via VoxelManipulators. That cache can later --- be committed to the real map by means of vm_commit or discarded by means of --- vm_abort. -function mesecon.vm_begin() - vm_cache = {} -end - --- Finishes a VoxelManipulator-based transaction, freeing the VMs and map data --- and writing back any modified areas. -function mesecon.vm_commit() - for hash, tbl in pairs(vm_cache) do - if tbl.dirty then - local vm = tbl.vm - vm:set_data(tbl.data) - vm:write_to_map() - vm:update_map() - end - end - vm_cache = nil -end - --- Finishes a VoxelManipulator-based transaction, freeing the VMs and throwing --- away any modified areas. -function mesecon.vm_abort() - vm_cache = nil -end - --- Gets the cache entry covering a position, populating it if necessary. -local function vm_get_or_create_entry(pos) - local hash = hash_blockpos(pos) - local tbl = vm_cache[hash] - if not tbl then - local vm = minetest.get_voxel_manip(pos, pos) - local min_pos, max_pos = vm:get_emerged_area() - local va = VoxelArea:new{MinEdge = min_pos, MaxEdge = max_pos} - tbl = {vm = vm, va = va, data = vm:get_data(), param1 = vm:get_light_data(), param2 = vm:get_param2_data(), dirty = false} - vm_cache[hash] = tbl - end - return tbl -end - --- Gets the node at a given position during a VoxelManipulator-based --- transaction. -function mesecon.vm_get_node(pos) - local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - local node_value = tbl.data[index] - if node_value == minetest.CONTENT_IGNORE then - return nil - else - local node_param1 = tbl.param1[index] - local node_param2 = tbl.param2[index] - return {name = minetest.get_name_from_content_id(node_value), param1 = node_param1, param2 = node_param2} - end -end - --- Sets a node’s name during a VoxelManipulator-based transaction. --- --- Existing param1, param2, and metadata are left alone. -function mesecon.vm_swap_node(pos, name) - local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - tbl.data[index] = minetest.get_content_id(name) - tbl.dirty = true -end - --- Gets the node at a given position, regardless of whether it is loaded or --- not, respecting a transaction if one is in progress. --- --- Outside a VM transaction, if the mapblock is not loaded, it is pulled into --- the server’s main map data cache and then accessed from there. --- --- Inside a VM transaction, the transaction’s VM cache is used. -function mesecon.get_node_force(pos) - if vm_cache then - return mesecon.vm_get_node(pos) - else - local node = minetest.get_node_or_nil(pos) - if node == nil then - -- Node is not currently loaded; use a VoxelManipulator to prime - -- the mapblock cache and try again. - minetest.get_voxel_manip(pos, pos) - node = minetest.get_node_or_nil(pos) - end - return node - end -end - --- Swaps the node at a given position, regardless of whether it is loaded or --- not, respecting a transaction if one is in progress. --- --- Outside a VM transaction, if the mapblock is not loaded, it is pulled into --- the server’s main map data cache and then accessed from there. --- --- Inside a VM transaction, the transaction’s VM cache is used. --- --- This function can only be used to change the node’s name, not its parameters --- or metadata. -function mesecon.swap_node_force(pos, name) - if vm_cache then - return mesecon.vm_swap_node(pos, name) - else - -- This serves to both ensure the mapblock is loaded and also hand us - -- the old node table so we can preserve param2. - local node = mesecon.get_node_force(pos) - node.name = name - minetest.swap_node(pos, node) - end -end - --- Autoconnect Hooks --- Nodes like conductors may change their appearance and their connection rules --- right after being placed or after being dug, e.g. the default wires use this --- to automatically connect to linking nodes after placement. --- After placement, the update function will be executed immediately so that the --- possibly changed rules can be taken into account when recalculating the circuit. --- After digging, the update function will be queued and executed after --- recalculating the circuit. The update function must take care of updating the --- node at the given position itself, but also all of the other nodes the given --- position may have (had) a linking connection to. -mesecon.autoconnect_hooks = {} - --- name: A unique name for the hook, e.g. "foowire". Used to name the actionqueue function. --- fct: The update function with parameters function(pos, node) -function mesecon.register_autoconnect_hook(name, fct) - mesecon.autoconnect_hooks[name] = fct - mesecon.queue:add_function("autoconnect_hook_"..name, fct) -end - -function mesecon.execute_autoconnect_hooks_now(pos, node) - for _, fct in pairs(mesecon.autoconnect_hooks) do - fct(pos, node) - end -end - -function mesecon.execute_autoconnect_hooks_queue(pos, node) - for name in pairs(mesecon.autoconnect_hooks) do - mesecon.queue:add_action(pos, "autoconnect_hook_"..name, {node}) - end -end diff --git a/mods/ITEMS/REDSTONE/mesecons_alias/init.lua b/mods/ITEMS/REDSTONE/mesecons_alias/init.lua deleted file mode 100644 index 111a4b1c9..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_alias/init.lua +++ /dev/null @@ -1,37 +0,0 @@ --- This file registers aliases for the /give /giveme commands. - -minetest.register_alias("mesecons:mesecon", "mesecons:wire_00000000_off") -minetest.register_alias("mesecons:object_detector", "mesecons_detector:object_detector_off") -minetest.register_alias("mesecons:wireless_inverter", "mesecons_wireless:wireless_inverter_on") -minetest.register_alias("mesecons:wireless_receiver", "mesecons_wireless:wireless_receiver_off") -minetest.register_alias("mesecons:wireless_transmitter", "mesecons_wireless:wireless_transmitter_off") -minetest.register_alias("mesecons:switch", "mesecons_switch:mesecon_switch_off") -minetest.register_alias("mesecons:button", "mesecons_button:button_off") -minetest.register_alias("mesecons:piston", "mesecons_pistons:piston_normal_off") -minetest.register_alias("mesecons:mesecon_torch", "mesecons_torch:mesecon_torch_on") -minetest.register_alias("mesecons:torch", "mesecons_torch:mesecon_torch_on") -minetest.register_alias("mesecons:pressure_plate_stone", "mesecons_pressureplates:pressure_plate_stone_off") -minetest.register_alias("mesecons:pressure_plate_wood", "mesecons_pressureplates:pressure_plate_wood_off") -minetest.register_alias("mesecons:pressure_plate_birchwood", "mesecons_pressureplates:pressure_plate_birchwood_off") -minetest.register_alias("mesecons:pressure_plate_acaciawood", "mesecons_pressureplates:pressure_plate_acaciawood_off") -minetest.register_alias("mesecons:pressure_plate_darkwood", "mesecons_pressureplates:pressure_plate_darkwood_off") -minetest.register_alias("mesecons:pressure_plate_sprucewood", "mesecons_pressureplates:pressure_plate_sprucewood_off") -minetest.register_alias("mesecons:pressure_plate_junglewood", "mesecons_pressureplates:pressure_plate_junglewood_off") -minetest.register_alias("mesecons:mesecon_socket", "mesecons_temperest:mesecon_socket_off") -minetest.register_alias("mesecons:mesecon_inverter", "mesecons_temperest:mesecon_inverter_on") -minetest.register_alias("mesecons:noteblock", "mesecons_noteblock:noteblock") -minetest.register_alias("mesecons:delayer", "mesecons_delayer:delayer_off_1") -minetest.register_alias("mesecons:solarpanel", "mesecons_solarpanel:solar_panel_off") - - ---Backwards compatibility -minetest.register_alias("mesecons:mesecon_off", "mesecons:wire_00000000_off") -minetest.register_alias("mesecons_pistons:piston_sticky", "mesecons_pistons:piston_sticky_on") -minetest.register_alias("mesecons_pistons:piston_normal", "mesecons_pistons:piston_normal_on") -minetest.register_alias("mesecons_pistons:piston_up_normal", "mesecons_pistons:piston_up_normal_on") -minetest.register_alias("mesecons_pistons:piston_down_normal", "mesecons_pistons:piston_down_normal_on") -minetest.register_alias("mesecons_pistons:piston_up_sticky", "mesecons_pistons:piston_up_sticky_on") -minetest.register_alias("mesecons_pistons:piston_down_sticky", "mesecons_pistons:piston_down_sticky_on") - ---MineClone 2 specials -minetest.register_alias("mesecons_materials:glue", "mcl_mobitems:slimeball") diff --git a/mods/ITEMS/REDSTONE/mesecons_alias/mod.conf b/mods/ITEMS/REDSTONE/mesecons_alias/mod.conf deleted file mode 100644 index 533d54c80..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_alias/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mesecons_alias -depends = mesecons diff --git a/mods/ITEMS/REDSTONE/mesecons_button/README.md b/mods/ITEMS/REDSTONE/mesecons_button/README.md deleted file mode 100644 index 31a1fa9de..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/README.md +++ /dev/null @@ -1,16 +0,0 @@ -Mesecons button mod. -This mod adds the buttons for MineClone 2. - -MEDIA FILE CREDITS: - -`mesecons_button_push.ogg` - * Author: junggle - * License: CC BY 3.0 - * Original name: `btn121.ogg`, created on January 16th, 2007 - * Source: -`mesecons_button_push_wood.ogg` - * Author: junggle - * License: (CC BY 3.0 - * Original name: `btn314.ogg`, created on January 16th, 2007 - * Sound file was modified - * Source: diff --git a/mods/ITEMS/REDSTONE/mesecons_button/init.lua b/mods/ITEMS/REDSTONE/mesecons_button/init.lua deleted file mode 100644 index 2812b2758..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/init.lua +++ /dev/null @@ -1,252 +0,0 @@ --- WALL BUTTON --- A button that when pressed emits power for a short moment and then turns off again - -local S = minetest.get_translator(minetest.get_current_modname()) - -local button_sounds = {} -- remember button push sounds - -local button_get_output_rules = mesecon.rules.wallmounted_get - -local boxes_off = { - type = "wallmounted", - wall_side = { -8/16, -2/16, -4/16, -6/16, 2/16, 4/16 }, - wall_bottom = { -4/16, -8/16, -2/16, 4/16, -6/16, 2/16 }, - wall_top = { -4/16, 6/16, -2/16, 4/16, 8/16, 2/16 }, -} -local boxes_on = { - type = "wallmounted", - wall_side = { -8/16, -2/16, -4/16, -7/16, 2/16, 4/16 }, - wall_bottom = { -4/16, -8/16, -2/16, 4/16, -7/16, 2/16 }, - wall_top = { -4/16, 7/16, -2/16, 4/16, 8/16, 2/16 }, -} - --- Push the button -function mesecon.push_button(pos, node) - -- No-op if button is already pushed - if mesecon.is_receptor_on(node) then - return - end - local def = minetest.registered_nodes[node.name] - minetest.set_node(pos, {name="mesecons_button:button_"..def._mcl_button_basename.."_on", param2=node.param2}) - mesecon.receptor_on(pos, button_get_output_rules(node)) - local sfx = button_sounds[node.name] - if sfx then - minetest.sound_play(sfx, {pos=pos}, true) - end - local timer = minetest.get_node_timer(pos) - timer:start(def._mcl_button_timer) -end - -local function on_button_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return end - local groups = def.groups - - -- Check special rightclick action of pointed node - if def and def.on_rightclick then - if not placer:get_player_control().sneak then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack, false - end - end - - -- If the pointed node is buildable, let's look at the node *behind* that node - if def.buildable_to then - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - local actual = vector.subtract(under, dir) - local actualnode = minetest.get_node(actual) - def = minetest.registered_nodes[actualnode.name] - groups = def.groups - end - - -- Only allow placement on full-cube solid opaque nodes - if (not groups) or (not groups.solid) or (not groups.opaque) or (def.node_box and def.node_box.type ~= "regular") then - return itemstack - end - - local above = pointed_thing.above - - local idef = itemstack:get_definition() - local itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing) - - if success then - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true) - end - end - return itemstack -end - -local buttonuse = S("Use the button to push it.") - -function mesecon.register_button(basename, description, texture, recipeitem, sounds, plusgroups, button_timer, push_by_arrow, longdesc, button_sound) - local groups_off = table.copy(plusgroups) - groups_off.attached_node=1 - groups_off.dig_by_water=1 - groups_off.destroy_by_lava_flow=1 - groups_off.dig_by_piston=1 - groups_off.button=1 -- button (off) - - local groups_on = table.copy(groups_off) - groups_on.not_in_creative_inventory=1 - groups_on.button=2 -- button (on) - - if not button_sound then - button_sound = "mesecons_button_push" - end - button_sounds["mesecons_button:button_"..basename.."_off"] = button_sound - - if push_by_arrow then - groups_off.button_push_by_arrow = 1 - groups_on.button_push_by_arrow = 1 - end - local tt = S("Provides redstone power when pushed") - tt = tt .. "\n" .. S("Push duration: @1s", string.format("%.1f", button_timer)) - if push_by_arrow then - tt = tt .. "\n" .. S("Pushable by arrow") - end - minetest.register_node("mesecons_button:button_"..basename.."_off", { - drawtype = "nodebox", - tiles = {texture}, - wield_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", - -- FIXME: Use proper 3D inventory image - inventory_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", - wield_scale = { x=1, y=1, z=1}, - paramtype = "light", - paramtype2 = "wallmounted", - is_ground_content = false, - walkable = false, - sunlight_propagates = true, - node_box = boxes_off, - groups = groups_off, - description = description, - _tt_help = tt, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = buttonuse, - on_place = on_button_place, - node_placement_prediction = "", - on_rightclick = function(pos, node) - mesecon.push_button(pos, node) - end, - sounds = sounds, - mesecons = {receptor = { - state = mesecon.state.off, - rules = button_get_output_rules, - }}, - _mcl_button_basename = basename, - _mcl_button_timer = button_timer, - - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - minetest.register_node("mesecons_button:button_"..basename.."_on", { - drawtype = "nodebox", - tiles = {texture}, - wield_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", - wield_scale = { x=1, y=1, z=0.5}, - paramtype = "light", - paramtype2 = "wallmounted", - is_ground_content = false, - walkable = false, - sunlight_propagates = true, - node_box = boxes_on, - groups = groups_on, - drop = "mesecons_button:button_"..basename.."_off", - _doc_items_create_entry = false, - node_placement_prediction = "", - sounds = sounds, - mesecons = {receptor = { - state = mesecon.state.on, - rules = button_get_output_rules - }}, - _mcl_button_basename = basename, - _mcl_button_timer = button_timer, - on_timer = function(pos, elapsed) - local node = minetest.get_node(pos) - if node.name=="mesecons_button:button_"..basename.."_on" then --has not been dug - -- Is button pushable by arrow? - if push_by_arrow then - -- If there's an arrow stuck in the button, keep it pressed and check - -- it again later. - local objs = minetest.get_objects_inside_radius(pos, 1) - for o=1, #objs do - local entity = objs[o]:get_luaentity() - if entity and entity.name == "mcl_bows:arrow_entity" then - local timer = minetest.get_node_timer(pos) - timer:start(button_timer) - return - end - end - end - - -- Normal operation: Un-press the button - minetest.set_node(pos, {name="mesecons_button:button_"..basename.."_off",param2=node.param2}) - minetest.sound_play(button_sound, {pos=pos, pitch=0.9}, true) - mesecon.receptor_off(pos, button_get_output_rules(node)) - end - end, - - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - minetest.register_craft({ - output = "mesecons_button:button_"..basename.."_off", - recipe = {{ recipeitem }}, - }) -end - -mesecon.register_button( - "stone", - S("Stone Button"), - "default_stone.png", - "mcl_core:stone", - mcl_sounds.node_sound_stone_defaults(), - {material_stone=1,handy=1,pickaxey=1}, - 1, - false, - S("A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second."), - "mesecons_button_push") - -local woods = { - { "wood", "mcl_core:wood", "default_wood.png", S("Oak Button") }, - { "acaciawood", "mcl_core:acaciawood", "default_acacia_wood.png", S("Acacia Button") }, - { "birchwood", "mcl_core:birchwood", "mcl_core_planks_birch.png", S("Birch Button") }, - { "darkwood", "mcl_core:darkwood", "mcl_core_planks_big_oak.png", S("Dark Oak Button") }, - { "sprucewood", "mcl_core:sprucewood", "mcl_core_planks_spruce.png", S("Spruce Button") }, - { "junglewood", "mcl_core:junglewood", "default_junglewood.png", S("Jungle Button") }, -} - -for w=1, #woods do - mesecon.register_button( - woods[w][1], - woods[w][4], - woods[w][3], - woods[w][2], - mcl_sounds.node_sound_wood_defaults(), - {material_wood=1,handy=1,axey=1}, - 1.5, - true, - S("A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows."), - "mesecons_button_push_wood") - - minetest.register_craft({ - type = "fuel", - recipe = "mesecons_button:button_"..woods[w][1].."_off", - burntime = 5, - }) -end - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_button:button_wood_off", "nodes", "mesecons_button:button_wood_on") - doc.add_entry_alias("nodes", "mesecons_button:button_stone_off", "nodes", "mesecons_button:button_stone_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.de.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.de.tr deleted file mode 100644 index 9b311b9a8..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.de.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Benutzen Sie den Knopf, um ihn zu drücken. -Stone Button=Steinknopf -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Ein Steinknopf ist eine Redstonekomponente aus Stein. Er kann gedrückt werden, um ein Redstonesignal zu senden. Im gedrückten Zustand versorgt er benachbarte Redstonekomponenten für 1 Sekunde mit Redstoneenergie. -Oak Button=Eichenknopf -Acacia Button=Akazienknopf -Birch Button=Birkenknopf -Dark Oak Button=Schwarzeichenknopf -Spruce Button=Fichtenknopf -Jungle Button=Dschungelknopf -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Ein Holzknopf ist eine Redstonekomponente aus Holz. Er kann gedrückt werden, um ein Redstonesignal zu senden. Im gedrückten Zustand versorgt er benachbarte Redstonekomponenten für 1,5 Sekunden mit Redstoneenergie. Holzknöpfe können auch von Pfeilen gedrückt werden. -Provides redstone power when pushed=Gibt Redstoneenergie, wenn gedrückt -Push duration: @1s=Druckdauer: @1s -Pushable by arrow=Drückbar von Pfeilen diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.es.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.es.tr deleted file mode 100644 index d793b7a99..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.es.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Usa el botón para pulsarlo. -Stone Button=Botón de piedra -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Un botón de piedra es un componente de redstone hecho de piedra que se puede presionar para proporcionar energía de redstone. Cuando se empuja, alimenta los componentes adyacentes de redstone durante 1 segundo. -Oak Button=Botón de roble -Acacia Button=Botón de acacia -Birch Button=Botón de abedul -Dark Oak Button=Botón de roble oscuro -Spruce Button=Botón de abeto -Jungle Button=Botón de jungla -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Ein Holzknopf ist eine Redstonekomponente aus Holz. Er kann gedrückt werden, um ein Redstonesignal zu senden. Im gedrückten Zustand versorgt er benachbarte Redstonekomponenten für 1,5 Sekunden mit Redstoneenergie. Holzknöpfe können auch von Pfeilen gedrückt werden. diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.fr.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.fr.tr deleted file mode 100644 index 96f963b4b..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.fr.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Utilisez le bouton pour le pousser. -Stone Button=Bouton de pierre -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Un bouton en pierre est un composant Redstone en pierre qui peut être poussé pour fournir de la puissance Redstone. Lorsqu'il est poussé, il alimente les composants Redstone adjacents pendant 1 seconde. -Oak Button=Bouton en Chêne -Acacia Button=Bouton en Acacia -Birch Button=Bouton en Bouleau -Dark Oak Button=Bouton en Chêne Noir -Spruce Button=Bouton en Sapin -Jungle Button=Bouton en Acajou -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Un bouton en bois est un composant de redstone en bois qui peut être poussé pour fournir une puissance de redstone. Lorsqu'il est poussé, il alimente les composants Redstone adjacents pendant 1,5 seconde. Les boutons en bois peuvent également être poussés par des flèches. -Provides redstone power when pushed=Fournit une puissance de redstone lorsqu'il est poussé -Push duration: @1s=Durée de poussée: @1s -Pushable by arrow=Poussable par une flèche diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.pl.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.pl.tr deleted file mode 100644 index f6d895ad0..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.pl.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Użyj przycisku by go wcisnąć. -Stone Button=Kamienny przycisk -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Kamienny przycisk jest mechanizmem czerwienitowym, który można nacisnąć by dostarczył on energię czerwienitową. Po naciśnięciu zasila on przyległy mechanizm czerwienitowy przez 1 sekundę. -Oak Button=Dębowy przycisk -Acacia Button=Akacjowy przycisk -Birch Button=Brzozowy przycisk -Dark Oak Button=Ciemno-dębowy przycisk -Spruce Button=Świerkowy przycisk -Jungle Button=Tropikalny przycisk -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Drewniany przycisk jest mechanizmem czerwienitowym wykonanym z drewna, który można nacisnąć by dostarczał energię czerwienitową. Po naciśnięciu zasila on przyległe mechanizmy czerwienitowe przez 1.5 sekundy. Drewniane przyciski mogą być również naciśnięte przez strzały. -Provides redstone power when pushed=Dostarcza energii czerwienitowej gdy naciśnięty -Push duration: @1s=Czas trwania naciśnięcia: @1s -Pushable by arrow=Można nacisnąć strzałą diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.ru.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.ru.tr deleted file mode 100644 index a89c8098a..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.ru.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=[Используйте] кнопку, чтобы нажать её. -Stone Button=Каменная кнопка -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Каменная кнопка это элемент редстоуна, сделанный из камня, её можно нажать, чтобы получить энергию редстоуна. При нажатии она включает соседние элементы редстоуна на 1 секунду. -Oak Button=Дубовая кнопка -Acacia Button=Акациевая кнопка -Birch Button=Берёзовая кнопка -Dark Oak Button=Кнопка из тёмного дуба -Spruce Button=Еловая кнопка -Jungle Button=Кнопка из дерева джунглей -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Деревянная кнопка это элемент редстоуна, сделанный из дерева, её можно нажать, чтобы получить энергию редстоуна. При нажатии она включает соседние элементы редстоуна на полторы секунды. Деревянные кнопки можно также активировать стрелами. -Provides redstone power when pushed=Выдаёт энергию редстоуна при нажатии -Push duration: @1s=Длительность нажатия: @1с -Pushable by arrow=Нажимается стрелами diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_button/locale/template.txt deleted file mode 100644 index 4c352b878..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/template.txt +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.= -Stone Button= -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.= -Oak Button= -Acacia Button= -Birch Button= -Dark Oak Button= -Spruce Button= -Jungle Button= -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.= -Provides redstone power when pushed= -Push duration: @1s= -Pushable by arrow= diff --git a/mods/ITEMS/REDSTONE/mesecons_button/mod.conf b/mods/ITEMS/REDSTONE/mesecons_button/mod.conf deleted file mode 100644 index be127362b..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_button -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push.ogg b/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push.ogg deleted file mode 100644 index 5ddc1932d..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push_wood.ogg b/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push_wood.ogg deleted file mode 100644 index 23f53c404..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push_wood.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_button/textures/mesecons_button_wield_mask.png b/mods/ITEMS/REDSTONE/mesecons_button/textures/mesecons_button_wield_mask.png deleted file mode 100644 index 211ac43fb..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_button/textures/mesecons_button_wield_mask.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/init.lua b/mods/ITEMS/REDSTONE/mesecons_commandblock/init.lua deleted file mode 100644 index 3902c3c18..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/init.lua +++ /dev/null @@ -1,324 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local F = minetest.formspec_escape - -local tonumber = tonumber - -local color_red = mcl_colors.RED - -local command_blocks_activated = minetest.settings:get_bool("mcl_enable_commandblocks", true) -local msg_not_activated = S("Command blocks are not enabled on this server") - -local function construct(pos) - local meta = minetest.get_meta(pos) - - meta:set_string("commands", "") - meta:set_string("commander", "") -end - -local function after_place(pos, placer) - if placer then - local meta = minetest.get_meta(pos) - meta:set_string("commander", placer:get_player_name()) - end -end - -local function resolve_commands(commands, pos) - local players = minetest.get_connected_players() - - local meta = minetest.get_meta(pos) - local commander = meta:get_string("commander") - - -- A non-printable character used while replacing “@@”. - local SUBSTITUTE_CHARACTER = "\26" -- ASCII SUB - - -- No players online: remove all commands containing - -- problematic placeholders. - if #players == 0 then - commands = commands:gsub("[^\r\n]+", function (line) - line = line:gsub("@@", SUBSTITUTE_CHARACTER) - if line:find("@n") then return "" end - if line:find("@p") then return "" end - if line:find("@f") then return "" end - if line:find("@r") then return "" end - line = line:gsub("@c", commander) - line = line:gsub(SUBSTITUTE_CHARACTER, "@") - return line - end) - return commands - end - - local nearest, farthest = nil, nil - local min_distance, max_distance = math.huge, -1 - for index, player in pairs(players) do - local distance = vector.distance(pos, player:get_pos()) - if distance < min_distance then - min_distance = distance - nearest = player:get_player_name() - end - if distance > max_distance then - max_distance = distance - farthest = player:get_player_name() - end - end - local random = players[math.random(#players)]:get_player_name() - commands = commands:gsub("@@", SUBSTITUTE_CHARACTER) - commands = commands:gsub("@p", nearest) - commands = commands:gsub("@n", nearest) - commands = commands:gsub("@f", farthest) - commands = commands:gsub("@r", random) - commands = commands:gsub("@c", commander) - commands = commands:gsub(SUBSTITUTE_CHARACTER, "@") - return commands -end - -local function check_commands(commands, player_name) - for _, command in pairs(commands:split("\n")) do - local pos = command:find(" ") - local cmd = command - if pos then - cmd = command:sub(1, pos - 1) - end - local cmddef = minetest.chatcommands[cmd] - if not cmddef then - -- Invalid chat command - local msg = S("Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.", cmd) - if string.sub(cmd, 1, 1) == "/" then - msg = S("Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.", cmd) - end - return false, minetest.colorize(color_red, msg) - end - if player_name then - local player_privs = minetest.get_player_privs(player_name) - - for cmd_priv, _ in pairs(cmddef.privs) do - if player_privs[cmd_priv] ~= true then - local msg = S("Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.", cmd, cmd_priv) - return false, minetest.colorize(color_red, msg) - end - end - end - end - return true -end - -local function commandblock_action_on(pos, node) - if node.name ~= "mesecons_commandblock:commandblock_off" then - return - end - - local meta = minetest.get_meta(pos) - local commander = meta:get_string("commander") - - if not command_blocks_activated then - --minetest.chat_send_player(commander, msg_not_activated) - return - end - minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"}) - - local commands = resolve_commands(meta:get_string("commands"), pos) - for _, command in pairs(commands:split("\n")) do - local cpos = command:find(" ") - local cmd, param = command, "" - if cpos then - cmd = command:sub(1, cpos - 1) - param = command:sub(cpos + 1) - end - local cmddef = minetest.chatcommands[cmd] - if not cmddef then - -- Invalid chat command - return - end - -- Execute command in the name of commander - cmddef.func(commander, param) - end -end - -local function commandblock_action_off(pos, node) - if node.name == "mesecons_commandblock:commandblock_on" then - minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"}) - end -end - -local function on_rightclick(pos, node, player, itemstack, pointed_thing) - if not command_blocks_activated then - minetest.chat_send_player(player:get_player_name(), msg_not_activated) - return - end - local can_edit = true - -- Only allow write access in Creative Mode - if not minetest.is_creative_enabled(player:get_player_name()) then - can_edit = false - end - local pname = player:get_player_name() - if minetest.is_protected(pos, pname) then - can_edit = false - end - local privs = minetest.get_player_privs(pname) - if not privs.maphack then - can_edit = false - end - - local meta = minetest.get_meta(pos) - local commands = meta:get_string("commands") - if not commands then - commands = "" - end - local commander = meta:get_string("commander") - local commanderstr - if commander == "" or commander == nil then - commanderstr = S("Error: No commander! Block must be replaced.") - else - commanderstr = S("Commander: @1", commander) - end - local textarea_name, submit, textarea - -- If editing is not allowed, only allow read-only access. - -- Player can still view the contents of the command block. - if can_edit then - textarea_name = "commands" - submit = "button_exit[3.3,4.4;2,1;submit;"..F(S("Submit")).."]" - else - textarea_name = "" - submit = "" - end - if not can_edit and commands == "" then - textarea = "label[0.5,0.5;"..F(S("No commands.")).."]" - else - textarea = "textarea[0.5,0.5;8.5,4;"..textarea_name..";"..F(S("Commands:"))..";"..F(commands).."]" - end - local formspec = "size[9,5;]" .. - textarea .. - submit .. - "image_button[8,4.4;1,1;doc_button_icon_lores.png;doc;]" .. - "tooltip[doc;"..F(S("Help")).."]" .. - "label[0,4;"..F(commanderstr).."]" - minetest.show_formspec(pname, "commandblock_"..pos.x.."_"..pos.y.."_"..pos.z, formspec) -end - -local function on_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing) - if new_stack then - return new_stack - end - - --local node = minetest.get_node(pointed_thing.under) - - local privs = minetest.get_player_privs(placer:get_player_name()) - if not privs.maphack then - minetest.chat_send_player(placer:get_player_name(), S("Placement denied. You need the “maphack” privilege to place command blocks.")) - return itemstack - end - - return minetest.item_place_node(itemstack, placer, pointed_thing) -end - -minetest.register_node("mesecons_commandblock:commandblock_off", { - description = S("Command Block"), - - _tt_help = S("Executes server commands when powered by redstone power"), - _doc_items_longdesc = -S("Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power."), - _doc_items_usagehelp = -S("Everyone can activate a command block and look at its commands, but not everyone can edit and place them.").."\n\n".. - -S("To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.").. -"\n\n".. - -S("To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.").."\n\n".. - -S("All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.").."\n\n".. - -S("Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:").."\n".. -S("• “@@c”: commander of this command block").."\n".. -S("• “@@n” or “@@p”: nearest player from the command block").."\n".. -S("• “@@f” farthest player from the command block").."\n".. -S("• “@@r”: random player currently in the world").."\n".. -S("• “@@@@”: literal “@@” sign").."\n\n".. - -S("Example 1:\n time 12000\nSets the game clock to 12:00").."\n\n".. - -S("Example 2:\n give @@n mcl_core:apple 5\nGives the nearest player 5 apples"), - - tiles = {{name="jeija_commandblock_off.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=2}}}, - groups = {creative_breakable=1, mesecon_effector_off=1}, - drop = "", - on_blast = function() end, - on_construct = construct, - is_ground_content = false, - on_place = on_place, - after_place_node = after_place, - on_rightclick = on_rightclick, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {effector = { - action_on = commandblock_action_on, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 3600000, - _mcl_hardness = -1, -}) - -minetest.register_node("mesecons_commandblock:commandblock_on", { - tiles = {{name="jeija_commandblock_off.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=2}}}, - groups = {creative_breakable=1, mesecon_effector_on=1, not_in_creative_inventory=1}, - drop = "", - on_blast = function() end, - on_construct = construct, - is_ground_content = false, - on_place = on_place, - after_place_node = after_place, - on_rightclick = on_rightclick, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {effector = { - action_off = commandblock_action_off, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 3600000, - _mcl_hardness = -1, -}) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if string.sub(formname, 1, 13) == "commandblock_" then - if fields.doc and minetest.get_modpath("doc") then - doc.show_entry(player:get_player_name(), "nodes", "mesecons_commandblock:commandblock_off", true) - return - end - if (not fields.submit and not fields.key_enter) or (not fields.commands) then - return - end - - local privs = minetest.get_player_privs(player:get_player_name()) - if not privs.maphack then - minetest.chat_send_player(player:get_player_name(), S("Access denied. You need the “maphack” privilege to edit command blocks.")) - return - end - - local index, _, x, y, z = string.find(formname, "commandblock_(-?%d+)_(-?%d+)_(-?%d+)") - if index and x and y and z then - local pos = {x = tonumber(x), y = tonumber(y), z = tonumber(z)} - local meta = minetest.get_meta(pos) - if not minetest.is_creative_enabled(player:get_player_name()) then - minetest.chat_send_player(player:get_player_name(), S("Editing the command block has failed! You can only change the command block in Creative Mode!")) - return - end - local check, error_message = check_commands(fields.commands, player:get_player_name()) - if check == false then - -- Command block rejected - minetest.chat_send_player(player:get_player_name(), error_message) - return - else - meta:set_string("commands", fields.commands) - end - else - minetest.chat_send_player(player:get_player_name(), S("Editing the command block has failed! The command block is gone.")) - end - end -end) - --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_commandblock:commandblock_off", "nodes", "mesecons_commandblock:commandblock_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.de.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.de.tr deleted file mode 100644 index a149feef9..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.de.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Fehler: Der Befehl „@1“ existiert nicht; Ihr Befehlsblock bleibt unverändert. Benutzen Sie den Chatbefehl „help“ für eine Liste der verfügbaren Befehle. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Fehler: Der Befehl „@1“ existiert nicht; Ihr Befehlsblock bleibt unverändert. Benutzen Sie den Chatbefehl „help“ für eine Liste der verfügbaren Befehle. Tipp: Versuchen Sie, den Schrägstrich am Anfang zu entfernen. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Fehler: Sie haben nicht die ausreichenden Privilegien, um den Befehl „@1“ zu benutzen (fehlendes Privileg: @2)! Der Befehlsblock bleibt unverändert. -Error: No commander! Block must be replaced.=Fehler: Kein Kommandant! Block muss ersetzt werden. -Commander: @1=Kommandant: @1 -Submit=OK -No commands.=Keine Befehle. -Commands:=Befehle: -Help=Hilfe -Placement denied. You need the “maphack” privilege to place command blocks.=Platzierung fehlgeschlagen. Sie brauchen das „maphack“-Privileg, um Befehlsblöcke platzieren zu können. -Command Block=Befehlsblock -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Befehlsblöcke sind mächtige Redstonekomponenten, die das Gefüge der Realität selbst verändern können. Mit anderen Worten, sie lassen den Server Serverbefehle ausführen, wenn sie mit Redstoneenergie versorgt werden. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Jeder kann einen Befehlsblock aktivieren und sich seine Befehle ansehen, aber nicht jeder kann sie bearbeiten und platzieren. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Um die Befehle in einem Befehlsblock zu betrachten, benutzen Sie ihn. Um ihn zu aktivieren, versorgen Sie ihn einfach mit Redstoneenergie. Das wird die Befehle einmalig ausführen. Um sie erneut auszuführen, schalten Sie die Redstoneenergie aus und wieder ein. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Um einen Befehlsblock platzieren und die Befehle ändern zu können, müssen Sie im Kreativmodus sein und das „maphack“-Privileg haben. Ein neuer Befehlsblock hat keine Befehle und tut gar nichts. Benutzen Sie den Befehlsblock (im Kreativmodus!), um seine Befehle zu bearbeiten. Lesen Sie den Hilfeeintrag „Fortgeschrittenes > Serverbefehle“, um zu verstehen, wie Befehle funktionieren. Jede Zeile enthält einen einzigen Befehl. Sie geben Sie wie in der Konsole ein, aber ohne den Schrägstrich am Anfang. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Alle Befehle werden im Namen des Spielers, der den Befehlsblock platziert hat, ausgeführt, als ob der Spieler die Befehle eingegeben hätte. Diesen Spieler nennen wir den „Kommandanten“ des Blocks. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Befehlsblöcke unterstützen Platzhalter. Geben Sie einen dieser Platzhalter ein und sie werden durch einen anderen Text ersetzt: -• “@@c”: commander of this command block=• „@@c“: Kommandant dieses Befehlsblocks -• “@@n” or “@@p”: nearest player from the command block=• „@@n“ oder „@@p“: Nächster Spieler am Befehlsblock -• “@@f” farthest player from the command block=• „@@f“: Der vom Befehlsblock am weitesten entfernte Spieler -• “@@r”: random player currently in the world=• „@@r“: Zufälliger Spieler in der Welt -• “@@@@”: literal “@@” sign=• „@@@@“: Nur das „@@“-Zeichen -Example 1:@n time 12000@nSets the game clock to 12:00=1. Beispiel:@n time 12000@nSetzt die Spieluhr auf 12:00 Uhr -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=2. Beispiel:@n give @@n mcl_core:apple 5@nGibt dem nächsten Spieler 5 Äpfel -Access denied. You need the “maphack” privilege to edit command blocks.=Zugriff verweigert. Sie brauchen das „maphack“-Privileg, um Befehlsblöcke zu bearbeiten. -Editing the command block has failed! You can only change the command block in Creative Mode!=Bearbeitung des Befehlsblocks fehlgeschlagen! Sie können den Befehlsblock nur im Kreativmodus ändern! -Editing the command block has failed! The command block is gone.=Bearbeiten des Befehlsblocks fehlgeschlagen! Der Befehlsblock ist verschwunden. -Executes server commands when powered by redstone power=Führt Serverbefehle aus, wenn mit Redstoneenergie versorgt -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.es.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.es.tr deleted file mode 100644 index 938c710b9..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.es.tr +++ /dev/null @@ -1,31 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Error: el comando "@1" no existe; su bloque de comando no ha sido cambiado. Utilice el comando de chat "help" para obtener una lista de los comandos disponibles. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Error: el comando "@1" no existe; su bloque de comando no ha sido cambiado. Utilice el comando de chat "help" para obtener una lista de los comandos disponibles. Sugerencia: intente eliminar la barra diagonal inicial. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Error: ¡No tiene suficientes privilegios para usar el comando “@ 1” (faltan privilegios: @ 2)! El bloque de comando no ha sido cambiado. -Error: No commander! Block must be replaced.=Error: ¡Sin dueño! El bloque debe ser reemplazado. -Commander: @1=Dueño: @1 -Submit=Aceptar -No commands.=Sin comandos. -Commands:=Comandos: -Help=Ayuda -Placement denied. You need the “maphack” privilege to place command blocks.=Colocación denegada. Necesita el privilegio "maphack" para colocar bloques de comandos. -Command Block=Bloque de comandos -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Los bloques de comandos son poderosos componentes de redstone que pueden alterar la realidad misma. En otras palabras, hacen que el servidor ejecute comandos del servidor cuando se les suministra energía redstone. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Todos pueden activar un bloque de comandos y ver sus comandos, pero no todos pueden editarlos y colocarlos. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Para ver los comandos en un bloque de comandos, úselo. Para activar el bloque de comando, solo suminístrelo con redstone power. Esto ejecutará los comandos una vez. Para ejecutar los comandos nuevamente, apague y vuelva a encender la redstone. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.= -# ^ OLD TRANSLATION: Para poder colocar un bloque de comandos y cambiar los comandos, debe estar en modo creativo y debe tener el privilegio de "maphack". Un nuevo bloque de comandos no tiene ningún comando y no hace nada. Use el bloque de comandos (en modo creativo) para editar sus comandos. Lea la entrada de ayuda "Temas avanzados> Comandos del servidor" para comprender cómo funcionan los comandos. Cada línea contiene un solo comando. Los ingresas como lo harías en la consola, pero sin la barra inclinada. Los comandos se ejecutarán de arriba a abajo. - -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Todos los comandos se ejecutarán en el nombre del jugador que colocó el bloque de comandos, como si el jugador tecleara los comandos. Se dice que este jugador es el "dueño" del bloque. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Los bloques de comando admiten marcadores de posición, inserte uno de estos marcadores de posición y serán reemplazados por otro texto: -• “@@c”: commander of this command block=• "@@c“: dueño de este bloque de comandos -• “@@n” or “@@p”: nearest player from the command block=• "@@n“ o "@@p“: jugador más cercano del bloque de comandos -• “@@f” farthest player from the command block=• "@@f“: jugador más alejado del bloque de comandos -• “@@r”: random player currently in the world=• "@@r“: jugador aleatorio actualmente en el mundo -• “@@@@”: literal “@@” sign=• „@@@@“: literal "@@“ firmado -Example 1:@n time 12000@nSets the game clock to 12:00=1. Ejemplo:@n time 12000@nConfigura el reloj del juego a las 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=2. Beispiel:@n give @@n mcl_core:apple 5@nDa al jugador más cercano a 5 manzanas -Access denied. You need the “maphack” privilege to edit command blocks.=Acceso denegado. Necesita el privilegio "maphack" para editar bloques de comandos. -Editing the command block has failed! You can only change the command block in Creative Mode!=¡La edición del bloque de comando ha fallado! ¡Solo puede cambiar el bloque de comandos en modo creativo! -Editing the command block has failed! The command block is gone.=¡La edición del bloque de comando ha fallado! El bloque de comando se ha ido. -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.fr.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.fr.tr deleted file mode 100644 index b397c979c..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.fr.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Erreur: la commande "@1" n'existe pas; votre bloc de commande n'a pas été modifié. Utilisez la commande de discussion "help" pour obtenir la liste des commandes disponibles. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Erreur: la commande "@1" n'existe pas; votre bloc de commande n'a pas été modifié. Utilisez la commande de discussion "help" pour obtenir la liste des commandes disponibles. Astuce: essayez de supprimer la barre oblique principale. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Erreur: vous ne disposez pas de privilèges suffisants pour utiliser la commande "@1" (privilège manquant: @2)! Le bloc de commandes n'a pas été modifié. -Error: No commander! Block must be replaced.=Erreur: pas de commandant! Le bloc doit être remplacé. -Commander: @1=Commandant: @1 -Submit=Soumettre -No commands.=Aucune commande. -Commands:=Commandes: -Help=Aide -Placement denied. You need the “maphack” privilege to place command blocks.=Placement refusé. Vous avez besoin du privilège "maphack" pour placer des blocs de commande. -Command Block=Bloc de Commande -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Les blocs de commande sont des composants redstone puissants qui sont capables de modifier la réalité elle-même. En d'autres termes, ils obligent le serveur à exécuter des commandes serveur lorsqu'ils sont alimentés en redstone. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Tout le monde peut activer un bloc de commandes et consulter ses commandes, mais tout le monde ne peut pas les modifier et les placer. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Pour afficher les commandes dans un bloc de commandes, utilisez-le. Pour activer le bloc de commande, il suffit de l'alimenter en redstone. Cela exécutera les commandes une fois. Pour exécuter à nouveau les commandes, éteignez puis rallumez le Redstone. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Pour pouvoir placer un bloc de commande et modifier les commandes, vous devez être en mode créatif et avoir le privilège "maphack". Un nouveau bloc de commande n'a aucune commande et ne fait rien. Utilisez le bloc de commande (en mode créatif!) Pour modifier ses commandes. Lisez l'entrée d'aide "Utilisation avancée> Commandes du serveur" pour comprendre le fonctionnement des commandes. Chaque ligne contient une seule commande. Vous les entrez comme vous le feriez dans la console, mais sans la barre oblique principale. Les commandes seront exécutées de haut en bas. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Toutes les commandes seront exécutées au nom du joueur qui a placé le bloc de commande, comme si le joueur avait tapé les commandes. Ce joueur est appelé le "commandant" du bloc. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Les blocs de commande prennent en charge les espaces réservés, insérez l'un de ces espaces réservés et ils seront remplacés par un autre texte: -• “@@c”: commander of this command block=• “@@c”: commandant de ce bloc que commande -• “@@n” or “@@p”: nearest player from the command block=• “@@n” or “@@p”: joueur le plus proche du bloc de commande -• “@@f” farthest player from the command block=• “@@f” : joueur le plus éloigné du bloc de commande -• “@@r”: random player currently in the world=• “@@r”: joueur aléatoire actuellement dans le monde -• “@@@@”: literal “@@” sign= • “@@@@”: literalement le symbole “@@” -Example 1:@n time 12000@nSets the game clock to 12:00=Exemple 1:@n time 12000@nRègle l'horloge du jeu sur 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=Exemple 2:@n give @@n mcl_core:apple 5@nDonne au joueur le plus proche 5 pommes -Access denied. You need the “maphack” privilege to edit command blocks.=Accès refusé. Vous avez besoin du privilège "maphack" pour modifier les blocs de commande. -Editing the command block has failed! You can only change the command block in Creative Mode!=La modification du bloc de commandes a échoué! Vous ne pouvez modifier le bloc de commandes qu'en mode créatif! -Editing the command block has failed! The command block is gone.=La modification du bloc de commandes a échoué! Le bloc de commande a disparu. -Executes server commands when powered by redstone power=Exécute les commandes du serveur lorsqu'il est alimenté par l'alimentation Redstone -Command blocks are not enabled on this server=Les blocks de commandes ne sont pas activés sur ce serveur diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.pl.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.pl.tr deleted file mode 100644 index 6ee1afcad..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.pl.tr +++ /dev/null @@ -1,31 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Błąd: Komenda "@1" nie istnieje; twój blok komend nie został zmieniony. Użyj komendy "help" aby zobaczyć listę dostępnych komend. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Błąd: Komenda "@1" nie istnieje; twój blok komend nie został zmieniony. Użyj komendy "help" aby zobaczyć listę dostępnych komend. Wskazówka: Spróbuj usunąć poprzedzający slesz. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Błąd: Masz niewystarczające uprawnienia by użyć komendy "@1" (brakujący przywilej: @2)! Blok komend nie został zmieniony. -Error: No commander! Block must be replaced.=Blok: Brak komendanta! Blok musi zostać zamieniony. -Commander: @1=Komendant: @1 -Submit=Zatwierdź -No commands.=Brak komend. -Commands:=Komendy: -Help=Pomoc -Placement denied. You need the “maphack” privilege to place command blocks.=Odmówiono postawienia. Potrzebujesz przywileju "maphack" aby stawiać bloki komend. -Command Block=Blok komend -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Bloki komend są potężnymi mechanizmami czerwienitowymi, które są w stanie zmieniać samą rzeczywistość. Innymi słowy powodują one, że serwer wykonuje komendy gdy dostarczy się im energię czerwienitową. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Każdy może aktywować blok komend i patrzeć na ich komendy, ale nie wszyscy mogą edytować i kłaść je. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Aby zobaczyć komendy w bloku komend, kliknij użyj na nim. Aby aktywować blok komend zasil go energią czerwienitową. To wykona komendy raz. Aby wykonać je ponownie wyłącz, a następnie włącz energię. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Aby być w stanie kłaść bloki komend i zmieniać ich komendy musisz być w trybie kreatywnym i posiadać przywilej "maphack". Nowy blok komend nie posiada żadnych komend i nie robi nic. Użyj bloku komend (w trybie kreatywnym!) aby zmienić jego komendy. Przeczytaj wpis w pomocy "Zaawansowane użycie > Komendy serwera" aby dowiedzieć się jak komendy działają. Każda linia zawiera pojedynczą komendę. Wprowadzasz je tak jak w konsoli, ale bez poprzedzającego slesza. Komendy będą wykonywane od góry do dołu. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Wszystkie komendy będą formalnie wykonane przez gracza, który postawił blok komend, jakby to ten gracz wpisał komendę. Ten gracz nazywany jest komendantem bloku. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Bloki komend wspierają zamienniki, wstaw jeden z nich a zostaną one zastąpione przez jakiś inny tekst: -• “@@c”: commander of this command block=• "@@c": komendant tego bloku komend -• “@@n” or “@@p”: nearest player from the command block=• "@@n" lub "@@p": gracz najbliżej tego bloku komend -• “@@f” farthest player from the command block=• "@@f": gracz najdalej od tego bloku komend -• “@@r”: random player currently in the world=• "@@r": losowy gracz znajdujący się w świecie -• “@@@@”: literal “@@” sign=• "@@@@": dosłowny znak "@@" -Example 1:@n time 12000@nSets the game clock to 12:00=Przykład 1:@n time 12000@nUstawia zegar gry na 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=Przykład 2:@n give @@n mcl_core:apple 5@nDaje najbliższemu graczowi 5 jabłek -Access denied. You need the “maphack” privilege to edit command blocks.=Odmowa dostępu. Potrzebujesz przywileju "maphack" by zmieniać bloki komend. -Editing the command block has failed! You can only change the command block in Creative Mode!=Edycja bloku komend nieudana! Możesz zmieniać bloki komend tylko w trybie kreatywnym. -Editing the command block has failed! The command block is gone.=Edycja bloku komend nieudana! Bloku komend już nie ma. -Executes server commands when powered by redstone power=Wykonuje komendy serwera gdy jest zasilany energią czerwienitową -Command blocks are not enabled on this server=Bloki komend nie są włączone na tym serwerze - diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.ru.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.ru.tr deleted file mode 100644 index 85bed4b95..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.ru.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Ошибка: Команда “@1” не существует; ваш командный блок не был изменён. Используйте чат-команду “help” для поучения списка доступных команд. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Ошибка: Команда “@1” не существует; ваш командный блок не был изменён. Используйте чат-команду “help” для поучения списка доступных команд. Подсказка: Попробуйте убрать ведущий слэш. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Ошибка: Вы не имеете привилегий для использования команды “@1” (отсутствует привилегия: @2)! Командный блок не был изменён. -Error: No commander! Block must be replaced.=Ошибка: Нет командующего! Блок следует заменить. -Commander: @1=Командующий: @1 -Submit=Отправить -No commands.=Нет команд. -Commands:=Команды: -Help=Помощь -Placement denied. You need the “maphack” privilege to place command blocks.=Установка запрещена. Для установки командных блоков нужно иметь привилегию “maphack”. -Command Block=Командный блок -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Командные блоки это мощнейшие компоненты редстоуна, способные изменять реальность сами по себе. Другими словами, они могут заставлять сервер выполнять серверные команды, если подать на них энергию редстоуна. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Каждый может активировать командный блок и увидеть его команды, но не все могут редактировать и устанавливать его. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Чтобы увидеть команды в командном блоке, [используйте] его. Чтобы активировать блок, просто подайте на него энергию редстоуна. При этом команды выполнятся однократно. Чтобы выполнить их вновь, выключите и снова включите энергию редстоуна. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Чтобы иметь возможность устанавливать командные блоки и изменять их команды, вы должны находиться в творческом режиме и иметь привилегию “maphack”. Новый командный блок не содержит команд и ничего не делает. [Используйте] командный блок (в творческом режиме!) для редактирования его команд. Изучите справочную запись “Продвинутое использование > Серверные команды”, чтобы понять, как они работают. Каждая строка содержит одну команду. Вы вводите их так, как вводили бы в консоли, но без ведущих символов слэш. Команды выполняются сверху вниз. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Все команды будут выполняться от имени игрока, разместившего командный блок, как будто если бы игрок сам их набирал. Этот игрок является так называемым “командиром” блока. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Командные блоки поддерживаю шаблоны, вставляйте один из них - и они будут заменены на нужный вам текст: -• “@@c”: commander of this command block=• “@@c”: командир данного командного блока -• “@@n” or “@@p”: nearest player from the command block=• “@@n” или “@@p”: игрок, находящийся ближе всего к данному командному блоку -• “@@f” farthest player from the command block=• “@@f” игрок, находящийся дальше всего от данного командного блока -• “@@r”: random player currently in the world=• “@@r”: случайный игрок, в данный момент присутствующий в мире -• “@@@@”: literal “@@” sign=• “@@@@”: если нужно использовать символ “@@” сам по себе -Example 1:@n time 12000@nSets the game clock to 12:00=Пример 1:@n time 12000@nУстанавливает игровые часы на 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=Пример 2:@n give @@n mcl_core:apple 5@nДаёт ближайшему игроку 5 яблок -Access denied. You need the “maphack” privilege to edit command blocks.=Доступ запрещён. Вам нужно иметь привилегию “maphack”, чтобы редактировать командные блоки. -Editing the command block has failed! You can only change the command block in Creative Mode!=Попытка редактирования командного блока потерпела неудачу. Вы можете изменять командные блоки только в творческом режиме! -Editing the command block has failed! The command block is gone.=Попытка редактирования командного блока потерпела неудачу. Командный блок исчез. -Executes server commands when powered by redstone power=При подаче энергии редстоуна выполняет серверные команды -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/template.txt deleted file mode 100644 index 49e98ef2b..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/template.txt +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.= -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.= -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.= -Error: No commander! Block must be replaced.= -Commander: @1= -Submit= -No commands.= -Commands:= -Help= -Placement denied. You need the “maphack” privilege to place command blocks.= -Command Block= -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.= -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.= -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.= -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.= -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.= -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:= -• “@@c”: commander of this command block= -• “@@n” or “@@p”: nearest player from the command block= -• “@@f” farthest player from the command block= -• “@@r”: random player currently in the world= -• “@@@@”: literal “@@” sign= -Example 1:@n time 12000@nSets the game clock to 12:00= -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples= -Access denied. You need the “maphack” privilege to edit command blocks.= -Editing the command block has failed! You can only change the command block in Creative Mode!= -Editing the command block has failed! The command block is gone.= -Executes server commands when powered by redstone power= -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/mod.conf b/mods/ITEMS/REDSTONE/mesecons_commandblock/mod.conf deleted file mode 100644 index 26059530a..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_commandblock -depends = mesecons, mcl_colors, mcl_util -optional_depends = doc, doc_items diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_off.png b/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_off.png deleted file mode 100644 index 3df04792f..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_on.png b/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_on.png deleted file mode 100644 index 3df04792f..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/init.lua b/mods/ITEMS/REDSTONE/mesecons_delayer/init.lua deleted file mode 100644 index fc12c0a36..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/init.lua +++ /dev/null @@ -1,504 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local DELAYS = { 0.1, 0.2, 0.3, 0.4 } -local DEFAULT_DELAY = DELAYS[1] - --- Function that get the input/output rules of the delayer -local function delayer_get_output_rules(node) - local rules = {{x = -1, y = 0, z = 0, spread=true}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local function delayer_get_input_rules(node) - local rules = {{x = 1, y = 0, z = 0}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - --- Return the sides of a delayer. --- Those are used to toggle the lock state. -local function delayer_get_sides(node) - local rules = { - {x = 0, y = 0, z = -1}, - {x = 0, y = 0, z = 1}, - } - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - --- Make the repeater at pos try to lock any repeater it faces. --- Returns true if a repeater was locked. -local function check_lock_repeater(pos, node) - -- Check the repeater at pos and look if it faces - -- a repeater placed sideways. - -- If yes, lock the second repeater. - local r = delayer_get_output_rules(node)[1] - local lpos = vector.add(pos, r) - local lnode = minetest.get_node(lpos) - local ldef = minetest.registered_nodes[lnode.name] - local g = minetest.get_item_group(lnode.name, "redstone_repeater") - if g >= 1 and g <= 4 then - local lrs = delayer_get_input_rules(lnode) - local fail = false - for _, lr in pairs(lrs) do - if lr.x == r.x or lr.z == r.z then - fail = true - break - end - end - if not fail then - minetest.set_node(lpos, {name=ldef.delayer_lockstate, param2=lnode.param2}) - local meta = minetest.get_meta(lpos) - -- Metadata: delay. Used to remember the delay for locked repeaters. - -- The number is the torch position (1-4). - meta:set_int("delay", g) - return true - end - end - return false -end - --- Make the repeater at pos try to unlock any repeater it faces. --- Returns true if a repeater was unlocked. -local function check_unlock_repeater(pos, node) - -- Check the repeater at pos and look if it faces - -- a repeater placed sideways. - -- If yes, also check if the second repeater doesn't receive - -- a locking signal on the other side. If not, unlock the second repeater. - local r = delayer_get_output_rules(node)[1] - local lpos = vector.add(pos, r) - local lnode = minetest.get_node(lpos) - local ldef = minetest.registered_nodes[lnode.name] - local g = minetest.get_item_group(lnode.name, "redstone_repeater") - -- Are we facing a locked repeater? - if g == 5 then - -- First check the orientation of the faced repeater - local lrs = delayer_get_input_rules(lnode) - for _, lr in pairs(lrs) do - if lr.x == r.x or lr.z == r.z then - -- Invalid orientation. Do nothing - return false - end - end - -- Now we check if there's a powered repeater on the other side of the - -- locked repeater. - -- To get to the other side, we just take another step in the direction which we already face. - local other_side = vector.add(lpos, r) - local other_node = minetest.get_node(other_side) - if minetest.get_item_group(other_node.name, "redstone_repeater") ~= 0 and mesecon.is_receptor_on(other_node.name) then - -- Final check: The other repeater must also face the right way - local other_face = delayer_get_output_rules(other_node)[1] - local other_facing_pos = vector.add(other_side, other_face) - if vector.equals(other_facing_pos, lpos) then - -- Powered repeater found AND it's facing the locked repeater. Do NOT unlock! - return false - end - end - local lmeta = minetest.get_meta(lpos) - local ldelay = lmeta:get_int("delay") - if tonumber(ldelay) == nil or ldelay < 1 or ldelay > 4 then - ldelay = 1 - end - if mesecon.is_powered(lpos, delayer_get_input_rules(lnode)[1]) then - minetest.set_node(lpos, {name="mesecons_delayer:delayer_on_"..ldelay, param2=lnode.param2}) - mesecon.queue:add_action(lpos, "receptor_on", {delayer_get_output_rules(lnode)}, ldef.delayer_time, nil) - else - minetest.set_node(lpos, {name="mesecons_delayer:delayer_off_"..ldelay, param2=lnode.param2}) - mesecon.queue:add_action(lpos, "receptor_off", {delayer_get_output_rules(lnode)}, ldef.delayer_time, nil) - end - return true - end - return false -end - --- Functions that are called after the delay time -local function delayer_activate(pos, node) - local def = minetest.registered_nodes[node.name] - local time = def.delayer_time - minetest.set_node(pos, {name=def.delayer_onstate, param2=node.param2}) - mesecon.queue:add_action(pos, "receptor_on", {delayer_get_output_rules(node)}, time, nil) - check_lock_repeater(pos, node) -end - -local function delayer_deactivate(pos, node) - local def = minetest.registered_nodes[node.name] - local time = def.delayer_time - minetest.set_node(pos, {name=def.delayer_offstate, param2=node.param2}) - mesecon.queue:add_action(pos, "receptor_off", {delayer_get_output_rules(node)}, time, nil) - check_unlock_repeater(pos, node) -end - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.disallow -end - --- Register the 2 (states) x 4 (delay times) delayers - -for i = 1, 4 do - local groups - if i == 1 then - groups = {dig_immediate=3,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,attached_node=1,redstone_repeater=i} - else - groups = {dig_immediate=3,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,attached_node=1,redstone_repeater=i,not_in_creative_inventory=1} - end - - local delaytime = DELAYS[i] - - local boxes - if i == 1 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, 0/16, 1/16, -1/16, 2/16}, -- moved torch - } - elseif i == 2 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, -2/16, 1/16, -1/16, 0/16}, -- moved torch - } - elseif i == 3 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, -4/16, 1/16, -1/16, -2/16}, -- moved torch - } - elseif i == 4 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, -6/16, 1/16, -1/16, -4/16}, -- moved torch - } - end - - local help, tt, longdesc, usagehelp, icon, on_construct - if i == 1 then - help = true - tt = S("Transmits redstone power only in one direction").."\n".. - S("Delays signal").."\n".. - S("Output locks when getting active redstone repeater signal from the side") - longdesc = S("Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.") - usagehelp = S("To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.").."\n".. - S("To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.") - icon = "mesecons_delayer_item.png" - -- Check sides of constructed repeater and lock it, if required - on_construct = function(pos) - local node = minetest.get_node(pos) - local sides = delayer_get_sides(node) - for s=1, #sides do - local spos = vector.add(pos, sides[s]) - local snode = minetest.get_node(spos) - -- Is there a powered repeater at one of our sides? - local g = minetest.get_item_group(snode.name, "redstone_repeater") - if g ~= 0 and mesecon.is_receptor_on(snode.name) then - -- The other repeater must also face towards the constructed node - local sface = delayer_get_output_rules(snode)[1] - local sface_pos = vector.add(spos, sface) - if vector.equals(sface_pos, pos) then - -- Repeater is facing towards us! Now we just need to lock the costructed node - if mesecon.is_powered(pos, delayer_get_input_rules(node)[1]) ~= false then - local newnode = {name="mesecons_delayer:delayer_on_locked", param2 = node.param2} - minetest.set_node(pos, newnode) - mesecon.queue:add_action(pos, "receptor_on", {delayer_get_output_rules(newnode)}, DEFAULT_DELAY, nil) - else - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_locked", param2 = node.param2}) - end - break - end - end - end - end - else - help = false - end - - local desc_off - if i == 1 then - desc_off = S("Redstone Repeater") - else - desc_off = S("Redstone Repeater (Delay @1)", i) - end - - minetest.register_node("mesecons_delayer:delayer_off_"..tostring(i), { - description = desc_off, - inventory_image = icon, - wield_image = icon, - _tt_help = tt, - _doc_items_create_entry = help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = { - "mesecons_delayer_off.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_off.png", - "mesecons_delayer_sides_off.png", - "mesecons_delayer_ends_off.png", - "mesecons_delayer_ends_off.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - --wield_image = "mesecons_delayer_off.png", - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = groups, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - on_rightclick = function(pos, node, clicker) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - if node.name=="mesecons_delayer:delayer_off_1" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_2", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_2" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_3", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_3" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_4", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_4" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_1", param2=node.param2}) - end - end, - on_construct = on_construct, - delayer_time = delaytime, - delayer_onstate = "mesecons_delayer:delayer_on_"..tostring(i), - delayer_lockstate = "mesecons_delayer:delayer_off_locked", - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = { - state = mesecon.state.off, - rules = delayer_get_output_rules, - }, - effector = { - rules = delayer_get_input_rules, - action_on = delayer_activate, - }, - }, - on_rotate = on_rotate, - }) - - minetest.register_node("mesecons_delayer:delayer_on_"..tostring(i), { - description = S("Redstone Repeater (Delay @1, Powered)", i), - _doc_items_create_entry = false, - drawtype = "nodebox", - tiles = { - "mesecons_delayer_on.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_on.png", - "mesecons_delayer_sides_on.png", - "mesecons_delayer_ends_on.png", - "mesecons_delayer_ends_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = {dig_immediate = 3, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1, attached_node=1, redstone_repeater=i, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - on_rightclick = function(pos, node, clicker) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - --HACK! we already know the node name, so we should generate the function to avoid multiple checks - if node.name=="mesecons_delayer:delayer_on_1" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_2",param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_2" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_3",param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_3" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_4",param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_4" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_1",param2=node.param2}) - end - end, - after_dig_node = function(pos, oldnode) - check_unlock_repeater(pos, oldnode) - end, - delayer_time = delaytime, - delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i), - delayer_lockstate = "mesecons_delayer:delayer_on_locked", - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = { - state = mesecon.state.on, - rules = delayer_get_output_rules, - }, - effector = { - rules = delayer_get_input_rules, - action_off = delayer_deactivate, - }, - }, - on_rotate = on_rotate, - }) -end - - --- Locked repeater - -minetest.register_node("mesecons_delayer:delayer_off_locked", { - description = S("Redstone Repeater (Locked)"), - _doc_items_create_entry = false, - drawtype = "nodebox", - -- FIXME: Textures of torch and the lock bar overlap. Nodeboxes are (sadly) not suitable for this. - -- So this needs to be turned into a mesh. - tiles = { - "mesecons_delayer_locked_off.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_locked_off.png", - "mesecons_delayer_sides_locked_off.png", - "mesecons_delayer_front_locked_off.png", - "mesecons_delayer_end_locked_off.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - wield_image = "mesecons_delayer_locked_off.png", - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -6/16, -6/16, -1/16, 6/16, -4/16, 1/16}, -- lock - } - }, - groups = {dig_immediate = 3, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1, attached_node=1, redstone_repeater=5, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - delayer_time = DEFAULT_DELAY, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = - { - state = mesecon.state.off, - rules = delayer_get_output_rules - }, - effector = - { - rules = delayer_get_input_rules, - } - }, - on_rotate = on_rotate, -}) - -minetest.register_node("mesecons_delayer:delayer_on_locked", { - description = S("Redstone Repeater (Locked, Powered)"), - _doc_items_create_entry = false, - drawtype = "nodebox", - tiles = { - "mesecons_delayer_locked_on.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_locked_on.png", - "mesecons_delayer_sides_locked_on.png", - "mesecons_delayer_front_locked_on.png", - "mesecons_delayer_end_locked_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -6/16, -6/16, -1/16, 6/16, -4/16, 1/16}, -- lock - } - }, - after_dig_node = function(pos, oldnode) - check_unlock_repeater(pos, oldnode) - end, - groups = {dig_immediate = 3, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1, attached_node=1, redstone_repeater=5, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - delayer_time = DEFAULT_DELAY, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = - { - state = mesecon.state.on, - rules = delayer_get_output_rules - }, - effector = - { - rules = delayer_get_input_rules, - } - }, - on_rotate = on_rotate, -}) - -minetest.register_craft({ - output = "mesecons_delayer:delayer_off_1", - recipe = { - {"mesecons_torch:mesecon_torch_on", "mesecons:redstone", "mesecons_torch:mesecon_torch_on"}, - {"mcl_core:stone","mcl_core:stone", "mcl_core:stone"}, - } -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_2") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_3") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_4") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_locked") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_1") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_2") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_3") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_4") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_locked") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.de.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.de.tr deleted file mode 100644 index 45c959523..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.de.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Redstoneverstärker sind vielseitige Komponenten mit den folgenden Verwendungszwecken: 1.: Sie lassen Signale nur in eine Richtung durch. 2.: Sie verzögern das Signal. 3.: Sie können optional ihr Ausgangssignal sperren -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Um einen Redstoneverstärker zu versorgen, senden Sie ein Signal in „Pfeilrichtung“ (dem Eingang). Das Signal geht aus der gegenüberliegenden Seite (dem Ausgang) mit einer Verzögerung hinaus. Um die Verzögerung zu ändern, benutzen Sie den Redstoneverstärker. Die Verzögerung ist zwischen 0,1 bis 0,4 Sekunden lang und kann in Schritten von 0,1 Sekunden geändert werden. Das wird mit der Position der verschiebbaren Redstonefackel angezeigt. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Um einen Verstärker zu sperren, senden Sie ein Signal eines benachbarten Verstärkers in eines der Seiten. Im gesperrten Zustand verschwindet die verschiebbare Redstonefackel, die Ausgabe ändert sich nicht mehr und der Eingang wird ignoriert. -Redstone Repeater=Redstoneverstärker -Redstone Repeater (Powered)=Redstoneverstärker (bestromt) -Redstone Repeater (Locked)=Redstoneverstärker (gesperrt) -Redstone Repeater (Locked, Powered)=Redstoneverstärker (gesperrt, bestromt) -Redstone Repeater (Delay @1)=Redstoneverstärker (Verzögerung @1) -Redstone Repeater (Delay @1, Powered)=Redstoneverstärker (Verzögerung @1, bestromt) -Transmits redstone power only in one direction=Überträgt Redstoneenergie in nur eine Richtung -Delays signal=Verzögert Signal -Output locks when getting active redstone repeater signal from the side=Ausgangssignal wird gesperrt, wenn Signal von aktivem Redstoneverstärker an der Seite erhalten diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.es.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.es.tr deleted file mode 100644 index fd502c739..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Los repetidores Redstone son componentes versátiles de redstone con múltiples propósitos: 1. Solo permiten que las señales viajen en una dirección. 2. Retrasan la señal. 3. Opcionalmente, pueden bloquear su salida en un estado. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Para alimentar un repetidor de redstone, envíe una señal en la dirección de "flecha" (la entrada). La señal se apaga en el lado opuesto (la salida) con un retraso. Para cambiar el retraso, use el repetidor de redstone. El retraso es de entre 0.1 y 0.4 segundos y se puede cambiar en pasos de 0.1 segundos. Está indicado por la posición de la antorcha de redstone en movimiento. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Para bloquear un repetidor, envíe una señal desde un repetidor adyacente a uno de sus lados. Mientras está bloqueado, la antorcha de redstone en movimiento desaparece, la salida no cambia y la señal de entrada se ignora. -Redstone Repeater=Repetidor de redstone -Redstone Repeater (Powered)=Repetidor de redstone (Motorizado) -Redstone Repeater (Locked)=Repetidor de redstone (Bloqueado) -Redstone Repeater (Locked, Powered)=Repetidor de redstone (Bloqueado, Motorizado) -Redstone Repeater (Delay @1)=Repetidor de redstone (Retardar @1) -Redstone Repeater (Delay @1, Powered)=Repetidor de redstone (Retardar @1, Motorizado) diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.fr.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.fr.tr deleted file mode 100644 index e2831716e..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.fr.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Les répéteurs Redstone sont des composants Redstone polyvalents à usages multiples: 1. Ils ne permettent aux signaux de voyager que dans une seule direction. 2. Ils retardent le signal. 3. En option, ils peuvent verrouiller leur sortie dans un état. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Pour alimenter un répéteur redstone, envoyez un signal dans le sens de la «flèche» (l'entrée). Le signal s'éteint du côté opposé (la sortie) avec un retard. Pour modifier le délai, utilisez le répéteur redstone. Le délai est compris entre 0,1 et 0,4 seconde et peut être modifié par incréments de 0,1 seconde. Elle est indiquée par la position de la torche en pierre rouge en mouvement. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Pour verrouiller un répéteur, envoyez un signal d'un répéteur adjacent à l'un de ses côtés. Lorsqu'elle est verrouillée, la torche Redstone en mouvement disparaît, la sortie ne change pas et le signal d'entrée est ignoré. -Redstone Repeater=Répéteur Redstone -Redstone Repeater (Powered)=Répéteur Redstone (Alimenté) -Redstone Repeater (Locked)=Répéteur Redstone (Bloqué) -Redstone Repeater (Locked, Powered)=Répéteur Redstone (Bloqué, Alimenté) -Redstone Repeater (Delay @1)=Répéteur Redstone (Délai @1) -Redstone Repeater (Delay @1, Powered)=Répéteur Redstone (Délai @1, Alimenté) -Transmits redstone power only in one direction=Transmet la puissance de redstone seulement dans une direction -Delays signal=Retard du signal -Output locks when getting active redstone repeater signal from the side=La sortie se verrouille lorsque le signal du répéteur Redstone est actif sur le côté diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.pl.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.pl.tr deleted file mode 100644 index ed533e241..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.pl.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Przekaźniki są wszechstronnymi mechanizmami czerwienitowym z kilkoma funkcjami: 1. Pozwalają by sygnał podróżował tylko w jednym kierunku. 2. Opóźniają sygnał. 3. Opcjonalnie mogą zablokować swój output w jednym stanie. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Aby zasilić przekaźnik dostarcz sygnał w kierunku "strzałki" (wejście). Sygnał wyjściowy pojawi się po przeciwnej stronie z opóźnieniem. Aby zmienić opóźnienie kliknij użyj na przekaźniku. Możliwe opóźnienia są pomiędzy 0.1 a 0.4 sekundy i może być zmieniony używając przekaźnik co zmienia go o 0.1 sekundy. Opóźnienie jest oznaczone przez pozycję przesuwającej się pochodni. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Aby zablokować przekaźnik wyślij sygnał z przyległego przekaźnika w jeden z jego boków. Gdy jest zablokowany poruszająca się pochodnia znika, sygnał wyjściowy się nie zmienia, a sygnał wejściowy jest ignorowany. -Redstone Repeater=Przekaźnik czerwienitowy -Redstone Repeater (Powered)=Przekaźnik czerwienitowy (zasilony) -Redstone Repeater (Locked)=Przekaźnik czerwienitowy (zablokowany) -Redstone Repeater (Locked, Powered)=Przekaźnik czerwienitowy (zablokowany, zasilony) -Redstone Repeater (Delay @1)=Przekaźnik czerwienitowy (opóźnienie @1) -Redstone Repeater (Delay @1, Powered)=Przekaźnik czerwienitowy (opóźnienie @1, zasilony) -Transmits redstone power only in one direction=Przesyła energię czerwienitową w jednym kierunku -Delays signal=Opóźnia sygnał -Output locks when getting active redstone repeater signal from the side=Wyjście się blokuje przy otrzymywaniu zasilonego sygnału z przekaźnika z boku diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.ru.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.ru.tr deleted file mode 100644 index f95d3ee8e..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.ru.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Повторители это универсальные компоненты, выполняющие много задач: 1. Разрешают сигналам проходить только в одном направлении. 2. Задерживают сигнал. 3. Опционально они могут зафиксировать свой выходной сигнал в одном состоянии. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Чтобы подключить повторитель, подайте сигнал в направлении “стрелки” (на вход). Сигнал выйдет с противоположной стороны (с выхода) с задержкой. Чтобы изменить задержку, [используйте] повторитель. Время задержки лежит между 0.1 и 0.4 секунды и может изменяться с шагом 0.1 секунды. Его отражает положение передвигающегося факела редстоуна. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Чтобы зафиксировать повторитель, подайте сигнал от соседнего повторителя на одну из его сторон. При фиксации передвижной факел редстоуна исчезает, выходной сигнал не меняется, а входной сигнал игнорируется. -Redstone Repeater=Повторитель -Redstone Repeater (Powered)=Повторитель (подключённый) -Redstone Repeater (Locked)=Повторитель (зафиксированный) -Redstone Repeater (Locked, Powered)=Повторитель (зафиксированный, подключённый) -Redstone Repeater (Delay @1)=Повторитель (задержка @1) -Redstone Repeater (Delay @1, Powered)=Повторитель (задержка @1, подключённый) -Transmits redstone power only in one direction=Передаёт энергию редстоуна только в одном направлении -Delays signal=Задерживает сигнал -Output locks when getting active redstone repeater signal from the side=Выход фиксируется при наличии активного сигнала сбоку diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/template.txt deleted file mode 100644 index 580124804..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/template.txt +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.= -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.= -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.= -Redstone Repeater= -Redstone Repeater (Powered)= -Redstone Repeater (Locked)= -Redstone Repeater (Locked, Powered)= -Redstone Repeater (Delay @1)= -Redstone Repeater (Delay @1, Powered)= -Transmits redstone power only in one direction= -Delays signal= -Output locks when getting active redstone repeater signal from the side= diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf b/mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf deleted file mode 100644 index 3f8446239..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_delayer -depends = mesecons -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_off.png deleted file mode 100644 index bee3eeb07..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_on.png deleted file mode 100644 index 3347f1b62..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_off.png deleted file mode 100644 index ed6f4a030..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_on.png deleted file mode 100644 index 8569fcd2f..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_off.png deleted file mode 100644 index e8cff329a..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_on.png deleted file mode 100644 index 59ca93822..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_item.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_item.png deleted file mode 100644 index 1d2797151..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_item.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_off.png deleted file mode 100644 index 3a5482a9e..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_on.png deleted file mode 100644 index 7e905a645..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_off.png deleted file mode 100644 index ed33c4224..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_on.png deleted file mode 100644 index 2456cf022..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_off.png deleted file mode 100644 index 8b857bddc..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_on.png deleted file mode 100644 index c98e9d180..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_off.png deleted file mode 100644 index 326dbe63e..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_on.png deleted file mode 100644 index bab909eb3..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/init.lua b/mods/ITEMS/REDSTONE/mesecons_lightstone/init.lua deleted file mode 100644 index 0e517e4dc..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/init.lua +++ /dev/null @@ -1,54 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local light = minetest.LIGHT_MAX - -minetest.register_node("mesecons_lightstone:lightstone_off", { - tiles = {"jeija_lightstone_gray_off.png"}, - groups = {handy=1, mesecon_effector_off = 1, mesecon = 2}, - is_ground_content = false, - description= S("Redstone Lamp"), - _tt_help = S("Glows when powered by redstone power"), - _doc_items_longdesc = S("Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.", light), - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {effector = { - action_on = function(pos, node) - minetest.swap_node(pos, {name="mesecons_lightstone:lightstone_on", param2 = node.param2}) - end, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, -}) - -minetest.register_node("mesecons_lightstone:lightstone_on", { - tiles = {"jeija_lightstone_gray_on.png"}, - groups = {handy=1, not_in_creative_inventory=1, mesecon = 2, opaque = 1}, - drop = "node mesecons_lightstone:lightstone_off", - is_ground_content = false, - paramtype = "light", - light_source = light, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {effector = { - action_off = function(pos, node) - minetest.swap_node(pos, {name="mesecons_lightstone:lightstone_off", param2 = node.param2}) - end, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, -}) - -minetest.register_craft({ - output = "mesecons_lightstone:lightstone_off", - recipe = { - {"","mesecons:redstone",""}, - {"mesecons:redstone","mcl_nether:glowstone","mesecons:redstone"}, - {"","mesecons:redstone",""}, - } -}) - --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_lightstone:lightstone_off", "nodes", "mesecons_lightstone:lightstone_on") -end - diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.de.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.de.tr deleted file mode 100644 index a0cfc2213..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.de.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Redstonelampe -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Redstonelampen sind einfache Redstonekomponenten, die hell aufleuchten (Helligkeitspegel von @1), wenn sie Redstoneenergie erhalten. -Glows when powered by redstone power=Leuchtet, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.es.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.es.tr deleted file mode 100644 index 713f0be5e..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Lámpara de redstone -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Las lámparas Redstone son componentes simples de redstone que brillan intensamente (nivel de luz @ 1) cuando reciben energía de redstone. diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.fr.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.fr.tr deleted file mode 100644 index 16601ace6..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Lampe Redstone -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Les lampes Redstone sont de simples composants Redstone qui brillent (niveau de lumière @1) lorsqu'elles reçoivent une puissance Redstone. -Glows when powered by redstone power=Brille lorsqu'il est alimenté par la puissance Redstone diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.pl.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.pl.tr deleted file mode 100644 index cd2f755c9..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Lampa czerwienitowa -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Lampy czerwienitowe to mechanizmy czerwienitowe, które jasno świecą (poziom światła @1), gdy są zasilone energią czerwienitową. -Glows when powered by redstone power=Świeci gdy zasilana czerwienitem diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.ru.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.ru.tr deleted file mode 100644 index cd1592a28..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Лампа редстоуна -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Лампа редстоуна это простой компонент редстоуна, который ярко светится (уровень света @1) при подаче на него энергии редстоуна. -Glows when powered by redstone power=Светит при подаче энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/template.txt deleted file mode 100644 index 2d2cc419f..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp= -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.= -Glows when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/mod.conf b/mods/ITEMS/REDSTONE/mesecons_lightstone/mod.conf deleted file mode 100644 index 95811bd27..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_lightstone -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_off.png b/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_off.png deleted file mode 100644 index 7f0c18b70..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_on.png b/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_on.png deleted file mode 100644 index b2f44e7b0..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua b/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua deleted file mode 100644 index 6e4616299..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua +++ /dev/null @@ -1,913 +0,0 @@ -local table = table - ---register stoppers for movestones/pistons - -mesecon.mvps_stoppers = {} -mesecon.mvps_unsticky = {} -mesecon.mvps_droppers = {} -mesecon.on_mvps_move = {} -mesecon.mvps_unmov = {} - ---- Objects (entities) that cannot be moved -function mesecon.register_mvps_unmov(objectname) - mesecon.mvps_unmov[objectname] = true; -end - -function mesecon.is_mvps_unmov(objectname) - return mesecon.mvps_unmov[objectname] -end - -function mesecon.is_mvps_dropper(node, pushdir, stack, stackid) - local get_dropper = mesecon.mvps_droppers[node.name] - if type (get_dropper) == "function" then - get_dropper = get_dropper(node, pushdir, stack, stackid) - end - if not get_dropper then - get_dropper = minetest.get_item_group(node.name, "dig_by_piston") == 1 - end - return get_dropper -end - -function mesecon.register_mvps_dropper(nodename, get_dropper) - if get_dropper == nil then - get_dropper = true - end - mesecon.mvps_droppers[nodename] = get_dropper -end - --- Nodes that cannot be pushed / pulled by movestones, pistons -function mesecon.is_mvps_stopper(node) - -- unknown nodes are always stoppers - return mesecon.mvps_stoppers[node.name] or not minetest.registered_nodes[node.name] -end - -function mesecon.register_mvps_stopper(nodename) - mesecon.mvps_stoppers[nodename] = true -end - --- For nodes which ignore sticky sides. --- They can't be pulled by sticky pistons and don't interact with slime blocks. -function mesecon.register_mvps_unsticky(nodename, get_unsticky) - if get_unsticky == nil then - get_unsticky = true - end - mesecon.mvps_unsticky[nodename] = get_unsticky -end - -function mesecon.is_mvps_unsticky(node, pulldir, stack, stackid) - -- unknown nodes are always unsticky - if not minetest.registered_nodes[node.name] then - return true - end - - local get_unsticky = mesecon.mvps_unsticky[node.name] - if type(get_unsticky) == "function" then - get_unsticky = get_unsticky(node, pulldir, stack, stackid) - end - - return get_unsticky -end - --- Functions to be called on mvps movement --- See also the callback -function mesecon.register_on_mvps_move(callback) - mesecon.on_mvps_move[#mesecon.on_mvps_move+1] = callback -end - -local function on_mvps_move(moved_nodes) - for _, callback in ipairs(mesecon.on_mvps_move) do - callback(moved_nodes) - end -end - -function mesecon.mvps_process_stack(stack) - -- update mesecons for placed nodes ( has to be done after all nodes have been added ) - for _, n in ipairs(stack) do - mesecon.on_placenode(n.pos, minetest.get_node(n.pos)) - end -end - --- tests if the node can be pushed into, e.g. air, water, grass -local function node_replaceable(name) - if name == "ignore" then return true end - - if minetest.registered_nodes[name] then - return minetest.registered_nodes[name].buildable_to or false - end - - return false -end - -local function is_available(pos) - local n = minetest.get_node(pos) - if not n then - return false, n - end - local name = n.name - if name == "ignore" then - minetest.get_voxel_manip():read_from_map(pos, pos) - n = minetest.get_node(pos) - if not n then - return false, n - end - name = n.name - end - if name == "ignore" then - return false, n - end - if minetest.registered_nodes[name] then - return minetest.registered_nodes[name].buildable_to, n or false, n - end - return false, n -end - - -function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos) - -- determine the number of nodes to be pushed - local nodes = {} - local frontiers = {pos} - - while #frontiers > 0 do - local np = frontiers[1] - local nn = minetest.get_node(np) - if nn.name == "ignore" then - minetest.get_voxel_manip():read_from_map(np, np) - nn = minetest.get_node(np) - end - - if mesecon.is_mvps_stopper(nn) then - return - end - - if not node_replaceable(nn.name) then - if #nodes >= maximum then return nil, false end - table.insert(nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}}) - - -- add connected nodes to frontiers, connected is a vector list - -- the vectors must be absolute positions - local connected = {} - local has_loop - if minetest.registered_nodes[nn.name] - and minetest.registered_nodes[nn.name].mvps_sticky then - connected, has_loop = minetest.registered_nodes[nn.name].mvps_sticky(np, nn, piston_pos) - if has_loop then - return {}, true - end - end - - table.insert(connected, vector.add(np, dir)) - - -- Make sure there are no duplicates in frontiers / nodes before - -- adding nodes in "connected" to frontiers - for _, cp in ipairs(connected) do - local duplicate = false - for _, rp in ipairs(nodes) do - if vector.equals(cp, rp.pos) then - duplicate = true - end - end - for _, fp in ipairs(frontiers) do - if vector.equals(cp, fp) then - duplicate = true - end - end - if not duplicate and not mesecon.is_mvps_stopper(minetest.get_node(cp)) then - table.insert(frontiers, cp) - end - end - end - table.remove(frontiers, 1) - end - - return nodes, false -end - -function mesecon.mvps_set_owner(pos, placer) - local meta = minetest.get_meta(pos) - local owner = placer and placer.get_player_name and placer:get_player_name() - if owner and owner ~= "" then - meta:set_string("owner", owner) - else - meta:set_string("owner", "$unknown") -- to distinguish from older pistons - end -end - -local function are_protected(nodes, player_name) - for _, node in pairs(nodes) do - if minetest.is_protected(node.pos, player_name) then - return true - end - end - return false -end - -function mesecon.mvps_push(pos, dir, maximum, player_name, piston_pos) - return mesecon.mvps_push_or_pull(pos, dir, dir, maximum, player_name, piston_pos) -end - -function mesecon.mvps_pull_single(pos, dir, maximum, player_name, piston_pos) - local nodes = mesecon.mvps_get_stack(pos, dir, maximum, player_name, piston_pos) - - if not nodes then return end - -- ensure sticky pistons; even without slimeblocks attached adhere to the unpullable rule. - for id, n in ipairs(nodes) do - if not mesecon.is_mvps_unsticky(n.node, dir, nodes, id) then - return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum, player_name, piston_pos) - end - end -end - --- pos: pos of mvps; stackdir: direction of building the stack --- movedir: direction of actual movement --- maximum: maximum nodes to be pushed -function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name, piston_pos) - local nodes, has_loop = mesecon.mvps_get_stack(pos, movedir, maximum, piston_pos) - - if has_loop then - return false - end - - if not nodes then return end - - local newpos={} - -- check node availability to push/pull into, and fill newpos[i] - for i in ipairs(nodes) do - newpos[i] = vector.add(nodes[i].pos, movedir) - if (newpos[i].x == piston_pos.x) and (newpos[i].y == piston_pos.y) and (newpos[i].z == piston_pos.z) then - return - end - if not is_available(newpos[i]) then - local available = false - for j in ipairs(nodes) do - if i ~= j then - if (newpos[i].x == nodes[j].pos.x) and (newpos[i].y == nodes[j].pos.y) and (newpos[i].z == nodes[j].pos.z) then - available = true - break - end - end - end - if not available then - return - end - end - end - - if are_protected(nodes, player_name) then - return - end - - local first_dropper = nil - -- remove all nodes - for id, n in ipairs(nodes) do - n.meta = minetest.get_meta(n.pos):to_table() - local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, nodes, id) - if is_dropper then - --local drops = minetest.get_node_drops(n.node.name, "") - minetest.dig_node(n.pos) - else - minetest.remove_node(n.pos) - local node_timer = minetest.get_node_timer(n.pos) - if node_timer:is_started() then - n.node_timer = {node_timer:get_timeout(), node_timer:get_elapsed()} - end - end - if is_dropper then - first_dropper = id - break - end - end - - -- update mesecons for removed nodes ( has to be done after all nodes have been removed ) - for id, n in ipairs(nodes) do - if first_dropper and id >= first_dropper then - break - end - mesecon.on_dignode(n.pos, n.node) - end - - -- add nodes - for id, n in ipairs(nodes) do - if first_dropper and id >= first_dropper then - break - end - local np = newpos[id] - minetest.add_node(np, n.node) - minetest.get_meta(np):from_table(n.meta) - if n.node_timer then - minetest.get_node_timer(np):set(unpack(n.node_timer)) - end - if string.find(n.node.name, "mcl_observers:observer") then - -- It also counts as a block update when the observer itself is moved by a piston (Wiki): - mcl_observers.observer_activate(np) - end - end - - local moved_nodes = {} - local oldstack = mesecon.tablecopy(nodes) - for i in ipairs(nodes) do - if first_dropper and i >= first_dropper then - break - end - moved_nodes[i] = {} - moved_nodes[i].oldpos = nodes[i].pos - nodes[i].pos = newpos[i] - moved_nodes[i].pos = nodes[i].pos - moved_nodes[i].node = nodes[i].node - moved_nodes[i].meta = nodes[i].meta - moved_nodes[i].node_timer = nodes[i].node_timer - end - - on_mvps_move(moved_nodes) - - return true, nodes, oldstack -end - -function mesecon.mvps_move_objects(pos, dir, nodestack) - local objects_to_move = {} - - -- Move object at tip of stack, pushpos is position at tip of stack - local pushpos = vector.add(pos, vector.multiply(dir, #nodestack)) - - local objects = minetest.get_objects_inside_radius(pushpos, 1) - for _, obj in ipairs(objects) do - table.insert(objects_to_move, obj) - end - - -- Move objects lying/standing on the stack (before it was pushed - oldstack) - if tonumber(minetest.settings:get("movement_gravity")) > 0 and dir.y == 0 then - -- If gravity positive and dir horizontal, push players standing on the stack - for _, n in ipairs(nodestack) do - local p_above = vector.add(n.pos, {x=0, y=1, z=0}) - local objects = minetest.get_objects_inside_radius(p_above, 1) - for _, obj in ipairs(objects) do - table.insert(objects_to_move, obj) - end - end - end - - for _, obj in ipairs(objects_to_move) do - local entity = obj:get_luaentity() - if not entity or not mesecon.is_mvps_unmov(entity.name) then - local np = vector.add(obj:get_pos(), dir) - - --move only if destination is not solid - local nn = minetest.get_node(np) - if not ((not minetest.registered_nodes[nn.name]) - or minetest.registered_nodes[nn.name].walkable) then - obj:set_pos(np) - end - end - end -end - --- Unmovable by design: nodes -mesecon.register_mvps_stopper("mcl_core:barrier") -mesecon.register_mvps_stopper("mcl_core:realm_barrier") -mesecon.register_mvps_stopper("mcl_core:void") -mesecon.register_mvps_stopper("mcl_core:bedrock") -mesecon.register_mvps_stopper("mcl_core:obsidian") -mesecon.register_mvps_stopper("mcl_chests:ender_chest") -mesecon.register_mvps_stopper("mcl_chests:ender_chest_small") -mesecon.register_mvps_stopper("mcl_mobspawners:spawner") -mesecon.register_mvps_stopper("mesecons_commandblock:commandblock_off") -mesecon.register_mvps_stopper("mesecons_commandblock:commandblock_on") -mesecon.register_mvps_stopper("mcl_portals:portal") -mesecon.register_mvps_stopper("mcl_portals:portal_end") -mesecon.register_mvps_stopper("mcl_portals:end_portal_frame") -mesecon.register_mvps_stopper("mcl_portals:end_portal_frame_eye") -mesecon.register_mvps_stopper("mcl_enchanting:table") -mesecon.register_mvps_stopper("mcl_jukebox:jukebox") -mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_on") -mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_off") -mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on") -mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off") -mesecon.register_mvps_stopper("mcl_banners:hanging_banner") -mesecon.register_mvps_stopper("mcl_banners:standing_banner") - --- Unmovable by technical restrictions. --- Open formspec would screw up if node is destroyed (minor problem) --- Would screw up on/off state of trapped chest (big problem) -mesecon.register_mvps_stopper("mcl_furnaces:furnace") -mesecon.register_mvps_stopper("mcl_furnaces:furnace_active") -mesecon.register_mvps_stopper("mcl_hoppers:hopper") -mesecon.register_mvps_stopper("mcl_hoppers:hopper_side") -mesecon.register_mvps_stopper("mcl_droppers:dropper") -mesecon.register_mvps_stopper("mcl_droppers:dropper_up") -mesecon.register_mvps_stopper("mcl_droppers:dropper_down") -mesecon.register_mvps_stopper("mcl_dispensers:dispenser") -mesecon.register_mvps_stopper("mcl_dispensers:dispenser_up") -mesecon.register_mvps_stopper("mcl_dispensers:dispenser_down") -mesecon.register_mvps_stopper("mcl_anvils:anvil") -mesecon.register_mvps_stopper("mcl_anvils:anvil_damage_1") -mesecon.register_mvps_stopper("mcl_anvils:anvil_damage_2") -mesecon.register_mvps_stopper("mcl_chests:chest") -mesecon.register_mvps_stopper("mcl_chests:chest_small") -mesecon.register_mvps_stopper("mcl_chests:chest_left") -mesecon.register_mvps_stopper("mcl_chests:chest_right") -mesecon.register_mvps_stopper("mcl_chests:trapped_chest") -mesecon.register_mvps_stopper("mcl_chests:trapped_chest_small") -mesecon.register_mvps_stopper("mcl_chests:trapped_chest_left") -mesecon.register_mvps_stopper("mcl_chests:trapped_chest_right") -mesecon.register_mvps_stopper("mcl_signs:wall_sign") -mesecon.register_mvps_stopper("mcl_signs:standing_sign") -mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5") -mesecon.register_mvps_stopper("mcl_signs:standing_sign45") -mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5") -mesecon.register_mvps_stopper("mcl_barrels:barrel_open") -mesecon.register_mvps_stopper("mcl_barrels:barrel_closed") - - --- Unmovable by design: objects -mesecon.register_mvps_unmov("mcl_enchanting:book") -mesecon.register_mvps_unmov("mcl_chests:chest") -mesecon.register_mvps_unmov("mcl_banners:hanging_banner") -mesecon.register_mvps_unmov("mcl_banners:standing_banner") -mesecon.register_mvps_unmov("mcl_signs:text") -mesecon.register_mvps_unmov("mcl_mobspawners:doll") -mesecon.register_mvps_unmov("mcl_armor_stand:armor_entity") -mesecon.register_mvps_unmov("mcl_itemframes:item") -mesecon.register_mvps_unmov("mcl_itemframes:map") -mesecon.register_mvps_unmov("mcl_paintings:painting") -mesecon.register_mvps_unmov("mcl_end:crystal") - - --- Unpullable by design: nodes --- Glazed Terracotta -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_red") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_orange") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_yellow") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_green") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_lime") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_purple") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_magenta") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_blue") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_cyan") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_white") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_grey") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_silver") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_black") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_brown") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_light_blue") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_pink") --- Beds -mesecon.register_mvps_unsticky("mcl_beds:bed_black_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_black_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_blue_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_blue_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_brown_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_brown_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_cyan_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_cyan_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_green_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_green_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_grey_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_grey_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_light_blue_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_light_blue_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_lime_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_lime_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_magenta_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_magenta_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_orange_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_orange_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_pink_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_pink_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_purple_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_purple_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_red_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_red_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_silver_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_silver_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_white_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_white_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_bottom") --- Buttons -mesecon.register_mvps_unsticky("mesecons_button:button_stone_off") -mesecon.register_mvps_unsticky("mesecons_button:button_stone_on") -mesecon.register_mvps_unsticky("mesecons_button:button_wood_off") -mesecon.register_mvps_unsticky("mesecons_button:button_wood_on") -mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_off") -mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_on") -mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_off") -mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_on") -mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_off") -mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_on") -mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_off") -mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_on") -mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_off") -mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_on") --- Cactus, Sugarcane & Vines -mesecon.register_mvps_unsticky("mcl_core:cactus") -mesecon.register_mvps_unsticky("mcl_core:reeds") -mesecon.register_mvps_unsticky("mcl_core:vine") --- Cake -mesecon.register_mvps_unsticky("mcl_cake:cake_1") -mesecon.register_mvps_unsticky("mcl_cake:cake_2") -mesecon.register_mvps_unsticky("mcl_cake:cake_3") -mesecon.register_mvps_unsticky("mcl_cake:cake_4") -mesecon.register_mvps_unsticky("mcl_cake:cake_5") -mesecon.register_mvps_unsticky("mcl_cake:cake_6") -mesecon.register_mvps_unsticky("mcl_cake:cake") --- Carpet -mesecon.register_mvps_unsticky("mcl_wool:black_carpet") -mesecon.register_mvps_unsticky("mcl_wool:blue_carpet") -mesecon.register_mvps_unsticky("mcl_wool:brown_carpet") -mesecon.register_mvps_unsticky("mcl_wool:cyan_carpet") -mesecon.register_mvps_unsticky("mcl_wool:green_carpet") -mesecon.register_mvps_unsticky("mcl_wool:grey_carpet") -mesecon.register_mvps_unsticky("mcl_wool:light_blue_carpet") -mesecon.register_mvps_unsticky("mcl_wool:lime_carpet") -mesecon.register_mvps_unsticky("mcl_wool:orange_carpet") -mesecon.register_mvps_unsticky("mcl_wool:magenta_carpet") -mesecon.register_mvps_unsticky("mcl_wool:pink_carpet") -mesecon.register_mvps_unsticky("mcl_wool:purple_carpet") -mesecon.register_mvps_unsticky("mcl_wool:red_carpet") -mesecon.register_mvps_unsticky("mcl_wool:silver_carpet") -mesecon.register_mvps_unsticky("mcl_wool:white_carpet") -mesecon.register_mvps_unsticky("mcl_wool:yellow_carpet") --- Carved & Jack O'Lantern Pumpkins, Pumpkin & Melon -mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face") -mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face_light") -mesecon.register_mvps_unsticky("mcl_farming:pumpkin") -mesecon.register_mvps_unsticky("mcl_farming:melon") --- Chorus Plant & Flower -mesecon.register_mvps_unsticky("mcl_end:chorus_plant") -mesecon.register_mvps_unsticky("mcl_end:chorus_flower") --- Cobweb -mesecon.register_mvps_unsticky("mcl_core:cobweb") --- Cocoa -mesecon.register_mvps_unsticky("mcl_cocoas:cocoa_1") -mesecon.register_mvps_unsticky("mcl_cocoas:cocoa_2") -mesecon.register_mvps_unsticky("mcl_cocoas:cocoa_3") --- Doors -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_b_2") --- Dragon Egg -mesecon.register_mvps_unsticky("mcl_end:dragon_egg") --- Fire -mesecon.register_mvps_unsticky("mcl_fire:fire") -mesecon.register_mvps_unsticky("mcl_fire:eternal_fire") --- Flower Pots -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_allium") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_azure_bluet") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_blue_orchid") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_dandelion") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_fern") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_oxeye_daisy") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_poppy") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_orange") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_pink") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_red") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_white") --- Flowers, Lilypad & Dead Bush -mesecon.register_mvps_unsticky("mcl_core:deadbush") -mesecon.register_mvps_unsticky("mcl_flowers:allium") -mesecon.register_mvps_unsticky("mcl_flowers:azure_bluet") -mesecon.register_mvps_unsticky("mcl_flowers:blue_orchid") -mesecon.register_mvps_unsticky("mcl_flowers:dandelion") -mesecon.register_mvps_unsticky("mcl_flowers:double_fern") -mesecon.register_mvps_unsticky("mcl_flowers:double_fern_top") -mesecon.register_mvps_unsticky("mcl_flowers:fern") -mesecon.register_mvps_unsticky("mcl_flowers:lilac") -mesecon.register_mvps_unsticky("mcl_flowers:lilac_top") -mesecon.register_mvps_unsticky("mcl_flowers:oxeye_daisy") -mesecon.register_mvps_unsticky("mcl_flowers:peony") -mesecon.register_mvps_unsticky("mcl_flowers:peony_top") -mesecon.register_mvps_unsticky("mcl_flowers:poppy") -mesecon.register_mvps_unsticky("mcl_flowers:rose_bush") -mesecon.register_mvps_unsticky("mcl_flowers:rose_bush_top") -mesecon.register_mvps_unsticky("mcl_flowers:sunflower") -mesecon.register_mvps_unsticky("mcl_flowers:sunflower_top") -mesecon.register_mvps_unsticky("mcl_flowers:tallgrass") -mesecon.register_mvps_unsticky("mcl_flowers:double_grass") -mesecon.register_mvps_unsticky("mcl_flowers:double_grass_top") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_orange") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_pink") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_red") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_white") -mesecon.register_mvps_unsticky("mcl_flowers:waterlily") --- Heads -mesecon.register_mvps_unsticky("mcl_heads:creeper") -mesecon.register_mvps_unsticky("mcl_heads:skeleton") -mesecon.register_mvps_unsticky("mcl_heads:steve") -mesecon.register_mvps_unsticky("mcl_heads:wither_skeleton") -mesecon.register_mvps_unsticky("mcl_heads:zombie") --- Item Frame -mesecon.register_mvps_unsticky("mcl_itemframes:item_frame") --- Ladder -mesecon.register_mvps_unsticky("mcl_core:ladder") --- Lava & Water -mesecon.register_mvps_unsticky("mcl_core:lava_source") -mesecon.register_mvps_unsticky("mcl_core:lava_flowing") -mesecon.register_mvps_unsticky("mcl_core:water_source") -mesecon.register_mvps_unsticky("mcl_core:water_flowing") -mesecon.register_mvps_unsticky("mclx_core:river_water_source") -mesecon.register_mvps_unsticky("mclx_core:river_water_flowing") --- Leaves -mesecon.register_mvps_unsticky("mcl_core:leaves") -mesecon.register_mvps_unsticky("mcl_core:acacialeaves") -mesecon.register_mvps_unsticky("mcl_core:birchleaves") -mesecon.register_mvps_unsticky("mcl_core:darkleaves") -mesecon.register_mvps_unsticky("mcl_core:spruceleaves") -mesecon.register_mvps_unsticky("mcl_core:jungleleaves") --- Lever -mesecon.register_mvps_unsticky("mesecons_walllever:wall_lever_off") -mesecon.register_mvps_unsticky("mesecons_walllever:wall_lever_on") --- Mushrooms, Nether Wart & Amethyst -mesecon.register_mvps_unsticky("mcl_mushroom:mushroom_brown") -mesecon.register_mvps_unsticky("mcl_mushroom:mushroom_red") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart_0") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart_1") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart_2") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart") -mesecon.register_mvps_unsticky("mcl_amethyst:amethyst_cluster") -mesecon.register_mvps_unsticky("mcl_amethyst:budding_amethyst_block") --- Pressure Plates -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_wood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_wood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_stone_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_stone_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_acaciawood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_acaciawoood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_birchwood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_birchwood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_darkwood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_darkwood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_sprucekwood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_sprucewood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_junglewood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_junglewood_off") --- Redstone Comparators -mesecon.register_mvps_unsticky("mcl_comparators:comparator_on_sub") -mesecon.register_mvps_unsticky("mcl_comparators:comparator_off_sub") -mesecon.register_mvps_unsticky("mcl_comparators:comparator_on_comp") -mesecon.register_mvps_unsticky("mcl_comparators:comparator_off_comp") --- Redstone Dust -mesecon.register_mvps_unsticky("mesecons:wire_00000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_00100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_00010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10001000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10001000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11001000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11001000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10101000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10101000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10011000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10011000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01000100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01000100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11000100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11000100_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100100_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010100_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11001100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11001100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111100_off") -mesecon.register_mvps_unsticky("mesecons:wire_00100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_00100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10101010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10101010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111010_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100110_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100110_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110110_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111110_off") -mesecon.register_mvps_unsticky("mesecons:wire_00010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_00010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10011001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10011001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111001_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010101_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010101_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110101_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111101_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111011_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111011_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111011_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111011_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110111_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110111_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110111_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110111_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111111_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111111_off") --- Redstone Repeater -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_1") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_2") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_3") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_4") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_1") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_2") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_3") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_4") --- Redstone Torch -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_on") -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_off") -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_on_wall") -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_off_wall") --- Sea Pickle -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_1_dead_brain_coral_block") -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_2_dead_brain_coral_block") -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_3_dead_brain_coral_block") -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_4_dead_brain_coral_block") --- Shulker chests -mesecon.register_mvps_unsticky("mcl_chests:black_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:blue_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:brown_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:cyan_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:green_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:grey_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:light_blue_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:lime_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:orange_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:magenta_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:pink_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:purple_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:red_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:silver_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:white_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:yellow_shulker_box_small") --- Snow -mesecon.register_mvps_unsticky("mcl_core:snow") -mesecon.register_mvps_unsticky("mcl_core:snow_2") -mesecon.register_mvps_unsticky("mcl_core:snow_3") -mesecon.register_mvps_unsticky("mcl_core:snow_4") -mesecon.register_mvps_unsticky("mcl_core:snow_5") -mesecon.register_mvps_unsticky("mcl_core:snow_6") -mesecon.register_mvps_unsticky("mcl_core:snow_7") -mesecon.register_mvps_unsticky("mcl_core:snow_8") --- Torch -mesecon.register_mvps_unsticky("mcl_torches:torch") -mesecon.register_mvps_unsticky("mcl_torches:torch_wall") --- Wheat -mesecon.register_mvps_unsticky("mcl_farming:wheat") -mesecon.register_mvps_unsticky("mcl_farming:wheat_2") -mesecon.register_mvps_unsticky("mcl_farming:wheat_3") -mesecon.register_mvps_unsticky("mcl_farming:wheat_4") -mesecon.register_mvps_unsticky("mcl_farming:wheat_5") -mesecon.register_mvps_unsticky("mcl_farming:wheat_6") -mesecon.register_mvps_unsticky("mcl_farming:wheat_7") - --- Includes node heat when moving them -mesecon.register_on_mvps_move(mesecon.move_hot_nodes) - -mesecon.register_on_mvps_move(function(moved_nodes) - for i = 1, #moved_nodes do - local moved_node = moved_nodes[i] - -- Check for falling after moving node - mesecon.on_placenode(moved_node.pos, moved_node.node) - minetest.after(0, function() - minetest.check_for_falling(moved_node.oldpos) - minetest.check_for_falling(moved_node.pos) - end) - - -- Callback for on_mvps_move stored in nodedef - local node_def = minetest.registered_nodes[moved_node.node.name] - if node_def and node_def.mesecon and node_def.mesecon.on_mvps_move then - node_def.mesecon.on_mvps_move(moved_node.pos, moved_node.node, - moved_node.oldpos, moved_node.meta) - end - end -end) diff --git a/mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf b/mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf deleted file mode 100644 index 3e347879f..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mesecons_mvps -depends = mesecons diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/README.txt b/mods/ITEMS/REDSTONE/mesecons_noteblock/README.txt deleted file mode 100644 index dd6822a36..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/README.txt +++ /dev/null @@ -1,57 +0,0 @@ -Credits of sound files: - -Note: Most sounds have not been used verbatim, but tweaked a little to be more suitable for the noteblock mod. - -### Sounds licensed CC0: - - * by freesound.org user AmateurJ - * Source: https://freesound.org/people/AmateurJ/sounds/399523/ -* mesecons_noteblock_bass_drum.ogg - * by freesound.org user Mattc90 - * Source: https://freesound.org/people/Mattc90/sounds/264285/ -* mesecons_noteblock_bell.ogg - * by opengameart.org user Brandon75689 - * Source: https://opengameart.org/content/point-bell -* mesecons_noteblock_chime.ogg - * by freesound.org user - * Source: https://freesound.org/people/ikonochris/sounds/213380/ -* mesecons_noteblock_cowbell.ogg - * by freesound.org user timgormly - * Source: https://freesound.org/people/timgormly/sounds/159760/ -* mesecons_noteblock_flute.ogg - * by freesound.org user menegass - * Source: https://freesound.org/people/menegass/sounds/107307/ -* mesecons_noteblock_bass_guitar.ogg - * by freesound.org user Vres - * Source: https://freesound.org/people/Vres/sounds/133024/ -* mesecons_noteblock_hit.ogg - * by freesound.org user rubberduck - * Source: https://opengameart.org/content/100-cc0-sfx -* mesecons_noteblock_piano_digital.ogg - * by freesound.org user monotraum - * Source: https://freesound.org/people/monotraum/sounds/208889/ -* mesecons_noteblock_squarewave.ogg - * by Wuzzy -* mesecons_noteblock_xylophone_metal.ogg - * by freesound.org user JappeHallunken - * Source: https://freesound.org/people/JappeHallunken/sounds/501300/ -* mesecons_noteblock_xylophone_wood.ogg - * by freesound.org user connersaw8 - * Source: https://freesound.org/people/connersaw8/sounds/125271/ - -### Sounds licensed CC BY 3.0: - -* mesecons_noteblock_bass_guitar.ogg - * by freesound.org user Kyster - * Source: https://freesound.org/people/Kyster/sounds/117707/ -* mesecons_noteblock_didgeridoo.ogg - * by freesound.org user InspectorJ - * Source: https://freesound.org/people/InspectorJ/sounds/398272/ - -Everything else: -Created by Mesecons authors, licensed CC BY 3.0. - --------------------- -License links: -* CC0: http://creativecommons.org/publicdomain/zero/1.0/ -* CC BY 3.0: http://creativecommons.org/licenses/by/3.0/ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/init.lua b/mods/ITEMS/REDSTONE/mesecons_noteblock/init.lua deleted file mode 100644 index ac56d8bc5..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/init.lua +++ /dev/null @@ -1,199 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math - -minetest.register_node("mesecons_noteblock:noteblock", { - description = S("Note Block"), - _tt_help = S("Plays a musical note when powered by redstone power"), - _doc_items_longdesc = S("A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power."), - _doc_items_usagehelp = S("Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:").."\n\n".. - -S("• Glass: Sticks").."\n".. -S("• Wood: Bass guitar").."\n".. -S("• Stone: Bass drum").."\n".. -S("• Sand or gravel: Snare drum").."\n".. -S("• Block of Gold: Bell").."\n".. -S("• Clay: Flute").."\n".. -S("• Packed Ice: Chime").."\n".. -S("• Wool: Guitar").."\n".. -S("• Bone Block: Xylophne").."\n".. -S("• Block of Iron: Iron xylophne").."\n".. -S("• Soul Sand: Cow bell").."\n".. -S("• Pumpkin: Didgeridoo").."\n".. -S("• Block of Emerald: Square wave").."\n".. -S("• Hay Bale: Banjo").."\n".. -S("• Glowstone: Electric piano").."\n".. -S("• Anything else: Piano").."\n\n".. - -S("The note block will only play a note when it is below air, otherwise, it stays silent."), - tiles = {"mesecons_noteblock.png"}, - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - is_ground_content = false, - place_param2 = 0, - on_rightclick = function(pos, node, clicker) -- change sound when rightclicked - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - node.param2 = (node.param2+1)%25 - mesecon.noteblock_play(pos, node.param2) - minetest.set_node(pos, node) - end, - on_punch = function(pos, node) -- play current sound when punched - mesecon.noteblock_play(pos, node.param2) - end, - sounds = mcl_sounds.node_sound_wood_defaults(), - mesecons = {effector = { -- play sound when activated - action_on = function(pos, node) - mesecon.noteblock_play(pos, node.param2) - end, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_craft({ - output = "mesecons_noteblock:noteblock", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "mesecons:redstone", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mesecons_noteblock:noteblock", - burntime = 15 -}) - -local soundnames_piano = { - [0] = "mesecons_noteblock_c", - "mesecons_noteblock_csharp", - "mesecons_noteblock_d", - "mesecons_noteblock_dsharp", - "mesecons_noteblock_e", - "mesecons_noteblock_f", - "mesecons_noteblock_fsharp", - "mesecons_noteblock_g", - "mesecons_noteblock_gsharp", - "mesecons_noteblock_a", - "mesecons_noteblock_asharp", - "mesecons_noteblock_b", - - "mesecons_noteblock_c2", - "mesecons_noteblock_csharp2", - "mesecons_noteblock_d2", - "mesecons_noteblock_dsharp2", - "mesecons_noteblock_e2", - "mesecons_noteblock_f2", - "mesecons_noteblock_fsharp2", - "mesecons_noteblock_g2", - "mesecons_noteblock_gsharp2", - "mesecons_noteblock_a2", - "mesecons_noteblock_asharp2", - "mesecons_noteblock_b2", - - -- TODO: Add dedicated sound file? - "mesecons_noteblock_b2", -} - -local function param2_to_note_color(param2) - local r, g, b - if param2 < 8 then -- 0..7 - -- More red, less green - r = param2 / 8 * 255 - g = (8-param2) / 8 * 255 - b = 0 - elseif param2 < 16 then -- 0..15 - -- More blue, less red - r = (8-(param2 - 8)) / 8 * 255 - g = 0 - b = (param2 - 8) / 8 * 255 - else -- 16..24 - -- More green, less blue - r = 0 - g = (param2 - 16) / 9 * 255 - b = (9-(param2 - 16)) / 9 * 255 - end - r = math.floor(r) - g = math.floor(g) - b = math.floor(b) - local color = 0x10000 * r + 0x100 * g + b - -- Convert to ColorString - return string.format("#%06X", color) -end - -local function param2_to_pitch(param2) - return 2^((param2-12)/12) -end - -function mesecon.noteblock_play(pos, param2) - local block_above_name = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name - if block_above_name ~= "air" then - -- Don't play sound if no air is above - return - end - - local block_below_name = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name - local pitched = false - local soundname, pitch - if block_below_name == "mcl_core:goldblock" then - soundname="mesecons_noteblock_bell" - elseif block_below_name == "mcl_core:clay" then - soundname="mesecons_noteblock_flute" - elseif block_below_name == "mcl_core:packed_ice" then - soundname="mesecons_noteblock_chime" - elseif block_below_name == "mcl_core:bone_block" then - soundname="mesecons_noteblock_xylophone_wood" - elseif block_below_name == "mcl_core:ironblock" then - soundname="mesecons_noteblock_xylophone_metal" - elseif block_below_name == "mcl_nether:soul_sand" then - soundname="mesecons_noteblock_cowbell" - elseif block_below_name == "mcl_farming:pumpkin" or block_below_name == "mcl_farming:pumpkin_face" or block_below_name == "mcl_farming:pumpkin_face_light" then - soundname="mesecons_noteblock_didgeridoo" - elseif block_below_name == "mcl_core:emeraldblock" then - soundname="mesecons_noteblock_squarewave" - elseif block_below_name == "mcl_farming:hay_block" then - soundname="mesecons_noteblock_banjo" - elseif block_below_name == "mcl_nether:glowstone" then - soundname="mesecons_noteblock_piano_digital" - elseif minetest.get_item_group(block_below_name, "wool") ~= 0 then - soundname="mesecons_noteblock_guitar" - elseif minetest.get_item_group(block_below_name, "material_glass") ~= 0 then - soundname="mesecons_noteblock_hit" - elseif minetest.get_item_group(block_below_name, "material_wood") ~= 0 then - soundname="mesecons_noteblock_bass_guitar" - elseif minetest.get_item_group(block_below_name, "material_sand") ~= 0 then - soundname="mesecons_noteblock_snare" - elseif minetest.get_item_group(block_below_name, "material_stone") ~= 0 then - soundname="mesecons_noteblock_bass_drum" - else - -- Default: One of 25 piano notes - soundname = soundnames_piano[param2] - -- Workaround: Final sound gets automatic higher pitch instead - if param2 == 24 then - pitch = 2^(1/12) - end - pitched = true - end - if not pitched then - pitch = param2_to_pitch(param2) - end - - local note_color = param2_to_note_color(param2) - - minetest.add_particle({ - texture = "mcl_particles_note.png^[colorize:"..note_color..":92", - pos = { x = pos.x, y = pos.y + 0.35, z = pos.z }, - velocity = { x = 0, y = 2, z = 0 }, - acceleration = { x = 0, y = -2, z = 0 }, - expirationtime = 1.0, - collisiondetection = false, - size = 3, - }) - minetest.sound_play(soundname, - {pos = pos, gain = 1.0, max_hear_distance = 48, pitch = pitch}) -end diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.de.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.de.tr deleted file mode 100644 index b3fe22247..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.de.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Notenblock -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Ein Notenblock ist ein musikalischer Block, der eine von vielen Noten von verschiedenen Instrumenten spielt, wenn er geschlagen oder mit Redstoneenergie versorgt wird. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Benutzen Sie den Notenblock, um die nächste Musiknote zu wählen (es gibt 25 Halbtöne bzw. oder 2 Oktaven). Das gespielte Instrument hängt vom Material des Blocks unter dem Notenblock ab: -• Glass: Sticks=• Glas: Stöcke -• Wood: Bass guitar=• Holz: Bassgitarre -• Stone: Bass drum=• Stein: Basstrommel -• Sand or gravel: Snare drum=• Sand oder Kies: Kleine Trommel -• Block of Gold: Bell=• Goldblock: Glocke -• Clay: Flute=• Ton: Flöte -• Packed Ice: Chime=• Packeis: Glockenspiel -• Wool: Guitar=• Wolle: Gitarre -• Bone Block: Xylophne=• Knochenblock: Xylophon -• Block of Iron: Iron xylophne=• Eisenblock: Eisenxylophon -• Soul Sand: Cow bell=• Seelensand: Kuhglocke -• Pumpkin: Didgeridoo=• Kürbis: Didgeridoo -• Block of Emerald: Square wave=• Smaragdblock: Rechteckschwingung -• Hay Bale: Banjo=• Heuballen: Banjo -• Glowstone: Electric piano=• Leuchtstein: E-Piano -• Anything else: Piano=• Alles andere: Klavier -The note block will only play a note when it is below air, otherwise, it stays silent.=Der Notenblock wird nur eine Note spielen, wenn er sich unter Luft befindet, sonst bleibt er stumm. -Plays a musical note when powered by redstone power=Spielt eine Musiknote, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.es.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.es.tr deleted file mode 100644 index 123862d2d..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Bloque musical -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Un bloque de notas es un bloque musical que reproduce una de las muchas notas musicales e instrumentos diferentes cuando se golpea o se le suministra energía de redstone. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Use el bloque de notas para elegir la siguiente nota musical (hay 25 semitonos, o 2 octavas). El instrumento jugado depende del material del bloque debajo del bloque de nota: -• Glass: Sticks=• Cristal: Palos -• Wood: Bass guitar=• Madera: Bajo -• Stone: Bass drum=• Piedra: Bombo -• Sand or gravel: Snare drum=• Arena o grava: tambor -• Anything else: Piano=• Cualquier otra cosa: piano -The note block will only play a note when it is below air, otherwise, it stays silent.=El bloque de notas solo reproducirá una nota cuando esté debajo del aire, de lo contrario, permanecerá en silencio. diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.fr.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.fr.tr deleted file mode 100644 index f8d8e3d75..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.fr.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Bloc de notes -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Un bloc de notes est un bloc musical qui joue l'une des nombreuses notes de musique et différents instruments lorsqu'il est frappé ou alimenté en redstone. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Utilisez le bloc de notes pour choisir la prochaine note de musique (il y a 25 demi-tons ou 2 octaves). L'instrument joué dépend du matériau du bloc situé sous le bloc de notes: -• Glass: Sticks=• Glass: Sticks -• Wood: Bass guitar=• Bois: Guitare Basse -• Stone: Bass drum=• Pierre: Grosse caisse -• Sand or gravel: Snare drum=• Sable ou gravier: Caisse claire -• Block of Gold: Bell=• Bloc d'OR: Cloche -• Clay: Flute=• Argile: Flûte -• Packed Ice: Chime=• Glace tassée: Carillon -• Wool: Guitar=• Laine: Guitare -• Bone Block: Xylophne=• Bloc osseux: Xylophne -• Block of Iron: Iron xylophne=• Bloc de fer: Xylophone en fer -• Soul Sand: Cow bell=• Soul Sand: Cloche de vache -• Pumpkin: Didgeridoo=• Citrouille: Didgeridoo -• Block of Emerald: Square wave=• Bloc d'émeraude: Onde carrée -• Hay Bale: Banjo=• Hay Bale: Banjo -• Glowstone: Electric piano=• Glowstone: Piano Electrique -• Anything else: Piano=• Autres: Piano -The note block will only play a note when it is below air, otherwise, it stays silent.=Le bloc de notes ne jouera une note que lorsqu'il est sous l'air, sinon il reste silencieux. -Plays a musical note when powered by redstone power=Joue une note de musique lorsqu'il est alimenté par une puissance redstone diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.pl.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.pl.tr deleted file mode 100644 index fbf31bc16..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.pl.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Blok nuty -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Blok nuty jest muzycznym blokiem, który gra jedną z wielu muzycznych nut różnych instrumentów gdy jest uderzony, lub zasilony czerwienitem. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Użyj bloku nuty aby wybrać następną muzyczną nutę (możliwe jest 25 półtonów, lub 2 oktawy). Zagrany instrument zależy od materiału znajdującego się pod blokiem nuty: -• Glass: Sticks=• Szkło: patyki -• Wood: Bass guitar=• Drewno: gitara basowa -• Stone: Bass drum=• Kamień: bęben -• Sand or gravel: Snare drum=• Piasek lub żwir: bęben mały -• Anything else: Piano=• Cokolwiek innego: pianino -• Block of Gold: Bell=• Blok złota: dzwon -• Clay: Flute=• Glina: flet -• Packed Ice: Chime=• Zbity lud: cymbałki -• Wool: Guitar=• Wełna: gitara -• Bone Block: Xylophne=• Blok kości: ksylofon -• Block of Iron: Iron xylophne=• Blok żelaza: żelazny ksylofon -• Soul Sand: Cow bell=• Piasek dusz: krowi dzwonek -• Pumpkin: Didgeridoo=• Dynia: Didgeridoo -• Block of Emerald: Square wave=• Blok szmaragdu: fala kwadratowa -• Hay Bale: Banjo=• Bela siana: banjo -• Glowstone: Electric piano=• Jasnogłaz: elektryczne pianino -The note block will only play a note when it is below air, otherwise, it stays silent.=Blok nuty gra tylko gdy jest poniżej powietrza, w przeciwnym przypadku będzie cichy. -Plays a musical note when powered by redstone power=Gra muzyczną nutę gdy zasilana energię czerwienitową diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.ru.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.ru.tr deleted file mode 100644 index fbac4366f..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.ru.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Нотный блок -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Нотный блок это музыкальный блок, который при ударе, а также при подаче энергии редстоуна проигрывает одну из множества музыкальных нот различными инструментами. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=[Используйте] нотный блок, чтобы выбрать следующую ноту (всего предусмотрено 25 полутонов или 2 октавы). Проигрываемый инструмент зависит от материала, который находится непосредственно под нотным блоком. -• Glass: Sticks=• Стекло: палочки -• Wood: Bass guitar=• Дерево: бас-гитара -• Stone: Bass drum=• Камень: бочка -• Sand or gravel: Snare drum=• Песок или гравий: барабан -• Anything else: Piano=• Что-либо другое: фортепиано -• Block of Gold: Bell=• Золотой блок: колокол -• Clay: Flute=• Глина: флейта -• Packed Ice: Chime=• Упакованный лёд: звон -• Wool: Guitar=• Шерсть: гитара -• Bone Block: Xylophne=• Костный блок: ксилофон -• Block of Iron: Iron xylophne=• Железный блок: металлофон -• Soul Sand: Cow bell=• Песок душ: колокольчик -• Pumpkin: Didgeridoo=• Тыква: диджериду -• Block of Emerald: Square wave=• Изумрудный блок: прямоугольный сигнал -• Hay Bale: Banjo=• Стог сена: банджо -• Glowstone: Electric piano=• Электронное фортепиано -The note block will only play a note when it is below air, otherwise, it stays silent.=Нотный блок проигрывает ноту только когда над ним имеется воздух, в противном случае он остаётся тихим. -Plays a musical note when powered by redstone power=Проигрывает ноту при подключении энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/template.txt deleted file mode 100644 index 2bc0e2b46..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/template.txt +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block= -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.= -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:= -• Glass: Sticks= -• Wood: Bass guitar= -• Stone: Bass drum= -• Sand or gravel: Snare drum= -• Anything else: Piano= -• Block of Gold: Bell= -• Clay: Flute= -• Packed Ice: Chime= -• Wool: Guitar= -• Bone Block: Xylophne= -• Block of Iron: Iron xylophne= -• Soul Sand: Cow bell= -• Pumpkin: Didgeridoo= -• Block of Emerald: Square wave= -• Hay Bale: Banjo= -• Glowstone: Electric piano= -The note block will only play a note when it is below air, otherwise, it stays silent.= -Plays a musical note when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/mod.conf b/mods/ITEMS/REDSTONE/mesecons_noteblock/mod.conf deleted file mode 100644 index c388e7a26..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mesecons_noteblock -depends = mesecons, mcl_particles diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg deleted file mode 100644 index 331fc1cc6..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg deleted file mode 100644 index 695b0f4eb..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg deleted file mode 100644 index db96aedb6..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg deleted file mode 100644 index 27bd09df8..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg deleted file mode 100644 index 810fe18f1..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg deleted file mode 100644 index 3de1250df..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_banjo.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_banjo.ogg deleted file mode 100644 index 62d93d579..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_banjo.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_drum.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_drum.ogg deleted file mode 100644 index c470537ed..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_drum.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_guitar.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_guitar.ogg deleted file mode 100644 index 48069d8e7..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_guitar.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bell.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bell.ogg deleted file mode 100644 index 6758e2c75..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bell.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg deleted file mode 100644 index 5c60d3158..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg deleted file mode 100644 index 724db7ded..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_chime.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_chime.ogg deleted file mode 100644 index 4c1312634..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_chime.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_cowbell.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_cowbell.ogg deleted file mode 100644 index 32b4c9fbe..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_cowbell.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg deleted file mode 100644 index 12c1ef380..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg deleted file mode 100644 index fc7f6c883..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg deleted file mode 100644 index 929b7fbae..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg deleted file mode 100644 index dfd702b11..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_didgeridoo.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_didgeridoo.ogg deleted file mode 100644 index 221cd8446..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_didgeridoo.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg deleted file mode 100644 index eb6045d48..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg deleted file mode 100644 index 5ac16ddec..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg deleted file mode 100644 index 94977e0d0..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg deleted file mode 100644 index 1dcc0c4a5..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg deleted file mode 100644 index 221d9264c..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg deleted file mode 100644 index acf10dbb9..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_flute.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_flute.ogg deleted file mode 100644 index 3a8bbc6ab..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_flute.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg deleted file mode 100644 index 7af83a8eb..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg deleted file mode 100644 index a96f63710..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg deleted file mode 100644 index 480ca3679..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg deleted file mode 100644 index 917b2b9cd..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg deleted file mode 100644 index 2e71fea06..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg deleted file mode 100644 index 941c68562..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_guitar.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_guitar.ogg deleted file mode 100644 index 1dcd5b838..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_guitar.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_hit.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_hit.ogg deleted file mode 100644 index cf8a5bfd7..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_hit.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_piano_digital.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_piano_digital.ogg deleted file mode 100644 index 6461a7005..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_piano_digital.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg deleted file mode 100644 index 329a43b4d..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_squarewave.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_squarewave.ogg deleted file mode 100644 index b6bc5c445..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_squarewave.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_metal.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_metal.ogg deleted file mode 100644 index 2d99327f7..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_metal.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_wood.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_wood.ogg deleted file mode 100644 index 5598f62d6..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_wood.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/textures/mesecons_noteblock.png b/mods/ITEMS/REDSTONE/mesecons_noteblock/textures/mesecons_noteblock.png deleted file mode 100644 index 6a481363f..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/textures/mesecons_noteblock.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/init.lua b/mods/ITEMS/REDSTONE/mesecons_pistons/init.lua deleted file mode 100644 index 93b8df96d..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/init.lua +++ /dev/null @@ -1,904 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local PISTON_MAXIMUM_PUSH = 12 - ---Get mesecon rules of pistons - ---everything apart from z- (pusher side) -local piston_rules = { - {x=0, y=0, z=1}, - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=1, z=0}, - {x=0, y=-1, z=0}, -} - ---everything apart from y+ (pusher side) -local piston_up_rules = { - {x=0, y=0, z=-1}, - {x=0, y=0, z=1}, - {x=-1, y=0, z=0}, - {x=1, y=0, z=0}, - {x=0, y=-1, z=0}, -} - ---everything apart from y- (pusher side) -local piston_down_rules = { - {x=0, y=0, z=-1}, - {x=0, y=0, z=1}, - {x=-1, y=0, z=0}, - {x=1, y=0, z=0}, - {x=0, y=1, z=0}, -} - -local function piston_get_rules(node) - local rules = piston_rules - for i = 1, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local function piston_facedir_direction(node) - local rules = {{x = 0, y = 0, z = -1}} - for i = 1, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules[1] -end - -local function piston_get_direction(dir, node) - if type(dir) == "function" then - return dir(node) - else - return dir - end -end - --- Remove pusher of piston. --- To be used when piston was destroyed or dug. -local function piston_remove_pusher(pos, oldnode) - local pistonspec = minetest.registered_nodes[oldnode.name].mesecons_piston - - local dir = piston_get_direction(pistonspec.dir, oldnode) - local pusherpos = vector.add(pos, dir) - local pushername = minetest.get_node(pusherpos).name - - if pushername == pistonspec.pusher then -- make sure there actually is a pusher - minetest.remove_node(pusherpos) - minetest.check_for_falling(pusherpos) - minetest.sound_play("piston_retract", { - pos = pos, - max_hear_distance = 31, - gain = 0.3, - }, true) - end -end - --- Remove base node of piston. --- To be used when pusher was destroyed. -local function piston_remove_base(pos, oldnode) - local basenodename = minetest.registered_nodes[oldnode.name].corresponding_piston - local pistonspec = minetest.registered_nodes[basenodename].mesecons_piston - - local dir = piston_get_direction(pistonspec.dir, oldnode) - local basepos = vector.subtract(pos, dir) - local basename = minetest.get_node(basepos).name - - if basename == pistonspec.onname then -- make sure there actually is a base node - minetest.remove_node(basepos) - minetest.check_for_falling(basepos) - minetest.sound_play("piston_retract", { - pos = pos, - max_hear_distance = 31, - gain = 0.3, - }, true) - end -end - -local function piston_on(pos, node) - local pistonspec = minetest.registered_nodes[node.name].mesecons_piston - - local dir = piston_get_direction(pistonspec.dir, node) - local np = vector.add(pos, dir) - local meta = minetest.get_meta(pos) - local success, stack, oldstack = mesecon.mvps_push(np, dir, PISTON_MAXIMUM_PUSH, meta:get_string("owner"), pos) - if success then - minetest.swap_node(pos, {param2 = node.param2, name = pistonspec.onname}) - minetest.set_node(np, {param2 = node.param2, name = pistonspec.pusher}) - local below = minetest.get_node({x=np.x,y=np.y-1,z=np.z}) - if below.name == "mcl_farming:soil" or below.name == "mcl_farming:soil_wet" then - minetest.set_node({x=np.x,y=np.y-1,z=np.z}, {name = "mcl_core:dirt"}) - end - mesecon.mvps_process_stack(stack) - mesecon.mvps_move_objects(np, dir, oldstack) - minetest.sound_play("piston_extend", { - pos = pos, - max_hear_distance = 31, - gain = 0.3, - }, true) - end -end - -local function piston_off(pos, node) - local pistonspec = minetest.registered_nodes[node.name].mesecons_piston - minetest.swap_node(pos, {param2 = node.param2, name = pistonspec.offname}) - piston_remove_pusher (pos, node) - if not pistonspec.sticky then - return - end - - local dir = piston_get_direction(pistonspec.dir, node) - local pullpos = vector.add(pos, vector.multiply(dir, 2)) - local meta = minetest.get_meta(pos) - local success, stack = mesecon.mvps_pull_single(pullpos, vector.multiply(dir, -1), PISTON_MAXIMUM_PUSH, meta:get_string("owner"), pos) - if success then - mesecon.mvps_process_stack(pos, dir, stack) - end -end - -local function piston_orientate(pos, placer) - mesecon.mvps_set_owner(pos, placer) - - -- not placed by player - if not placer then return end - - -- placer pitch in degrees - local pitch = placer:get_look_vertical() * (180 / math.pi) - - local node = minetest.get_node(pos) - local pistonspec = minetest.registered_nodes[node.name].mesecons_piston - if pitch > 55 then - minetest.add_node(pos, {name=pistonspec.piston_up}) - elseif pitch < -55 then - minetest.add_node(pos, {name=pistonspec.piston_down}) - end -end - - --- Horizontal pistons - -local pt = 4/16 -- pusher thickness - -local piston_pusher_box = { - type = "fixed", - fixed = { - {-2/16, -2/16, -.5 + pt, 2/16, 2/16, .5 + pt}, - {-.5 , -.5 , -.5 , .5 , .5 , -.5 + pt}, - }, -} - -local piston_on_box = { - type = "fixed", - fixed = { - {-.5, -.5, -.5 + pt, .5, .5, .5} - }, -} - - --- Normal (non-sticky) ones: - -local pistonspec_normal = { - offname = "mesecons_pistons:piston_normal_off", - onname = "mesecons_pistons:piston_normal_on", - dir = piston_facedir_direction, - pusher = "mesecons_pistons:piston_pusher_normal", - piston_down = "mesecons_pistons:piston_down_normal_off", - piston_up = "mesecons_pistons:piston_up_normal_off", -} - -local usagehelp_piston = S("This block can have one of 6 possible orientations.") - --- offstate -minetest.register_node("mesecons_pistons:piston_normal_off", { - description = S("Piston"), - _tt_help = S("Pushes block when powered by redstone power"), - _doc_items_longdesc = S("A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however."), - _doc_items_usagehelp = usagehelp_piston, - tiles = { - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png^[transformR90", - "mesecons_piston_bottom.png^[transformR270", - "mesecons_piston_back.png", - "mesecons_piston_pusher_front.png" - }, - groups = {handy=1, piston=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - after_place_node = piston_orientate, - mesecons_piston = pistonspec_normal, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_on = piston_on, - rules = piston_get_rules - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_AXIS then - minetest.set_node(pos, {name="mesecons_pistons:piston_up_normal_off"}) - return true - end - end, -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_normal_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png^[transformR90", - "mesecons_piston_bottom.png^[transformR270", - "mesecons_piston_back.png", - "mesecons_piston_on_front.png" - }, - groups = {handy=1, piston=1, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_normal_off", - after_destruct = piston_remove_pusher, - node_box = piston_on_box, - selection_box = piston_on_box, - mesecons_piston = pistonspec_normal, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_off = piston_off, - rules = piston_get_rules - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = false, -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_pusher_normal", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_top.png", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_left.png", - "mesecons_piston_pusher_right.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front.png" - }, - paramtype = "light", - paramtype2 = "facedir", - groups = {piston_pusher=1}, - is_ground_content = false, - after_destruct = piston_remove_base, - diggable = false, - drop = "", - corresponding_piston = "mesecons_pistons:piston_normal_on", - selection_box = piston_pusher_box, - node_box = piston_pusher_box, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 0.5, - on_rotate = false, -}) - --- Sticky ones - -local pistonspec_sticky = { - offname = "mesecons_pistons:piston_sticky_off", - onname = "mesecons_pistons:piston_sticky_on", - dir = piston_facedir_direction, - pusher = "mesecons_pistons:piston_pusher_sticky", - sticky = true, - piston_down = "mesecons_pistons:piston_down_sticky_off", - piston_up = "mesecons_pistons:piston_up_sticky_off", -} - --- offstate -minetest.register_node("mesecons_pistons:piston_sticky_off", { - description = S("Sticky Piston"), - _tt_help = S("Pushes or pulls block when powered by redstone power"), - _doc_items_longdesc = S("A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled."), - _doc_items_usagehelp = usagehelp_piston, - - tiles = { - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png^[transformR90", - "mesecons_piston_bottom.png^[transformR270", - "mesecons_piston_back.png", - "mesecons_piston_pusher_front_sticky.png" - }, - groups = {handy=1, piston=2}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - after_place_node = piston_orientate, - mesecons_piston = pistonspec_sticky, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_on = piston_on, - rules = piston_get_rules - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_AXIS then - minetest.set_node(pos, {name="mesecons_pistons:piston_up_sticky_off"}) - return true - end - end, -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_sticky_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png^[transformR90", - "mesecons_piston_bottom.png^[transformR270", - "mesecons_piston_back.png", - "mesecons_piston_on_front.png" - }, - groups = {handy=1, piston=2, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_sticky_off", - after_destruct = piston_remove_pusher, - node_box = piston_on_box, - selection_box = piston_on_box, - mesecons_piston = pistonspec_sticky, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_off = piston_off, - rules = piston_get_rules - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = false, -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_pusher_sticky", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_top.png", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_left.png", - "mesecons_piston_pusher_right.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front_sticky.png" - }, - paramtype = "light", - paramtype2 = "facedir", - groups = {piston_pusher=2}, - is_ground_content = false, - after_destruct = piston_remove_base, - diggable = false, - drop = "", - corresponding_piston = "mesecons_pistons:piston_sticky_on", - selection_box = piston_pusher_box, - node_box = piston_pusher_box, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 0.5, - on_rotate = false, -}) - --- --- --- UP --- --- - -local piston_up_pusher_box = { - type = "fixed", - fixed = { - {-2/16, -.5 - pt, -2/16, 2/16, .5 - pt, 2/16}, - {-.5 , .5 - pt, -.5 , .5 , .5 , .5}, - }, -} - -local piston_up_on_box = { - type = "fixed", - fixed = { - {-.5, -.5, -.5 , .5, .5-pt, .5} - }, -} - --- Normal - -local pistonspec_normal_up = { - offname = "mesecons_pistons:piston_up_normal_off", - onname = "mesecons_pistons:piston_up_normal_on", - dir = {x = 0, y = 1, z = 0}, - pusher = "mesecons_pistons:piston_up_pusher_normal", -} - --- offstate -minetest.register_node("mesecons_pistons:piston_up_normal_off", { - tiles = { - "mesecons_piston_pusher_front.png", - "mesecons_piston_back.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - }, - groups = {handy=1, piston=1, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_normal_off", - mesecons_piston = pistonspec_normal_up, - mesecons = { - effector = { - action_on = piston_on, - rules = piston_up_rules, - }, - }, - sounds = mcl_sounds.node_sound_stone_defaults({ - footstep = mcl_sounds.node_sound_wood_defaults().footstep - }), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_AXIS then - minetest.set_node(pos, {name="mesecons_pistons:piston_down_normal_off"}) - return true - end - return false - end, -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_up_normal_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_on_front.png", - "mesecons_piston_back.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - }, - groups = {handy=1, piston_=1, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_normal_off", - after_destruct = piston_remove_pusher, - node_box = piston_up_on_box, - selection_box = piston_up_on_box, - mesecons_piston = pistonspec_normal_up, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_off = piston_off, - rules = piston_up_rules, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = false, -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_up_pusher_normal", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_front.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_left.png^[transformR270", - "mesecons_piston_pusher_right.png^[transformR90", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_top.png^[transformR180", - }, - paramtype = "light", - paramtype2 = "facedir", - groups = {piston_pusher=1}, - is_ground_content = false, - after_destruct = piston_remove_base, - diggable = false, - drop = "", - corresponding_piston = "mesecons_pistons:piston_up_normal_on", - selection_box = piston_up_pusher_box, - node_box = piston_up_pusher_box, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 0.5, - on_rotate = false, -}) - - - --- Sticky - - -local pistonspec_sticky_up = { - offname = "mesecons_pistons:piston_up_sticky_off", - onname = "mesecons_pistons:piston_up_sticky_on", - dir = {x = 0, y = 1, z = 0}, - pusher = "mesecons_pistons:piston_up_pusher_sticky", - sticky = true, -} - --- offstate -minetest.register_node("mesecons_pistons:piston_up_sticky_off", { - tiles = { - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_back.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - }, - groups = {handy=1, piston=2, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_sticky_off", - mesecons_piston = pistonspec_sticky_up, - sounds = mcl_sounds.node_sound_stone_defaults({ - footstep = mcl_sounds.node_sound_wood_defaults().footstep - }), - mesecons = { - effector = { - action_on = piston_on, - rules = piston_up_rules, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_AXIS then - minetest.set_node(pos, {name="mesecons_pistons:piston_down_sticky_off"}) - return true - end - return false - end, -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_up_sticky_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_on_front.png", - "mesecons_piston_back.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - "mesecons_piston_bottom.png", - }, - groups = {handy=1, piston=2, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_sticky_off", - after_destruct = piston_remove_pusher, - node_box = piston_up_on_box, - selection_box = piston_up_on_box, - mesecons_piston = pistonspec_sticky_up, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_off = piston_off, - rules = piston_up_rules, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = false, -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_up_pusher_sticky", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_left.png^[transformR270", - "mesecons_piston_pusher_right.png^[transformR90", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_top.png^[transformR180", - }, - paramtype = "light", - paramtype2 = "facedir", - groups = {piston_pusher=2}, - is_ground_content = false, - after_destruct = piston_remove_base, - diggable = false, - drop = "", - corresponding_piston = "mesecons_pistons:piston_up_sticky_on", - selection_box = piston_up_pusher_box, - node_box = piston_up_pusher_box, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 0.5, - on_rotate = false, -}) - --- --- --- DOWN --- --- - -local piston_down_pusher_box = { - type = "fixed", - fixed = { - {-2/16, -.5 + pt, -2/16, 2/16, .5 + pt, 2/16}, - {-.5 , -.5 , -.5 , .5 , -.5 + pt, .5}, - }, -} - -local piston_down_on_box = { - type = "fixed", - fixed = { - {-.5, -.5+pt, -.5 , .5, .5, .5} - }, -} - - - --- Normal - -local pistonspec_normal_down = { - offname = "mesecons_pistons:piston_down_normal_off", - onname = "mesecons_pistons:piston_down_normal_on", - dir = {x = 0, y = -1, z = 0}, - pusher = "mesecons_pistons:piston_down_pusher_normal", -} - --- offstate -minetest.register_node("mesecons_pistons:piston_down_normal_off", { - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_pusher_front.png", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - }, - groups = {handy=1, piston=1, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_normal_off", - mesecons_piston = pistonspec_normal_down, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_on = piston_on, - rules = piston_down_rules, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_AXIS then - minetest.set_node(pos, {name="mesecons_pistons:piston_normal_off"}) - return true - end - return false - end, -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_down_normal_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_on_front.png", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - }, - groups = {handy=1, piston=1, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_normal_off", - after_destruct = piston_remove_pusher, - node_box = piston_down_on_box, - selection_box = piston_down_on_box, - mesecons_piston = pistonspec_normal_down, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_off = piston_off, - rules = piston_down_rules, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = false, -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_down_pusher_normal", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front.png", - "mesecons_piston_pusher_left.png^[transformR90", - "mesecons_piston_pusher_right.png^[transformR270", - "mesecons_piston_pusher_bottom.png^[transformR180", - "mesecons_piston_pusher_top.png", - }, - paramtype = "light", - paramtype2 = "facedir", - groups = {piston_pusher=1}, - is_ground_content = false, - after_destruct = piston_remove_base, - diggable = false, - drop = "", - corresponding_piston = "mesecons_pistons:piston_down_normal_on", - selection_box = piston_down_pusher_box, - node_box = piston_down_pusher_box, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 0.5, - on_rotate = false, -}) - --- Sticky - -local pistonspec_sticky_down = { - onname = "mesecons_pistons:piston_down_sticky_on", - offname = "mesecons_pistons:piston_down_sticky_off", - dir = {x = 0, y = -1, z = 0}, - pusher = "mesecons_pistons:piston_down_pusher_sticky", - sticky = true, -} - --- offstate -minetest.register_node("mesecons_pistons:piston_down_sticky_off", { - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - }, - groups = {handy=1, piston=2, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_sticky_off", - mesecons_piston = pistonspec_sticky_down, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_on = piston_on, - rules = piston_down_rules, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_AXIS then - minetest.set_node(pos, {name="mesecons_pistons:piston_sticky_off"}) - return true - end - return false - end, -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_down_sticky_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_on_front.png", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_bottom.png^[transformR180", - }, - groups = {handy=1, piston=1, not_in_creative_inventory=1}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drop = "mesecons_pistons:piston_sticky_off", - after_destruct = piston_remove_pusher, - node_box = piston_down_on_box, - selection_box = piston_down_on_box, - mesecons_piston = pistonspec_sticky_down, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - effector = { - action_off = piston_off, - rules = piston_down_rules, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - on_rotate = false, -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_down_pusher_sticky", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_pusher_left.png^[transformR90", - "mesecons_piston_pusher_right.png^[transformR270", - "mesecons_piston_pusher_bottom.png^[transformR180", - "mesecons_piston_pusher_top.png", - }, - paramtype = "light", - paramtype2 = "facedir", - groups = {piston_pusher=2}, - is_ground_content = false, - after_destruct = piston_remove_base, - diggable = false, - drop = "", - corresponding_piston = "mesecons_pistons:piston_down_sticky_on", - selection_box = piston_down_pusher_box, - node_box = piston_down_pusher_box, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 0.5, - on_rotate = false, -}) - - -mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_normal") -mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_sticky") -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_pusher_normal") -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_pusher_sticky") -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_pusher_normal") -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_pusher_sticky") -mesecon.register_mvps_stopper("mesecons_pistons:piston_normal_on") -mesecon.register_mvps_stopper("mesecons_pistons:piston_sticky_on") -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_normal_on") -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_sticky_on") -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_normal_on") -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_sticky_on") - ---craft recipes -minetest.register_craft({ - output = "mesecons_pistons:piston_normal_off", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"mcl_core:cobble", "mcl_core:iron_ingot", "mcl_core:cobble"}, - {"mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble"}, - }, -}) - -minetest.register_craft({ - output = "mesecons_pistons:piston_sticky_off", - recipe = { - {"mcl_mobitems:slimeball"}, - {"mesecons_pistons:piston_normal_off"}, - }, -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_normal_on") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_up_normal_off") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_up_normal_on") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_down_normal_off") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_down_normal_on") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_pusher_normal") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_up_pusher_normal") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_normal_off", "nodes", "mesecons_pistons:piston_down_pusher_normal") - - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_sticky_on") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_up_sticky_off") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_up_sticky_on") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_down_sticky_off") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_down_sticky_on") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_pusher_sticky") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_up_pusher_sticky") - doc.add_entry_alias("nodes", "mesecons_pistons:piston_sticky_off", "nodes", "mesecons_pistons:piston_down_pusher_sticky") -end - diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.de.tr b/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.de.tr deleted file mode 100644 index 9719812bd..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_pistons -This block can have one of 6 possible orientations.=Dieser Block kann eine von 6 möglichen Richtungen annehmen. -Piston=Kolben -A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however.=Ein Kolben ist eine Redstonekomponente mit einem Schieber den Block oder die Blöcke vor ihm schieben wird, wenn er mit Redstoneenergie versorgt wird. Allerdings können nicht alle Blöcke können geschoben werden. -Sticky Piston=Klebriger Kolben -A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled.=Ein klebriger Kolben ist eine Redstonekomponente mit einem klebrigen Schieber, der ein- und ausgefahren werden kann. Er fährt aus, wenn er mit Redstoneenergie versorgt wird. Wenn der Schieber ausgefahren wird, schiebt er den Block oder die Blöcke vor ihm. Wird er eingefahren, zieht er den Block vor ihm zu sich. Nicht alle Blöcke können geschoben oder gezogen werden. -Pushes block when powered by redstone power=Schiebt Block, wenn mit Redstoneenergie versorgt -Pushes or pulls block when powered by redstone power=Schiebt oder zieht Block, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.es.tr b/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.es.tr deleted file mode 100644 index 113472ac2..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.es.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mesecons_pistons -This block can have one of 6 possible orientations.=Este bloque puede tener una de las 6 orientaciones posibles. -Piston=Pistón -A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however.=Un pistón es un componente de redstone con un empujador que empuja el bloque o bloques frente a él cuando se le suministra energía de redstone. Sin embargo, no todos los bloques se pueden empujar. -Sticky Piston=Pistón pegajoso -A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled.=Un pistón pegajoso es un componente de redstone con un empujador pegajoso que se puede extender y retraer. Se extiende cuando se le suministra energía de redstone. Cuando el empujador se extiende, empuja el bloque o bloques frente a él. Cuando se retrae, tira hacia atrás el bloque único que está frente a él. Tenga en cuenta que no todos los bloques se pueden empujar o tirar. diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.fr.tr b/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.fr.tr deleted file mode 100644 index 9046e2d6b..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_pistons -This block can have one of 6 possible orientations.=Ce bloc peut avoir l'une des 6 orientations possibles. -Piston=Piston -A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however.=Un piston est un composant de redstone avec un poussoir qui pousse le ou les blocs devant lui lorsqu'il est alimenté en redstone. Cependant, tous les blocs ne peuvent pas être poussés. -Sticky Piston=Piston collant -A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled.=Un piston collant est un composant de redstone avec un poussoir collant qui peut être étendu et rétracté. Il se prolonge lorsqu'il est alimenté en redstone. Lorsque le poussoir s'étend, il pousse le ou les blocs devant lui. Quand il se rétracte, il recule le bloc unique devant lui. Notez que tous les blocs ne peuvent pas être poussés ou tirés. -Pushes block when powered by redstone power=Pousse le bloc lorsqu'il est alimenté par la puissance Redstone -Pushes or pulls block when powered by redstone power=Pousse ou tire le bloc lorsqu'il est alimenté par une puissance redstone diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.pl.tr b/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.pl.tr deleted file mode 100644 index 8f7f45191..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mesecons_pistons -This block can have one of 6 possible orientations.=Ten blok może mieć 6 możliwych orientacji. -Piston=Tłok -A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however.=Tłoki są mechanizmami czerwienitowymi które popycha blok lub bloki stojące przed nim gdy dostarczy się mu energię czerwienitową, jednak nie wszystkie bloki mogą zostać popchnięte. -Sticky Piston=Lepki tłok -A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled.=Lepki tłok jest mechanizmem czerwienitowym z lepkim wysięgnikiem, który można wysuwać i wsuwać. Wysuwa się gdy dostarczana jest energia czerwienitowa. Gdy się wysuwa popycha on blok lub bloki znajdujące się przed nim. Gdy się wsuwa przyciąga on pojedynczy blok przed nim. Nie wszystkie bloki mogą być przesuwane i przyciągane. -Pushes block when powered by redstone power=Popycha blok gdy jest zasilony czerwienitem -Pushes or pulls block when powered by redstone power=Popycha lub przyciąga blok gdy jest zasilany czerwienitem - diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.ru.tr b/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.ru.tr deleted file mode 100644 index d69542e79..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.ru.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_pistons -This block can have one of 6 possible orientations.=Этот блок быть ориентирован в одном из 6 возможных направлений. -Piston=Поршень -A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however.=Поршень это компонент редстоуна с толкателем, который толкает блок или блоки перед собой при подаче энергии редстоуна. Следует отметить, что не все блоки могут быть сдвинуты. -Sticky Piston=Липкий поршень -A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled.=Липкий поршень представляет собой компонент редстоуна с липким толкателем, который можно удлинять и втягивать обратно. Он расширяется, когда на него подается энергия красного камня. Когда толкатель выдвигается, он толкает блок или блоки перед собой. Когда он втягивается, он возвращает обратно один блок перед собой. Следует отметить, что не все блоки могут быть сдвинуты. или втянуты. -Pushes block when powered by redstone power=Толкает блок при подаче энергии редстоуна -Pushes or pulls block when powered by redstone power=Толкает или тянет блок при подаче энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_pistons/locale/template.txt deleted file mode 100644 index 6b54c5847..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_pistons -This block can have one of 6 possible orientations.= -Piston= -A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however.= -Sticky Piston= -A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled.= -Pushes block when powered by redstone power= -Pushes or pulls block when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/mod.conf b/mods/ITEMS/REDSTONE/mesecons_pistons/mod.conf deleted file mode 100644 index 5a3f6c80f..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pistons/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_pistons -depends = mesecons, mesecons_mvps, mcl_mobitems -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/sounds/piston_extend.ogg b/mods/ITEMS/REDSTONE/mesecons_pistons/sounds/piston_extend.ogg deleted file mode 100644 index e234ad944..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/sounds/piston_extend.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/sounds/piston_retract.ogg b/mods/ITEMS/REDSTONE/mesecons_pistons/sounds/piston_retract.ogg deleted file mode 100644 index feb9f0444..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/sounds/piston_retract.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_back.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_back.png deleted file mode 100644 index 6ea941df5..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_back.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_bottom.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_bottom.png deleted file mode 100644 index b3b44718e..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_bottom.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_on_front.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_on_front.png deleted file mode 100644 index a718134ca..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_on_front.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_back.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_back.png deleted file mode 100644 index 79ecafcbc..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_back.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png deleted file mode 100644 index 79ecafcbc..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_front.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_front.png deleted file mode 100644 index 79ecafcbc..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_front.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png deleted file mode 100644 index 8f5eaf457..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_left.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_left.png deleted file mode 100644 index 79ecafcbc..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_left.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_right.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_right.png deleted file mode 100644 index 79ecafcbc..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_right.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_top.png b/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_top.png deleted file mode 100644 index 79ecafcbc..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_pistons/textures/mesecons_piston_pusher_top.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/init.lua b/mods/ITEMS/REDSTONE/mesecons_pressureplates/init.lua deleted file mode 100644 index 495fbd048..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/init.lua +++ /dev/null @@ -1,204 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local PRESSURE_PLATE_INTERVAL = 0.04 - -local pp_box_off = { - type = "fixed", - fixed = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, -} - -local pp_box_on = { - type = "fixed", - fixed = { -7/16, -8/16, -7/16, 7/16, -7.5/16, 7/16 }, -} - -local function pp_on_timer(pos, elapsed) - local node = minetest.get_node(pos) - local basename = minetest.registered_nodes[node.name].pressureplate_basename - local activated_by = minetest.registered_nodes[node.name].pressureplate_activated_by - - -- This is a workaround for a strange bug that occurs when the server is started - -- For some reason the first time on_timer is called, the pos is wrong - if not basename then return end - - if activated_by == nil then - activated_by = { any = true } - end - - local obj_does_activate = function(obj, activated_by) - if activated_by.any then - return true - elseif activated_by.mob and obj:get_luaentity() and obj:get_luaentity().is_mob == true then - return true - elseif activated_by.player and obj:is_player() then - return true - else - return false - end - end - - local objs = minetest.get_objects_inside_radius(pos, 1) - - if node.name == basename .. "_on" then - local disable - if #objs == 0 then - disable = true - elseif not activated_by.any then - disable = true - for k, obj in pairs(objs) do - if obj_does_activate(obj, activated_by) then - disable = false - break - end - end - end - if disable then - minetest.set_node(pos, {name = basename .. "_off"}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end - elseif node.name == basename .. "_off" then - for k, obj in pairs(objs) do - local objpos = obj:get_pos() - if obj_does_activate(obj, activated_by) then - if objpos.y > pos.y-1 and objpos.y < pos.y then - minetest.set_node(pos, {name = basename .. "_on"}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - break - end - end - end - end - return true -end - --- Register a Pressure Plate --- basename: base name of the pressure plate --- description: description displayed in the player's inventory --- textures_off:textures of the pressure plate when inactive --- textures_on: textures of the pressure plate when active --- image_w: wield image of the pressure plate --- image_i: inventory image of the pressure plate --- recipe: crafting recipe of the pressure plate --- sounds: sound table (like in minetest.register_node) --- plusgroups: group memberships (attached_node=1 and not_in_creative_inventory=1 are already used) --- activated_by: optinal table with elements denoting by which entities this pressure plate is triggered --- Possible table fields: --- * player=true: Player --- * mob=true: Mob --- By default, is triggered by all entities --- longdesc: Customized long description for the in-game help (if omitted, a dummy text is used) - -function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe, sounds, plusgroups, activated_by, longdesc) - local groups_off = table.copy(plusgroups) - groups_off.attached_node = 1 - groups_off.dig_by_piston = 1 - groups_off.pressure_plate = 1 - local groups_on = table.copy(groups_off) - groups_on.not_in_creative_inventory = 1 - groups_on.pressure_plate = 2 - if not longdesc then - longdesc = S("A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.") - end - local tt = S("Provides redstone power when pushed") - if not activated_by then - tt = tt .. "\n" .. S("Pushable by players, mobs and objects") - elseif activated_by.mob and activated_by.player then - tt = tt .. "\n" .. S("Pushable by players and mobs") - elseif activated_by.mob then - tt = tt .. "\n" .. S("Pushable by mobs") - elseif activated_by.player then - tt = tt .. "\n" .. S("Pushable by players") - end - - mesecon.register_node(basename, { - drawtype = "nodebox", - inventory_image = image_i, - wield_image = image_w, - paramtype = "light", - walkable = false, - description = description, - on_timer = pp_on_timer, - on_construct = function(pos) - minetest.get_node_timer(pos):start(PRESSURE_PLATE_INTERVAL) - end, - sounds = sounds, - is_ground_content = false, - pressureplate_basename = basename, - pressureplate_activated_by = activated_by, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - },{ - node_box = pp_box_off, - selection_box = pp_box_off, - groups = groups_off, - tiles = textures_off, - - mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.pplate }}, - _doc_items_longdesc = longdesc, - _tt_help = tt, - },{ - node_box = pp_box_on, - selection_box = pp_box_on, - groups = groups_on, - tiles = textures_on, - description = "", - - mesecons = {receptor = { state = mesecon.state.on, rules = mesecon.rules.pplate }}, - _doc_items_create_entry = false, - }) - - minetest.register_craft({ - output = basename .. "_off", - recipe = recipe, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", basename .. "_off", "nodes", basename .. "_on") - end -end - -local woods = { - { "wood", "mcl_core:wood", "default_wood.png", S("Oak Pressure Plate") }, - { "acaciawood", "mcl_core:acaciawood", "default_acacia_wood.png", S("Acacia Pressure Plate") }, - { "birchwood", "mcl_core:birchwood", "mcl_core_planks_birch.png", S("Birch Pressure Plate") }, - { "darkwood", "mcl_core:darkwood", "mcl_core_planks_big_oak.png", S("Dark Oak Pressure Plate" )}, - { "sprucewood", "mcl_core:sprucewood", "mcl_core_planks_spruce.png", S("Spruce Pressure Plate") }, - { "junglewood", "mcl_core:junglewood", "default_junglewood.png", S("Jungle Pressure Plate") }, -} - -for w=1, #woods do - mesecon.register_pressure_plate( - "mesecons_pressureplates:pressure_plate_"..woods[w][1], - woods[w][4], - {woods[w][3]}, - {woods[w][3]}, - woods[w][3], - nil, - {{woods[w][2], woods[w][2]}}, - mcl_sounds.node_sound_wood_defaults(), - {axey=1, material_wood=1}, - nil, - S("A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.")) - - minetest.register_craft({ - type = "fuel", - recipe = "mesecons_pressureplates:pressure_plate_"..woods[w][1].."_off", - burntime = 15 - }) - -end - -mesecon.register_pressure_plate( - "mesecons_pressureplates:pressure_plate_stone", - S("Stone Pressure Plate"), - {"default_stone.png"}, - {"default_stone.png"}, - "default_stone.png", - nil, - {{"mcl_core:stone", "mcl_core:stone"}}, - mcl_sounds.node_sound_stone_defaults(), - {pickaxey=1, material_stone=1}, - { player = true, mob = true }, - S("A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.")) - - diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.de.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.de.tr deleted file mode 100644 index 6e5e761ef..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.de.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Eine Druckplatte ist eine Redstonekomponente, die ihre benachbarten Blöcke mit Redstoneenergie versorgt, wenn sich jemand oder etwas auf ihr befindet. -Oak Pressure Plate=Eichendruckplatte -Acacia Pressure Plate=Akaziendruckplatte -Birch Pressure Plate=Birkendruckplatte -Dark Oak Pressure Plate=Schwarzeichendruckplatte -Spruce Pressure Plate=Fichtendruckplatte -Jungle Pressure Plate=Dschungeldruckplatte -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Eine Holzdruckplatte ist eine Redstonekomponente, die ihre benachbarten Blöcke mit Redstoneenergie versorgt, solange sich ein beliebiges bewegliches Objekt (wie Gegenstände, Spieler und Mobs) auf ihm befindet. -Stone Pressure Plate=Steindruckplatte -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Eine Steindruckplatte ist eine Redstonekomponente, die ihre benachbarten Blöcke mit Redstoneenergie versorgt, solange sich ein Spieler oder Mob auf ihm befindet. Sie wird von nichts anderem ausgelöst. -Provides redstone power when pushed=Gibt Redstoneenergie aus, wenn gedrückt -Pushable by players, mobs and objects=Drückbar von Spielern, Mobs und Objekten -Pushable by players and mobs=Drückbar von Spielern und Mobs -Pushable by players=Drückbar von Spielern -Pushable by mobs=Drückbar von Mobs diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.es.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.es.tr deleted file mode 100644 index d30dfbfa9..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.es.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Una placa de presión es un componente de redstone que suministra a sus bloques circundantes energía de redstone mientras alguien o algo descansa sobre ella. -Oak Pressure Plate=Placa de presión de roble -Acacia Pressure Plate=Placa de presión de acacia -Birch Pressure Plate=Placa de presión de abedul -Dark Oak Pressure Plate=Placa de presión de roble oscuro -Spruce Pressure Plate=Placa de presión de abeto -Jungle Pressure Plate=Placa de presión de jungla -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Una placa de presión de madera es un componente de redstone que suministra a sus bloques circundantes energía de redstone mientras que cualquier objeto móvil (incluidos los objetos caídos, jugadores y mobs) descansa sobre él. -Stone Pressure Plate=Placa de presión de piedra -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Una placa de presión de piedra es un componente de redstone que suministra a sus bloques circundantes poder de redstone mientras un jugador o una criatura se paran encima. No se desencadena por nada más. diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.fr.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.fr.tr deleted file mode 100644 index ef145de56..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.fr.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Une plaque de pression est un composant de redstone qui alimente ses blocs environnants en puissance de redstone pendant que quelqu'un ou quelque chose repose dessus. -Oak Pressure Plate=Plaque de pression en Chêne -Acacia Pressure Plate=Plaque de pression en Acacia -Birch Pressure Plate=Plaque de pression en Bouleau -Dark Oak Pressure Plate=Plaque de pression en Chêne Noir -Spruce Pressure Plate=Plaque de pression en Sapin -Jungle Pressure Plate=Plaque de pression en Acajou -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Une plaque de pression en bois est un composant de redstone qui alimente ses blocs environnants en puissance de redstone tandis que tout objet mobile (y compris les objets lâchés, les joueurs et les mobs) repose dessus. -Stone Pressure Plate=Plaque de pression en pierre -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Une plaque de pression en pierre est un composant de redstone qui alimente ses blocs environnants en puissance de redstone pendant qu'un joueur ou un mob se tient au-dessus. Il n'est déclenché par rien d'autre. -Provides redstone power when pushed=Fournit une puissance de redstone lorsqu'il est poussé -Pushable by players, mobs and objects=Poussable par les joueurs, les mobs et les objets -Pushable by players and mobs=Poussable par les joueurs et les mobs -Pushable by players=Poussable par les joueurs -Pushable by mobs=Poussable par les mobs diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.pl.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.pl.tr deleted file mode 100644 index 50cef3ba7..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.pl.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Płyta naciskowa jest mechanizmem czerwienitowym, który zasila otaczające bloki energią czerwienitową gdy ktoś lub coś na niej spoczywa. -Oak Pressure Plate=Dębowa płyta naciskowa -Acacia Pressure Plate=Akacjowa płyta naciskowa -Birch Pressure Plate=Brzozowa płyta naciskowa -Dark Oak Pressure Plate=Ciemno-dębowa płyta naciskowa -Spruce Pressure Plate=Świerkowa płyta naciskowa -Jungle Pressure Plate=Tropikalna płyta naciskowa -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Drewniana płyta naciskowa jest mechanizmem czerwienitowym, który zasila otaczające bloki energią czerwienitowym, gdy ruchomy obiekt (włączając w to upuszczone przedmioty, graczy, moby) spoczywa na niej. -Stone Pressure Plate=Kamienna płyta naciskowa -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Kamienna płyta naciskowa jest mechanizmem czerwienitowym, która zasila otaczające bloki energią czerwienitową gdy gracz lub mob na niej stoi. Nie jest aktywowana niczym innym. -Provides redstone power when pushed=Dostarcza energię czerwienitową gdy naciśnięta -Pushable by players, mobs and objects=Możliwa do naciśnięcia przez graczy, moby i obiekty -Pushable by players and mobs=Możliwa do naciśnięcia przez graczy i moby -Pushable by players=Możliwa do naciśnięcia przez graczy -Pushable by mobs=Możliwa do naciśnięcia przez moby diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr deleted file mode 100644 index fcd81f451..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Нажимаемая панель это компонент редстоуна, который начинает снабжать энергией редстоуна окружающие его блоки, когда кто-то или что-то находится прямо на нём. -Oak Pressure Plate=Дубовая нажимная панель -Acacia Pressure Plate=Акациевая нажимная панель -Birch Pressure Plate=Берёзовая нажимная панель -Dark Oak Pressure Plate=Нажимная панель из тёмного дуба -Spruce Pressure Plate=Еловая нажимная панель -Jungle Pressure Plate=Нажимная панель из дерева джунглей -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Деревянная нажимная панель это компонент редстоуна, который начинает снабжать энергией редстоуна окружающие его блоки, когда любой движущийся объект (включая брошенные предметы, игроков и мобов) находится прямо на нём. -Stone Pressure Plate=Каменная нажимная панель -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Каменная нажимная панель это компонент редстоуна, который начинает снабжать энергией редстоуна окружающие его блоки, когда игрок или моб находится прямо на нём. От чего-то другого он не сработает. -Provides redstone power when pushed=Производит энергию редстоуна при нажимании -Pushable by players, mobs and objects=Нажимается игроками, мобами и объектами -Pushable by players and mobs=Нажимается игроками и мобами -Pushable by players=Нажимается игроками -Pushable by mobs=Нажимается мобами diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/template.txt deleted file mode 100644 index 96eb3f922..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/template.txt +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.= -Oak Pressure Plate= -Acacia Pressure Plate= -Birch Pressure Plate= -Dark Oak Pressure Plate= -Spruce Pressure Plate= -Jungle Pressure Plate= -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.= -Stone Pressure Plate= -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.= -Provides redstone power when pushed= -Pushable by players, mobs and objects= -Pushable by players and mobs= -Pushable by players= -Pushable by mobs= diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/mod.conf b/mods/ITEMS/REDSTONE/mesecons_pressureplates/mod.conf deleted file mode 100644 index 0edd40e9a..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_pressureplates -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/init.lua b/mods/ITEMS/REDSTONE/mesecons_solarpanel/init.lua deleted file mode 100644 index 129c28eea..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/init.lua +++ /dev/null @@ -1,296 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local function path_to_sunlight_exists(position, light_level) - local neighbours = { - { x = 0, y = 0, z =-1 }, - { x = 0, y = 0, z = 1 }, - { x = 0, y =-1, z = 0 }, - { x = 0, y = 1, z = 0 }, - { x =-1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - } - for i=1, #neighbours do - local offset = neighbours[i] - local position_new = vector.add( - position, - offset - ) - local light_level_new = minetest.get_node_light( - position_new, - nil - ) - if 15 == light_level_new then - -- found the sunlight - return true - elseif light_level_new > light_level then - -- search where light is brighter - if path_to_sunlight_exists( - position_new, - light_level_new - ) then - return true - end - end - end -end - -local function sunlight_visible(position) - local light_level - -- Minetest 5.4.0+ can measure the daylight level at a position - if nil ~= minetest.get_natural_light then - light_level = minetest.get_natural_light( - position, - nil - ) - if light_level >= 12 then - return true - end - else -- Minetest 5.3.0 or less can only measure the light level - local time = minetest.get_timeofday() * 24000 - -- only check light level during day - if time > 6000 and time < 18000 then - light_level = minetest.get_node_light( - position, - nil - ) - if light_level >= 12 then - return path_to_sunlight_exists( - position, - 12 - ) - end - end - end - return false -end - -local boxes = { -8/16, -8/16, -8/16, 8/16, -2/16, 8/16 } - --- Daylight Sensor -minetest.register_node("mesecons_solarpanel:solar_panel_on", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - drop = "mesecons_solarpanel:solar_panel_off", - _doc_items_create_entry = false, - groups = {handy=1,axey=1, not_in_creative_inventory = 1, material_wood=1, flammable=-1}, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_off"}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_node("mesecons_solarpanel:solar_panel_off", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = {handy=1,axey=1, material_wood=1}, - description=S("Daylight Sensor"), - _tt_help = S("Provides redstone power when in sunlight") .. "\n" ..S("Can be inverted"), - _doc_items_longdesc = S("Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.").."\n".. - S("In inverted state, they provide redstone power when they are not in sunlight and no power otherwise."), - _doc_items_usagehelp = S("Use the daylight sensor to toggle its state."), - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.off, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_on"}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_craft({ - output = "mesecons_solarpanel:solar_panel_off", - recipe = { - {"mcl_core:glass", "mcl_core:glass", "mcl_core:glass"}, - {"mcl_nether:quartz", "mcl_nether:quartz", "mcl_nether:quartz"}, - {"group:wood_slab", "group:wood_slab", "group:wood_slab"}, - } -}) - -minetest.register_abm({ - label = "Daylight turns on solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_off"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_on", param2=node.param2}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end - end, -}) - -minetest.register_abm({ - label = "Darkness turns off solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_on"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if not sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_off", param2=node.param2}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end - end, -}) - ---- Inverted Daylight Sensor - -minetest.register_node("mesecons_solarpanel:solar_panel_inverted_on", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel_inverted.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - drop = "mesecons_solarpanel:solar_panel_off", - groups = {handy=1,axey=1, not_in_creative_inventory = 1, material_wood=1}, - _doc_items_create_entry = false, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_off"}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_node("mesecons_solarpanel:solar_panel_inverted_off", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel_inverted.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - drop = "mesecons_solarpanel:solar_panel_off", - groups = {handy=1,axey=1, not_in_creative_inventory=1, material_wood=1}, - description=S("Inverted Daylight Sensor"), - _doc_items_create_entry = false, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.off, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_on"}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_abm({ - label = "Darkness turns on inverted solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_inverted_off"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if not sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_on", param2=node.param2}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end - end, -}) - -minetest.register_abm({ - label = "Daylight turns off inverted solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_inverted_on"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_off", param2=node.param2}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end - end, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mesecons_solarpanel:solar_panel_off", - burntime = 15 -}) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_on") - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_inverted_off") - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_inverted_off") - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_inverted_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.de.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.de.tr deleted file mode 100644 index c33fe949b..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Tageslichtsensor -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Tageslichtsensoren sind Redstonekomponenten, die Redstoneenergie liefern, wenn sie im Sonnenlicht stehen, sonst nicht. Sie können auch invertiert werden. -Inverted Daylight Sensor=Invertierter Tageslichtsensor -Use the daylight sensor to toggle its state.=Benutzen Sie den Tageslichtsensor, um seinen Zustand umzuschalten. -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=Im invertierten Zustand erzeugen sie Redstoneenergie, wenn sie sich nicht im Tageslicht befinden, ansonsten nicht. -Provides redstone power when in sunlight=Gibt Redstoneenergie aus, wenn im Sonnenlicht -Can be inverted=Kann invertiert werden diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.es.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.es.tr deleted file mode 100644 index 986a16d8d..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.es.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Sensor de luz solar -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Los sensores de luz diurna son componentes de redstone que proporcionan energía de redstone cuando están bajo la luz solar y no tienen energía de otra manera. También se pueden invertir. -Inverted Daylight Sensor=Sensor de luz solar invertido -Use the daylight sensor to toggle its state.=Use el sensor de luz diurna para alternar su estado. -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=En estado invertido, proporcionan energía de redstone cuando no están bajo la luz solar y no tienen energía de otra manera. diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.fr.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.fr.tr deleted file mode 100644 index a0b7ad7b0..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Capteur de luminosité -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Les capteurs de luminosité sont des composants de redstone qui fournissent une puissance de redstone lorsqu'ils sont en plein soleil et aucune autrement. Ils peuvent également être inversés. -Use the daylight sensor to toggle its state.=Utilisez le capteur de luminosité pour basculer son état. -Inverted Daylight Sensor=Capteur de luminosité inversé -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=En état inversé, ils fournissent une puissance de redstone lorsqu'ils ne sont pas en plein soleil et aucune puissance autrement. -Provides redstone power when in sunlight=Fournit une puissance de redstone en plein soleil -Can be inverted=Peut être inversé diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.pl.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.pl.tr deleted file mode 100644 index d7e3e19ca..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Czujnik światła dziennego -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Czujniki światła dziennego są czerwienitowymi elementami, które wysyłają energie czerwienitową gdy są w świetle słonecznym i nie dostarczają energii w przeciwnym przypadku. -Use the daylight sensor to toggle its state.=Użyj czujnik światła dziennego by zmienić jego stan. -Inverted Daylight Sensor=Odwrotny czujnik światła dziennego -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=W odwrotnym stanie, dostarczają energię czerwienitową gdy nie są w świetle słonecznym i nie dostarczają energii w przeciwnym przypadku. -Provides redstone power when in sunlight=Dostarcza energię czerwienitową gdy w oświetlony słońcem -Can be inverted=Może być odwrócony diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr deleted file mode 100644 index 108cb9f75..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Датчик дневного света -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Датчик дневного света это компонент редстоуна, который производит энергию редстоуна при нахождении в солнечном свете и не производит в противном случае. Он также может быть инвертирован. -Use the daylight sensor to toggle its state.=[Используйте] датчик дневного света для смены его состояния -Inverted Daylight Sensor=Инвертированный датчик дневного света -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=В инвертированном состоянии он производит энергию редстоуна, когда на него не попадает солнечны свет, а когда попадает - перестаёт производить. -Provides redstone power when in sunlight=Генерирует энергию редстоуна в солнечном свете -Can be inverted=Может быть инвертирован diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/template.txt deleted file mode 100644 index 84c3ce42c..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor= -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.= -Use the daylight sensor to toggle its state.= -Inverted Daylight Sensor= -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.= -Provides redstone power when in sunlight= -Can be inverted= diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/mod.conf b/mods/ITEMS/REDSTONE/mesecons_solarpanel/mod.conf deleted file mode 100644 index 9897b7488..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_solarpanel -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel.png b/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel.png deleted file mode 100644 index c94d506cb..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_inverted.png b/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_inverted.png deleted file mode 100644 index 15784f5c9..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_inverted.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_side.png b/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_side.png deleted file mode 100644 index ca6c3d6a5..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_side.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/init.lua b/mods/ITEMS/REDSTONE/mesecons_torch/init.lua deleted file mode 100644 index e49b843cc..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/init.lua +++ /dev/null @@ -1,241 +0,0 @@ --- REDSTONE TORCH AND BLOCK OF REDSTONE - -local S = minetest.get_translator(minetest.get_current_modname()) - -local TORCH_COOLOFF = 120 -- Number of seconds it takes for a burned-out torch to reactivate - -local function rotate_torch_rules(rules, param2) - if param2 == 1 then - return rules - elseif param2 == 5 then - return mesecon.rotate_rules_right(rules) - elseif param2 == 2 then - return mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) --180 degrees - elseif param2 == 4 then - return mesecon.rotate_rules_left(rules) - elseif param2 == 0 then - return rules - else - return rules - end -end - -local function torch_get_output_rules(node) - if node.param2 == 1 then - return { - { x = -1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 1, z = 0, spread = true }, - { x = 0, y = 0, z = -1 }, - { x = 0, y = 0, z = 1 }, - } - else - return rotate_torch_rules({ - { x = 1, y = 0, z = 0 }, - { x = 0, y = -1, z = 0 }, - { x = 0, y = 1, z = 0, spread = true }, - { x = 0, y = 1, z = 0 }, - { x = 0, y = 0, z = -1 }, - { x = 0, y = 0, z = 1 }, - }, node.param2) - end -end - -local function torch_get_input_rules(node) - if node.param2 == 1 then - return {{x = 0, y = -1, z = 0 }} - else - return rotate_torch_rules({{ x = -1, y = 0, z = 0 }}, node.param2) - end -end - -local function torch_overheated(pos) - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.02, max_hear_distance = 6}, true) - minetest.add_particle({ - pos = {x=pos.x, y=pos.y+0.2, z=pos.z}, - velocity = {x = 0, y = 0.6, z = 0}, - expirationtime = 1.2, - size = 1.5, - texture = "mcl_particles_smoke.png", - }) - local timer = minetest.get_node_timer(pos) - timer:start(TORCH_COOLOFF) -end - -local function torch_action_on(pos, node) - local overheat - if node.name == "mesecons_torch:mesecon_torch_on" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_off", param2=node.param2}) - end - mesecon.receptor_off(pos, torch_get_output_rules(node)) - elseif node.name == "mesecons_torch:mesecon_torch_on_wall" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated_wall", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_off_wall", param2=node.param2}) - end - mesecon.receptor_off(pos, torch_get_output_rules(node)) - end - if overheat then - torch_overheated(pos) - end -end - -local function torch_action_off(pos, node) - local overheat - if node.name == "mesecons_torch:mesecon_torch_off" or node.name == "mesecons_torch:mesecon_torch_overheated" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_on", param2=node.param2}) - mesecon.receptor_on(pos, torch_get_output_rules(node)) - end - elseif node.name == "mesecons_torch:mesecon_torch_off_wall" or node.name == "mesecons_torch:mesecon_torch_overheated_wall" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated_wall", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_on_wall", param2=node.param2}) - mesecon.receptor_on(pos, torch_get_output_rules(node)) - end - end - if overheat then - torch_overheated(pos) - end -end - -minetest.register_craft({ - output = "mesecons_torch:mesecon_torch_on", - recipe = { - {"mesecons:redstone"}, - {"mcl_core:stick"},} -}) - -local off_def = { - name = "mesecon_torch_off", - description = S("Redstone Torch (off)"), - doc_items_create_entry = false, - icon = "jeija_torches_off.png", - tiles = {"jeija_torches_off.png"}, - light = 0, - groups = {dig_immediate=3, dig_by_water=1, redstone_torch=2, mesecon_ignore_opaque_dig=1, not_in_creative_inventory=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = "mesecons_torch:mesecon_torch_on", -} - -mcl_torches.register_torch(off_def) - -local off_override = { - mesecons = { - receptor = { - state = mesecon.state.off, - rules = torch_get_output_rules, - }, - effector = { - state = mesecon.state.on, - rules = torch_get_input_rules, - action_off = torch_action_off, - }, - } -} - -minetest.override_item("mesecons_torch:mesecon_torch_off", off_override) -minetest.override_item("mesecons_torch:mesecon_torch_off_wall", off_override) - -local overheated_def = table.copy(off_def) -overheated_def.name = "mesecon_torch_overheated" -overheated_def.description = S("Redstone Torch (overheated)") - -mcl_torches.register_torch(overheated_def) - -local overheated_override = { - on_timer = function(pos, elapsed) - if not mesecon.is_powered(pos) then - local node = minetest.get_node(pos) - torch_action_off(pos, node) - end - end -} - -minetest.override_item("mesecons_torch:mesecon_torch_overheated", overheated_override) -minetest.override_item("mesecons_torch:mesecon_torch_overheated_wall", overheated_override) - -local on_def = { - name = "mesecon_torch_on", - description = S("Redstone Torch"), - doc_items_longdesc = S("A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything."), - doc_items_usagehelp = S("Redstone torches can be placed at the side and on the top of full solid opaque blocks."), - icon = "jeija_torches_on.png", - tiles = {"jeija_torches_on.png"}, - light = 7, - groups = {dig_immediate=3, dig_by_water=1, redstone_torch=1, mesecon_ignore_opaque_dig=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), -} - -mcl_torches.register_torch(on_def) - -local on_override = { - on_destruct = function(pos, oldnode) - local node = minetest.get_node(pos) - torch_action_on(pos, node) - end, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = torch_get_output_rules - }, - effector = { - state = mesecon.state.off, - rules = torch_get_input_rules, - action_on = torch_action_on, - }, - }, - _tt_help = S("Provides redstone power when it's not powered itself"), -} - -minetest.override_item("mesecons_torch:mesecon_torch_on", on_override) -minetest.override_item("mesecons_torch:mesecon_torch_on_wall", on_override) - -minetest.register_node("mesecons_torch:redstoneblock", { - description = S("Block of Redstone"), - _tt_help = S("Provides redstone power"), - _doc_items_longdesc = S("A block of redstone permanently supplies redstone power to its surrounding blocks."), - tiles = {"redstone_redstone_block.png"}, - stack_max = 64, - groups = {pickaxey=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_craft({ - output = "mesecons_torch:redstoneblock", - recipe = { - {"mesecons:wire_00000000_off","mesecons:wire_00000000_off","mesecons:wire_00000000_off"}, - {"mesecons:wire_00000000_off","mesecons:wire_00000000_off","mesecons:wire_00000000_off"}, - {"mesecons:wire_00000000_off","mesecons:wire_00000000_off","mesecons:wire_00000000_off"}, - } -}) - -minetest.register_craft({ - output = "mesecons:wire_00000000_off 9", - recipe = { - {"mesecons_torch:redstoneblock"}, - } -}) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_torch:mesecon_torch_on", "nodes", "mesecons_torch:mesecon_torch_off") - doc.add_entry_alias("nodes", "mesecons_torch:mesecon_torch_on", "nodes", "mesecons_torch:mesecon_torch_off_wall") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.de.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.de.tr deleted file mode 100644 index 7f3f94c58..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.de.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Redstonefackel -Redstone Torch (off)=Redstonefackel (aus) -Redstone Torch (overheated)=Redstonefackel (überhitzt) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Eine Redstonefackel ist eine Redstonekomponente, die benutzt werden kann, um ein Redstonesignal zu invertieren. Sie versorgt die benachbarten Blöcke mit Redstoneenergie, ausgenommen den Block, an dem sie befestigt wurde. Eine Redstonefackel leuchtet normalerweise, aber sie kann auch ausgeschaltet werden, indem der Block, an dem sie befestigt ist, bestromt wird. Wenn sie aus ist, wird sie nichts mit Redstoneenergie versorgen. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Redstonefackeln können an der Seite und auf der Oberseite der meisten undurchsichtigen ganzen Blöcke platziert werden. -Block of Redstone=Redstoneblock -A block of redstone permanently supplies redstone power to its surrounding blocks.=Ein Redstoneblock versorgt seine benachbarten Blöcke beständig mit Redstoneenergie. -Provides redstone power when it's not powered itself=Gibt Redstoneenergie aus, wenn es nicht selbst bestromt ist -Provides redstone power=Gibt Redstoneenergie aus diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.es.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.es.tr deleted file mode 100644 index b27fa1b58..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Antorcha de redstone -Redstone Torch (off)=Antorcha de redstone (Apagada) -Redstone Torch (overheated)=Antorcha de redstone (Sobrecalentada) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Una antorcha de redstone es un componente de redstone que se puede utilizar para invertir una señal de redstone. Suministra a sus bloques circundantes energía de redstone, excepto el bloque al que está unido. Una antorcha de redstone normalmente está encendida, pero también se puede apagar alimentando el bloque al que está conectado. Mientras está apagada, una antorcha de redstone no alimenta nada. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Las antorchas Redstone se pueden colocar a un lado y en la parte superior de bloques opacos sólidos completos. -Block of Redstone=Bloque de redstone -A block of redstone permanently supplies redstone power to its surrounding blocks.=Un bloque de redstone suministra permanentemente energía de redstone a sus bloques circundantes. diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.fr.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.fr.tr deleted file mode 100644 index 8c223d834..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.fr.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Torche de Redstone -Redstone Torch (off)=Torche de Redstone (inactive) -Redstone Torch (overheated)=Torche de Redstone (surchauffé) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Une torche redstone est un composant redstone qui peut être utilisé pour inverser un signal redstone. Il alimente ses blocs environnants en énergie redstone, à l'exception du bloc auquel il est attaché. Une torche Redstone est normalement allumée, mais elle peut également être éteinte en alimentant le bloc auquel elle est attachée. Tant qu'elle n'est pas allumée, une torche redstone n'alimente rien. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Les torches Redstone peuvent être placées sur le côté et sur le dessus de blocs opaques solides. -Block of Redstone=Bloc de Redstone -A block of redstone permanently supplies redstone power to its surrounding blocks.=Un bloc de redstone fournit en permanence de l'énergie redstone à ses blocs environnants. -Provides redstone power when it's not powered itself=Fournit une puissance redstone lorsqu'il n'est pas alimenté lui-même -Provides redstone power=Fournit une puissance redstone diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.pl.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.pl.tr deleted file mode 100644 index a791da3a7..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.pl.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Pochodnia czerwienitowa -Redstone Torch (off)=Pochodnia czerwienitowa (wyłączona) -Redstone Torch (overheated)=Pochodnia czerwienitowa (przegrzana) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Pochodnia czerwienitowa to mechanizm czerwienitowy, który można wykorzystać do odwrócenia czerwienitowego sygnału. Dostarcza otaczającym jej blokom energię czerwienitową, z wyjątkiem bloku do którego jest przyczepiona. Pochodnia czerwienitowa normalnie jest zapalona, jednak może zostać wyłączona przez zasilenie bloku do którego jest przyczepiona. Gdy jest wyłączona nie zasila ona niczego. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Pochodnia czerwienitowa może być postawiona na boku i wierzchu pełnych, stałych, nieprzezroczystych bloków. -Block of Redstone=Blok czerwienitu -A block of redstone permanently supplies redstone power to its surrounding blocks.=Blok czerwienitu nieustannie dostarcza energię czerwienitową do otaczających go bloków. -Provides redstone power when it's not powered itself=Dostarcza energię czerwienitową gdy nie jest zasilona -Provides redstone power=Dostarcza energię czerwienitową diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.ru.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.ru.tr deleted file mode 100644 index 45d0d7667..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.ru.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Факел редстоуна -Redstone Torch (off)=Факел редстоуна (выкл) -Redstone Torch (overheated)=Факел редстоуна (перегрелся) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Факел редстоуна это компонент, способный инвертировать сигнал редстоуна. Он обеспечивает энергией редстоуна окружающие блоки, за исключением того блока, к которому он присоединён. Факел редстоуна обычно горит, но он также может быть выключен путём подведения энергии редстоуна к тому блоку, к которому он присоединён. Когда он не горит, то не снабжает энергией окружающие блоки. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Факелы редстоуна могут быть установлены по краям и на верхней части любого целого плотного твёрдого блока. -Block of Redstone=Блок редстоуна -A block of redstone permanently supplies redstone power to its surrounding blocks.=Блок редстоуна напрямую снабжает энергией окружающие блоки -Provides redstone power when it's not powered itself=Снабжает энергией редстоуна, если не подключён сам -Provides redstone power=Снабжает энергией редстоуна diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_torch/locale/template.txt deleted file mode 100644 index 8cde3ad6f..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/template.txt +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch= -Redstone Torch (off)= -Redstone Torch (overheated)= -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.= -Redstone torches can be placed at the side and on the top of full solid opaque blocks.= -Block of Redstone= -A block of redstone permanently supplies redstone power to its surrounding blocks.= -Provides redstone power when it's not powered itself= -Provides redstone power= diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/mod.conf b/mods/ITEMS/REDSTONE/mesecons_torch/mod.conf deleted file mode 100644 index 85586cad7..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_torch -depends = mesecons, mcl_torches -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_off.png b/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_off.png deleted file mode 100644 index cecdaf8fa..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_on.png b/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_on.png deleted file mode 100644 index 24d0a94d9..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/textures/redstone_redstone_block.png b/mods/ITEMS/REDSTONE/mesecons_torch/textures/redstone_redstone_block.png deleted file mode 100644 index 465de2b8c..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_torch/textures/redstone_redstone_block.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/README.txt b/mods/ITEMS/REDSTONE/mesecons_walllever/README.txt deleted file mode 100644 index 8744b5646..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/README.txt +++ /dev/null @@ -1,11 +0,0 @@ -This mod adds levers. - -# Credits -## Mesh -Lever meshes created by Gerold55. - -## Code -Jeija and Wuzzy. - -## Textures -(See main README file of MineClone 2). diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/init.lua b/mods/ITEMS/REDSTONE/mesecons_walllever/init.lua deleted file mode 100644 index c251587d5..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/init.lua +++ /dev/null @@ -1,178 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local lever_get_output_rules = mesecon.rules.buttonlike_get - -local function on_rotate(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - if node.param2 == 10 then - node.param2 = 13 - minetest.swap_node(pos, node) - return true - elseif node.param2 == 13 then - node.param2 = 10 - minetest.swap_node(pos, node) - return true - elseif node.param2 == 8 then - node.param2 = 15 - minetest.swap_node(pos, node) - return true - elseif node.param2 == 15 then - node.param2 = 8 - minetest.swap_node(pos, node) - return true - end - end - -- TODO: Rotate axis - return false -end - --- LEVER -minetest.register_node("mesecons_walllever:wall_lever_off", { - drawtype = "mesh", - tiles = { - "jeija_wall_lever_lever_light_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - inventory_image = "jeija_wall_lever.png", - wield_image = "jeija_wall_lever.png", - paramtype = "light", - paramtype2 = "facedir", - mesh = "jeija_wall_lever_off.obj", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = { -3/16, -4/16, 2/16, 3/16, 4/16, 8/16 }, - }, - groups = {handy=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, attached_node_facedir=1}, - is_ground_content = false, - description=S("Lever"), - _tt_help = S("Provides redstone power while it's turned on"), - _doc_items_longdesc = S("A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state."), - _doc_items_usagehelp = S("Use the lever to flip it on or off."), - on_rightclick = function(pos, node) - minetest.swap_node(pos, {name="mesecons_walllever:wall_lever_on", param2=node.param2}) - mesecon.receptor_on(pos, lever_get_output_rules(node)) - minetest.sound_play("mesecons_button_push", {pos=pos, max_hear_distance=16}, true) - end, - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return end - local groups = def.groups - - -- Check special rightclick action of pointed node - if def and def.on_rightclick then - if not placer:get_player_control().sneak then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack, false - end - end - - -- If the pointed node is buildable, let's look at the node *behind* that node - if def.buildable_to then - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - local actual = vector.subtract(under, dir) - local actualnode = minetest.get_node(actual) - def = minetest.registered_nodes[actualnode.name] - groups = def.groups - end - - -- Only allow placement on full-cube solid opaque nodes - if (not groups) or (not groups.solid) or (not groups.opaque) or (def.node_box and def.node_box.type ~= "regular") then - return itemstack - end - - local above = pointed_thing.above - local dir = vector.subtract(under, above) - local tau = math.pi*2 - local wdir = minetest.dir_to_facedir(dir, true) - if dir.y ~= 0 then - local yaw = placer:get_look_horizontal() - if (yaw > tau/8 and yaw < (tau/8)*3) or (yaw < (tau/8)*7 and yaw > (tau/8)*5) then - if dir.y == -1 then - wdir = 13 - else - wdir = 15 - end - else - if dir.y == -1 then - wdir = 10 - else - wdir = 8 - end - end - end - - local idef = itemstack:get_definition() - local itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing, wdir) - - if success then - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true) - end - end - return itemstack - end, - - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {receptor = { - rules = lever_get_output_rules, - state = mesecon.state.off - }}, - on_rotate = on_rotate, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) -minetest.register_node("mesecons_walllever:wall_lever_on", { - drawtype = "mesh", - tiles = { - "jeija_wall_lever_lever_light_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - mesh = "jeija_wall_lever_on.obj", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = { -3/16, -4/16, 2/16, 3/16, 4/16, 8/16 }, - }, - groups = {handy=1, not_in_creative_inventory = 1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, attached_node_facedir=1}, - is_ground_content = false, - drop = "mesecons_walllever:wall_lever_off", - _doc_items_create_entry = false, - on_rightclick = function(pos, node) - minetest.swap_node(pos, {name="mesecons_walllever:wall_lever_off", param2=node.param2}) - mesecon.receptor_off(pos, lever_get_output_rules(node)) - minetest.sound_play("mesecons_button_push", {pos=pos, max_hear_distance=16, pitch=0.9}, true) - end, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {receptor = { - rules = lever_get_output_rules, - state = mesecon.state.on - }}, - on_rotate = on_rotate, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_craft({ - output = "mesecons_walllever:wall_lever_off", - recipe = { - {"mcl_core:stick"}, - {"mcl_core:cobble"}, - } -}) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_walllever:wall_lever_off", "nodes", "mesecons_walllever:wall_lever_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.de.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.de.tr deleted file mode 100644 index 27a3bb55f..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Hebel -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Ein Hebel ist eine Redstonekomponente, die ein- und ausgeschaltet werden kann. Er versorgt seine benachbarten Blöcke mit Redstoneenergie, solange er sich im eingeschalteten Zustand befindet. -Use the lever to flip it on or off.=Benutzen Sie den Hebel, um ihn ein- oder auszuschalten. -Provides redstone power while it's turned on=Gibt Redstoneenergie aus, während er eingeschaltet ist diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.es.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.es.tr deleted file mode 100644 index e0e55298e..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Palanca -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=EUna palanca es un componente de redstone que se puede activar y desactivar. Suministra energía redstone a bloques adyacentes mientras está en el estado "encendido". -Use the lever to flip it on or off.=Use la palanca para encenderlo o apagarlo. diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.fr.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.fr.tr deleted file mode 100644 index 3d5d23c81..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Levier -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Un levier est un composant de redstone qui peut être activé et désactivé. Il fournit de l'énergie redstone aux blocs adjacents pendant qu'il est à l'état "activé". -Use the lever to flip it on or off.=Utilisez le levier pour l'activer ou le désactiver. -Provides redstone power while it's turned on=Fournit une puissance de redstone lorsqu'il est activé diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.pl.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.pl.tr deleted file mode 100644 index 924fe3dd0..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Dźwignia -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Dźwignia jest czerwienitowym elementem, który można przełączać między stanem włączonym i wyłączonym. Wysyła ona czerwienitową energię gdy jest w stanie włączonym. -Use the lever to flip it on or off.=Użyj dźwigni by przełączyć ją między stanami. -Provides redstone power while it's turned on=Dostarcza energii czerwienitowej gdy jest włączona diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.ru.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.ru.tr deleted file mode 100644 index 6ed05b387..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Рычаг -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Рычаг это компонент редстоуна, который можно включать и выключать. Он подаёт энергию редстоуна на соседние блоки, пока он находится во «включённом» состоянии. -Use the lever to flip it on or off.=[Используйте] рычаг, чтобы перещёлкнуть его во включённое или выключенное положение . -Provides redstone power while it's turned on=Снабжает энергией редстоуна, когда включён diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/template.txt deleted file mode 100644 index 0187e6d28..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever= -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.= -Use the lever to flip it on or off.= -Provides redstone power while it's turned on= diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/mod.conf b/mods/ITEMS/REDSTONE/mesecons_walllever/mod.conf deleted file mode 100644 index 8512e9d6b..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_walllever -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_lever_light_on.png b/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_lever_light_on.png deleted file mode 100644 index 9f8af946d..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_lever_light_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_off.obj b/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_off.obj deleted file mode 100644 index c5044de1c..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_off.obj +++ /dev/null @@ -1,88 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: '' -# www.blender.org -mtllib jeija_wall_lever_off.mtl -o nodebox1.009 -v -0.070437 0.138562 0.459573 -v -0.070383 0.058650 0.407149 -v -0.070618 0.289563 0.117785 -v -0.070672 0.369475 0.170211 -v 0.054549 0.139792 0.459559 -v 0.054604 0.059883 0.407135 -v 0.054369 0.290797 0.117772 -v 0.054313 0.370707 0.170196 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.125000 0.562500 -vt 0.187500 0.562500 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.125000 0.562500 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.187500 0.562500 -vt 0.625000 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.937500 -vt 0.625000 0.937500 -vn -1.0000 -0.0008 0.0002 -vn 1.0000 0.0008 -0.0002 -vn -0.0076 0.7816 0.6237 -vn 0.0076 -0.7816 -0.6237 -vn -0.0055 0.5485 -0.8361 -usemtl none.009 -s off -f 1/1/1 4/2/1 3/3/1 2/4/1 -f 5/5/2 6/6/2 7/7/2 8/8/2 -f 1/9/3 5/10/3 8/11/3 4/12/3 -f 2/13/4 3/14/4 7/15/4 6/16/4 -f 4/17/5 8/18/5 7/19/5 3/20/5 -o nodebox1.008 -v -0.170183 0.248882 0.492124 -v -0.161792 -0.249536 0.496140 -v -0.161781 -0.250523 0.373114 -v -0.170172 0.247894 0.369098 -v 0.161753 0.245254 0.492135 -v 0.170145 -0.253163 0.496151 -v 0.170155 -0.254151 0.373125 -v 0.161764 0.244266 0.369109 -vt 0.500000 0.203100 -vt 0.500000 0.000000 -vt 0.000000 0.000000 -vt 0.000000 0.203100 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 0.000000 -vt 0.500000 0.000000 -vt 0.000000 0.203100 -vt 0.000100 0.000100 -vt 0.500000 0.000000 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 -0.000000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 -0.000000 -vt 0.500000 0.500000 -vt -0.000000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 -0.000000 -vn -0.9999 -0.0168 0.0000 -vn 0.9999 0.0168 -0.0000 -vn 0.0109 0.9999 -0.0080 -vn -0.0109 -0.9999 0.0080 -vn 0.0001 0.0081 1.0000 -vn -0.0001 -0.0081 -1.0000 -usemtl none.008 -s off -f 9/21/6 12/22/6 11/23/6 10/24/6 -f 13/25/7 14/26/7 15/27/7 16/28/7 -f 9/29/8 13/25/8 16/28/8 12/30/8 -f 10/31/9 11/32/9 15/33/9 14/34/9 -f 9/35/10 10/36/10 14/37/10 13/38/10 -f 12/39/11 16/40/11 15/41/11 11/23/11 diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_on.obj b/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_on.obj deleted file mode 100644 index 5de8075ba..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_on.obj +++ /dev/null @@ -1,88 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: '' -# www.blender.org -mtllib jeija_wall_lever_on.mtl -o nodebox1.011 -v -0.170183 0.248540 0.492297 -v -0.161792 -0.249880 0.495967 -v -0.161781 -0.250782 0.372940 -v -0.170172 0.247638 0.369270 -v 0.161753 0.244912 0.492305 -v 0.170145 -0.253508 0.495975 -v 0.170155 -0.254410 0.372949 -v 0.161764 0.244010 0.369279 -vt 0.500000 0.203100 -vt 0.500000 0.000000 -vt 0.000000 0.000000 -vt 0.000000 0.203100 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 0.000000 -vt 0.500000 0.000000 -vt 0.000000 0.203100 -vt 0.000100 0.000100 -vt 0.500000 0.000000 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 -0.000000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 -0.000000 -vt 0.500000 0.500000 -vt -0.000000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 -0.000000 -vn -0.9999 -0.0168 0.0000 -vn 0.9999 0.0168 -0.0000 -vn 0.0109 0.9999 -0.0073 -vn -0.0109 -0.9999 0.0073 -vn 0.0001 0.0074 1.0000 -vn -0.0001 -0.0074 -1.0000 -usemtl none.011 -s off -f 1/1/1 4/2/1 3/3/1 2/4/1 -f 5/5/2 6/6/2 7/7/2 8/8/2 -f 1/9/3 5/5/3 8/8/3 4/10/3 -f 2/11/4 3/12/4 7/13/4 6/14/4 -f 1/15/5 2/16/5 6/17/5 5/18/5 -f 4/19/6 8/20/6 7/21/6 3/3/6 -o nodebox1.010 -v 0.070437 -0.138656 0.459545 -v 0.070383 -0.058733 0.407137 -v -0.054604 -0.059966 0.407123 -v -0.054549 -0.139886 0.459530 -v 0.070618 -0.289587 0.117726 -v 0.070672 -0.369510 0.170135 -v -0.054369 -0.290821 0.117712 -v -0.054313 -0.370742 0.170120 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.125000 0.562500 -vt 0.187500 0.562500 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.125000 0.562500 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.187500 0.562500 -vt 0.625000 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.937500 -vt 0.625000 0.937500 -vn 1.0000 0.0008 0.0002 -vn -1.0000 -0.0008 -0.0002 -vn 0.0076 -0.7817 0.6236 -vn -0.0076 0.7817 -0.6236 -vn 0.0055 -0.5484 -0.8362 -usemtl none.010 -s off -f 9/22/7 14/23/7 13/24/7 10/25/7 -f 12/26/8 11/27/8 15/28/8 16/29/8 -f 9/30/9 12/31/9 16/32/9 14/33/9 -f 10/34/10 13/35/10 15/36/10 11/37/10 -f 14/38/11 16/39/11 15/40/11 13/41/11 diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/textures/jeija_wall_lever.png b/mods/ITEMS/REDSTONE/mesecons_walllever/textures/jeija_wall_lever.png deleted file mode 100644 index 5774607cf..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_walllever/textures/jeija_wall_lever.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/init.lua b/mods/ITEMS/REDSTONE/mesecons_wires/init.lua deleted file mode 100644 index 0f2febc44..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/init.lua +++ /dev/null @@ -1,299 +0,0 @@ --- naming scheme: wire:(xp)(zp)(xm)(zm)(xpyp)(zpyp)(xmyp)(zmyp)_on/off --- where x= x direction, z= z direction, y= y direction, p = +1, m = -1, e.g. xpym = {x=1, y=-1, z=0} --- The (xp)/(zpyp)/.. statements shall be replaced by either 0 or 1 --- Where 0 means the wire has no visual connection to that direction and --- 1 means that the wire visually connects to that other node. - -local S = minetest.get_translator(minetest.get_current_modname()) - --- ####################### --- ## Update wire looks ## --- ####################### - -local wire_rules = -{{x=-1, y= 0, z= 0, spread=true}, - {x= 1, y= 0, z= 0, spread=true}, - {x= 0, y=-1, z= 0, spread=true}, - {x= 0, y= 1, z= 0, spread=true}, - {x= 0, y= 0, z=-1, spread=true}, - {x= 0, y= 0, z= 1, spread=true}, - - {x= 1, y= 1, z= 0}, - {x= 1, y=-1, z= 0}, - {x=-1, y= 1, z= 0}, - {x=-1, y=-1, z= 0}, - {x= 0, y= 1, z= 1}, - {x= 0, y=-1, z= 1}, - {x= 0, y= 1, z=-1}, - {x= 0, y=-1, z=-1}} - --- self_pos = pos of any mesecon node, from_pos = pos of conductor to getconnect for -local function wire_getconnect(from_pos, self_pos) - local node = minetest.get_node(self_pos) - if minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].mesecons then - -- rules of node to possibly connect to - local rules - if (minetest.registered_nodes[node.name].mesecon_wire) then - rules = wire_rules - else - rules = mesecon.get_any_rules(node) - end - - for _, r in ipairs(mesecon.flattenrules(rules)) do - if (vector.equals(vector.add(self_pos, r), from_pos)) then - return true - end - end - end - return false -end - --- Update this node -local function wire_updateconnect(pos) - local connections = {} - - for _, r in ipairs(wire_rules) do - if wire_getconnect(pos, vector.add(pos, r)) then - table.insert(connections, r) - end - end - - local nid = {} - for _, vec in ipairs(connections) do - -- flat component - if vec.x == 1 then nid[0] = "1" end - if vec.z == 1 then nid[1] = "1" end - if vec.x == -1 then nid[2] = "1" end - if vec.z == -1 then nid[3] = "1" end - - -- slopy component - if vec.y == 1 then - if vec.x == 1 then nid[4] = "1" end - if vec.z == 1 then nid[5] = "1" end - if vec.x == -1 then nid[6] = "1" end - if vec.z == -1 then nid[7] = "1" end - end - end - - local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") - ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") - - local state_suffix = string.find(minetest.get_node(pos).name, "_off") and "_off" or "_on" - minetest.set_node(pos, {name = "mesecons:wire_"..nodeid..state_suffix}) -end - -local function update_on_place_dig(pos, node) - -- Update placed node (get_node again as it may have been dug) - local nn = minetest.get_node(pos) - if (minetest.registered_nodes[nn.name]) - and (minetest.registered_nodes[nn.name].mesecon_wire) then - wire_updateconnect(pos) - end - - -- Update nodes around it - local rules - if minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].mesecon_wire then - rules = wire_rules - else - rules = mesecon.get_any_rules(node) - end - if (not rules) then return end - - for _, r in ipairs(mesecon.flattenrules(rules)) do - local np = vector.add(pos, r) - if minetest.registered_nodes[minetest.get_node(np).name] - and minetest.registered_nodes[minetest.get_node(np).name].mesecon_wire then - wire_updateconnect(np) - end - end -end - -mesecon.register_autoconnect_hook("wire", update_on_place_dig) - --- ############################ --- ## Wire node registration ## --- ############################ --- Nodeboxes: -local box_center = {-1/16, -.5, -1/16, 1/16, -.5+1/64, 1/16} -local box_bump1 = { -2/16, -8/16, -2/16, 2/16, -.5+1/64, 2/16 } - -local nbox_nid = -{ - [0] = {1/16, -.5, -1/16, 8/16, -.5+1/64, 1/16}, -- x positive - [1] = {-1/16, -.5, 1/16, 1/16, -.5+1/64, 8/16}, -- z positive - [2] = {-8/16, -.5, -1/16, -1/16, -.5+1/64, 1/16}, -- x negative - [3] = {-1/16, -.5, -8/16, 1/16, -.5+1/64, -1/16}, -- z negative - - [4] = {.5-1/16, -.5+1/16, -1/16, .5, .4999+1/64, 1/16}, -- x positive up - [5] = {-1/16, -.5+1/16, .5-1/16, 1/16, .4999+1/64, .5}, -- z positive up - [6] = {-.5, -.5+1/16, -1/16, -.5+1/16, .4999+1/64, 1/16}, -- x negative up - [7] = {-1/16, -.5+1/16, -.5, 1/16, .4999+1/64, -.5+1/16} -- z negative up -} - -local selectionbox = -{ - type = "fixed", - fixed = {-.5, -.5, -.5, .5, -.5+1/16, .5} -} - --- go to the next nodeid (ex.: 01000011 --> 01000100) -local function nid_inc() end -function nid_inc(nid) - local i = 0 - while nid[i-1] ~= 1 do - nid[i] = (nid[i] ~= 1) and 1 or 0 - i = i + 1 - end - - -- BUT: Skip impossible nodeids: - if ((nid[0] == 0 and nid[4] == 1) or (nid[1] == 0 and nid[5] == 1) - or (nid[2] == 0 and nid[6] == 1) or (nid[3] == 0 and nid[7] == 1)) then - return nid_inc(nid) - end - - return i <= 8 -end - -local function register_wires() - local nid = {} - while true do - -- Create group specifiction and nodeid string (see note above for details) - local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") - ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") - - -- Calculate nodebox - local nodebox = {type = "fixed", fixed={box_center}} - for i=0,7 do - if nid[i] == 1 then - table.insert(nodebox.fixed, nbox_nid[i]) - end - end - - -- Add bump to nodebox if curved - if (nid[0] == 1 and nid[1] == 1) or (nid[1] == 1 and nid[2] == 1) - or (nid[2] == 1 and nid[3] == 1) or (nid[3] == 1 and nid[0] == 1) then - table.insert(nodebox.fixed, box_bump1) - end - - -- If nothing to connect to, still make a nodebox of a straight wire - if nodeid == "00000000" then - nodebox.fixed = {-8/16, -.5, -1/16, 8/16, -.5+1/16, 1/16} - end - - local meseconspec_off = { conductor = { - rules = wire_rules, - state = mesecon.state.off, - onstate = "mesecons:wire_"..nodeid.."_on" - }} - - local meseconspec_on = { conductor = { - rules = wire_rules, - state = mesecon.state.on, - offstate = "mesecons:wire_"..nodeid.."_off" - }} - - local groups_on = {dig_immediate = 3, mesecon_conductor_craftable = 1, - not_in_creative_inventory = 1, attached_node = 1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1} - local groups_off = {dig_immediate = 3, mesecon_conductor_craftable = 1, - attached_node = 1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1, craftitem = 1} - if nodeid ~= "00000000" then - groups_off["not_in_creative_inventory"] = 1 - end - - -- Wire textures - local ratio_off = 128 - local ratio_on = 192 - local crossing_off = "(redstone_redstone_dust_dot.png^redstone_redstone_dust_line0.png^(redstone_redstone_dust_line1.png^[transformR90))^[colorize:#FF0000:"..ratio_off - local crossing_on = "(redstone_redstone_dust_dot.png^redstone_redstone_dust_line0.png^(redstone_redstone_dust_line1.png^[transformR90))^[colorize:#FF0000:"..ratio_on - local straight0_off = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_off - local straight0_on = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_on - local straight1_off = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_off - local straight1_on = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_on - local dot_off = "redstone_redstone_dust_dot.png^[colorize:#FF0000:"..ratio_off - local dot_on = "redstone_redstone_dust_dot.png^[colorize:#FF0000:"..ratio_on - - local tiles_off, tiles_on - - local wirehelp, tt, longdesc, usagehelp, img, desc_off, desc_on - if nodeid == "00000000" then - -- Non-connected redstone wire - nodebox.fixed = {-8/16, -.5, -8/16, 8/16, -.5+1/64, 8/16} - -- “Dot” texture - tiles_off = { dot_off, dot_off, "blank.png", "blank.png", "blank.png", "blank.png" } - tiles_on = { dot_on, dot_on, "blank.png", "blank.png", "blank.png", "blank.png" } - - tt = S("Transmits redstone power, powers mechanisms") - longdesc = S("Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.").."\n".. -S("A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.").."\n".. -S("Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.") - usagehelp = S("Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills.").."\n\n".. - -S("Read the help entries on the other redstone components to learn how redstone components interact.") - img = "redstone_redstone_dust.png" - desc_off = S("Redstone") - desc_on = S("Powered Redstone Spot (@1)", nodeid) - else - -- Connected redstone wire - table.insert(nodebox, box_center) - tiles_off = { crossing_off, crossing_off, straight0_off, straight1_off, straight0_off, straight1_off } - tiles_on = { crossing_on, crossing_on, straight0_on, straight1_on, straight0_on, straight1_on } - wirehelp = false - desc_off = S("Redstone Trail (@1)", nodeid) - desc_on = S("Powered Redstone Trail (@1)", nodeid) - end - - mesecon.register_node(":mesecons:wire_"..nodeid, { - drawtype = "nodebox", - paramtype = "light", - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - sunlight_propagates = true, - selection_box = selectionbox, - node_box = nodebox, - walkable = false, - drop = "mesecons:wire_00000000_off", - sounds = mcl_sounds.node_sound_defaults(), - is_ground_content = false, - mesecon_wire = true - },{ - description = desc_off, - inventory_image = img, - wield_image = img, - _tt_help = tt, - _doc_items_create_entry = wirehelp, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - tiles = tiles_off, - mesecons = meseconspec_off, - groups = groups_off, - },{ - description = desc_on, - _doc_items_create_entry = false, - tiles = tiles_on, - mesecons = meseconspec_on, - groups = groups_on - }) - - -- Add Help entry aliases for e.g. making it identifiable by the lookup tool [doc_identifier] - if minetest.get_modpath("doc") then - if nodeid ~= "00000000" then - doc.add_entry_alias("nodes", "mesecons:wire_00000000_off", "nodes", "mesecons:wire_"..nodeid.."_off") - end - doc.add_entry_alias("nodes", "mesecons:wire_00000000_off", "nodes", "mesecons:wire_"..nodeid.."_on") - end - - if (nid_inc(nid) == false) then return end - end -end -register_wires() - -minetest.register_alias("mesecons:redstone", "mesecons:wire_00000000_off") - -minetest.register_craft({ - type = "cooking", - output = "mesecons:redstone", - recipe = "mcl_core:stone_with_redstone", - cooktime = 10, -}) - diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.de.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.de.tr deleted file mode 100644 index d6d82e8e6..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Redstone ist ein vielseitiges leitendes Mineral, der Redstoneenergie überträgt. Es kann auf dem Boden in Form einer Spur platziert werden. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Eine Redstonespur kann einen von zwei Zuständen annehmen: Bestromt und unbestromt. Eine bestromte Redstonespur wird benachbarte Redstonekomponenten bestromen (und somit aktivieren). -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=Redstoneenergie kann von verschiedenen Redstonekomponenten erhalten werden, wie zum Beispiel einem Redstoneblock oder einem Knopf. Redstoneenergie wird benutzt, um verschiedene Mechanismen zu aktivieren, wie Redstonelampen oder Kolben. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills.=Platzieren Sie Redstone auf dem Boden, um eine Redstonespur auszulegen. Die Spuren werden sich automatisch miteinander verbinden und sie können auch über Hügel gehen. -Read the help entries on the other redstone components to learn how redstone components interact.=Lesen Sie die Hilfeeinträge über andere Redstonekomponenten, um zu erfahren, wie sie interagieren. -Redstone=Redstone -Powered Redstone Spot (@1)=Bestromter Redstoneklecks (@1) -Redstone Trail (@1)=Redstonespur (@1) -Powered Redstone Trail (@1)=Bestromte Redstonespur (@1) -Transmits redstone power, powers mechanisms=Überträgt Redstoneenergie, bestromt Mechanismen diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.es.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.es.tr deleted file mode 100644 index beac84517..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Redstone es un mineral conductor versátil que transmite el poder de redstone. Se puede colocar en el suelo como un sendero. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Un sendero de redstone puede estar en dos estados: alimentado o no alimentado. Un rastro de redstone alimentado alimentará (y por lo tanto activará) los componentes adyacentes de redstone. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=El poder de Redstone se puede recibir de varios componentes de redstone, como un bloque de redstone o un botón. El poder de Redstone se utiliza para activar numerosos mecanismos, como las lámparas de redstone o los pistones. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills.=Coloque redstone en el suelo para construir un sendero de redstone. Los senderos se conectarán entre sí de forma automática y también pueden pasar por colinas. -Read the help entries on the other redstone components to learn how redstone components interact.=Lea las entradas de ayuda en los otros componentes de redstone para aprender cómo interactúan los componentes de redstone. -Redstone=Redstone -Powered Redstone Spot (@1)=Punto de Redstone accionado (@1) -Redstone Trail (@1)=Sendero de Redstone (@1) -Powered Redstone Trail (@1)=Sendero de Redstone con motorizado (@1) diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.fr.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.fr.tr deleted file mode 100644 index 66a4230f5..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Redstone est un minéral conducteur polyvalent qui transmet la puissance de redstone. Il peut être placé au sol comme un sentier. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Un sentier de redstone peut être dans deux états: alimenté ou non alimenté. Un sentier Redstone alimenté alimentera (et activera donc) les composants Redstone adjacents. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=L'alimentation Redstone peut être reçue de divers composants Redstone, tels qu'un bloc de Redstone ou un bouton. La puissance Redstone est utilisée pour activer de nombreux mécanismes, tels que les lampes ou les pistons Redstone. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.=Placez du redstone sur le sol pour construire un sentier de redstone. Les sentiers se connecteront automatiquement et pourront également traverser des collines. Un moyen facile d'alimenter une piste de redstone est de placer une torche de redstone. -Read the help entries on the other redstone components to learn how redstone components interact.=Lisez les entrées d'aide sur les autres composants Redstone pour savoir comment les composants Redstone interagissent. -Redstone=Redstone -Powered Redstone Spot (@1)=Spot Redstone alimenté (@1) -Redstone Trail (@1)=Sentier Redstone (@1) -Powered Redstone Trail (@1)=Sentier Redstone alimenté (@1) -Transmits redstone power, powers mechanisms=Transmet la puissance redstone, alimente les mécanismes diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.pl.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.pl.tr deleted file mode 100644 index bdc717649..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Czerwienit jest wszechstronnym przewodzącym minerałem, który przewodzi energię czerwienitową. Może być położony na ziemi tworząc ścieżkę. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Ścieżka czerwienitu może być w dwóch stanach: Zasilonym lub Nie zasilonym. Zasilona ścieżka będzie zasilać (a więc również aktywować) sąsiadujące mechanizmy czerwienitowe. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=Energia czerwienitowa może być uzyskana z różnych mechanizmów czerwienitowych, takich jak blok czerwienitu czy przycisk. Energia czerwienitowa może być wykorzystywana do aktywowania różnych mechanizmów takich jak czerwienitowe lampy lub tłoki. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.=Połóż czerwienit na ziemi aby stworzyć ścieżkę czerwienitu. Ścieżki połączą się ze sobą automatycznie, nawet jeśli istnieje różnica wysokości. Łatwym sposobem na zasilenie ścieżki czerwienitu jest postawienie czerwienitowej pochodni. -Read the help entries on the other redstone components to learn how redstone components interact.=Przeczytaj wpisy na temat innych czerwienitowych mechanizmów, by dowiedzieć się jak wchodzą ze sobą w interakcję. -Redstone=Czerwienit -Powered Redstone Spot (@1)=Zasilony punkt czerwienitu (@1) -Redstone Trail (@1)=Ścieżka czerwienitu (@1) -Powered Redstone Trail (@1)=Zasilona ścieżka czerwienitu (@1) -Transmits redstone power, powers mechanisms=Przekazuje energię czerwienitową, zasila mechanizmy diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.ru.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.ru.tr deleted file mode 100644 index 4316613b0..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Редстоун является универсальным проводящим минералом, который передает энергию красного камня. Он может размещаться на поверхности как дорожка. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Дорожка редстоуна может быть в двух состояниях: включена или выключена. Включённая дорожка редстоуна будет снабжать (а значит, активировать) смежные компоненты редстоуна. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=Энергию редстоуна можно получать от различных компонентов редстоуна, таких как блок редстоуна или кнопка. Эта энергия используется для активации многочисленных механизмов, таких как лампы редстоуна или поршни. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.=Поместите редстоун на землю, чтобы создать из него дорожку. Фрагменты дорожек будут соединяться между собой автоматически и могут даже проходить по холмам. Простой способ подать энергию редстоуна к дорожке редстоуна это установка факела редстоуна. -Read the help entries on the other redstone components to learn how redstone components interact.=Смотрите справочные записи к остальным компонентам редстоуна, чтобы узнать больше об их взаимодействии. -Redstone=Редстоун -Powered Redstone Spot (@1)=Подключённое пятно редстоуна (@1) -Redstone Trail (@1)=Дорожка редстоуна (@1) -Powered Redstone Trail (@1)=Подключённая дорожка редстоуна (@1) -Transmits redstone power, powers mechanisms=Передаёт энергию редстоуна, подключает механизмы diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_wires/locale/template.txt deleted file mode 100644 index 91e6bdee6..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.= -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.= -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.= -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.= -Read the help entries on the other redstone components to learn how redstone components interact.= -Redstone= -Powered Redstone Spot (@1)= -Redstone Trail (@1)= -Powered Redstone Trail (@1)= -Transmits redstone power, powers mechanisms= diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/mod.conf b/mods/ITEMS/REDSTONE/mesecons_wires/mod.conf deleted file mode 100644 index 15f2e0d32..000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_wires -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust.png deleted file mode 100644 index 30c42e455..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_dot.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_dot.png deleted file mode 100644 index d2e433833..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_dot.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line0.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line0.png deleted file mode 100644 index 3219df3c4..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line0.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line1.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line1.png deleted file mode 100644 index 61ebb2c82..000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line1.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/modpack.conf b/mods/ITEMS/REDSTONE/modpack.conf deleted file mode 100644 index 245aa906e..000000000 --- a/mods/ITEMS/REDSTONE/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = REDSTONE -description = Redstone modpack, adds redstone and various interactive mechanims to build complex electronic machinery diff --git a/mods/ITEMS/mcl_amethyst/grow.lua b/mods/ITEMS/mcl_amethyst/grow.lua deleted file mode 100644 index f1a23d9b7..000000000 --- a/mods/ITEMS/mcl_amethyst/grow.lua +++ /dev/null @@ -1,52 +0,0 @@ -local interval = 10 -local chance = 5 - -local function grow(pos, node) - local def = minetest.registered_nodes[node.name] - local next_gen = def._mcl_amethyst_next_grade - if not next_gen then return end - - local dir = minetest.wallmounted_to_dir(node.param2) - local ba_pos = vector.add(pos, dir) - local ba_node = minetest.get_node(ba_pos) - if ba_node.name ~= "mcl_amethyst:budding_amethyst_block" then return end - - local swap_result = table.copy(node) - swap_result.name = next_gen - minetest.swap_node(pos, swap_result) -end - -minetest.register_abm({ - label = "Amethyst Bud Growth", - nodenames = {"group:amethyst_buds"}, - neighbors = {"mcl_amethyst:budding_amethyst_block"}, - interval = interval, - chance = chance, - action = grow, -}) - -local all_directions = { - vector.new(1, 0, 0), - vector.new(0, 1, 0), - vector.new(0, 0, 1), - vector.new(-1, 0, 0), - vector.new(0, -1, 0), - vector.new(0, 0, -1), -} - -minetest.register_abm({ - label = "Spawn Amethyst Bud", - nodenames = {"mcl_amethyst:budding_amethyst_block"}, - neighbors = {"air", "group:water"}, - interval = 20, - chance = 2, - action = function(pos) - local check_pos = vector.add(all_directions[math.random(1, #all_directions)], pos) - local check_node = minetest.get_node(check_pos) - local check_node_name = check_node.name - if check_node_name ~= "air" and minetest.get_item_group(check_node_name, "water") == 0 then return end - local param2 = minetest.dir_to_wallmounted(vector.subtract(pos, check_pos)) - local new_node = {name = "mcl_amethyst:small_amethyst_bud", param2 = param2} - minetest.swap_node(check_pos, new_node) - end, -}) diff --git a/mods/ITEMS/mcl_amethyst/init.lua b/mods/ITEMS/mcl_amethyst/init.lua deleted file mode 100644 index 0ee78de41..000000000 --- a/mods/ITEMS/mcl_amethyst/init.lua +++ /dev/null @@ -1,220 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local sounds = mcl_sounds.node_sound_glass_defaults({ - footstep = {name = "mcl_amethyst_amethyst_walk", gain = 0.4}, - dug = {name = "mcl_amethyst_amethyst_break", gain = 0.44}, -}) - --- Amethyst block -minetest.register_node("mcl_amethyst:amethyst_block",{ - description = S("Block of Amethyst"), - _doc_items_longdesc = S("The Block of Amethyst is a decoration block crafted from amethyst shards."), - tiles = {"mcl_amethyst_amethyst_block.png"}, - groups = {pickaxey = 1, building_block = 1}, - sounds = sounds, - is_ground_content = true, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, -}) - -minetest.register_node("mcl_amethyst:budding_amethyst_block",{ - description = S("Budding Amethyst"), - _doc_items_longdesc = S("The Budding Amethyst can grow amethyst"), - tiles = {"mcl_amethyst_budding_amethyst.png"}, - drop = "", - groups = { - pickaxey = 1, - building_block = 1, - dig_by_piston = 1, - }, - sounds = sounds, - is_ground_content = true, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, -}) - -mcl_wip.register_wip_item("mcl_amethyst:budding_amethyst_block") - --- Amethyst Shard -minetest.register_craftitem("mcl_amethyst:amethyst_shard",{ - description = S("Amethyst Shard"), - _doc_items_longdesc = S("An amethyst shard is a crystalline mineral."), - inventory_image = "mcl_amethyst_amethyst_shard.png", - groups = {craftitem = 1}, -}) - --- Calcite -minetest.register_node("mcl_amethyst:calcite",{ - description = S("Calcite"), - _doc_items_longdesc = S("Calcite can be found as part of amethyst geodes."), - tiles = {"mcl_amethyst_calcite_block.png"}, - groups = {pickaxey = 1, building_block = 1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = true, - _mcl_hardness = 0.75, - _mcl_blast_resistance = 0.75, -}) - --- Tinied Glass -minetest.register_node("mcl_amethyst:tinted_glass",{ - description = S("Tinted Glass"), - _doc_items_longdesc = S("Tinted Glass is a type of glass which blocks lights while it is visually transparent."), - tiles = {"mcl_amethyst_tinted_glass.png"}, - _mcl_hardness = 0.3, - _mcl_blast_resistance = 0.3, - drawtype = "glasslike", - use_texture_alpha = "blend", - sunlight_propagates = false, - groups = {handy = 1, building_block = 1, deco_block = 1}, - sounds = mcl_sounds.node_sound_glass_defaults(), - is_ground_content = false, -}) - --- Amethyst Cluster -local bud_def = { - { - size = "small", - description = S("Small Amethyst Bud"), - long_desc = S("Small Amethyst Bud is the first growth of amethyst bud."), - light_source = 3, - next_stage = "mcl_amethyst:medium_amethyst_bud", - selection_box = { -4/16, -7/16, -4/16, 4/16, -3/16, 4/16 }, - }, - { - size = "medium", - description = S("Medium Amethyst Bud"), - long_desc = S("Medium Amethyst Bud is the second growth of amethyst bud."), - light_source = 4, - next_stage = "mcl_amethyst:large_amethyst_bud", - selection_box = { -4.5/16, -8/16, -4.5/16, 4.5/16, -2/16, 4.5/16 }, - }, - { - size = "large", - description = S("Large Amethyst Bud"), - long_desc = S("Large Amethyst Bud is the third growth of amethyst bud."), - light_source = 5, - next_stage = "mcl_amethyst:amethyst_cluster", - selection_box = { -4.5/16, -8/16, -4.5/16, 4.5/16, -1/16, 4.5/16 }, - }, -} - -for _, def in pairs(bud_def) do - local size = def.size - local name = "mcl_amethyst:" .. size .. "_amethyst_bud" - local tile = "mcl_amethyst_amethyst_bud_" .. size .. ".png" - local inventory_image = "mcl_amethyst_amethyst_bud_" .. size .. ".png" - minetest.register_node(name, { - description = def.description, - _doc_items_longdesc = def.longdesc, - drop = "", - tiles = {tile}, - inventory_image = inventory_image, - paramtype1 = "light", - paramtype2 = "wallmounted", - drawtype = "plantlike", - use_texture_alpha = "clip", - sunlight_propagates = true, - walkable = false, - light_source = def.light_source, - groups = { - dig_by_water = 1, - destroy_by_lava_flow = 1, - dig_by_piston = 1, - pickaxey = 1, - deco_block = 1, - amethyst_buds = 1, - attached_node = 1, - }, - sounds = sounds, - selection_box = { - type = "fixed", - fixed = def.selection_box - }, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, - _mcl_silk_touch_drop = true, - _mcl_amethyst_next_grade = def.next_stage, - }) -end - -minetest.register_node("mcl_amethyst:amethyst_cluster",{ - description = S("Amethyst Cluster"), - _doc_items_longdesc = S("Amethyst Cluster is the final growth of amethyst bud."), - drop = { - max_items = 1, - items = { - { - tools = {"~mcl_tools:pick_"}, - items = {"mcl_amethyst:amethyst_shard 4"}, - }, - { - items = {"mcl_amethyst:amethyst_shard 2"}, - }, - } - }, - tiles = {"mcl_amethyst_amethyst_cluster.png",}, - inventory_image = "mcl_amethyst_amethyst_cluster.png", - paramtype2 = "wallmounted", - drawtype = "plantlike", - paramtype1 = "light", - use_texture_alpha = "clip", - sunlight_propagates = true, - walkable = false, - light_source = 7, - groups = { - dig_by_water = 1, - destroy_by_lava_flow = 1, - dig_by_piston = 1, - pickaxey = 1, - deco_block = 1, - attached_node = 1, - }, - sounds = sounds, - selection_box = { - type = "fixed", - fixed = { -4.8/16, -8/16, -4.8/16, 4.8/16, 3.9/16, 4.8/16 }, - }, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, - _mcl_silk_touch_drop = true, -}) - --- Register Crafts -minetest.register_craft({ - output = "mcl_amethyst:amethyst_block", - recipe = { - {"mcl_amethyst:amethyst_shard", "mcl_amethyst:amethyst_shard"}, - {"mcl_amethyst:amethyst_shard", "mcl_amethyst:amethyst_shard"}, - }, -}) - -minetest.register_craft({ - output = "mcl_amethyst:tinted_glass 2", - recipe = { - {"", "mcl_amethyst:amethyst_shard", ""}, - {"mcl_amethyst:amethyst_shard", "mcl_core:glass", "mcl_amethyst:amethyst_shard",}, - {"", "mcl_amethyst:amethyst_shard", ""}, - }, -}) - -if minetest.get_modpath("mcl_spyglass") then - minetest.clear_craft({output = "mcl_spyglass:spyglass",}) - local function craft_spyglass(ingot) - minetest.register_craft({ - output = "mcl_spyglass:spyglass", - recipe = { - {"mcl_amethyst:amethyst_shard"}, - {ingot}, - {ingot}, - } - }) - end - if minetest.get_modpath("mcl_copper") then - craft_spyglass("mcl_copper:copper_ingot") - else - craft_spyglass("mcl_core:iron_ingot") - end -end - --- Amethyst Growing -dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/grow.lua") diff --git a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.fr.tr b/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.fr.tr deleted file mode 100644 index fbdab48f4..000000000 --- a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.fr.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_amethyst -Amethyst Cluster=Agrégat d'améthyste -Amethyst Cluster is the final growth of amethyst bud.=L'agrégat d'améthyste est le stade final de la croissance du bourgeon d'améthyste. -Amethyst Shard=Éclat d'améthyste -An amethyst shard is a crystalline mineral.=Un éclat d'améthyste est un minéral cristallin. -Block of Amethyst=Bloc d'améthyste -Budding Amethyst=Améthyste bourgeonante -Calcite=Calcite -Calcite can be found as part of amethyst geodes.=La calcite peut être trouvée dans les géodes d'améthyste. -Large Amethyst Bud=Grand bourgeon d'améthyste -Large Amethyst Bud is the third growth of amethyst bud.=Le grand bourgeon d'améthyste est le troisième stade de la croissance du bourgeon d'améthyste. -Medium Amethyst Bud=Bourgeon d'améthyste moyen -Medium Amethyst Bud is the second growth of amethyst bud.=Le bourgeon d'améthyste moyen est le deuxième stade de la croissance du bourgeon d'améthyste. -Small Amethyst Bud=Petit bourgeon d'améthyste -Small Amethyst Bud is the first growth of amethyst bud.=Le petit bourgeon d'améthyste est le premier stade de la croissance du bourgeon d'améthyste. -The Block of Amethyst is a decoration block crafted from amethyst shards.=Le bloc d'améthyste est un bloc décoratif fabriqué à partir d'éclats d'améthyste. -The Budding Amethyst can grow amethyst=L'améthyste bourgeonante peut faire croître de l'améthyste. -Tinted Glass=Verre teinté -Tinted Glass is a type of glass which blocks lights while it is visually transparent.=Le verre teinté est un type de verre qui bloque la lumière tout en étant visuellement transparent. diff --git a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.ru.tr b/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.ru.tr deleted file mode 100644 index 9f1d0f572..000000000 --- a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.ru.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_amethyst -Amethyst Cluster=Аметистовая друза -Amethyst Cluster is the final growth of amethyst bud.=Аметистовая друза - это последняя 4-я стадия роста аметистового бутона. -Amethyst Shard=Осколок аметиста -An amethyst shard is a crystalline mineral.=Осколок аметиста - это кристаллический минерал, получаемый в результате разрушения кластеров аметиста. -Block of Amethyst=Аметистовый блок -Budding Amethyst=Растущий аметист -Calcite=Кальцит -Calcite can be found as part of amethyst geodes.=Кальцит можно найти в составе аметистовых жеод. -Large Amethyst Bud=Большой росток аметиста -Large Amethyst Bud is the third growth of amethyst bud.=Большой росток - третья стадия роста аметиста. -Medium Amethyst Bud=Средний росток аметиста -Medium Amethyst Bud is the second growth of amethyst bud.=Средний росток - вторая стадия роста аметиста. -Small Amethyst Bud=Маленький росток аметиста -Small Amethyst Bud is the first growth of amethyst bud.=Маленький росток - первая стадия роста аметиста. -The Block of Amethyst is a decoration block crafted from amethyst shards.=Блок аметиста - декоративный блок, скрафченный из осколков аметиста. -The Budding Amethyst can grow amethyst=Растущий аметист может вырастить аметист -Tinted Glass=Тонированное стекло -Tinted Glass is a type of glass which blocks lights while it is visually transparent.=Тонированное стекло блокирует свет, но визуально прозрачно. diff --git a/mods/ITEMS/mcl_amethyst/locale/template.txt b/mods/ITEMS/mcl_amethyst/locale/template.txt deleted file mode 100644 index 7f23e9965..000000000 --- a/mods/ITEMS/mcl_amethyst/locale/template.txt +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_amethyst -Amethyst Cluster= -Amethyst Cluster is the final growth of amethyst bud.= -Amethyst Shard= -An amethyst shard is a crystalline mineral.= -Block of Amethyst= -Budding Amethyst= -Calcite= -Calcite can be found as part of amethyst geodes.= -Large Amethyst Bud= -Large Amethyst Bud is the third growth of amethyst bud.= -Medium Amethyst Bud= -Medium Amethyst Bud is the second growth of amethyst bud.= -Small Amethyst Bud= -Small Amethyst Bud is the first growth of amethyst bud.= -The Block of Amethyst is a decoration block crafted from amethyst shards.= -The Budding Amethyst can grow amethyst= -Tinted Glass= -Tinted Glass is a type of glass which blocks lights while it is visually transparent.= diff --git a/mods/ITEMS/mcl_amethyst/mod.conf b/mods/ITEMS/mcl_amethyst/mod.conf deleted file mode 100644 index 97ed6ae99..000000000 --- a/mods/ITEMS/mcl_amethyst/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_amethyst -author = Emojiminetest, kay27 -description = Amethyst related stuff -depends = mcl_init, mcl_core, mcl_wip -optional_depends = mcl_spyglass, mcl_copper diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.1.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.1.ogg deleted file mode 100644 index a2208012c..000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.2.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.2.ogg deleted file mode 100644 index a3903550c..000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.3.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.3.ogg deleted file mode 100644 index 9cc81e20f..000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.1.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.1.ogg deleted file mode 100644 index 8165edd5f..000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.2.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.2.ogg deleted file mode 100644 index 5bb5c4657..000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.3.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.3.ogg deleted file mode 100644 index 781668514..000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.4.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.4.ogg deleted file mode 100644 index 14299f50c..000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/LICENSE.txt b/mods/ITEMS/mcl_amethyst/textures/LICENSE.txt deleted file mode 100644 index f0993b6ce..000000000 --- a/mods/ITEMS/mcl_amethyst/textures/LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -Nova_Wostra Creative Commons Attribution-Share Alike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_block.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_block.png deleted file mode 100644 index bc172f2a0..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_large.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_large.png deleted file mode 100644 index 5c7309434..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_large.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_medium.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_medium.png deleted file mode 100644 index 5a54f63dc..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_medium.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_small.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_small.png deleted file mode 100644 index 7a414235b..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_small.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster.png deleted file mode 100644 index 1097d97b1..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster_block.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster_block.png deleted file mode 100644 index 7ea932bf8..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_shard.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_shard.png deleted file mode 100644 index 0d718c47a..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_shard.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_budding_amethyst.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_budding_amethyst.png deleted file mode 100644 index 6dee8ee9b..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_budding_amethyst.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_calcite_block.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_calcite_block.png deleted file mode 100644 index 48e3ce5d9..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_calcite_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_tinted_glass.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_tinted_glass.png deleted file mode 100644 index 18e797789..000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_tinted_glass.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/init.lua b/mods/ITEMS/mcl_anvils/init.lua deleted file mode 100644 index d3b32b844..000000000 --- a/mods/ITEMS/mcl_anvils/init.lua +++ /dev/null @@ -1,571 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local MAX_NAME_LENGTH = 35 -local MAX_WEAR = 65535 -local SAME_TOOL_REPAIR_BOOST = math.ceil(MAX_WEAR * 0.12) -- 12% -local MATERIAL_TOOL_REPAIR_BOOST = { - math.ceil(MAX_WEAR * 0.25), -- 25% - math.ceil(MAX_WEAR * 0.5), -- 50% - math.ceil(MAX_WEAR * 0.75), -- 75% - MAX_WEAR, -- 100% -} - -local function get_anvil_formspec(set_name) - if not set_name then - set_name = "" - end - return "size[9,8.75]".. - "background[-0.19,-0.25;9.41,9.49;mcl_anvils_inventory.png]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "list[context;input;1,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(1,2.5,1,1).. - "list[context;input;4,2.5;1,1;1]".. - mcl_formspec.get_itemslot_bg(4,2.5,1,1).. - "list[context;output;8,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(8,2.5,1,1).. - "label[3,0.1;"..minetest.formspec_escape(minetest.colorize("#313131", S("Repair and Name"))).."]".. - "field[3.25,1;4,1;name;;"..minetest.formspec_escape(set_name).."]".. - "field_close_on_enter[name;false]".. - "button[7,0.7;2,1;name_button;"..minetest.formspec_escape(S("Set Name")).."]".. - "listring[context;output]".. - "listring[current_player;main]".. - "listring[context;input]".. - "listring[current_player;main]" -end - --- Given a tool and material stack, returns how many items of the material stack --- needs to be used up to repair the tool. -local function get_consumed_materials(tool, material) - local wear = tool:get_wear() - --local health = (MAX_WEAR - wear) - local matsize = material:get_count() - local materials_used = 0 - for m=1, math.min(4, matsize) do - materials_used = materials_used + 1 - if (wear - MATERIAL_TOOL_REPAIR_BOOST[m]) <= 0 then - break - end - end - return materials_used -end - -local function contains(table, value) - for _, i in pairs(table) do - if i == value then - return true - end - end - return false -end - --- Given 2 input stacks, tells you which is the tool and which is the material. --- Returns ("tool", input1, input2) if input1 is tool and input2 is material. --- Returns ("material", input2, input1) if input1 is material and input2 is tool. --- Returns nil otherwise. -local function distinguish_tool_and_material(input1, input2) - local def1 = input1:get_definition() - local def2 = input2:get_definition() - local r1 = def1._repair_material - local r2 = def2._repair_material - if def1.type == "tool" and r1 and type(r1) == "table" and contains(r1, input2) then - return "tool", input1, input2 - elseif def2.type == "tool" and r2 and type(r2) == "table" and contains(r2, input1) then - return "material", input2, input1 - elseif def1.type == "tool" and r1 then - return "tool", input1, input2 - elseif def2.type == "tool" and r2 then - return "material", input2, input1 - else - return nil - end -end - --- Update the inventory slots of an anvil node. --- meta: Metadata of anvil node -local function update_anvil_slots(meta) - local inv = meta:get_inventory() - local new_name = meta:get_string("set_name") - local input1 = inv:get_stack("input", 1) - local input2 = inv:get_stack("input", 2) - --local output = inv:get_stack("output", 1) - local new_output, name_item - local just_rename = false - - -- Both input slots occupied - if (not input1:is_empty() and not input2:is_empty()) then - -- Repair, if tool - local def1 = input1:get_definition() - local def2 = input2:get_definition() - - -- Repair calculation helper. - -- Adds the “inverse” values of wear1 and wear2. - -- Then adds a boost health value directly. - -- Returns the resulting (capped) wear. - local function calculate_repair(wear1, wear2, boost) - local new_health = (MAX_WEAR - wear1) + (MAX_WEAR - wear2) - if boost then - new_health = new_health + boost - end - return math.max(0, math.min(MAX_WEAR, MAX_WEAR - new_health)) - end - - local can_combine = mcl_enchanting.combine(input1, input2) - - if can_combine then - -- Add tool health together plus a small bonus - if def1.type == "tool" and def2.type == "tool" then - local new_wear = calculate_repair(input1:get_wear(), input2:get_wear(), SAME_TOOL_REPAIR_BOOST) - input1:set_wear(new_wear) - end - - name_item = input1 - new_output = name_item - -- Tool + repair item - else - -- Any tool can have a repair item. This may be defined in the tool's item definition - -- as an itemstring in the field `_repair_material`. Only if this field is set, the - -- tool can be repaired with a material item. - -- Example: Iron Pickaxe + Iron Ingot. `_repair_material = mcl_core:iron_ingot` - - -- Big repair bonus - -- TODO: Combine tool enchantments - local distinguished, tool, material = distinguish_tool_and_material(input1, input2) - if distinguished then - local tooldef = tool:get_definition() - local repair = tooldef._repair_material - local has_correct_material = false - local material_name = material:get_name() - if type(repair) == "string" then - if string.sub(repair, 1, 6) == "group:" then - has_correct_material = minetest.get_item_group(material_name, string.sub(repair, 7)) ~= 0 - elseif material_name == repair then - has_correct_material = true - end - else - if contains(repair, material_name) then - has_correct_material = true - else - for _, r in pairs(repair) do - if string.sub(r, 1, 6) == "group:" then - if minetest.get_item_group(material_name, string.sub(r, 7)) ~= 0 then - has_correct_material = true - end - - end - end - end - end - if has_correct_material and tool:get_wear() > 0 then - local materials_used = get_consumed_materials(tool, material) - local new_wear = calculate_repair(tool:get_wear(), MAX_WEAR, MATERIAL_TOOL_REPAIR_BOOST[materials_used]) - tool:set_wear(new_wear) - name_item = tool - new_output = name_item - else - new_output = "" - end - else - new_output = "" - end - end - -- Exactly 1 input slot occupied - elseif (not input1:is_empty() and input2:is_empty()) or (input1:is_empty() and not input2:is_empty()) then - -- Just rename item - if input1:is_empty() then - name_item = input2 - else - name_item = input1 - end - just_rename = true - else - new_output = "" - end - - -- Rename handling - if name_item then - -- No renaming allowed with group no_rename=1 - if minetest.get_item_group(name_item:get_name(), "no_rename") == 1 then - new_output = "" - else - if new_name == nil then - new_name = "" - end - local meta = name_item:get_meta() - local old_name = meta:get_string("name") - -- Limit name length - new_name = string.sub(new_name, 1, MAX_NAME_LENGTH) - -- Don't rename if names are identical - if new_name ~= old_name then - -- Save the raw name internally - meta:set_string("name", new_name) - -- Rename item handled by tt - tt.reload_itemstack_description(name_item) - new_output = name_item - elseif just_rename then - new_output = "" - end - end - end - - -- Set the new output slot - if new_output then - inv:set_stack("output", 1, new_output) - end -end - --- Drop input items of anvil at pos with metadata meta -local function drop_anvil_items(pos, meta) - local inv = meta:get_inventory() - for i=1, inv:get_size("input") do - local stack = inv:get_stack("input", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end -end - -local function damage_particles(pos, node) - minetest.add_particlespawner({ - amount = 30, - time = 0.1, - minpos = vector.add(pos, {x=-0.5, y=-0.5, z=-0.5}), - maxpos = vector.add(pos, {x=0.5, y=-0.25, z=0.5}), - minvel = {x=-0.5, y=0.05, z=-0.5}, - maxvel = {x=0.5, y=0.3, z=0.5}, - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 0.1, - maxexptime = 0.5, - minsize = 0.4, - maxsize = 0.5, - collisiondetection = true, - vertical = false, - node = node, - }) -end - -local function destroy_particles(pos, node) - minetest.add_particlespawner({ - amount = math.random(20, 30), - time = 0.1, - minpos = vector.add(pos, {x=-0.4, y=-0.4, z=-0.4}), - maxpos = vector.add(pos, {x=0.4, y=0.4, z=0.4}), - minvel = {x=-0.5, y=-0.1, z=-0.5}, - maxvel = {x=0.5, y=0.2, z=0.5}, - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 0.2, - maxexptime = 0.65, - minsize = 0.8, - maxsize = 1.2, - collisiondetection = true, - vertical = false, - node = node, - }) -end - --- Damage the anvil by 1 level. --- Destroy anvil when at highest damage level. --- Returns true if anvil was destroyed. -local function damage_anvil(pos) - local node = minetest.get_node(pos) - if node.name == "mcl_anvils:anvil" then - minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_1", param2=node.param2}) - damage_particles(pos, node) - minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true) - return false - elseif node.name == "mcl_anvils:anvil_damage_1" then - minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_2", param2=node.param2}) - damage_particles(pos, node) - minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true) - return false - elseif node.name == "mcl_anvils:anvil_damage_2" then - -- Destroy anvil - local meta = minetest.get_meta(pos) - drop_anvil_items(pos, meta) - minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dug, {pos=pos, max_hear_distance=16}, true) - minetest.remove_node(pos) - destroy_particles(pos, node) - minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z}) - return true - end -end - --- Roll a virtual dice and damage anvil at a low chance. -local function damage_anvil_by_using(pos) - local r = math.random(1, 100) - -- 12% chance - if r <= 12 then - return damage_anvil(pos) - else - return false - end -end - -local function damage_anvil_by_falling(pos, distance) - local r = math.random(1, 100) - if distance > 1 then - if r <= (5*distance) then - damage_anvil(pos) - end - end -end - -local anvilbox = { - type = "fixed", - fixed = { - { -8 / 16, -8 / 16, -6 / 16, 8 / 16, 8 / 16, 6 / 16 }, - }, -} -local anvildef = { - groups = {pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, anvil=1}, - tiles = {"mcl_anvils_anvil_top_damaged_0.png^[transformR90", "mcl_anvils_anvil_base.png", "mcl_anvils_anvil_side.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - _tt_help = S("Repair and rename items"), - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - { -6 / 16, -8 / 16, -6 / 16, 6 / 16, -4 / 16, 6 / 16 }, - { -5 / 16, -4 / 16, -4 / 16, 5 / 16, -3 / 16, 4 / 16 }, - { -4 / 16, -3 / 16, -2 / 16, 4 / 16, 2 / 16, 2 / 16 }, - { -8 / 16, 2 / 16, -5 / 16, 8 / 16, 8 / 16, 5 / 16 }, - } - }, - selection_box = anvilbox, - collision_box = anvilbox, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, - _mcl_after_falling = damage_anvil_by_falling, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - drop_anvil_items(pos, meta) - meta:from_table(meta2) - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - elseif listname == "output" then - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - elseif to_list == "output" then - return 0 - elseif from_list == "output" and to_list == "input" then - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if inv:get_stack(to_list, to_index):is_empty() then - return count - else - return 0 - end - else - return count - end - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - update_anvil_slots(meta) - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if from_list == "output" and to_list == "input" then - local inv = meta:get_inventory() - for i=1, inv:get_size("input") do - if i ~= to_index then - local istack = inv:get_stack("input", i) - istack:set_count(math.max(0, istack:get_count() - count)) - inv:set_stack("input", i, istack) - end - end - end - update_anvil_slots(meta) - - if from_list == "output" then - local destroyed = damage_anvil_by_using(pos) - -- Close formspec if anvil was destroyed - if destroyed then - --[[ Closing the formspec w/ emptyformname is discouraged. But this is justified - because node formspecs seem to only have an empty formname in MT 0.4.16. - Also, sice this is on_metadata_inventory_take, we KNOW which formspec has - been opened by the player. So this should be safe nonetheless. - TODO: Update this line when node formspecs get proper identifiers in Minetest. ]] - minetest.close_formspec(player:get_player_name(), "") - end - end - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if listname == "output" then - local inv = meta:get_inventory() - local input1 = inv:get_stack("input", 1) - local input2 = inv:get_stack("input", 2) - -- Both slots occupied? - if not input1:is_empty() and not input2:is_empty() then - -- Take as many items as needed - local distinguished, tool, material = distinguish_tool_and_material(input1, input2) - if distinguished then - -- Tool + material: Take tool and as many materials as needed - local materials_used = get_consumed_materials(tool, material) - material:set_count(material:get_count() - materials_used) - tool:take_item() - if distinguished == "tool" then - input1, input2 = tool, material - else - input1, input2 = material, tool - end - inv:set_stack("input", 1, input1) - inv:set_stack("input", 2, input2) - else - -- Else take 1 item from each stack - input1:take_item() - input2:take_item() - inv:set_stack("input", 1, input1) - inv:set_stack("input", 2, input2) - end - else - -- Otherwise: Rename mode. Remove the same amount of items from input - -- as has been taken from output - if not input1:is_empty() then - input1:set_count(math.max(0, input1:get_count() - stack:get_count())) - inv:set_stack("input", 1, input1) - end - if not input2:is_empty() then - input2:set_count(math.max(0, input2:get_count() - stack:get_count())) - inv:set_stack("input", 2, input2) - end - end - local destroyed = damage_anvil_by_using(pos) - -- Close formspec if anvil was destroyed - if destroyed then - -- See above for justification. - minetest.close_formspec(player:get_player_name(), "") - end - elseif listname == "input" then - update_anvil_slots(meta) - end - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 2) - inv:set_size("output", 1) - local form = get_anvil_formspec() - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - if fields.name_button or fields.name then - local set_name - if fields.name == nil then - set_name = "" - else - set_name = fields.name - end - local meta = minetest.get_meta(pos) - -- Limit name length - set_name = string.sub(set_name, 1, MAX_NAME_LENGTH) - meta:set_string("set_name", set_name) - update_anvil_slots(meta) - meta:set_string("formspec", get_anvil_formspec(set_name)) - end - end, -} -if minetest.get_modpath("screwdriver") then - anvildef.on_rotate = screwdriver.rotate_simple -end - -local anvildef0 = table.copy(anvildef) -anvildef0.description = S("Anvil") -anvildef0._doc_items_longdesc = -S("The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!") -anvildef0._doc_items_usagehelp = -S("To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.").."\n".. -S("To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.").."\n".. -S("There are two possibilities to repair tools (and armor):").."\n".. -S("• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.").."\n".. -S("• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.").."\n".. -S("Armor counts as a tool. It is possible to repair and rename a tool in a single step.").."\n\n".. -S("The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.") - -local anvildef1 = table.copy(anvildef) -anvildef1.description = S("Slightly Damaged Anvil") -anvildef1._doc_items_create_entry = false -anvildef1.groups.anvil = 2 -anvildef1._doc_items_create_entry = false -anvildef1.tiles = {"mcl_anvils_anvil_top_damaged_1.png^[transformR90", "mcl_anvils_anvil_base.png", "mcl_anvils_anvil_side.png"} - -local anvildef2 = table.copy(anvildef) -anvildef2.description = S("Very Damaged Anvil") -anvildef2._doc_items_create_entry = false -anvildef2.groups.anvil = 3 -anvildef2._doc_items_create_entry = false -anvildef2.tiles = {"mcl_anvils_anvil_top_damaged_2.png^[transformR90", "mcl_anvils_anvil_base.png", "mcl_anvils_anvil_side.png"} - -minetest.register_node("mcl_anvils:anvil", anvildef0) -minetest.register_node("mcl_anvils:anvil_damage_1", anvildef1) -minetest.register_node("mcl_anvils:anvil_damage_2", anvildef2) - -if minetest.get_modpath("mcl_core") then - minetest.register_craft({ - output = "mcl_anvils:anvil", - recipe = { - { "mcl_core:ironblock", "mcl_core:ironblock", "mcl_core:ironblock" }, - { "", "mcl_core:iron_ingot", "" }, - { "mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot" }, - } - }) -end - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_anvils:anvil", "nodes", "mcl_anvils:anvil_damage_1") - doc.add_entry_alias("nodes", "mcl_anvils:anvil", "nodes", "mcl_anvils:anvil_damage_2") -end - --- Legacy -minetest.register_lbm({ - label = "Update anvil formspecs (0.60.0)", - name = "mcl_anvils:update_formspec_0_60_0", - nodenames = { "group:anvil" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - local set_name = meta:get_string("set_name") - meta:set_string("formspec", get_anvil_formspec(set_name)) - end, -}) diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.de.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.de.tr deleted file mode 100644 index 9e7d88337..000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.de.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Name setzen -Repair and Name=Reparieren und benennen -Inventory=Inventar -Anvil=Amboss -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Der Amboss ermöglicht es, Werkzeuge und Rüstung zu reparieren und Gegenstände zu benennen. Er hat jedoch eine begrenzte Lebensdauer. Lassen Sie ihn nicht auf Ihren Kopf fallen, das könnte ziemlich schmerzhaft sein! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Um einen Amboss zu benutzen, rechtsklicken Sie auf ihn. Ein Amboss hat 2 Eingabeplätze (links) und einen Ausgabeplatz (rechts). -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Um Gegenstände umzubenennen, platzieren Sie einen Gegenstand in einen der Eingangsplätze und lassen Sie den anderen frei. Geben Sie einen Namen ein und drücken Sie die Eingabetaste oder „Name setzen”, dann nehmen Sie den umbenannten Gegenstand an sich. -There are two possibilities to repair tools (and armor):=Es gibt zwei Möglichkeiten, Werkzeuge (und Rüstung) zu reparieren: -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Werkzeug + Werkzeug: Platzieren sie zwei gleiche Werkzeuge in die Eingangsplätze. Der Zustand des reparierten Werkzeugs ist die Summe des Zustands beider Eingangswerkzeuge, plus einem Bonus von 12%. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Werkzeug + Material: Einige Werkzeuge können auch repariert werden, indem man sie mit einem Gegenstand, aus dem sie gemacht worden sind, kombiniert. Zum Beispiel können Eisenspitzhacken mit Eisenbarren repariert werden. Dadurch wird das Werkzeug um 25% repariert. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Rüstung zählt als Werkzeug. Es ist möglich, ein Werkzeug in einem Arbeitsschritt zu reparieren und zu benennen. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Der Amboss hat begrenze Lebensdauer und 3 Schadensstufen: Kein Schaden, leicht beschädigt, und stark beschädigt. Jedes mal, wenn Sie etwas reparieren oder umbenennen, gibt es eine 12%-ige Chance, dass der Amboss Schaden nimmt. Ambosse können auch beschädigt werden, wenn sie um mehr als 1 Block fallen. Wenn ein sehr beschädigter Amboss erneut beschädigt wird, wird er zerstört. -Slightly Damaged Anvil=Leicht beschädigter Amboss -Very Damaged Anvil=Stark beschädigter Amboss -Repair and rename items=Für die Reparatur und Umbenennung von Gegenständen diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.es.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.es.tr deleted file mode 100644 index 7212b92ba..000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.es.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Establece un nombre -Repair and Name=Reparar y nombrar -Inventory=Inventario -Anvil=Yunque -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=El yunque le permite reparar herramientas y armaduras, y dar nombres a los elementos. Sin embargo, tiene una durabilidad limitada. No lo dejes caer sobre tu cabeza, ¡podría ser bastante doloroso! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Para usar un yunque, haga clic derecho sobre él. Un yunque tiene 2 ranuras de entrada (a la izquierda) y una ranura de salida. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Para cambiar el nombre de los elementos, coloque una pila de elementos en una de las ranuras de elementos mientras mantiene vacía la otra ranura de entrada. Escriba un nombre, presione enter o "Establecer nombre", luego obtenga el elemento renombrado en la ranura de salida. -There are two possibilities to repair tools (and armor):=Hay dos posibilidades para reparar herramientas (y armaduras): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Herramienta + Herramienta: Coloque dos herramientas del mismo tipo en las ranuras de entrada. La "salud" de la herramienta reparada es la suma de la "salud" de ambas herramientas, con un bono del 12%. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Herramienta + Material: Algunas herramientas también pueden repararse combinándolas con un elemento del que está hecho. Por ejemplo, los picos de hierro pueden repararse con lingotes de hierro. Esto repara la herramienta en un 25%. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=La armadura cuenta como una herramienta. Es posible reparar y cambiar el nombre de una herramienta en un solo paso. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=El yunque tiene una durabilidad limitada y 3 niveles de daño: sin daños, ligeramente dañado y muy dañado. Cada vez que reparas o cambias el nombre de algo, hay un 12% de posibilidades de que el yunque se dañe. Los yunques también tienen la posibilidad de dañarse cuando caen en más de 1 bloque. Si un yunque muy dañado se daña nuevamente, se destruye. -Slightly Damaged Anvil=Yunque dañado -Very Damaged Anvil=Yunque muy dañado diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.fr.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.fr.tr deleted file mode 100644 index 1f03de8e5..000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.fr.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Définir le Nom -Repair and Name=Réparation et Nomme -Inventory=Inventaire -Anvil=Enclume -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=L'enclume vous permet de réparer des outils et des armures, et de donner des noms à des objets. Il a cependant une durabilité limitée. Ne la laissez pas tomber sur la tête, cela pourrait être assez douloureux! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Pour utiliser une enclume, faites un clic droit dessus. Une enclume a 2 emplacements d'entrée (à gauche) et un emplacement de sortie. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Pour renommer des objets, placez une pile d'objets dans l'un des emplacements d'objets tout en laissant l'autre emplacement d'entrée vide. Tapez un nom, appuyez sur Entrée ou sur «Définir le nom», puis prenez l'élément renommé dans l'emplacement de sortie. -There are two possibilities to repair tools (and armor):=Il existe deux possibilités pour réparer les outils (et les armures): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Outil + Outil: Placez deux outils du même type dans les emplacements d'entrée. La "santé" de l'outil réparé est la somme de la "santé" des deux outils d'entrée, plus un bonus de 12%. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Outil + Matériel: Certains outils peuvent également être réparés en les combinant avec un élément dont il est fait. Par exemple, les pioches de fer peuvent être réparées avec des lingots de fer. Cela répare l'outil de 25%. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=L'armure compte comme un outil. Il est possible de réparer et de renommer un outil en une seule étape. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=L'enclume a une durabilité limitée et 3 niveaux de dommages: en bon état, légèrement endommagé et très endommagé. Chaque fois que vous réparez ou renommez quelque chose, il y a 12% de chances que l'enclume soit endommagée. Les enclumes ont également une chance d'être endommagées lorsqu'elles tombent de plus d'un bloc. Si une enclume très endommagée est à nouveau endommagée, elle est détruite. -Slightly Damaged Anvil=Enclume Légèrement Endommagée -Very Damaged Anvil=Enclume Très Endommagée -Repair and rename items=Réparer et renommer des objets diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr deleted file mode 100644 index cf778e554..000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Ustaw nazwę -Repair and Name=Napraw i nazwij -Inventory=Ekwipunek -Anvil=Kowadło -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Kowadło pozwala naprawiać przedmioty i zbroje, a także nazywać przedmioty. Ma jednak ograniczoną wytrzymałość. Nie pozwól by spadło ci na głowę, bo będzie bardzo boleśnie! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Aby użyć kowadła, kliknij je prawym przyciskiem. Kowadło ma dwa miejsca wejściowe (po lewej) i jedno miejsce wyjściowe. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Aby zmienić nazwę przedmiotów, włóż grupę przedmiotów w jedno z miejsc i zostaw drugie miejsce puste. Wpisz imię, kliknij "Ustaw imię", a następnie wyjmij przemianowane przedmioty z miejsca wyjściowego. -There are two possibilities to repair tools (and armor):=Są dwie możliwości naprawiania przedmiotów (i zbroi): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=Narzędzie + narzędzie: Wstaw dwa narzędzia tego samego typu w miejscach wejściowych. "Życie" naprawionego w ten sposób narzędzia jest sumą "żyć" obu narzędzi wejściowych plus 12% bonusu. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=Narzędzie + materiał: Niektóre narzędzia mogą być naprawiane przez łączenie ich z przedmiotem z którego są wykonane. Przykładowo żelazne kilofy mogą być naprawione przy użyciu sztabek żelaza. To przywraca 25% "życia" narzędzia. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Zbroje liczą się tu jako narzędzia. Możliwe jest jednoczesna naprawa i przemianowanie przedmiotu. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Kowadło ma ograniczoną wytrzymałość i trzy poziomu uszkodzenia: nieuszkodzone, lekko uszkodzone i bardzo uszkodzone. Za każdym razem gdy naprawiasz lub przemianowujesz coś jest 12% szans, że kowadło się uszkodzi. Kowadła mogą się również uszkodzić gdy spadają z wysokości większej niż jeden blok. Jeśli bardzo uszkodzone kowadło zostanie uszkodzone jeszcze raz, zostanie zniszczone. -Slightly Damaged Anvil=Lekko uszkodzone kowadło -Very Damaged Anvil=Bardzo uszkodzone kowadło -Repair and rename items=Napraw i przemianuj przedmioty diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.ru.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.ru.tr deleted file mode 100644 index 20281bd6b..000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.ru.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Дать имя -Repair and Name=Починить и дать имя -Inventory=Инвентарь -Anvil=Наковальня -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Наковальня позволяет ремонтировать инструменты и защиту, а также давать имена предметам. Но она имеет ограниченный срок службы. Не дайте ей упасть вам на голову, это может быть больно! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Чтобы воспользоваться наковальней, кликните по ней правой кнопкой. Наковальня имеет два входных отсека (слева) и один выходной. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Для переименования положите стопку предметов в один отсек, второй оставьте пустым. Наберите имя, нажмите [Enter] или “Дать имя” и заберите переименованные предметы из выходного отсека. -There are two possibilities to repair tools (and armor):=Есть два способа отремонтировать инструменты (и защиту): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Инструмент + Инструмент: Положите два инструмента одного типа во входные отсеки. “Здоровье” отремонтированного инструмента будет равно сумме “здоровья” каждого из них, плюс 12% бонус. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Инструмент + Материал: Некоторые инструменты можно также ремонтировать, добавляя к ним предмет, из которого они сделаны. Например, железные кирки ремонтируются добавлением слитков железа. Таким способом инструмент восстанавливается на 25%. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Защиты считается за инструмент. Можно ремонтировать и переименовывать за одно действие. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Наковальня имеет ограниченный срок службы и 3 уровня износа: новая, немного изношенная, сильно повреждённая. Каждый раз, ремонтируя или переименовывая что-либо, вы имеете 12-процентный шанс повредить наковальню. Наковальни также могут повреждаться, когда они падают с высоте более 1 блока. Если повреждённая наковальня повреждается снова, то она уничтожается. -Slightly Damaged Anvil=Немного изношенная наковальня -Very Damaged Anvil=Сильно повреждённая наковальня -Repair and rename items=Ремонтирует и переименовывает предметы diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.zh_TW.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.zh_TW.tr deleted file mode 100644 index 8ddf546a9..000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.zh_TW.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=命名 -Repair and Name=修復與命名 -Inventory=物品欄 -Anvil=鐵砧 -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=鐵砧允許你修理工具和盔甲,並為物品命名。然而,它的耐久性有限。不要讓它落在你的頭上,這可能是相當痛苦的! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=要使用一個鐵砧,右擊它。一個鐵砧有兩個輸入槽(在左邊)和一個輸出槽。 -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=要重新命名物品,在其中一個物品槽裡放一個物品,同時保持另一個輸入槽為空。鍵入名稱,點擊回車或「設置名稱」,然後從輸出槽中取出重命名後的物品。 -There are two possibilities to repair tools (and armor):=有兩種維修工具(和裝甲)的可能性: -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• 工具+工具。在輸入槽中放置兩個相同類型的工具。修復後的工具的耐久力是兩個輸入工具的耐久力之和,加上12%的獎勵。 -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• 工具+材料。有些工具也可以通過與它所製成的物品結合起來進行修理。例如,鐵鎬可以用鐵錠修復。這可以使工具的修復率提高25%。 -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=盔甲算作是一種工具。可以在一個步驟中修復和重命名一個工具。 -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=鐵砧的耐用性有限,有3個損壞等級:未損壞、微損的和耗損的。每次你修復或重命名某物時,有12%的機會使鐵砧受損。當鐵砧跌落超過1塊時,也有機會被損壞。如果一個耗損的鐵砧再次受損,它就會被摧毀。 -Slightly Damaged Anvil=微損的鐵砧 -Very Damaged Anvil=耗損的鐵砧 -Repair and rename items=修復與命名物品 diff --git a/mods/ITEMS/mcl_anvils/locale/template.txt b/mods/ITEMS/mcl_anvils/locale/template.txt deleted file mode 100644 index ebc741c00..000000000 --- a/mods/ITEMS/mcl_anvils/locale/template.txt +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name= -Repair and Name= -Inventory= -Anvil= -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!= -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.= -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.= -There are two possibilities to repair tools (and armor):= -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.= -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.= -Armor counts as a tool. It is possible to repair and rename a tool in a single step.= -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.= -Slightly Damaged Anvil= -Very Damaged Anvil= -Repair and rename items= diff --git a/mods/ITEMS/mcl_anvils/mod.conf b/mods/ITEMS/mcl_anvils/mod.conf deleted file mode 100644 index cd4fa02a8..000000000 --- a/mods/ITEMS/mcl_anvils/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_anvils -author = Wuzzy -description = Anvils mods for MCL2 -depends = mcl_init, mcl_formspec, mcl_sounds, tt, mcl_enchanting -optional_depends = mcl_core, screwdriver diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_base.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_base.png deleted file mode 100644 index 7e6440a57..000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_side.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_side.png deleted file mode 100644 index 25d85b69d..000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_0.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_0.png deleted file mode 100644 index 43938aa72..000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_1.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_1.png deleted file mode 100644 index e8cfbe5b7..000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_2.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_2.png deleted file mode 100644 index 096f65eac..000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png deleted file mode 100644 index fdbb706d1..000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/API.md b/mods/ITEMS/mcl_armor/API.md deleted file mode 100644 index 06292aab4..000000000 --- a/mods/ITEMS/mcl_armor/API.md +++ /dev/null @@ -1,288 +0,0 @@ -# mcl_armor - -This mod implements the ability of registering armors. - -## Registering an Armor Set - -The `mcl_armor.register_set()` function aims to simplify the process of registering a full set of armor. - -This function register four pieces of armor (head, torso, leggings, feets) based on a definition table: - -```lua -mcl_armor.register_set({ - --name of the armor material (used for generating itemstrings) - name = "dummy_armor", - - --description of the armor material - --do NOT translate this string, it will be concatenated will each piece of armor's description and result will be automatically fetched from your mod's translation files - description = "Dummy Armor", - - --overide description of each armor piece - --do NOT localize this string - descriptions = { - head = "Cap", --default: "Helmet" - torso = "Tunic", --default: "Chestplate" - legs = "Pants", --default: "Leggings" - feet = "Shoes", --default: "Boots" - }, - - --this is used to calculate each armor piece durability with the minecraft algorithm - --head durability = durability * 0.6857 + 1 - --torso durability = durability * 1.0 + 1 - --legs durability = durability * 0.9375 + 1 - --feet durability = durability * 0.8125 + 1 - durability = 80, - - --this is used then you need to specify the durability of each piece of armor - --this field have the priority over the durability one - --if the durability of some pieces of armor isn't specified in this field, the durability field will be used insteed - durabilities = { - head = 200, - torso = 500, - legs = 400, - feet = 300, - }, - - --this define how good enchants you will get then enchanting one piece of the armor in an enchanting table - --if set to zero or nil, the armor will not be enchantable - enchantability = 15, - - --this define how much each piece of armor protect the player - --these points will be shown in the HUD (chestplate bar above the health bar) - points = { - head = 1, - torso = 3, - legs = 2, - feet = 1, - }, - - --this attribute reduce strong damage even more - --See https://minecraft.fandom.com/wiki/Armor#Armor_toughness for more explanations - --default: 0 - toughness = 2, - - --this field is used to specify some items groups that will be added to each piece of armor - --please note that some groups do NOT need to be added by hand, because they are already handeled by the register function: - --(armor, combat_armor, armor_, combat_armor_, mcl_armor_points, mcl_armor_toughness, mcl_armor_uses, enchantability) - groups = {op_armor = 1}, - - --specify textures that will be overlayed on the entity wearing the armor - --these fields have default values and its recommanded to keep the code clean by just using the default name for your textures - textures = { - head = "dummy_texture.png", --default: "_helmet_.png" - torso = "dummy_texture.png", --default: "_chestplate_.png" - legs = "dummy_texture.png", --default: "_leggings_.png" - feet = "dummy_texture.png", --default: "_boots_.png" - }, - --you can also define these fields as functions, that will be called each time the API function mcl_armor.update(obj) is called (every time you equip/unequip some armor piece, take damage, and more) - --note that the enchanting overlay will not appear unless you implement it in the function - --this allow to make armors where the textures change whitout needing to register many other armors with different textures - textures = { - head = function(obj, itemstack) - if mcl_enchanting.is_enchanted(itemstack) then - return "dummy_texture.png^"..mcl_enchanting.overlay - else - return "dummy_texture.png" - end - end, - }, - - --inventory textures aren't definable using a table similar to textures or previews - --you are forced to use the default texture names which are: - --head: "_inv_helmet_.png - --torso: "_inv_chestplate_.png - --legs: "_inv_leggings_.png - --feet: "_inv_boots_.png - - --this callback table allow you to define functions that will be called each time an entity equip an armor piece or the mcl_armor.on_equip() function is called - --the functions accept two arguments: obj and itemstack - on_equip_callbacks = { - head = function(obj, itemstack) - --do stuff - end, - }, - - --this callback table allow you to define functions that will be called each time an entity unequip an armor piece or the mcl_armor.on_unequip() function is called - --the functions accept two arguments: obj and itemstack - on_unequip_callbacks = { - head = function(obj, itemstack) - --do stuff - end, - }, - - --this callback table allow you to define functions that will be called then an armor piece break - --the functions accept one arguments: obj - --the itemstack isn't sended due to how minetest handle items which have a zero durability - on_break_callbacks = { - head = function(obj) - --do stuff - end, - }, - - --this is used to generate automaticaly armor crafts based on each element type folowing the regular minecraft pattern - --if set to nil no craft will be added - craft_material = "mcl_mobitems:leather", - - --this is used to generate cooking crafts for each piece of armor - --if set to nil no craft will be added - cook_material = "mcl_core:gold_nugget", --cooking any piece of this armor will output a gold nugged - - --this is used for allowing each piece of the armor to be repaired by using an anvil with repair_material as aditionnal material - --it basicaly set the _repair_material item field of each piece of the armor - --if set to nil no repair material will be added - repair_material = "mcl_core:iron_ingot", -}) -``` - -## Creating an Armor Piece - -If you don't want to register a full set of armor, then you will need to manually register your own single item. - -```lua -minetest.register_tool("dummy_mod:random_armor", { - description = S("Random Armor"), - - --these two item fields are used for ingame documentation - --the mcl_armor.longdesc and mcl_armor.usage vars contains the basic usage and purpose of a piece of armor - --these vars may not be enough for that you want to do, so you may add some extra informations like that: - --_doc_items_longdesc = mcl_armor.longdesc.." "..S("Some extra informations.") - _doc_items_longdesc = mcl_armor.longdesc, - _doc_items_usagehelp = mcl_armor.usage, - - --this field is similar to any item definition in minetest - --it just set the image shown then the armor is dropped as an item or inside an inventory - inventory_image = "mcl_armor_inv_elytra.png", - - --this field is used by minetest internally and also by some helper functions - --in order for the tool to be shown is the right creative inventory tab, the right groups should be added - --"mcl_armor_uses" is required to give your armor a durability - --in that case, the armor can be worn by 10 points before breaking - --if you want the armor to be enchantable, you should also add the "enchantability" group, with the highest number the better enchants you can apply - groups = {armor = 1, non_combat_armor = 1, armor_torso = 1, non_combat_torso = 1, mcl_armor_uses = 10}, - - --this table is used by minetest for seraching item specific sounds - --the _mcl_armor_equip and _mcl_armor_unequip are used by the armor implementation to play sounds on equip and unequip - --note that you don't need to provide any file extention - sounds = { - _mcl_armor_equip = "mcl_armor_equip_leather", - _mcl_armor_unequip = "mcl_armor_unequip_leather", - }, - - --these fields should be initialised like that in most cases - --mcl_armor.equip_on_use is a function that try to equip the piece of armor you have in hand inside the right armor slot if the slot is empty - on_place = mcl_armor.equip_on_use, - on_secondary_use = mcl_armor.equip_on_use, - - --this field define that the tool is ACTUALLY an armor piece and in which armor slot you can put it - --it should be set to "head", "torso", "legs" or "feet" - _mcl_armor_element = "torso", - - - --this field is used to provide the texture that will be overlayed on the object (player or mob) skin - --this field can be a texture name or a function that will be called each time the mcl_armor.update(obj) function is called - --see the mcl_armor.register_set() documentation for more explanations - _mcl_armor_texture = "mcl_armor_elytra.png" - - --callbacks - --see the mcl_armor.register_set() documentation for more explanations - - _on_equip = function(obj, itemstack) - end, - _on_unequip = function(obj, itemstack) - end, - _on_break = function(obj) - end, -}) -``` - -## Interacting with Armor of an Entity - -Mods may want to interact with armor of an entity. - -Most global functions not described here may not be stable or may be for internal use only. - -You can equip a piece of armor on an entity inside a mod by using `mcl_armor.equip()`. - -```lua ---itemstack: an itemstack containing the armor piece to equip ---obj: the entity you want to equip the armor on ---swap: boolean, force equiping the armor piece, even if the entity already have one of the same type -mcl_armor.equip(itemstack, obj, swap) -``` - -You can update the entity apparence by using `mcl_armor.update()`. - -This function put the armor overlay on the object's base texture. -If the object is player it will update his displayed armor points count in HUD. - -This function will work both on players and mobs. - -```lua ---obj: the entity you want the apparence to be updated -mcl_armor.update(obj) -``` - -## Handling Enchantments - -Armors can be enchanted in most cases. - -The enchanting part of MineClone2 is separated from the armor part, but closely linked. - -Existing armor enchantments in Minecraft improve most of the time how the armor protect the entity from damage. - -The `mcl_armor.register_protection_enchantment()` function aims to simplificate the creation of such enchants. - -```lua -mcl_armor.register_protection_enchantment({ - --this field is the id that will be used for registering enchanted book and store the enchant inside armor metadata. - --(his internal name) - id = "magic_protection", - - --visible name of the enchant - --this field is used as the name of registered enchanted book and inside armor tooltip - --translation should be added - name = S("Magic Protection"), - - --this field is used to know that the enchant currently do - --translation should be added - description = S("Reduces magic damage."), - - --how many levels can the enchant have - --ex: 4 => I, II, III, IV - --default: 4 - max_level = 4, - - --which enchants this enchant will not be compatible with - --each of these values is a enchant id - incompatible = {blast_protection = true, fire_protection = true, projectile_protection = true}, - - --how much will the enchant consume from the enchantability group of the armor item - --default: 5 - weight = 5, - - --false => the enchant can be obtained in an enchanting table - --true => the enchant isn't obtainable in the enchanting table - --is true, you will probably need to implement some ways to obtain it - --even it the field is named "treasure", it will be no way to find it - --default: false - treasure = false, - - --how much will damage be reduced - --see Minecraft Wiki for more informations - --https://minecraft.gamepedia.com/Armor#Damage_protection - --https://minecraft.gamepedia.com/Armor#Enchantments - factor = 1, - - --restrict damage to one type - --allow the enchant to only protect of one type of damage - damage_type = "magic", - - --restrict damage to one category - --allow to protect from many type of damage at once - --this is much less specific than damage_type and also much more customisable - --the "is_magic" flag is used in the "magic", "dragon_breath", "wither_skull" and "thorns" damage types - --you can checkout the mcl_damage source code for a list of availlable damage types and associated flags - --but be warned that mods can register additionnal damage types - damage_flag = "is_magic", -}) -``` diff --git a/mods/ITEMS/mcl_armor/README.txt b/mods/ITEMS/mcl_armor/README.txt deleted file mode 100644 index 5e68b5746..000000000 --- a/mods/ITEMS/mcl_armor/README.txt +++ /dev/null @@ -1,30 +0,0 @@ -[mod] Visible Player Armor [mcl_armor] -====================================== - -Adds craftable armor that is visible to other players. Each armor item worn contributes to -a player's armor group level making them less vulnerable to some forms of damage. - -Armor takes damage when a player is hurt. - -This mod is based on 3D Armor mod by stu. - -Media credits -------------- -* mcl_armor_equip_diamond.ogg -* mcl_armor_unequip_diamond.ogg -Licensed CC0, by Freesound.org user juryduty. -Source: - -* mcl_armor_equip_iron.ogg -* mcl_armor_unequip_iron.ogg -Licensed CC0, by Freesound.org user mtchanary. -Source: - -* mcl_armor_equip_generic.ogg -* mcl_armor_unequip_generic.ogg -Licensed (CC BY-SA 3.0) by Mito551 - -All other sounds licensed CC0 by OpenGameArt.org user artisticdude. -Source: - -Other media files: See MineClone 2 license. diff --git a/mods/ITEMS/mcl_armor/alias.lua b/mods/ITEMS/mcl_armor/alias.lua deleted file mode 100644 index 19c2424d0..000000000 --- a/mods/ITEMS/mcl_armor/alias.lua +++ /dev/null @@ -1,23 +0,0 @@ -minetest.register_alias("3d_armor:helmet_leather", "mcl_armor:helmet_leather") -minetest.register_alias("3d_armor:helmet_iron", "mcl_armor:helmet_iron") -minetest.register_alias("3d_armor:helmet_chain", "mcl_armor:helmet_chain") -minetest.register_alias("3d_armor:helmet_gold", "mcl_armor:helmet_gold") -minetest.register_alias("3d_armor:helmet_diamond", "mcl_armor:helmet_diamond") - -minetest.register_alias("3d_armor:chestplate_leather", "mcl_armor:chestplate_leather") -minetest.register_alias("3d_armor:chestplate_iron", "mcl_armor:chestplate_iron") -minetest.register_alias("3d_armor:chestplate_chain", "mcl_armor:chestplate_chain") -minetest.register_alias("3d_armor:chestplate_gold", "mcl_armor:chestplate_gold") -minetest.register_alias("3d_armor:chestplate_diamond", "mcl_armor:chestplate_diamond") - -minetest.register_alias("3d_armor:leggings_leather", "mcl_armor:leggings_leather") -minetest.register_alias("3d_armor:leggings_iron", "mcl_armor:leggings_iron") -minetest.register_alias("3d_armor:leggings_chain", "mcl_armor:leggings_chain") -minetest.register_alias("3d_armor:leggings_gold", "mcl_armor:leggings_gold") -minetest.register_alias("3d_armor:leggings_diamond", "mcl_armor:leggings_diamond") - -minetest.register_alias("3d_armor:boots_leather", "mcl_armor:boots_leather") -minetest.register_alias("3d_armor:boots_iron", "mcl_armor:boots_iron") -minetest.register_alias("3d_armor:boots_chain", "mcl_armor:boots_chain") -minetest.register_alias("3d_armor:boots_gold", "mcl_armor:boots_gold") -minetest.register_alias("3d_armor:boots_diamond", "mcl_armor:boots_diamond") diff --git a/mods/ITEMS/mcl_armor/api.lua b/mods/ITEMS/mcl_armor/api.lua deleted file mode 100644 index 6ec1b377b..000000000 --- a/mods/ITEMS/mcl_armor/api.lua +++ /dev/null @@ -1,253 +0,0 @@ -function mcl_armor.play_equip_sound(stack, obj, pos, unequip) - local def = stack:get_definition() - local estr = "equip" - if unequip then - estr = "unequip" - end - local snd = def.sounds and def.sounds["_mcl_armor_" .. estr] - if not snd then - -- Fallback sound - snd = { name = "mcl_armor_" .. estr .. "_generic" } - end - if snd then - local dist = 8 - if pos then - dist = 16 - end - minetest.sound_play(snd, {object = obj, pos = pos, gain = 0.5, max_hear_distance = dist}, true) - end -end - -function mcl_armor.on_equip(itemstack, obj) - local def = itemstack:get_definition() - mcl_armor.play_equip_sound(itemstack, obj) - if def._on_equip then - def._on_equip(obj, itemstack) - end - mcl_armor.update(obj) -end - -function mcl_armor.on_unequip(itemstack, obj) - local def = itemstack:get_definition() - mcl_armor.play_equip_sound(itemstack, obj, nil, true) - if def._on_unequip then - def._on_unequip(obj, itemstack) - end - mcl_armor.update(obj) -end - -function mcl_armor.equip(itemstack, obj, swap) - local def = itemstack:get_definition() - - if not def then - return itemstack - end - - local inv = mcl_util.get_inventory(obj, true) - - if not inv or inv:get_size("armor") == 0 then - return itemstack - end - - local element = mcl_armor.elements[def._mcl_armor_element or ""] - - if element then - local old_stack = inv:get_stack("armor", element.index) - - if swap or old_stack:is_empty() then - local new_stack - - if swap then - new_stack = itemstack - itemstack = old_stack - else - new_stack = itemstack:take_item() - end - - inv:set_stack("armor", element.index, new_stack) - mcl_armor.on_equip(new_stack, obj) - end - end - - return itemstack -end - -function mcl_armor.equip_on_use(itemstack, player, pointed_thing) - if not player or not player:is_player() then - return itemstack - end - - local new_stack = mcl_util.call_on_rightclick(itemstack, player, pointed_thing) - if new_stack then - return new_stack - end - - return mcl_armor.equip(itemstack, player) -end - -function mcl_armor.register_set(def) - local modname = minetest.get_current_modname() - local S = minetest.get_translator(modname) - local descriptions = def.descriptions or {} - local groups = def.groups or {} - local on_equip_callbacks = def.on_equip_callbacks or {} - local on_unequip_callbacks = def.on_unequip_callbacks or {} - local on_break_callbacks = def.on_break_callbacks or {} - local textures = def.textures or {} - local durabilities = def.durabilities or {} - local element_groups = def.element_groups or {} - - for name, element in pairs(mcl_armor.elements) do - local itemname = element.name .. "_" .. def.name - local itemstring = modname .. ":" .. itemname - - local groups = table.copy(groups) - groups["armor_" .. name] = 1 - groups["combat_armor_" .. name] = 1 - groups.armor = 1 - groups.combat_armor = 1 - groups.mcl_armor_points = def.points[name] - groups.mcl_armor_toughness = def.toughness - groups.mcl_armor_uses = (durabilities[name] or math.floor(def.durability * element.durability)) + 1 - groups.enchantability = def.enchantability - - for k, v in pairs(element_groups) do - groups[k] = v - end - - minetest.register_tool(itemstring, { - description = S(def.description .. " " .. (descriptions[name] or element.description)), - _doc_items_longdesc = mcl_armor.longdesc, - _doc_items_usagehelp = mcl_armor.usage, - inventory_image = modname .. "_inv_" .. itemname .. ".png", - _repair_material = def.repair_material or def.craft_material, - groups = groups, - sounds = { - _mcl_armor_equip = def.sound_equip or modname .. "_equip_" .. def.name, - _mcl_armor_unequip = def.sound_unequip or modname .. "_unequip_" .. def.name, - }, - on_place = mcl_armor.equip_on_use, - on_secondary_use = mcl_armor.equip_on_use, - _on_equip = on_equip_callbacks[name] or def.on_equip, - _on_unequip = on_unequip_callbacks[name] or def.on_unequip, - _on_break = on_break_callbacks[name] or def.on_break, - _mcl_armor_element = name, - _mcl_armor_texture = textures[name] or modname .. "_" .. itemname .. ".png", - }) - - if def.craft_material then - minetest.register_craft({ - output = itemstring, - recipe = element.craft(def.craft_material), - }) - end - - if def.cook_material then - minetest.register_craft({ - type = "cooking", - output = def.cook_material, - recipe = itemstring, - cooktime = 10, - }) - end - end -end - -mcl_armor.protection_enchantments = { - flags = {}, - types = {}, - wildcard = {}, -} - -function mcl_armor.register_protection_enchantment(def) - local prot_def = {id = def.id, factor = def.factor} - if def.damage_flag then - local tbl = mcl_armor.protection_enchantments.flags[def.damage_flag] or {} - table.insert(tbl, prot_def) - mcl_armor.protection_enchantments.flags = tbl - elseif def.damage_type then - local tbl = mcl_armor.protection_enchantments.types[def.damage_type] or {} - table.insert(tbl, prot_def) - mcl_armor.protection_enchantments.types = tbl - else - table.insert(mcl_armor.protection_enchantments.wildcard, prot_def) - end - mcl_enchanting.enchantments[def.id] = { - name = def.name, - max_level = def.max_level or 4, - primary = def.primary or {combat_armor = true}, - secondary = {}, - disallow = {}, - incompatible = def.incompatible or {}, - weight = def.weight or 5, - description = def.description, - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = def.treasure or false, - power_range_table = def.power_range_table, - inv_combat_tab = true, - inv_tool_tab = false, - } -end - -function mcl_armor.update(obj) - local info = {points = 0, view_range_factors = {}} - - local inv = mcl_util.get_inventory(obj) - - if inv then - for i = 2, 5 do - local itemstack = inv:get_stack("armor", i) - - local itemname = itemstack:get_name() - if minetest.registered_aliases[itemname] then - itemname = minetest.registered_aliases[itemname] - end - - if not itemstack:is_empty() then - local def = itemstack:get_definition() - - local texture = def._mcl_armor_texture - - if texture then - if type(texture) == "function" then - texture = texture(obj, itemstack) - end - if texture then - info.texture = "(" .. texture .. ")" .. (info.texture and "^" .. info.texture or "") - end - end - - info.points = info.points + minetest.get_item_group(itemname, "mcl_armor_points") - - local mob_range_mob = def._mcl_armor_mob_range_mob - - if mob_range_mob then - local factor = info.view_range_factors[mob_range_mob] - - if factor then - if factor > 0 then - info.view_range_factors[mob_range_mob] = factor * def._mcl_armor_mob_range_factor - end - else - info.view_range_factors[mob_range_mob] = def._mcl_armor_mob_range_factor - end - end - end - end - end - - info.texture = info.texture or "blank.png" - - if obj:is_player() then - mcl_armor.update_player(obj, info) - else - local luaentity = obj:get_luaentity() - - if luaentity.update_armor then - luaentity:update_armor(info) - end - end -end - diff --git a/mods/ITEMS/mcl_armor/damage.lua b/mods/ITEMS/mcl_armor/damage.lua deleted file mode 100644 index ed616397d..000000000 --- a/mods/ITEMS/mcl_armor/damage.lua +++ /dev/null @@ -1,102 +0,0 @@ -local function use_durability(obj, inv, index, stack, uses) - local def = stack:get_definition() - mcl_util.use_item_durability(stack, uses) - if stack:is_empty() and def and def._on_break then - stack = def._on_break(obj) or stack - end - inv:set_stack("armor", index, stack) -end - -mcl_damage.register_modifier(function(obj, damage, reason) - local flags = reason.flags - - if flags.bypasses_armor and flags.bypasses_magic then - return damage - end - - local uses = math.max(1, math.floor(damage / 4)) - - local points = 0 - local toughness = 0 - local enchantment_protection_factor = 0 - - local thorns_damage_regular = 0 - local thorns_damage_irregular = 0 - local thorns_pieces = {} - - local inv = mcl_util.get_inventory(obj) - - if inv then - for name, element in pairs(mcl_armor.elements) do - local itemstack = inv:get_stack("armor", element.index) - if not itemstack:is_empty() then - local itemname = itemstack:get_name() - local enchantments = mcl_enchanting.get_enchantments(itemstack) - - if not flags.bypasses_armor then - points = points + minetest.get_item_group(itemname, "mcl_armor_points") - toughness = toughness + minetest.get_item_group(itemname, "mcl_armor_toughness") - - use_durability(obj, inv, element.index, itemstack, uses) - end - - if not flags.bypasses_magic then - local function add_enchantments(tbl) - if tbl then - for _, enchantment in pairs(tbl) do - local level = enchantments[enchantment.id] - - if level and level > 0 then - enchantment_protection_factor = enchantment_protection_factor + level * enchantment.factor - end - end - end - end - - add_enchantments(mcl_armor.protection_enchantments.wildcard) - add_enchantments(mcl_armor.protection_enchantments.types[reason.type]) - - for flag, value in pairs(flags) do - if value then - add_enchantments(mcl_armor.protection_enchantments.flags[flag]) - end - end - end - - if reason.source and enchantments.thorns and enchantments.thorns > 0 then - local do_irregular_damage = enchantments.thorns > 10 - - if do_irregular_damage or thorns_damage_regular < 4 and math.random() < enchantments.thorns * 0.15 then - if do_irregular_damage then - thorns_damage_irregular = thorns_damage_irregular + enchantments.thorns - 10 - else - thorns_damage_regular = math.min(4, thorns_damage_regular + math.random(4)) - end - end - - table.insert(thorns_pieces, {index = element.index, itemstack = itemstack}) - end - end - end - end - - -- https://minecraft.gamepedia.com/Armor#Damage_protection - damage = damage * (1 - math.min(20, math.max((points / 5), points - damage / (2 + (toughness / 4)))) / 25) - - -- https://minecraft.gamepedia.com/Armor#Enchantments - damage = damage * (1 - math.min(20, enchantment_protection_factor) / 25) - - local thorns_damage = thorns_damage_regular + thorns_damage_irregular - - if thorns_damage > 0 and reason.type ~= "thorns" and reason.source ~= obj then - mcl_util.deal_damage(reason.source, thorns_damage, {type = "thorns", direct = obj}) - - local thorns_item = thorns_pieces[math.random(#thorns_pieces)] - - use_durability(obj, inv, thorns_item.index, thorns_item.itemstack, 2) - end - - mcl_armor.update(obj) - - return math.floor(damage + 0.5) -end, 0) diff --git a/mods/ITEMS/mcl_armor/init.lua b/mods/ITEMS/mcl_armor/init.lua deleted file mode 100644 index 799bf2e9c..000000000 --- a/mods/ITEMS/mcl_armor/init.lua +++ /dev/null @@ -1,68 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_armor = { - longdesc = S("This is a piece of equippable armor which reduces the amount of damage you receive."), - usage = S("To equip it, put it on the corresponding armor slot in your inventory menu."), - elements = { - head = { - name = "helmet", - description = "Helmet", - durability = 0.6857, - index = 2, - craft = function(m) - return { - { m, m, m}, - { m, "", m}, - {"", "", ""}, - } - end, - }, - torso = { - name = "chestplate", - description = "Chestplate", - durability = 1.0, - index = 3, - craft = function(m) - return { - { m, "", m}, - { m, m, m}, - { m, m, m}, - } - end, - }, - legs = { - name = "leggings", - description = "Leggings", - durability = 0.9375, - index = 4, - craft = function(m) - return { - { m, m, m}, - { m, "", m}, - { m, "", m}, - } - end, - }, - feet = { - name = "boots", - description = "Boots", - durability = 0.8125, - index = 5, - craft = function(m) - return { - { m, "", m}, - { m, "", m}, - } - end, - } - }, - player_view_range_factors = {}, -} - -local modpath = minetest.get_modpath("mcl_armor") - -dofile(modpath .. "/api.lua") -dofile(modpath .. "/player.lua") -dofile(modpath .. "/damage.lua") -dofile(modpath .. "/register.lua") -dofile(modpath .. "/alias.lua") diff --git a/mods/ITEMS/mcl_armor/locale/mcl_armor.de.tr b/mods/ITEMS/mcl_armor/locale/mcl_armor.de.tr deleted file mode 100644 index 09da3a9cc..000000000 --- a/mods/ITEMS/mcl_armor/locale/mcl_armor.de.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_armor -This is a piece of equippable armor which reduces the amount of damage you receive.=Dies ist ein Teil einer tragbaren Rüstung, die die Menge an Schaden, den Sie erleiden, reduziert. -To equip it, put it on the corresponding armor slot in your inventory menu.=Um es zu tragen, legen Sie es in den passenden Rüstungsplatz in ihrem Inventarmenü. -Leather Cap=Lederkappe -Iron Helmet=Eisenhelm -Golden Helmet=Goldhelm -Diamond Helmet=Diamanthelm -Chain Helmet=Kettenhelm -Leather Tunic=Ledertunika -Iron Chestplate=Eisenbrustpanzer -Golden Chestplate=Goldbrustpanzer -Diamond Chestplate=Diamantbrustpanzer -Chain Chestplate=Kettenbrustpanzer -Leather Pants=Lederhose -Iron Leggings=Eisenbeinlinge -Golden Leggings=Goldbeinlinge -Diamond Leggings=Diamantbeinlinge -Chain Leggings=Kettenbeinlinge -Leather Boots=Lederstiefel -Iron Boots=Eisenstiefel -Golden Boots=Goldstiefel -Diamond Boots=Diamantstiefel -Chain Boots=Kettenstiefel diff --git a/mods/ITEMS/mcl_armor/locale/mcl_armor.es.tr b/mods/ITEMS/mcl_armor/locale/mcl_armor.es.tr deleted file mode 100644 index e770dff0c..000000000 --- a/mods/ITEMS/mcl_armor/locale/mcl_armor.es.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_armor -This is a piece of equippable armor which reduces the amount of damage you receive.=Dies ist ein Teil einer tragbaren Rüstung, die die Menge an Schaden, den Sie erleiden, reduziert. -To equip it, put it on the corresponding armor slot in your inventory menu.=Um es zu tragen, legen Sie es in den passenden Rüstungsplatz in ihrem Inventarmenü. -Leather Cap=Sombrero de cuero -Iron Helmet=Casco de hierro -Golden Helmet=Casco de oro -Diamond Helmet=Casco de diamante -Chain Helmet=Casco de cota de mallas -Leather Tunic=Túnica de cuero -Iron Chestplate=Peto de hierro -Golden Chestplate=Peto de oro -Diamond Chestplate=Peto de diamante -Chain Chestplate=Peto de cota de mallas -Leather Pants=Pantalones de cuero -Iron Leggings=Grebas de hierro -Golden Leggings=Grebas de oro -Diamond Leggings=Grebas de diamante -Chain Leggings=Grebas de cota de mallas -Leather Boots=Botas de cuero -Iron Boots=Botas de hierro -Golden Boots=Botas de oro -Diamond Boots=Botas de diamante -Chain Boots=Botas de cota de mallas diff --git a/mods/ITEMS/mcl_armor/locale/mcl_armor.fr.tr b/mods/ITEMS/mcl_armor/locale/mcl_armor.fr.tr deleted file mode 100644 index 6f55a73fe..000000000 --- a/mods/ITEMS/mcl_armor/locale/mcl_armor.fr.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_armor -This is a piece of equippable armor which reduces the amount of damage you receive.=Il s'agit d'un morceau d'armure équipable qui réduit la quantité de dégâts que vous recevez. -To equip it, put it on the corresponding armor slot in your inventory menu.=Pour l'équiper, placez-le sur l'emplacement d'armure correspondant dans votre menu d'inventaire. -Leather Cap=Casquette en Cuir -Iron Helmet=Casque de Fer -Golden Helmet=Casque d'Or -Diamond Helmet=Casque de Diamant -Chain Helmet=Casque de Mailles -Leather Tunic=Tunique en Cuir -Iron Chestplate=Plastron de Fer -Golden Chestplate=Plastron d'Or -Diamond Chestplate=Plastron de Diamant -Chain Chestplate=Cotte de Mailles -Leather Pants=Pantalon de Cuir -Iron Leggings=Jambières de Fer -Golden Leggings=Jambières d'Or -Diamond Leggings=Jambières de Diamant -Chain Leggings=Jambières de Mailles -Leather Boots=Bottes de Cuir -Iron Boots=Bottes de Fer -Golden Boots=Bottes d'Or -Diamond Boots=Bottes de Diamant -Chain Boots=Bottes de Mailles diff --git a/mods/ITEMS/mcl_armor/locale/mcl_armor.pl.tr b/mods/ITEMS/mcl_armor/locale/mcl_armor.pl.tr deleted file mode 100644 index 32236113e..000000000 --- a/mods/ITEMS/mcl_armor/locale/mcl_armor.pl.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_armor -This is a piece of equippable armor which reduces the amount of damage you receive.=Jest to część możliwej do założenia zbroi, która zmniejsza otrzymywane obrażenia. -To equip it, put it on the corresponding armor slot in your inventory menu.=Aby ją założyć, upuść ją na odpowiadającym miejscu na zbroję na ekranie ekwipunku. -Leather Cap=Skórzana czapka -Iron Helmet=Żelazny hełm -Golden Helmet=Złoty hełm -Diamond Helmet=Diamentowy hełm -Chain Helmet=Kolczy hełm -Leather Tunic=Skórzana tunika -Iron Chestplate=Żelazny napierśnik -Golden Chestplate=Złoty napierśnik -Diamond Chestplate=Diamentowy napierśnik -Chain Chestplate=Kolczy napierśnik -Leather Pants=Skórzane spodnie -Iron Leggings=Żelazne nogawice -Golden Leggings=Złote nogawice -Diamond Leggings=Diamentowe nogawice -Chain Leggings=Kolcze nogawice -Leather Boots=Skórzane buty -Iron Boots=Żelazne buty -Golden Boots=Złote buty -Diamond Boots=Diamentowe buty -Chain Boots=Kolcze buty diff --git a/mods/ITEMS/mcl_armor/locale/mcl_armor.ru.tr b/mods/ITEMS/mcl_armor/locale/mcl_armor.ru.tr deleted file mode 100644 index 77ed83d10..000000000 --- a/mods/ITEMS/mcl_armor/locale/mcl_armor.ru.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_armor -This is a piece of equippable armor which reduces the amount of damage you receive.=Это часть экипирующей брони, уменьшающая получаемый вами урон. -To equip it, put it on the corresponding armor slot in your inventory menu.=Чтобы надеть, поместите её в соответствующий отсек брони в меню вашего инвентаря. -Leather Cap=Кожаная фуражка -Iron Helmet=Железный шлем -Golden Helmet=Золотой шлем -Diamond Helmet=Алмазный шлем -Chain Helmet=Кольчужный капюшон -Leather Tunic=Кожаная туника -Iron Chestplate=Железные латы -Golden Chestplate=Золотые латы -Diamond Chestplate=Алмазные латы -Chain Chestplate=Кольчуга -Leather Pants=Кожаные штаны -Iron Leggings=Железные штаны -Golden Leggings=Золотые штаны -Diamond Leggings=Алмазные штаны -Chain Leggings=Кольчужные штаны -Leather Boots=Кожаные ботинки -Iron Boots=Железные ботинки -Golden Boots=Золотые ботинки -Diamond Boots=Алмазные ботинки -Chain Boots=Кольчужные ботинки diff --git a/mods/ITEMS/mcl_armor/locale/mcl_armor.zh_TW.tr b/mods/ITEMS/mcl_armor/locale/mcl_armor.zh_TW.tr deleted file mode 100644 index 1dca10757..000000000 --- a/mods/ITEMS/mcl_armor/locale/mcl_armor.zh_TW.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_armor -This is a piece of equippable armor which reduces the amount of damage you receive.=這是一件可裝備的盔甲,可以減少你受到的傷害。 -To equip it, put it on the corresponding armor slot in your inventory menu.=要裝備它,就把它放在你的物品欄中相應的盔甲插槽上。 -Leather Cap=皮革帽子 -Iron Helmet=鐵製頭盔 -Golden Helmet=黃金頭盔 -Diamond Helmet=鑽石頭盔 -Chain Helmet=鎖鏈頭盔 -Leather Tunic=皮革上衣 -Iron Chestplate=鐵製胸甲 -Golden Chestplate=黃金胸甲 -Diamond Chestplate=鑽石胸甲 -Chain Chestplate=鎖鏈胸甲 -Leather Pants=皮革褲子 -Iron Leggings=鐵製護腿 -Golden Leggings=黃金護腿 -Diamond Leggings=鑽石護腿 -Chain Leggings=鎖鏈護腿 -Leather Boots=皮革靴子 -Iron Boots=鐵製靴子 -Golden Boots=黃金靴子 -Diamond Boots=鑽石靴子 -Chain Boots=鎖鏈靴子 diff --git a/mods/ITEMS/mcl_armor/locale/template.txt b/mods/ITEMS/mcl_armor/locale/template.txt deleted file mode 100644 index 8a95fca02..000000000 --- a/mods/ITEMS/mcl_armor/locale/template.txt +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_armor -This is a piece of equippable armor which reduces the amount of damage you receive.= -To equip it, put it on the corresponding armor slot in your inventory menu.= -Leather Cap= -Iron Helmet= -Golden Helmet= -Diamond Helmet= -Chain Helmet= -Leather Tunic= -Iron Chestplate= -Golden Chestplate= -Diamond Chestplate= -Chain Chestplate= -Leather Pants= -Iron Leggings= -Golden Leggings= -Diamond Leggings= -Chain Leggings= -Leather Boots= -Iron Boots= -Golden Boots= -Diamond Boots= -Chain Boots= diff --git a/mods/ITEMS/mcl_armor/mod.conf b/mods/ITEMS/mcl_armor/mod.conf deleted file mode 100644 index fad2e494c..000000000 --- a/mods/ITEMS/mcl_armor/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_armor -author = stu -description = Adds craftable armor that is visible to other players. -depends = mcl_core, mcl_player, mcl_enchanting, mcl_damage -optional_depends = mcl_fire, ethereal, bakedclay diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character.b3d b/mods/ITEMS/mcl_armor/models/mcl_armor_character.b3d deleted file mode 100644 index b3a943f46..000000000 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend b/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend deleted file mode 100644 index a613eef89..000000000 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d deleted file mode 100644 index 4e17ee341..000000000 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend deleted file mode 100644 index b0494efbf..000000000 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/player.lua b/mods/ITEMS/mcl_armor/player.lua deleted file mode 100644 index 99e23efdd..000000000 --- a/mods/ITEMS/mcl_armor/player.lua +++ /dev/null @@ -1,173 +0,0 @@ -mcl_player.player_register_model("mcl_armor_character.b3d", { - animation_speed = 30, - textures = { - "character.png", - "blank.png", - "blank.png", - }, - animations = { - stand = {x=0, y=79}, - lay = {x=162, y=166}, - walk = {x=168, y=187}, - mine = {x=189, y=198}, - walk_mine = {x=200, y=219}, - sit = {x=81, y=160}, - sneak_stand = {x=222, y=302}, - sneak_mine = {x=346, y=365}, - sneak_walk = {x=304, y=323}, - sneak_walk_mine = {x=325, y=344}, - swim_walk = {x=368, y=387}, - swim_walk_mine = {x=389, y=408}, - swim_stand = {x=434, y=434}, - swim_mine = {x=411, y=430}, - run_walk = {x=440, y=459}, - run_walk_mine = {x=461, y=480}, - sit_mount = {x=484, y=484}, - die = {x=498, y=498}, - fly = {x=502, y=581}, - bow_walk = {x=650, y=670}, - bow_sneak = {x=675, y=695}, - }, -}) - -mcl_player.player_register_model("mcl_armor_character_female.b3d", { - animation_speed = 30, - textures = { - "character.png", - "blank.png", - "blank.png", - }, - animations = { - stand = {x=0, y=79}, - lay = {x=162, y=166}, - walk = {x=168, y=187}, - mine = {x=189, y=198}, - walk_mine = {x=200, y=219}, - sit = {x=81, y=160}, - sneak_stand = {x=222, y=302}, - sneak_mine = {x=346, y=365}, - sneak_walk = {x=304, y=323}, - sneak_walk_mine = {x=325, y=344}, - swim_walk = {x=368, y=387}, - swim_walk_mine = {x=389, y=408}, - swim_stand = {x=434, y=434}, - swim_mine = {x=411, y=430}, - run_walk = {x=440, y=459}, - run_walk_mine = {x=461, y=480}, - sit_mount = {x=484, y=484}, - die = {x=498, y=498}, - fly = {x=502, y=581}, - bow_walk = {x=650, y=670}, - bow_sneak = {x=675, y=695}, - }, -}) - -function mcl_armor.update_player(player, info) - mcl_player.player_set_armor(player, info.texture) - - local meta = player:get_meta() - meta:set_int("mcl_armor:armor_points", info.points) - - mcl_armor.player_view_range_factors[player] = info.view_range_factors -end - -local function is_armor_action(inventory_info) - return inventory_info.from_list == "armor" or inventory_info.to_list == "armor" or inventory_info.listname == "armor" -end - -local function limit_put(player, inventory, index, stack, count) - local def = stack:get_definition() - - if not def then - return 0 - end - - local element = def._mcl_armor_element - - if not element then - return 0 - end - - local element_index = mcl_armor.elements[element].index - - if index ~= 1 and index ~= element_index then - return 0 - end - - local old_stack = inventory:get_stack("armor", element_index) - - if old_stack:is_empty() or index ~= 1 and old_stack:get_name() ~= stack:get_name() and count <= 1 then - return count - else - return 0 - end -end - -local function limit_take(player, inventory, index, stack, count) - if mcl_enchanting.has_enchantment(stack, "curse_of_binding") and not minetest.is_creative_enabled(player:get_player_name()) then - return 0 - end - - return count -end - -minetest.register_allow_player_inventory_action(function(player, action, inventory, inventory_info) - if not is_armor_action(inventory_info) then - return - end - - if action == "put" then - return limit_put(player, inventory, inventory_info.index, inventory_info.stack, inventory_info.stack:get_count()) - elseif action == "take" then - return limit_take(player, inventory, inventory_info.index, inventory_info.stack, inventory_info.stack:get_count()) - else - if inventory_info.from_list ~= "armor" then - return limit_put(player, inventory, inventory_info.to_index, inventory:get_stack(inventory_info.from_list, inventory_info.from_index), inventory_info.count) - elseif inventory_info.to_list ~= "armor" then - return limit_take(player, inventory, inventory_info.from_index, inventory:get_stack(inventory_info.from_list, inventory_info.from_index), inventory_info.count) - else - return 0 - end - end -end) - -local function on_put(player, inventory, index, stack) - if index == 1 then - mcl_armor.equip(stack, player) - inventory:set_stack("armor", 1, nil) - else - mcl_armor.on_equip(stack, player) - end -end - -minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info) - if is_armor_action(inventory_info) then - if action == "put" then - on_put(player, inventory, inventory_info.index, inventory_info.stack) - elseif action == "take" then - mcl_armor.on_unequip(inventory_info.stack, player) - else - local stack = inventory:get_stack(inventory_info.to_list, inventory_info.to_index) - if inventory_info.to_list == "armor" then - on_put(player, inventory, inventory_info.to_index, stack) - elseif inventory_info.from_list == "armor" then - mcl_armor.on_unequip(stack, player) - end - end - end -end) - -minetest.register_on_joinplayer(function(player) - mcl_player.player_set_model(player, "mcl_armor_character.b3d") - player:get_inventory():set_size("armor", 5) - - minetest.after(1, function() - if player:is_player() then - mcl_armor.update(player) - end - end) -end) - -minetest.register_on_leaveplayer(function(player) - mcl_armor.player_view_range_factors[player] = nil -end) diff --git a/mods/ITEMS/mcl_armor/register.lua b/mods/ITEMS/mcl_armor/register.lua deleted file mode 100644 index 1f9ce7b02..000000000 --- a/mods/ITEMS/mcl_armor/register.lua +++ /dev/null @@ -1,205 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_armor.register_set({ - name = "leather", - description = "Leather", - descriptions = { - head = "Cap", - torso = "Tunic", - legs = "Pants", - }, - durability = 80, - enchantability = 15, - points = { - head = 1, - torso = 3, - legs = 2, - feet = 1, - }, - craft_material = "mcl_mobitems:leather", -}) - -mcl_armor.register_set({ - name = "gold", - description = "Golden", - durability = 112, - enchantability = 25, - points = { - head = 2, - torso = 5, - legs = 3, - feet = 1, - }, - craft_material = "mcl_core:gold_ingot", - cook_material = "mcl_core:gold_nugget", - sound_equip = "mcl_armor_equip_iron", - sound_unequip = "mcl_armor_unequip_iron", -}) - -mcl_armor.register_set({ - name = "chain", - description = "Chain", - durability = 240, - enchantability = 12, - points = { - head = 2, - torso = 5, - legs = 4, - feet = 1, - }, - repair_material = "mcl_core:iron_ingot", - cook_material = "mcl_core:iron_nugget", -}) - -mcl_armor.register_set({ - name = "iron", - description = "Iron", - durability = 240, - enchantability = 9, - points = { - head = 2, - torso = 6, - legs = 5, - feet = 2, - }, - craft_material = "mcl_core:iron_ingot", - cook_material = "mcl_core:iron_nugget", -}) - -mcl_armor.register_set({ - name = "diamond", - description = "Diamond", - durability = 528, - enchantability = 10, - points = { - head = 3, - torso = 8, - legs = 6, - feet = 3, - }, - toughness = 2, - craft_material = "mcl_core:diamond", -}) - -mcl_armor.register_protection_enchantment({ - id = "projectile_protection", - name = S("Projectile Protection"), - description = S("Reduces projectile damage."), - power_range_table = {{1, 16}, {11, 26}, {21, 36}, {31, 46}, {41, 56}}, - incompatible = {blast_protection = true, fire_protection = true, protection = true}, - factor = 2, - damage_flag = "is_projectile", -}) - -mcl_armor.register_protection_enchantment({ - id = "blast_protection", - name = S("Blast Protection"), - description = S("Reduces explosion damage and knockback."), - power_range_table = {{5, 13}, {13, 21}, {21, 29}, {29, 37}}, - weight = 2, - incompatible = {fire_protection = true, protection = true, projectile_protection = true}, - factor = 2, - damage_flag = "is_explosion", -}) - -mcl_armor.register_protection_enchantment({ - id = "fire_protection", - name = S("Fire Protection"), - description = S("Reduces fire damage."), - power_range_table = {{5, 13}, {13, 21}, {21, 29}, {29, 37}}, - incompatible = {blast_protection = true, protection = true, projectile_protection = true}, - factor = 2, - damage_flag = "is_fire", -}) - -mcl_armor.register_protection_enchantment({ - id = "protection", - name = S("Protection"), - description = S("Reduces most types of damage by 4% for each level."), - power_range_table = {{1, 12}, {12, 23}, {23, 34}, {34, 45}}, - incompatible = {blast_protection = true, fire_protection = true, projectile_protection = true}, - factor = 1, -}) - -mcl_armor.register_protection_enchantment({ - id = "feather_falling", - name = S("Feather Falling"), - description = S("Reduces fall damage."), - power_range_table = {{5, 11}, {11, 17}, {17, 23}, {23, 29}}, - factor = 3, - primary = {combat_armor_feet = true}, - damage_type = "fall", -}) - --- requires engine change ---[[mcl_enchanting.enchantments.aqua_affinity = { - name = S("Aqua Affinity"), - max_level = 1, - primary = {armor_head = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {}, - weight = 2, - description = S("Increases underwater mining speed."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 41}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - -mcl_enchanting.enchantments.curse_of_binding = { - name = S("Curse of Binding"), - max_level = 1, - primary = {}, - secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true}, - disallow = {}, - incompatible = {}, - weight = 1, - description = S("Item cannot be removed from armor slots except due to death, breaking or in Creative Mode."), - curse = true, - on_enchant = function() end, - requires_tool = false, - treasure = true, - power_range_table = {{25, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -mcl_enchanting.enchantments.thorns = { - name = S("Thorns"), - max_level = 3, - primary = {combat_armor_chestplate = true}, - secondary = {combat_armor = true}, - disallow = {}, - incompatible = {}, - weight = 1, - description = S("Reflects some of the damage taken when hit, at the cost of reducing durability with each proc."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{10, 61}, {30, 71}, {50, 81}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- Elytra - -minetest.register_tool("mcl_armor:elytra", { - description = S("Elytra"), - _doc_items_longdesc = mcl_armor.longdesc, - _doc_items_usagehelp = mcl_armor.usage, - inventory_image = "mcl_armor_inv_elytra.png", - groups = {armor = 1, non_combat_armor = 1, armor_torso = 1, non_combat_torso = 1, mcl_armor_uses = 10}, - sounds = { - _mcl_armor_equip = "mcl_armor_equip_leather", - _mcl_armor_unequip = "mcl_armor_unequip_leather", - }, - on_place = mcl_armor.equip_on_use, - on_secondary_use = mcl_armor.equip_on_use, - _mcl_armor_element = "torso", - _mcl_armor_texture = "mcl_armor_elytra.png" -}) diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_chainmail.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_chainmail.ogg deleted file mode 100644 index 3e98e0e05..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_chainmail.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_diamond.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_diamond.ogg deleted file mode 100644 index 9fd655ab7..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_diamond.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_generic.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_generic.ogg deleted file mode 100644 index 1d3b3de2c..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_generic.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_iron.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_iron.ogg deleted file mode 100644 index 7001c4460..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_iron.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_leather.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_leather.ogg deleted file mode 100644 index 378ec3165..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_equip_leather.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_chainmail.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_chainmail.ogg deleted file mode 100644 index 01692b5d2..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_chainmail.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_diamond.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_diamond.ogg deleted file mode 100644 index bdfdf8037..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_diamond.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_generic.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_generic.ogg deleted file mode 100644 index c04975d42..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_generic.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_iron.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_iron.ogg deleted file mode 100644 index 969ac030f..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_iron.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_leather.ogg b/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_leather.ogg deleted file mode 100644 index e634b89df..000000000 Binary files a/mods/ITEMS/mcl_armor/sounds/mcl_armor_unequip_leather.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_chain.png deleted file mode 100644 index e1fa159a2..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_diamond.png deleted file mode 100644 index f323a8663..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_gold.png deleted file mode 100644 index 7616d5d09..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_iron.png deleted file mode 100644 index a8d890b76..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_leather.png deleted file mode 100644 index c0122a100..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_chain.png deleted file mode 100644 index b1b7795eb..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_diamond.png deleted file mode 100644 index 3679ae6a0..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_gold.png deleted file mode 100644 index 640f30e49..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_iron.png deleted file mode 100644 index b27e58528..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_leather.png deleted file mode 100644 index eaa53582f..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_elytra.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_elytra.png deleted file mode 100644 index b51f2a564..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_elytra.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_chain.png deleted file mode 100644 index 89919d5e3..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_diamond.png deleted file mode 100644 index 3cd9867e0..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_gold.png deleted file mode 100644 index 4c9d9fd24..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_iron.png deleted file mode 100644 index 721bd7ca3..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_leather.png deleted file mode 100644 index a84a3f5c2..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_chain.png deleted file mode 100644 index 66f9bdce5..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_diamond.png deleted file mode 100644 index c0500d1a2..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_gold.png deleted file mode 100644 index ef1f9fa87..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_iron.png deleted file mode 100644 index 0d669cdbb..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_leather.png deleted file mode 100644 index e618111b0..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_chain.png deleted file mode 100644 index 9ab14863f..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_diamond.png deleted file mode 100644 index 4768b6ea8..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_gold.png deleted file mode 100644 index ef661fea3..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_iron.png deleted file mode 100644 index 28e7059dc..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_leather.png deleted file mode 100644 index c7c81d2c1..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_elytra.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_elytra.png deleted file mode 100644 index f5d5cfda6..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_elytra.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_chain.png deleted file mode 100644 index f72a88da2..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_diamond.png deleted file mode 100644 index 162f02ec3..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_gold.png deleted file mode 100644 index 06265de42..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_iron.png deleted file mode 100644 index f7a3be4f3..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_leather.png deleted file mode 100644 index 5abf858d9..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_chain.png deleted file mode 100644 index c2641991e..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_diamond.png deleted file mode 100644 index b5964fe0e..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_gold.png deleted file mode 100644 index 268187218..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_iron.png deleted file mode 100644 index 033fee80e..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_leather.png deleted file mode 100644 index 41d49c373..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_chain.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_chain.png deleted file mode 100644 index 709a090d7..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_diamond.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_diamond.png deleted file mode 100644 index 1f0893773..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_gold.png deleted file mode 100644 index b5db71139..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_iron.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_iron.png deleted file mode 100644 index 6add41cc4..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_leather.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_leather.png deleted file mode 100644 index deededca4..000000000 Binary files a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_armor_stand/LICENSE.txt b/mods/ITEMS/mcl_armor_stand/LICENSE.txt deleted file mode 100644 index 3ef950674..000000000 --- a/mods/ITEMS/mcl_armor_stand/LICENSE.txt +++ /dev/null @@ -1,8 +0,0 @@ -[mod] 3d Armor Stand [mcl_armor_stand] -====================================== - -License Source Code: LGPL v2.1 - -License Media: CC BY-SA 3.0 - -Source Code: Copyright (C) 2013 Stuart Jones - LGPL diff --git a/mods/ITEMS/mcl_armor_stand/README.txt b/mods/ITEMS/mcl_armor_stand/README.txt deleted file mode 100644 index 4ecbbba65..000000000 --- a/mods/ITEMS/mcl_armor_stand/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -[mod] 3d Armor Stand [mcl_armor_stand] -====================================== - -Depends: mcl_armor - -Adds an armor stand for armor storage and display. diff --git a/mods/ITEMS/mcl_armor_stand/init.lua b/mods/ITEMS/mcl_armor_stand/init.lua deleted file mode 100644 index d6080b8f8..000000000 --- a/mods/ITEMS/mcl_armor_stand/init.lua +++ /dev/null @@ -1,156 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Spawn a stand entity -local function spawn_stand_entity(pos, node) - local luaentity = minetest.add_entity(pos, "mcl_armor_stand:armor_entity"):get_luaentity() - luaentity:update_rotation(node or minetest.get_node(pos)) - return luaentity -end - --- Find a stand entity or spawn one -local function get_stand_entity(pos, node) - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 0)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_armor_stand:armor_entity" then - return luaentity - end - end - return spawn_stand_entity(pos, node) -end - --- Migrate the old inventory format -local function migrate_inventory(inv) - inv:set_size("armor", 5) - local lists = inv:get_lists() - for name, element in pairs(mcl_armor.elements) do - local listname = "armor_" .. name - local list = lists[listname] - if list then - inv:set_stack("armor", element.index, list[1]) - inv:set_size(listname, 0) - end - end -end - --- Drop all armor on the ground when it got destroyed -local function drop_inventory(pos) - local inv = minetest.get_meta(pos):get_inventory() - for _, stack in pairs(inv:get_list("armor")) do - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end -end - --- TODO: The armor stand should be an entity -minetest.register_node("mcl_armor_stand:armor_stand", { - description = S("Armor Stand"), - _tt_help = S("Displays pieces of armor"), - _doc_items_longdesc = S("An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand."), - _doc_items_usagehelp = S("Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand."), - drawtype = "mesh", - mesh = "3d_armor_stand.obj", - inventory_image = "3d_armor_stand_item.png", - wield_image = "3d_armor_stand_item.png", - tiles = {"default_wood.png", "mcl_stairs_stone_slab_top.png"}, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - is_ground_content = false, - stack_max = 16, - selection_box = { - type = "fixed", - fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5} - }, - -- TODO: This should be breakable by 2 quick punches - groups = {handy=1, deco_block=1, dig_by_piston=1, attached_node=1}, - _mcl_hardness = 2, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - spawn_stand_entity(pos) - end, - on_destruct = function(pos) - drop_inventory(pos) - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local protname = clicker:get_player_name() - - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return itemstack - end - - return mcl_armor.equip(itemstack, get_stand_entity(pos, node).object, true) - end, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.param2 = (node.param2 + 1) % 4 - minetest.swap_node(pos, node) - get_stand_entity(pos, node):update_rotation(node) - return true - end - return false - end, -}) - -minetest.register_entity("mcl_armor_stand:armor_entity", { - initial_properties = { - physical = true, - visual = "mesh", - mesh = "3d_armor_entity.obj", - visual_size = {x=1, y=1}, - collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1}, - pointable = false, - textures = {"blank.png"}, - timer = 0, - static_save = false, - }, - on_activate = function(self) - self.object:set_armor_groups({immortal = 1}) - self.node_pos = vector.round(self.object:get_pos()) - self.inventory = minetest.get_meta(self.node_pos):get_inventory() - migrate_inventory(self.inventory) - mcl_armor.update(self.object) - end, - on_step = function(self, dtime) - if minetest.get_node(self.node_pos).name ~= "mcl_armor_stand:armor_stand" then - self.object:remove() - end - end, - update_armor = function(self, info) - self.object:set_properties({textures = {info.texture}}) - end, - update_rotation = function(self, node) - self.object:set_yaw(minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2))) - end, -}) - -minetest.register_lbm({ - label = "Respawn armor stand entities", - name = "mcl_armor_stand:respawn_entities", - nodenames = {"mcl_armor_stand:armor_stand"}, - run_at_every_load = true, - action = function(pos, node) - spawn_stand_entity(pos, node) - end, -}) - -minetest.register_craft({ - output = "mcl_armor_stand:armor_stand", - recipe = { - {"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}, - {"", "mcl_core:stick", ""}, - {"mcl_core:stick", "mcl_stairs:slab_stone", "mcl_core:stick"}, - } -}) - --- Legacy handling -minetest.register_alias("3d_armor_stand:armor_stand", "mcl_armor_stand:armor_stand") -minetest.register_entity(":3d_armor_stand:armor_entity", { - on_activate = function(self) - minetest.log("action", "[mcl_armor_stand] Removing legacy entity: 3d_armor_stand:armor_entity") - self.object:remove() - end, - static_save = false, -}) diff --git a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.de.tr b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.de.tr deleted file mode 100644 index e6f8fa91a..000000000 --- a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_armor_stand -Armor Stand=Rüstungsständer -An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=Ein Rüstungsständer ist ein dekoratives Objekt, welches verschiedene Teile einer Rüstung präsentiert. Alles, was Spieler als Rüstung tragen kann, kann auch an einem Rüstungsständer platziert werden. -Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=Platzieren Sie einfach einen Rüstungsgegenstand auf den Rüstungsständer. Um das oberte Rüstungsteil zu nehmen, wählen Sie Ihre Hand aus und benutzen Sie die Platzieren-Taste auf dem Rüstungsständer. -Displays pieces of armor=Stellt Rüstungsteile aus diff --git a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.es.tr b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.es.tr deleted file mode 100644 index 8e33389a3..000000000 --- a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_armor_stand -Armor Stand=Soporte para armadura -An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=Un soporte para armadura es un objeto decorativo que puede mostrar diferentes piezas de armadura. Cualquier cosa que los jugadores puedan usar como armadura también se puede poner en un soporte para armadura. -Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=Simplemente coloca un objeto de armadura en el soporte para armadura. Para tomar la pieza superior de armadura del soporte para armadura, seleccione su mano y use la tecla de posición en el soporte para armadura. diff --git a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.fr.tr b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.fr.tr deleted file mode 100644 index 867b3f043..000000000 --- a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_armor_stand -Armor Stand=Support d'armure -An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=Un support d'armure est un objet décoratif qui peut afficher différentes pièces d'armure. Tout ce que les joueurs peuvent porter comme armure peut également être placé sur un support d'armure. -Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=Placez simplement un objet d'armure sur le support d'armure. Pour prendre la pièce d'armure du support d'armure, sélectionnez votre main et utilisez la touche "Placer" sur le support d'armure. -Displays pieces of armor=Displays pieces of armor diff --git a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.pl.tr b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.pl.tr deleted file mode 100644 index cc134a2f0..000000000 --- a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.pl.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_armor_stand -Armor Stand=Stojak na zbroję -An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=Stojak na zbroję jest obiektem dekoracyjnym, na którym można wystawiać różne części zbroi. Cokolwiek co może być noszone przez gracza jako zbroja, może być wystawione na stojaku na zbroję. -Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=Aby to zrobić po prostu postaw przedmiot zbroi na stojaku. Aby wziąć górną część zbroi ze stojaka wybierz swoją dłoń i kliknij przycisk użyj na stojaku. -Displays pieces of armor=Prezentuje części zbroi - diff --git a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.ru.tr b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.ru.tr deleted file mode 100644 index 6d05d20fc..000000000 --- a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_armor_stand -Armor Stand=Стенд защиты -An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=Стенд защиты - декоративный объект, демонстрирующий различные части защиты. Всё, что игрок может носить на себе в качестве защиты, может быть также помещено на данный стенд. -Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=Просто поместите элемент защиты на защитный стенд. Чтобы взять верхнюю часть защиты со стенда, выберите вашу руку и используйте клавишу размещения. -Displays pieces of armor=Демонстрирует части защиты diff --git a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.zh_TW.tr b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.zh_TW.tr deleted file mode 100644 index d5d107e55..000000000 --- a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.zh_TW.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_armor_stand -Armor Stand=盔甲座 -An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=盔甲架是一種裝飾實體,可以展示不同的盔甲。玩家可以作為盔甲穿戴的任何東西也都可以放在盔甲架上。 -Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=只需将一件盔甲放在盔甲架上。要从盔甲架上取下最上面的一件盔甲,选择你的手并在盔甲架上使用放置键。 -Displays pieces of armor=展示盔甲 diff --git a/mods/ITEMS/mcl_armor_stand/locale/template.txt b/mods/ITEMS/mcl_armor_stand/locale/template.txt deleted file mode 100644 index 8d3f3cb8c..000000000 --- a/mods/ITEMS/mcl_armor_stand/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_armor_stand -Armor Stand= -An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.= -Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.= -Displays pieces of armor= diff --git a/mods/ITEMS/mcl_armor_stand/mod.conf b/mods/ITEMS/mcl_armor_stand/mod.conf deleted file mode 100644 index eb803dc56..000000000 --- a/mods/ITEMS/mcl_armor_stand/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_armor_stand -author = stujones11 -description = Adds an armor stand for armor storage and display. -depends = mcl_armor, mcl_core, mcl_sounds, mcl_stairs -optional_depends = screwdriver diff --git a/mods/ITEMS/mcl_armor_stand/models/3d_armor_entity.obj b/mods/ITEMS/mcl_armor_stand/models/3d_armor_entity.obj deleted file mode 100644 index 37bc521e9..000000000 --- a/mods/ITEMS/mcl_armor_stand/models/3d_armor_entity.obj +++ /dev/null @@ -1,459 +0,0 @@ -# Blender v2.92.0 OBJ File: '' -# www.blender.org -mtllib 3d_armor_entity.mtl -o Cube -v 1.000000 1.000000 -1.000000 -v 1.000000 -1.000000 -1.000000 -v 1.000000 1.000000 1.000000 -v 1.000000 -1.000000 1.000000 -v -1.000000 1.000000 -1.000000 -v -1.000000 -1.000000 -1.000000 -v -1.000000 1.000000 1.000000 -v -1.000000 -1.000000 1.000000 -vt 0.625000 0.500000 -vt 0.875000 0.500000 -vt 0.875000 0.750000 -vt 0.625000 0.750000 -vt 0.375000 0.750000 -vt 0.625000 1.000000 -vt 0.375000 1.000000 -vt 0.375000 0.000000 -vt 0.625000 0.000000 -vt 0.625000 0.250000 -vt 0.375000 0.250000 -vt 0.125000 0.500000 -vt 0.375000 0.500000 -vt 0.125000 0.750000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -usemtl Material -s off -f 1/1/1 5/2/1 7/3/1 3/4/1 -f 4/5/2 3/4/2 7/6/2 8/7/2 -f 8/8/3 7/9/3 5/10/3 6/11/3 -f 6/12/4 2/13/4 4/5/4 8/14/4 -f 2/13/5 1/1/5 3/4/5 4/5/5 -f 6/11/6 5/10/6 1/1/6 2/13/6 -o Player_Cube -v 2.200000 9.763893 1.200001 -v 2.200000 2.663871 1.200000 -v 2.200000 2.663871 -1.200000 -v 2.200000 9.763893 -1.200000 -v -2.200000 9.763893 -1.200000 -v -2.200000 9.763893 1.200001 -v -2.200000 2.663871 1.200000 -v -2.200000 2.663871 -1.200000 -v 2.300000 13.863962 2.300001 -v 2.300000 9.263885 2.300000 -v 2.300000 9.263885 -2.299999 -v 2.300000 13.863962 -2.299999 -v -2.300000 13.863962 -2.299999 -v -2.300000 13.863962 2.300001 -v -2.300000 9.263885 2.300000 -v -2.300000 9.263885 -2.299999 -v -2.322686 2.473175 -1.300000 -v -2.322686 2.473175 1.300000 -v -4.713554 2.682348 1.300000 -v -4.713554 2.682348 -1.300000 -v -4.077313 9.954605 -1.299999 -v -4.077313 9.954605 1.300000 -v -1.686446 9.745432 1.300000 -v -1.686446 9.745432 -1.299999 -v 1.686446 9.745432 1.300000 -v 2.322686 2.473175 1.300000 -v 4.713554 2.682348 1.300000 -v 4.077313 9.954605 1.300000 -v 1.686446 9.745432 -1.299999 -v 2.322686 2.473175 -1.300000 -v 4.077313 9.954605 -1.299999 -v 4.713554 2.682348 -1.300000 -v 2.538733 2.980834 -1.210000 -v 0.139099 2.938947 -1.200000 -v 0.139099 2.938947 1.200000 -v 2.538733 2.980834 1.190000 -v 0.261266 -4.059988 -1.200000 -v 2.660901 -4.018101 -1.210000 -v 2.660901 -4.018101 1.190000 -v 0.261266 -4.059988 1.200000 -v -2.538734 2.980834 -1.210000 -v -2.538734 2.980834 1.190000 -v -0.139099 2.938947 1.200000 -v -0.139099 2.938947 -1.200000 -v -0.261266 -4.059988 1.200000 -v -0.261266 -4.059988 -1.200000 -v -2.660901 -4.018101 -1.210000 -v -2.660901 -4.018101 1.190000 -v 0.000000 -4.387500 -1.400000 -v 0.000000 -4.387500 1.400000 -v -2.799999 -4.387500 1.390000 -v -2.799999 -4.387500 -1.410000 -v -2.800000 -0.812499 1.390000 -v -2.800000 -0.812499 -1.410000 -v 0.000000 -0.812499 1.400000 -v 0.000000 -0.812499 -1.400000 -v 0.000000 -0.812499 -1.400000 -v 0.000000 -4.387500 -1.400000 -v 0.000000 -4.387500 1.400000 -v 0.000000 -0.812499 1.400000 -v 2.800000 -0.812499 -1.410000 -v 2.799999 -4.387500 -1.410000 -v 2.799999 -4.387500 1.390000 -v 2.800000 -0.812499 1.390000 -v 2.267006 13.830965 2.267007 -v 2.267006 13.830965 -2.267005 -v 2.267006 9.296881 -2.267005 -v 2.267006 9.296881 2.267006 -v -2.267006 13.830965 -2.267005 -v -2.267006 13.830965 2.267007 -v -2.267006 9.296881 -2.267005 -v -2.267006 9.296881 2.267006 -v -4.168111 10.060661 1.681621 -v 1.741822 -5.305762 4.169018 -v 1.718504 -5.438008 3.407457 -v -6.641035 -3.963995 3.407457 -v 4.191429 8.586647 1.681621 -v -6.617718 -3.831752 4.169018 -v 4.168111 8.454401 0.920061 -v -4.191429 9.928415 0.920061 -v -4.191429 8.586648 1.681620 -v 6.617716 -3.831752 4.169018 -v 6.641035 -3.963997 3.407457 -v -1.718504 -5.438006 3.407457 -v 4.168111 10.060658 1.681621 -v -1.741822 -5.305762 4.169018 -v 4.191429 9.928414 0.920061 -v -4.168111 8.454404 0.920061 -vt 0.250000 0.375000 -vt 0.250000 0.000000 -vt 0.312500 0.000000 -vt 0.312500 0.375000 -vt 0.437500 0.375000 -vt 0.437500 0.500000 -vt 0.312500 0.500000 -vt 0.437500 0.500000 -vt 0.437500 0.375000 -vt 0.562500 0.375000 -vt 0.562500 0.500000 -vt 0.437500 0.000000 -vt 0.500000 0.000000 -vt 0.500000 0.375000 -vt 0.625000 0.000000 -vt 0.625000 0.375000 -vt 0.500000 0.750000 -vt 0.500000 0.500000 -vt 0.625000 0.500000 -vt 0.625000 0.750000 -vt 0.750000 0.750000 -vt 0.750000 1.000000 -vt 0.625000 1.000000 -vt 0.875000 0.750000 -vt 0.875000 1.000000 -vt 0.750000 1.000000 -vt 0.750000 0.750000 -vt 0.750000 0.500000 -vt 0.875000 0.750000 -vt 0.875000 0.500000 -vt 1.000000 0.750000 -vt 1.000000 0.500000 -vt 0.750000 0.375000 -vt 0.750000 0.500000 -vt 0.812500 0.500000 -vt 0.812500 0.375000 -vt 0.687500 0.375000 -vt 0.687500 0.500000 -vt 0.750000 0.500000 -vt 0.750000 0.375000 -vt 0.687500 0.375000 -vt 0.625000 0.375000 -vt 0.625000 0.000000 -vt 0.687500 0.000000 -vt 0.750000 0.000000 -vt 0.687500 0.000000 -vt 0.812500 0.375000 -vt 0.812500 0.000000 -vt 0.875000 0.375000 -vt 0.875000 0.000000 -vt 0.812500 0.375000 -vt 0.812500 0.000000 -vt 0.875000 0.000000 -vt 0.875000 0.375000 -vt 0.750000 0.375000 -vt 0.750000 0.000000 -vt 0.687500 0.375000 -vt 0.687500 0.000000 -vt 0.687500 0.375000 -vt 0.687500 0.000000 -vt 0.625000 0.000000 -vt 0.625000 0.375000 -vt 0.750000 0.500000 -vt 0.687500 0.500000 -vt 0.750000 0.375000 -vt 0.812500 0.375000 -vt 0.812500 0.500000 -vt 0.750000 0.500000 -vt 0.125000 0.375000 -vt 0.062500 0.375000 -vt 0.062500 0.500000 -vt 0.125000 0.500000 -vt 0.187500 0.375000 -vt 0.125000 0.375000 -vt 0.125000 0.500000 -vt 0.187500 0.500000 -vt 0.000000 0.375000 -vt 0.000000 0.000000 -vt 0.062500 0.000000 -vt 0.062500 0.375000 -vt 0.250000 0.375000 -vt 0.250000 0.000000 -vt 0.187500 0.000000 -vt 0.187500 0.375000 -vt 0.125000 0.000000 -vt 0.062500 0.000000 -vt 0.187500 0.375000 -vt 0.187500 0.000000 -vt 0.125000 0.000000 -vt 0.125000 0.375000 -vt 0.125000 0.375000 -vt 0.125000 0.500000 -vt 0.062500 0.500000 -vt 0.062500 0.375000 -vt 0.187500 0.375000 -vt 0.125000 0.375000 -vt 0.125000 0.000000 -vt 0.187500 0.000000 -vt 0.062500 0.000000 -vt 0.125000 0.000000 -vt 0.250000 0.375000 -vt 0.187500 0.375000 -vt 0.187500 0.000000 -vt 0.250000 0.000000 -vt 0.000000 0.375000 -vt 0.062500 0.375000 -vt 0.062500 0.000000 -vt 0.000000 0.000000 -vt 0.187500 0.375000 -vt 0.187500 0.500000 -vt 0.125000 0.500000 -vt 0.125000 0.375000 -vt 0.381250 0.832812 -vt 0.381250 0.845312 -vt 0.375000 0.845312 -vt 0.375000 0.832812 -vt 0.362500 0.832812 -vt 0.368750 0.832812 -vt 0.368750 0.810938 -vt 0.362500 0.810938 -vt 0.387500 0.832812 -vt 0.381250 0.832812 -vt 0.381250 0.810938 -vt 0.387500 0.810938 -vt 0.375000 0.832812 -vt 0.368750 0.832812 -vt 0.368750 0.810938 -vt 0.375000 0.810938 -vt 0.381250 0.832812 -vt 0.375000 0.832812 -vt 0.375000 0.810938 -vt 0.381250 0.810938 -vt 0.375000 0.845312 -vt 0.368750 0.845312 -vt 0.381250 0.832812 -vt 0.381250 0.810938 -vt 0.375000 0.810938 -vt 0.375000 0.832812 -vt 0.375000 0.832812 -vt 0.375000 0.810938 -vt 0.368750 0.810938 -vt 0.368750 0.832812 -vt 0.387500 0.832812 -vt 0.387500 0.810938 -vt 0.381250 0.810938 -vt 0.381250 0.832812 -vt 0.362500 0.832812 -vt 0.362500 0.810938 -vt 0.368750 0.810938 -vt 0.368750 0.832812 -vt 0.381250 0.832812 -vt 0.375000 0.832812 -vt 0.375000 0.845312 -vt 0.381250 0.845312 -vt 0.368750 0.845312 -vt 0.375000 0.845312 -vt 0.500000 0.750000 -vt 0.625000 0.750000 -vt 0.625000 0.500000 -vt 0.500000 0.500000 -vt 0.750000 0.750000 -vt 0.625000 1.000000 -vt 0.750000 1.000000 -vt 0.875000 0.750000 -vt 0.750000 0.750000 -vt 0.750000 1.000000 -vt 0.875000 1.000000 -vt 0.750000 0.500000 -vt 0.875000 0.750000 -vt 0.875000 0.500000 -vt 1.000000 0.750000 -vt 1.000000 0.500000 -vt 0.032859 0.558649 -vt 0.032859 0.998468 -vt 0.362724 0.998468 -vt 0.362724 0.558649 -vt 0.032859 0.558649 -vt 0.362724 0.558649 -vt 0.362724 0.998468 -vt 0.032859 0.998468 -vt 0.039157 0.992309 -vt 0.039157 0.656118 -vt 0.060169 0.656118 -vt 0.060169 0.992309 -vt -0.003415 0.501261 -vt 0.368238 0.501261 -vt 0.368238 0.563203 -vt -0.003415 0.563203 -vt 0.368238 0.996797 -vt -0.003415 0.996797 -vt -0.003415 0.934855 -vt 0.368238 0.934855 -vt 0.394691 0.498800 -vt 0.394691 0.994336 -vt 0.363720 0.994336 -vt 0.363720 0.498800 -vt 0.032859 0.998468 -vt 0.032859 0.558649 -vt 0.362724 0.558649 -vt 0.362724 0.998468 -vt 0.032859 0.998468 -vt 0.362724 0.998468 -vt 0.362724 0.558649 -vt 0.032859 0.558649 -vt 0.039157 0.656118 -vt 0.039157 0.992309 -vt 0.060169 0.992309 -vt 0.060169 0.656118 -vt -0.003415 0.996797 -vt 0.368238 0.996797 -vt 0.368238 0.934855 -vt -0.003415 0.934855 -vt 0.368238 0.501261 -vt -0.003415 0.501261 -vt -0.003415 0.563203 -vt 0.368238 0.563203 -vt 0.394691 0.994336 -vt 0.394691 0.498800 -vt 0.363720 0.498800 -vt 0.363720 0.994336 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn -0.0872 -0.9962 0.0000 -vn 0.0872 0.9962 0.0000 -vn -0.9962 0.0872 0.0000 -vn 0.9962 -0.0872 0.0000 -vn -0.9962 -0.0872 0.0000 -vn 0.9962 0.0872 0.0000 -vn -0.0872 0.9962 0.0000 -vn 0.0872 -0.9962 0.0000 -vn -0.0175 0.9998 0.0000 -vn 0.0175 -0.9998 0.0000 -vn 0.9998 0.0175 0.0000 -vn 0.0042 0.0001 1.0000 -vn -0.0042 -0.0001 -1.0000 -vn -0.9998 -0.0175 0.0000 -vn 0.0175 0.9998 0.0000 -vn 0.9998 -0.0175 0.0000 -vn 0.0042 -0.0001 -1.0000 -vn -0.0042 0.0001 1.0000 -vn -0.9998 0.0175 0.0000 -vn -0.0175 -0.9998 0.0000 -vn -0.0036 -0.0000 1.0000 -vn 0.0036 0.0000 -1.0000 -vn -0.0036 0.0000 -1.0000 -vn 0.0036 -0.0000 1.0000 -vn 0.0302 0.1710 0.9848 -vn -0.0302 -0.1710 -0.9848 -vn 0.1710 0.9698 -0.1737 -vn 0.9848 -0.1736 0.0000 -vn -0.9848 0.1736 -0.0000 -vn -0.1710 -0.9698 0.1736 -vn -0.0302 0.1710 0.9848 -vn 0.0302 -0.1710 -0.9848 -vn -0.1710 0.9698 -0.1736 -vn 0.9848 0.1736 0.0000 -vn -0.9848 -0.1736 -0.0000 -vn 0.1710 -0.9698 0.1736 -usemtl None -s off -f 9/15/7 10/16/7 11/17/7 12/18/7 -f 13/19/8 14/20/8 9/21/8 12/18/8 -f 15/22/9 16/23/9 11/24/9 10/25/9 -f 13/19/10 12/18/10 11/17/10 16/26/10 -f 16/26/11 15/27/11 14/28/11 13/19/11 -f 15/27/12 10/29/12 9/30/12 14/28/12 -f 17/31/7 18/32/7 19/33/7 20/34/7 -f 21/35/8 22/36/8 17/37/8 20/34/8 -f 19/38/9 18/39/9 23/40/9 24/41/9 -f 21/35/10 20/34/10 19/33/10 24/42/10 -f 22/43/11 21/35/11 24/42/11 23/44/11 -f 17/45/12 22/43/12 23/44/12 18/46/12 -f 25/47/13 26/48/13 27/49/13 28/50/13 -f 29/51/14 30/52/14 31/53/14 32/54/14 -f 30/55/15 29/56/15 28/57/15 27/58/15 -f 29/51/10 32/54/10 25/59/10 28/60/10 -f 32/54/16 31/61/16 26/62/16 25/59/16 -f 31/61/12 30/63/12 27/64/12 26/62/12 -f 33/65/12 34/66/12 35/67/12 36/68/12 -f 37/69/17 38/70/17 34/66/17 33/65/17 -f 39/71/10 40/72/10 38/70/10 37/69/10 -f 36/73/18 35/74/18 40/75/18 39/76/18 -f 39/71/19 37/69/19 33/77/19 36/78/19 -f 38/79/20 40/80/20 35/81/20 34/82/20 -f 41/83/21 42/84/21 43/85/21 44/86/21 -f 45/87/22 46/88/22 47/89/22 48/90/22 -f 44/91/23 47/92/23 46/93/23 41/94/23 -f 43/95/24 48/96/24 47/97/24 44/98/24 -f 41/83/25 46/99/25 45/100/25 42/84/25 -f 42/101/26 45/102/26 48/103/26 43/104/26 -f 49/105/27 50/106/27 51/107/27 52/108/27 -f 52/109/28 51/110/28 53/111/28 54/112/28 -f 49/105/29 52/108/29 54/113/29 55/114/29 -f 51/115/30 50/116/30 56/117/30 53/118/30 -f 50/119/31 49/120/31 55/121/31 56/122/31 -f 54/123/32 53/124/32 56/125/32 55/126/32 -f 57/127/9 58/128/9 59/129/9 60/130/9 -f 61/131/11 62/132/11 60/133/11 59/134/11 -f 63/135/33 61/136/33 59/137/33 58/138/33 -f 62/139/34 64/140/34 57/141/34 60/142/34 -f 64/143/7 63/144/7 58/145/7 57/146/7 -f 62/139/8 61/147/8 63/148/8 64/140/8 -f 65/149/11 66/150/11 67/151/11 68/152/11 -f 69/153/35 70/154/35 66/155/35 65/156/35 -f 68/157/36 67/158/36 71/159/36 72/160/36 -f 72/161/7 71/162/7 70/163/7 69/164/7 -f 66/165/9 70/166/9 71/167/9 67/168/9 -f 69/153/8 65/156/8 68/169/8 72/170/8 -f 73/171/11 74/172/11 75/173/11 76/174/11 -f 77/175/9 74/172/9 73/176/9 78/177/9 -f 75/178/8 79/179/8 80/180/8 76/181/8 -f 77/175/12 79/182/12 75/173/12 74/172/12 -f 78/183/7 80/184/7 79/182/7 77/175/7 -f 73/185/10 76/186/10 80/184/10 78/183/10 -f 85/187/37 81/188/37 86/189/37 82/190/37 -f 87/191/38 83/192/38 84/193/38 88/194/38 -f 81/195/39 85/196/39 87/197/39 88/198/39 -f 85/199/40 82/200/40 83/201/40 87/202/40 -f 86/203/41 81/204/41 88/205/41 84/206/41 -f 82/207/42 86/208/42 84/209/42 83/210/42 -f 93/211/43 89/212/43 94/213/43 90/214/43 -f 95/215/44 91/216/44 92/217/44 96/218/44 -f 89/219/45 93/220/45 95/221/45 96/222/45 -f 93/223/46 90/224/46 91/225/46 95/226/46 -f 94/227/47 89/228/47 96/229/47 92/230/47 -f 90/231/48 94/232/48 92/233/48 91/234/48 diff --git a/mods/ITEMS/mcl_armor_stand/models/3d_armor_stand.obj b/mods/ITEMS/mcl_armor_stand/models/3d_armor_stand.obj deleted file mode 100644 index 89f3793ad..000000000 --- a/mods/ITEMS/mcl_armor_stand/models/3d_armor_stand.obj +++ /dev/null @@ -1,191 +0,0 @@ -# Blender v2.73 (sub 0) OBJ File: '3d_armor_stand.blend' -# www.blender.org -mtllib 3d_armor_stand.mtl -o Player_Cube -v 0.062500 1.312500 -0.062500 -v 0.062500 1.312500 0.062500 -v -0.062500 1.312500 -0.062500 -v -0.062500 1.312500 0.062500 -v -0.187500 -0.437504 0.062500 -v -0.187500 -0.437504 -0.062500 -v -0.187500 0.937500 0.062500 -v -0.187500 0.937500 -0.062500 -v -0.250000 0.250000 0.062500 -v -0.250000 0.250000 -0.062500 -v -0.250000 0.125003 0.062500 -v -0.250000 0.125003 -0.062500 -v 0.250000 0.250000 0.062500 -v 0.250000 0.250000 -0.062500 -v 0.250000 0.125003 0.062500 -v 0.250000 0.125003 -0.062500 -v -0.062500 -0.437504 -0.062500 -v -0.062500 -0.437504 0.062500 -v -0.062500 0.937500 0.062500 -v -0.062500 0.937500 -0.062500 -v 0.062500 0.250000 0.062500 -v 0.062500 0.250000 -0.062500 -v 0.187500 0.250000 -0.062500 -v 0.187500 0.250000 0.062500 -v 0.187500 0.937500 -0.062500 -v 0.187500 0.937500 0.062500 -v 0.187500 -0.437504 -0.062500 -v 0.187500 -0.437504 0.062500 -v 0.062500 -0.437504 -0.062500 -v 0.062500 -0.437504 0.062500 -v 0.062500 0.937500 0.062500 -v 0.062500 0.937500 -0.062500 -v -0.062500 0.812500 -0.062500 -v -0.187500 0.812500 -0.062500 -v -0.062500 0.812500 0.062500 -v -0.187500 0.812500 0.062500 -v 0.062500 0.812500 -0.062500 -v 0.187500 0.812500 -0.062500 -v 0.187500 0.812500 0.062500 -v 0.062500 0.812500 0.062500 -v 0.375000 0.812500 0.062500 -v 0.375000 0.812500 -0.062500 -v 0.375000 0.937500 0.062500 -v 0.375000 0.937500 -0.062500 -v 0.500000 -0.437500 -0.500000 -v 0.500000 -0.437500 0.500000 -v -0.500000 -0.437500 -0.500000 -v -0.500000 -0.437500 0.500000 -v -0.062500 0.250000 -0.062500 -v -0.187500 0.250000 -0.062500 -v -0.062500 0.250000 0.062500 -v -0.187500 0.250000 0.062500 -v -0.375000 0.937500 0.062500 -v -0.375000 0.937500 -0.062500 -v -0.375000 0.812500 -0.062500 -v -0.375000 0.812500 0.062500 -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 -v 0.187500 0.124998 0.062500 -v 0.187500 0.124998 -0.062500 -v 0.062500 0.124998 0.062500 -v 0.062500 0.124998 -0.062500 -v -0.062500 0.124998 -0.062500 -v -0.187500 0.124998 -0.062500 -v -0.062500 0.124998 0.062500 -v -0.187500 0.124998 0.062500 -vt 0.000000 0.000000 -vt 0.875000 0.000000 -vt 0.875000 0.250000 -vt 0.000000 0.250000 -vt 0.125000 0.500000 -vt 0.125000 0.750000 -vt -0.000000 0.750000 -vt -0.000000 0.500000 -vt 0.750000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.250000 -vt 0.750000 0.250000 -vt 0.375000 0.500000 -vt 0.375000 0.750000 -vt 0.875000 0.750000 -vt 0.875000 1.000000 -vt 0.000000 1.000000 -vt 0.875000 0.500000 -vt 0.750000 0.500000 -vt 1.000000 0.500000 -vt 1.000000 0.750000 -vt 0.750000 0.750000 -vt 0.625000 1.000000 -vt 0.375000 1.000000 -vt 0.625000 0.750000 -vt 0.625000 0.500000 -vt 0.250000 0.500000 -vt 0.250000 0.750000 -vt 0.625000 0.250000 -vt 0.625000 -0.000000 -vt 0.250000 0.250000 -vt 0.250000 0.000000 -vt 0.375000 0.250000 -vt 0.250000 1.000000 -vt 1.000000 1.000000 -vt 0.750000 1.000000 -vt 0.375000 -0.000000 -vt 0.125000 0.250000 -vt 0.125000 1.000000 -vt 0.125000 0.000000 -vt -0.000000 0.937500 -vt 1.000000 0.937500 -vt 0.937500 0.000000 -vt 0.937500 1.000000 -vt 1.000000 0.062500 -vt 0.000000 0.062500 -vt 0.062500 0.000000 -vt 0.062500 1.000000 -g Player_Cube_Stand -usemtl Stand -s off -f 64/1 29/2 30/3 63/4 -f 52/5 50/6 10/7 9/8 -f 17/9 18/10 5/11 6/12 -f 68/3 66/2 6/1 5/4 -f 7/13 8/14 54/7 53/8 -f 67/15 68/16 5/17 18/7 -f 62/4 27/3 29/18 64/8 -f 66/3 65/18 17/8 6/4 -f 9/19 10/20 12/21 11/22 -f 63/7 30/15 28/16 61/17 -f 65/18 67/15 18/7 17/8 -f 61/8 28/18 27/15 62/7 -f 19/23 7/24 36/14 35/25 -f 8/14 7/13 19/26 20/25 -f 23/15 24/18 13/20 14/21 -f 13/8 15/27 16/28 14/7 -f 39/29 38/30 42/10 41/11 -f 29/31 27/4 28/1 30/32 -f 25/28 26/27 43/26 44/25 -f 38/12 25/19 44/13 42/33 -f 25/28 32/7 31/8 26/27 -f 8/26 20/13 33/33 34/29 -f 25/19 38/12 37/11 32/20 -f 31/17 40/7 39/28 26/34 -f 26/34 39/28 41/25 43/23 -f 43/7 41/28 42/34 44/17 -f 53/22 54/21 55/35 56/36 -f 36/14 7/24 53/17 56/7 -f 8/26 34/29 55/11 54/20 -f 34/37 36/33 56/4 55/1 -f 51/13 21/26 22/25 49/14 -f 20/4 3/12 1/19 32/8 -f 40/15 31/16 19/23 35/25 -f 35/29 33/30 37/2 40/3 -f 33/33 20/13 32/5 37/38 -f 3/14 4/24 2/23 1/25 -f 19/12 4/4 3/1 20/9 -f 31/36 2/17 4/7 19/22 -f 32/22 1/7 2/8 31/19 -f 23/5 62/38 64/33 22/13 -f 21/14 63/24 61/39 24/6 -f 61/3 62/2 16/10 15/11 -f 62/38 23/5 14/8 16/4 -f 24/6 61/39 15/17 13/7 -f 50/18 66/3 12/11 10/20 -f 66/40 68/38 11/4 12/1 -f 50/18 49/26 65/29 66/3 -f 51/25 52/15 68/16 67/23 -f 68/16 52/15 9/21 11/35 -f 49/26 22/13 64/33 65/29 -f 51/25 67/23 63/24 21/14 -f 67/33 65/37 64/30 63/29 -f 37/1 22/2 21/3 40/4 -f 38/4 23/3 22/18 37/8 -f 40/7 21/15 24/16 39/17 -f 39/8 24/18 23/15 38/7 -f 36/2 34/3 50/4 52/1 -f 35/15 36/16 52/17 51/7 -f 34/3 33/18 49/8 50/4 -f 33/18 35/15 51/7 49/8 -g Player_Cube_Base -usemtl Base -f 47/17 48/1 46/10 45/35 -f 59/1 57/10 58/35 60/17 -f 48/17 60/41 58/42 46/35 -f 46/43 58/10 57/35 45/44 -f 47/1 45/10 57/45 59/46 -f 48/47 47/48 59/17 60/1 diff --git a/mods/ITEMS/mcl_armor_stand/textures/3d_armor_stand_item.png b/mods/ITEMS/mcl_armor_stand/textures/3d_armor_stand_item.png deleted file mode 100644 index 06177d188..000000000 Binary files a/mods/ITEMS/mcl_armor_stand/textures/3d_armor_stand_item.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/README.txt b/mods/ITEMS/mcl_banners/README.txt deleted file mode 100644 index 4de3ce439..000000000 --- a/mods/ITEMS/mcl_banners/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -License of code: WTFPL - -License of textures: See README.md in top directory of MineClone 2. - -License of models: GPLv3 (https://www.gnu.org/licenses/gpl-3.0.html) -Models author: 22i. -Source: https://github.com/22i/amc diff --git a/mods/ITEMS/mcl_banners/init.lua b/mods/ITEMS/mcl_banners/init.lua deleted file mode 100644 index cc0e02e66..000000000 --- a/mods/ITEMS/mcl_banners/init.lua +++ /dev/null @@ -1,675 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) -local N = function(s) return s end - -local mod_mcl_core = minetest.get_modpath("mcl_core") -local mod_doc = minetest.get_modpath("doc") - -local node_sounds -if minetest.get_modpath("mcl_sounds") then - node_sounds = mcl_sounds.node_sound_wood_defaults() -end - --- Helper function -local function round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - -mcl_banners = {} - -mcl_banners.colors = { - -- Format: - -- [ID] = { banner description, wool, unified dyes color group, overlay color, dye, color name for emblazonings } - ["unicolor_white"] = {"white", S("White Banner"), "mcl_wool:white", "#FFFFFF", "mcl_dye:white", N("White") }, - ["unicolor_darkgrey"] = {"grey", S("Grey Banner"), "mcl_wool:grey", "#303030", "mcl_dye:dark_grey", N("Grey") }, - ["unicolor_grey"] = {"silver", S("Light Grey Banner"), "mcl_wool:silver", "#5B5B5B", "mcl_dye:grey", N("Light Grey") }, - ["unicolor_black"] = {"black", S("Black Banner"), "mcl_wool:black", "#000000", "mcl_dye:black", N("Black") }, - ["unicolor_red"] = {"red", S("Red Banner"), "mcl_wool:red", "#BC0000", "mcl_dye:red", N("Red") }, - ["unicolor_yellow"] = {"yellow", S("Yellow Banner"), "mcl_wool:yellow", "#E6CD00", "mcl_dye:yellow", N("Yellow") }, - ["unicolor_dark_green"] = {"green", S("Green Banner"), "mcl_wool:green", "#006000", "mcl_dye:dark_green", N("Green") }, - ["unicolor_cyan"] = {"cyan", S("Cyan Banner"), "mcl_wool:cyan", "#00ACAC", "mcl_dye:cyan", N("Cyan") }, - ["unicolor_blue"] = {"blue", S("Blue Banner"), "mcl_wool:blue", "#0000AC", "mcl_dye:blue", N("Blue") }, - ["unicolor_red_violet"] = {"magenta", S("Magenta Banner"), "mcl_wool:magenta", "#AC007C", "mcl_dye:magenta", N("Magenta")}, - ["unicolor_orange"] = {"orange", S("Orange Banner"), "mcl_wool:orange", "#E67300", "mcl_dye:orange", N("Orange") }, - ["unicolor_violet"] = {"purple", S("Purple Banner"), "mcl_wool:purple", "#6400AC", "mcl_dye:violet", N("Violet") }, - ["unicolor_brown"] = {"brown", S("Brown Banner"), "mcl_wool:brown", "#603000", "mcl_dye:brown", N("Brown") }, - ["unicolor_pink"] = {"pink", S("Pink Banner"), "mcl_wool:pink", "#DE557C", "mcl_dye:pink", N("Pink") }, - ["unicolor_lime"] = {"lime", S("Lime Banner"), "mcl_wool:lime", "#30AC00", "mcl_dye:green", N("Lime") }, - ["unicolor_light_blue"] = {"light_blue", S("Light Blue Banner"), "mcl_wool:light_blue", "#4040CF", "mcl_dye:lightblue", N("Light Blue") }, -} - - -local pattern_names = { - "", - "border", - "bricks", - "circle", - "creeper", - "cross", - "curly_border", - "diagonal_up_left", - "diagonal_up_right", - "diagonal_right", - "diagonal_left", - "flower", - "gradient", - "gradient_up", - "half_horizontal_bottom", - "half_horizontal", - "half_vertical", - "half_vertical_right", - "thing", - "rhombus", - "skull", - "small_stripes", - "square_bottom_left", - "square_bottom_right", - "square_top_left", - "square_top_right", - "straight_cross", - "stripe_bottom", - "stripe_center", - "stripe_downleft", - "stripe_downright", - "stripe_left", - "stripe_middle", - "stripe_right", - "stripe_top", - "triangle_bottom", - "triangle_top", - "triangles_bottom", - "triangles_top", -} - -local colors_reverse = {} -for k,v in pairs(mcl_banners.colors) do - colors_reverse["mcl_banners:banner_item_"..v[1]] = k -end - -function mcl_banners.color_reverse(itemname) - return colors_reverse[itemname] -end - --- Add pattern/emblazoning crafting recipes -dofile(modpath.."/patterncraft.lua") - --- Overlay ratios (0-255) -local base_color_ratio = 224 -local layer_ratio = 255 - -local standing_banner_entity_offset = { x=0, y=-0.499, z=0 } -local hanging_banner_entity_offset = { x=0, y=-1.7, z=0 } - -local function rotation_level_to_yaw(rotation_level) - return (rotation_level * (math.pi/8)) + math.pi -end - -local function on_dig_banner(pos, node, digger) - -- Check protection - local name = digger:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - -- Drop item - local meta = minetest.get_meta(pos) - local item = meta:get_inventory():get_stack("banner", 1) - if not item:is_empty() then - minetest.handle_node_drops(pos, {item:to_string()}, digger) - else - minetest.handle_node_drops(pos, {"mcl_banners:banner_item_white"}, digger) - end - -- Remove node - minetest.remove_node(pos) -end - -local function on_destruct_banner(pos, hanging) - local offset, nodename - if hanging then - offset = hanging_banner_entity_offset - nodename = "mcl_banners:hanging_banner" - else - offset = standing_banner_entity_offset - nodename = "mcl_banners:standing_banner" - end - -- Find this node's banner entity and remove it - local checkpos = vector.add(pos, offset) - local objects = minetest.get_objects_inside_radius(checkpos, 0.5) - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and ent.name == nodename then - v:remove() - end - end -end - -local function on_destruct_standing_banner(pos) - return on_destruct_banner(pos, false) -end - -local function on_destruct_hanging_banner(pos) - return on_destruct_banner(pos, true) -end - -function mcl_banners.make_banner_texture(base_color, layers) - local colorize - if mcl_banners.colors[base_color] then - colorize = mcl_banners.colors[base_color][4] - end - if colorize then - -- Base texture with base color - local base = "(mcl_banners_banner_base.png^[mask:mcl_banners_base_inverted.png)^((mcl_banners_banner_base.png^[colorize:"..colorize..":"..base_color_ratio..")^[mask:mcl_banners_base.png)" - - -- Optional pattern layers - if layers then - local finished_banner = base - for l=1, #layers do - local layerinfo = layers[l] - local pattern = "mcl_banners_" .. layerinfo.pattern .. ".png" - local color = mcl_banners.colors[layerinfo.color][4] - - -- Generate layer texture - local layer = "(("..pattern.."^[colorize:"..color..":"..layer_ratio..")^[mask:"..pattern..")" - - finished_banner = finished_banner .. "^" .. layer - end - return finished_banner - end - return base - else - return "mcl_banners_banner_base.png" - end -end - -local function spawn_banner_entity(pos, hanging, itemstack) - local banner - if hanging then - banner = minetest.add_entity(pos, "mcl_banners:hanging_banner") - else - banner = minetest.add_entity(pos, "mcl_banners:standing_banner") - end - if banner == nil then - return banner - end - local imeta = itemstack:get_meta() - local layers_raw = imeta:get_string("layers") - local layers = minetest.deserialize(layers_raw) - local colorid = mcl_banners.color_reverse(itemstack:get_name()) - banner:get_luaentity():_set_textures(colorid, layers) - local mname = imeta:get_string("name") - if mname and mname ~= "" then - banner:get_luaentity()._item_name = mname - banner:get_luaentity()._item_description = imeta:get_string("description") - end - - return banner -end - -local function respawn_banner_entity(pos, node, force) - local hanging = node.name == "mcl_banners:hanging_banner" - local offset - if hanging then - offset = hanging_banner_entity_offset - else - offset = standing_banner_entity_offset - end - -- Check if a banner entity already exists - local bpos = vector.add(pos, offset) - local objects = minetest.get_objects_inside_radius(bpos, 0.5) - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and (ent.name == "mcl_banners:standing_banner" or ent.name == "mcl_banners:hanging_banner") then - if force then - v:remove() - else - return - end - end - end - -- Spawn new entity - local meta = minetest.get_meta(pos) - local banner_item = meta:get_inventory():get_stack("banner", 1) - local banner_entity = spawn_banner_entity(bpos, hanging, banner_item) - - -- Set rotation - local rotation_level = meta:get_int("rotation_level") - local final_yaw = rotation_level_to_yaw(rotation_level) - banner_entity:set_yaw(final_yaw) -end - --- Banner nodes. --- These are an invisible nodes which are only used to destroy the banner entity. --- All the important banner information (such as color) is stored in the entity. --- It is used only used internally. - --- Standing banner node --- This one is also used for the help entry to avoid spamming the help with 16 entries. -minetest.register_node("mcl_banners:standing_banner", { - _doc_items_entry_name = S("Banner"), - _doc_items_image = "mcl_banners_item_base.png^mcl_banners_item_overlay.png", - _doc_items_longdesc = S("Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting."), - _doc_items_usagehelp = S("Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.").."\n".. -S("You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer."), - walkable = false, - is_ground_content = false, - paramtype = "light", - sunlight_propagates = true, - drawtype = "nodebox", - -- Nodebox is drawn as fallback when the entity is missing, so that the - -- banner node is never truly invisible. - -- If the entity is drawn, the nodebox disappears within the real banner mesh. - node_box = { - type = "fixed", - fixed = { -1/32, -0.49, -1/32, 1/32, 1.49, 1/32 }, - }, - -- This texture is based on the banner base texture - tiles = { "mcl_banners_fallback_wood.png" }, - - inventory_image = "mcl_banners_item_base.png", - wield_image = "mcl_banners_item_base.png", - - selection_box = {type = "fixed", fixed= {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, - groups = {axey=1,handy=1, attached_node = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, material_wood=1, dig_by_piston=1, flammable=-1 }, - stack_max = 16, - sounds = node_sounds, - drop = "", -- Item drops are handled in entity code - - on_dig = on_dig_banner, - on_destruct = on_destruct_standing_banner, - on_punch = function(pos, node) - respawn_banner_entity(pos, node) - end, - _mcl_hardness = 1, - _mcl_blast_resistance = 1, - on_rotate = function(pos, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta = minetest.get_meta(pos) - local rot = meta:get_int("rotation_level") - rot = (rot - 1) % 16 - meta:set_int("rotation_level", rot) - respawn_banner_entity(pos, node, true) - return true - else - return false - end - end, -}) - --- Hanging banner node -minetest.register_node("mcl_banners:hanging_banner", { - walkable = false, - is_ground_content = false, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - drawtype = "nodebox", - inventory_image = "mcl_banners_item_base.png", - wield_image = "mcl_banners_item_base.png", - tiles = { "mcl_banners_fallback_wood.png" }, - node_box = { - type = "wallmounted", - wall_side = { -0.49, 0.41, -0.49, -0.41, 0.49, 0.49 }, - wall_top = { -0.49, 0.41, -0.49, -0.41, 0.49, 0.49 }, - wall_bottom = { -0.49, -0.49, -0.49, -0.41, -0.41, 0.49 }, - }, - selection_box = {type = "wallmounted", wall_side = {-0.5, -0.5, -0.5, -4/16, 0.5, 0.5} }, - groups = {axey=1,handy=1, attached_node = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, material_wood=1, flammable=-1 }, - stack_max = 16, - sounds = node_sounds, - drop = "", -- Item drops are handled in entity code - - on_dig = on_dig_banner, - on_destruct = on_destruct_hanging_banner, - on_punch = function(pos, node) - respawn_banner_entity(pos, node) - end, - _mcl_hardness = 1, - _mcl_blast_resistance = 1, - on_rotate = function(pos, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local r = screwdriver.rotate.wallmounted(pos, node, mode) - node.param2 = r - minetest.swap_node(pos, node) - local meta = minetest.get_meta(pos) - local rot = 0 - if node.param2 == 2 then - rot = 12 - elseif node.param2 == 3 then - rot = 4 - elseif node.param2 == 4 then - rot = 0 - elseif node.param2 == 5 then - rot = 8 - end - meta:set_int("rotation_level", rot) - respawn_banner_entity(pos, node, true) - return true - else - return false - end - end, -}) - --- for pattern_name, pattern in pairs(patterns) do -for colorid, colortab in pairs(mcl_banners.colors) do - for i, pattern_name in ipairs(pattern_names) do - local itemid = colortab[1] - local desc = colortab[2] - local wool = colortab[3] - local colorize = colortab[4] - - local itemstring - if pattern_name == "" then - itemstring = "mcl_banners:banner_item_" .. itemid - else - itemstring = "mcl_banners:banner_preview" .. "_" .. pattern_name .. "_" .. itemid - end - - local inv - local base - local finished_banner - if pattern_name == "" then - if colorize then - -- Base texture with base color - base = "mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:"..colorize..")^[resize:32x32" - else - base = "mcl_banners_item_base.png^mcl_banners_item_overlay.png^[resize:32x32" - end - finished_banner = base - else - -- Banner item preview background - base = "mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:#CCCCCC)^[resize:32x32" - - desc = S("Preview Banner") - - local pattern = "mcl_banners_" .. pattern_name .. ".png" - local color = colorize - - -- Generate layer texture - - -- TODO: The layer texture in the icon is squished - -- weirdly because the width/height aspect ratio of - -- the banner icon is 1:1.5, whereas the aspect ratio - -- of the banner entity is 1:2. A solution would be to - -- redraw the pattern textures as low-resolution pixel - -- art and use that instead. - - local layer = "(([combine:20x40:-2,-2="..pattern.."^[resize:16x24^[colorize:"..color..":"..layer_ratio.."))" - - function escape(text) - return text:gsub("%^", "\\%^"):gsub(":", "\\:") -- :gsub("%(", "\\%("):gsub("%)", "\\%)") - end - - finished_banner = "[combine:32x32:0,0=" .. escape(base) .. ":8,4=" .. escape(layer) - end - - inv = finished_banner - - -- Banner items. - -- This is the player-visible banner item. It comes in 16 base colors with a lot of patterns. - -- The multiple items are really only needed for the different item images. - -- TODO: Combine the items into only 1 item. - local groups - if pattern_name == "" then - groups = { banner = 1, deco_block = 1, flammable = -1 } - else - groups = { not_in_creative_inventory = 1 } - end - - minetest.register_craftitem(itemstring, { - description = desc, - _tt_help = S("Paintable decoration"), - _doc_items_create_entry = false, - inventory_image = inv, - wield_image = inv, - -- Banner group groups together the banner items, but not the nodes. - -- Used for crafting. - groups = groups, - stack_max = 16, - - on_place = function(itemstack, placer, pointed_thing) - local above = pointed_thing.above - local under = pointed_thing.under - - local node_under = minetest.get_node(under) - if placer and not placer:get_player_control().sneak then - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack - end - - if minetest.get_modpath("mcl_cauldrons") then - -- Use banner on cauldron to remove the top-most layer. This reduces the water level by 1. - local new_node - if node_under.name == "mcl_cauldrons:cauldron_3" then - new_node = "mcl_cauldrons:cauldron_2" - elseif node_under.name == "mcl_cauldrons:cauldron_2" then - new_node = "mcl_cauldrons:cauldron_1" - elseif node_under.name == "mcl_cauldrons:cauldron_1" then - new_node = "mcl_cauldrons:cauldron" - elseif node_under.name == "mcl_cauldrons:cauldron_3r" then - new_node = "mcl_cauldrons:cauldron_2r" - elseif node_under.name == "mcl_cauldrons:cauldron_2r" then - new_node = "mcl_cauldrons:cauldron_1r" - elseif node_under.name == "mcl_cauldrons:cauldron_1r" then - new_node = "mcl_cauldrons:cauldron" - end - if new_node then - local imeta = itemstack:get_meta() - local layers_raw = imeta:get_string("layers") - local layers = minetest.deserialize(layers_raw) - if type(layers) == "table" and #layers > 0 then - table.remove(layers) - imeta:set_string("layers", minetest.serialize(layers)) - local newdesc = mcl_banners.make_advanced_banner_description(itemstack:get_definition().description, layers) - local mname = imeta:get_string("name") - -- Don't change description if item has a name - if mname == "" then - imeta:set_string("description", newdesc) - end - end - - -- Washing off reduces the water level by 1. - -- (It is possible to waste water if the banner had 0 layers.) - minetest.set_node(pointed_thing.under, {name=new_node}) - - -- Play sound (from mcl_potions mod) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - - return itemstack - end - end - end - - -- Place the node! - local hanging = false - - -- Standing or hanging banner. The placement rules are enforced by the node definitions - local _, success = minetest.item_place_node(ItemStack("mcl_banners:standing_banner"), placer, pointed_thing) - if not success then - -- Forbidden on ceiling - if pointed_thing.under.y ~= pointed_thing.above.y then - return itemstack - end - _, success = minetest.item_place_node(ItemStack("mcl_banners:hanging_banner"), placer, pointed_thing) - if not success then - return itemstack - end - hanging = true - end - local place_pos - if minetest.registered_nodes[node_under.name].buildable_to then - place_pos = under - else - place_pos = above - end - local bnode = minetest.get_node(place_pos) - if bnode.name ~= "mcl_banners:standing_banner" and bnode.name ~= "mcl_banners:hanging_banner" then - minetest.log("error", "[mcl_banners] The placed banner node is not what the mod expected!") - return itemstack - end - local meta = minetest.get_meta(place_pos) - local inv = meta:get_inventory() - inv:set_size("banner", 1) - local store_stack = ItemStack(itemstack) - store_stack:set_count(1) - inv:set_stack("banner", 1, store_stack) - - -- Spawn entity - local entity_place_pos - if hanging then - entity_place_pos = vector.add(place_pos, hanging_banner_entity_offset) - else - entity_place_pos = vector.add(place_pos, standing_banner_entity_offset) - end - local banner_entity = spawn_banner_entity(entity_place_pos, hanging, itemstack) - -- Set rotation - local final_yaw, rotation_level - if hanging then - local pdir = vector.direction(pointed_thing.under, pointed_thing.above) - final_yaw = minetest.dir_to_yaw(pdir) - if pdir.x > 0 then - rotation_level = 4 - elseif pdir.z > 0 then - rotation_level = 8 - elseif pdir.x < 0 then - rotation_level = 12 - else - rotation_level = 0 - end - else - -- Determine the rotation based on player's yaw - local yaw = placer:get_look_horizontal() - -- Select one of 16 possible rotations (0-15) - rotation_level = round((yaw / (math.pi*2)) * 16) - if rotation_level >= 16 then - rotation_level = 0 - end - final_yaw = rotation_level_to_yaw(rotation_level) - end - meta:set_int("rotation_level", rotation_level) - - if banner_entity then - banner_entity:set_yaw(final_yaw) - end - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - minetest.sound_play({name="default_place_node_hard", gain=1.0}, {pos = place_pos}, true) - - return itemstack - end, - - _mcl_generate_description = function(itemstack) - local meta = itemstack:get_meta() - local layers_raw = meta:get_string("layers") - if not layers_raw then - return nil - end - local layers = minetest.deserialize(layers_raw) - local desc = itemstack:get_definition().description - local newdesc = mcl_banners.make_advanced_banner_description(desc, layers) - meta:set_string("description", newdesc) - return newdesc - end, - }) - - if mod_mcl_core and minetest.get_modpath("mcl_wool") and pattern_name == "" then - minetest.register_craft({ - output = itemstring, - recipe = { - { wool, wool, wool }, - { wool, wool, wool }, - { "", "mcl_core:stick", "" }, - } - }) - end - - if mod_doc then - -- Add item to node alias - doc.add_entry_alias("nodes", "mcl_banners:standing_banner", "craftitems", itemstring) - end - end -end - -if mod_doc then - -- Add item to node alias - doc.add_entry_alias("nodes", "mcl_banners:standing_banner", "nodes", "mcl_banners:hanging_banner") -end - - --- Banner entities. -local entity_standing = { - physical = false, - collide_with_objects = false, - visual = "mesh", - mesh = "amc_banner.b3d", - visual_size = { x=2.499, y=2.499 }, - textures = {mcl_banners.make_banner_texture()}, - pointable = false, - - _base_color = nil, -- base color of banner - _layers = nil, -- table of layers painted over the base color. - -- This is a table of tables with each table having the following fields: - -- color: layer color ID (see colors table above) - -- pattern: name of pattern (see list above) - - get_staticdata = function(self) - local out = { _base_color = self._base_color, _layers = self._layers, _name = self._name } - return minetest.serialize(out) - end, - on_activate = function(self, staticdata) - if staticdata and staticdata ~= "" then - local inp = minetest.deserialize(staticdata) - self._base_color = inp._base_color - self._layers = inp._layers - self._name = inp._name - self.object:set_properties({ - textures = {mcl_banners.make_banner_texture(self._base_color, self._layers)}, - }) - end - -- Make banner slowly swing - self.object:set_animation({x=0, y=80}, 25) - self.object:set_armor_groups({immortal=1}) - end, - - -- Set the banner textures. This function can be used by external mods. - -- Meaning of parameters: - -- * self: Lua entity reference to entity. - -- * other parameters: Same meaning as in mcl_banners.make_banner_texture - _set_textures = function(self, base_color, layers) - if base_color then - self._base_color = base_color - end - if layers then - self._layers = layers - end - self.object:set_properties({textures = {mcl_banners.make_banner_texture(self._base_color, self._layers)}}) - end, -} -minetest.register_entity("mcl_banners:standing_banner", entity_standing) - -local entity_hanging = table.copy(entity_standing) -entity_hanging.mesh = "amc_banner_hanging.b3d" -minetest.register_entity("mcl_banners:hanging_banner", entity_hanging) - --- FIXME: Prevent entity destruction by /clearobjects -minetest.register_lbm({ - label = "Respawn banner entities", - name = "mcl_banners:respawn_entities", - run_at_every_load = true, - nodenames = {"mcl_banners:standing_banner", "mcl_banners:hanging_banner"}, - action = function(pos, node) - respawn_banner_entity(pos, node) - end, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:banner", - burntime = 15, -}) - diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr deleted file mode 100644 index d5077dc75..000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Weißes Banner -White=weiß -Grey Banner=Graues Banner -Grey=grau -Light Grey Banner=Hellgraues Banner -Light Grey=hellgrau -Black Banner=Schwarzes Banner -Black=schwarz -Red Banner=Rotes Banner -Red=rot -Yellow Banner=Gelbes Banner -Yellow=gelb -Green Banner=Grünes Banner -Green=grün -Cyan Banner=Türkises Banner -Cyan=türkis -Blue Banner=Blaues Banner -Blue=blau -Magenta Banner=Magenta Banner -Magenta=magenta -Orange Banner=Orange Banner -Orange=orange -Purple Banner=Violettes Banner -Violet=violett -Brown Banner=Braunes Banner -Brown=braun -Pink Banner=Rosa Banner -Pink=rosa -Lime Banner=Lindgrünes Banner -Lime=lindgrün -Light Blue Banner=Hellblaues Banner -Light Blue=hellblau -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Banner sind hohe farbige dekorative Blöcke. Sie können auf dem Boden und an Wände platziert werden. Banner können mit einer Vielzahl von Mustern mit Hilfe von Farbstoffen in der Fertigung bemalt werden. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Benutzen Sie die Fertigung, um ein Muster auf einem Banner zu malen. Bemalte Banner können erneut bemalt werden, um verschiedene Muster zu ergeben. Sie können bis zu 12 Schichten auf einen Banner malen. Wenn ein Banner einen Farbverlauf hat, sind nur 3 Schichten möglich. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Sie können ein Muster eines Banners kopieren, indem Sie zwei Banner der selben Grundfarbe in das Fertigungsgitter platzieren: Das eine muss bemalt sein, das andere leer. Außerdem können Sie ein Banner an einem Kessel mit Wasser benutzen, um seine oberste Schicht abzuwaschen. -@1 Bordure=Bord (@1) -@1 Bricks=Ziegel (@1) -@1 Roundel=Kugel (@1) -@1 Creeper Charge=Creeper-Figur (@1) -@1 Saltire=Andreaskreuz (@1) -@1 Bordure Indented=Gewellter Bord (@1) -@1 Per Bend Inverted=Schräglinke umgekehrte Teilung (@1) -@1 Per Bend Sinister Inverted=Schrägrechte umgekehrte Teilung (@1) -@1 Per Bend=Schräglinke Teilung (@1) -@1 Per Bend Sinister=Schrägrechte Teilung (@1) -@1 Flower Charge=Blumenfigur (@1) -@1 Gradient=Farbverlauf (@1) -@1 Base Gradient=Fußfarbverlauf (@1) -@1 Per Fess Inverted=Umgekehrte Teilung (@1) -@1 Per Fess=Teilung (@1) -@1 Per Pale=Spaltung (@1) -@1 Per Pale Inverted=Umgekehrte Spaltung (@1) -@1 Thing Charge=Dingsfigur (@1) -@1 Lozenge=Raute (@1) -@1 Skull Charge=Totenkopffigur (@1) -@1 Paly=Pfähle (@1) -@1 Base Dexter Canton=Rechtes Untereck (@1) -@1 Base Sinister Canton=Linkes Untereck (@1) -@1 Chief Dexter Canton=Rechtes Obereck (@1) -@1 Chief Sinister Canton=Linkes Obereck (@1) -@1 Cross=Kreuz (@1) -@1 Base=Fuß (@1) -@1 Pale=Pfahl (@1) -@1 Bend Sinister=Schräglinksbalken (@1) -@1 Bend=Schrägbalken (@1) -@1 Pale Dexter=Rechte Flanke (@1) -@1 Fess=Balken (@1) -@1 Pale Sinister=Linke Flanke (@1) -@1 Chief=Haupt (@1) -@1 Chevron=Sparren (@1) -@1 Chevron Inverted=Gegensparren (@1) -@1 Base Indented=Gezackter Fuß (@1) -@1 Chief Indented=Gezacktes Haupt (@1) -And one additional layer=Und eine zusätzliche Schicht -And @1 additional layers=Und @1 zusätzliche Schichten -Paintable decoration=Bemalbare Dekoration diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.es.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.es.tr deleted file mode 100644 index 1368bc5a1..000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.es.tr +++ /dev/null @@ -1,76 +0,0 @@ -# textdomain: mcl_banners -White Banner=Estandarte blanco -White=Blanco -Grey Banner=Estandarte gris -Grey=Gris -Light Grey Banner=Estandarte gris claro -Light Grey=Gris claro -Black Banner=Estandarte negro -Black=Negro -Red Banner=Estandarte roja -Red=Rojo -Yellow Banner=Estandarte amarilla -Yellow=Amarillo -Green Banner=Estandarte verde -Green=Verde -Cyan Banner=Estandarte cian -Cyan=Cian -Blue Banner=Estandarte azul -Blue=Azul -Magenta Banner=Estandarte magenta -Magenta=Magenta -Orange Banner=Estandarte naranja -Orange=Naranja -Purple Banner=Estandarte morada -Purple=Morado -Brown Banner=Estandarte marrón -Brown=Marrón -Pink Banner=Estandarte rosa -Pink=Rosa -Lime Banner=Estandarte verde lima -Lime=Verde lima -Light Blue Banner=Estandarte azul claro -Light Blue=Azul claro -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Los estandartes son bloques decorativos altos y coloridos. Se pueden colocar en el suelo y en las paredes. Los estandartes se pueden estampar con una variedad de patrones usando mucho tinte en la elaboración. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Usa la elaboración para dibujar un patrón en la parte superior del estandarte. Los estandartes estampados pueden volver a estamparse para combinar varios patrones. Puede dibujar hasta 12 capas en un estandarte de esa manera. Si la pancarta incluye un degradado, solo son posibles 3 capas. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Puede copiar el patrón de un estandarte colocando dos estandartes del mismo color en la cuadrícula de fabricación: una debe ser estampada, la otra debe estar limpia. Finalmente, puede usar un estandarte en un caldero con agua para lavar su capa superior. -@1 Bordure=Borde (@1) -@1 Bricks=Bloque (@1) -@1 Roundel=Medallón (@1) -@1 Creeper Charge=Carga de enredadera (@1) -@1 Saltire=Saltire (@1) -@1 Bordure Indented=Sangrado del borde (@1) -@1 Per Bend Inverted=Curva invertida (@1) -@1 Per Bend Sinister Inverted=Curva siniestra invertida (@1) -@1 Per Bend=Curva (@1) -@1 Per Bend Sinister=Curva siniestra (@1) -@1 Flower Charge=Carga de la flor (@1) -@1 Gradient=Farbverlauf (@1) -@1 Base Gradient=Zócalo Degradado (@1) -@1 Per Fess Inverted=División invertida (@1) -@1 Per Fess=División (@1) -@1 Per Pale=Palidez (@1) -@1 Per Pale Inverted=Palidez invertida (@1) -@1 Thing Charge=Carga de objeto (@1) -@1 Lozenge=Rombo (@1) -@1 Skull Charge=Carga de calabera (@1) -@1 Paly=Poster (@1) -@1 Base Dexter Canton=Zócalo inferior derecho (@1) -@1 Base Sinister Canton=Zócalo inferior izquierdo (@1) -@1 Chief Dexter Canton=Encabezado superior derecho (@1) -@1 Chief Sinister Canton=Encabezado superior izquierdo (@1) -@1 Cross=Cruce (@1) -@1 Base=Zócalo (@1) -@1 Pale=Palidez (@1) -@1 Bend Sinister=Curva siniestra (@1) -@1 Bend=Curva (@1) -@1 Pale Dexter=Palidez derecho (@1) -@1 Fess=División (@1) -@1 Pale Sinister=Palidez siniestra (@1) -@1 Chief=Encabezado (@1) -@1 Chevron=Viga (@1) -@1 Chevron Inverted=Viga invertida (@1) -@1 Base Indented=Zócalo sangrada (@1) -@1 Chief Indented=Sangrado del encabezado (@1) -And one additional layer=Y una capa adicional -And @1 additional layers=Y @1 capas adicionales diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr deleted file mode 100644 index cadf37c37..000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Bannière Blanche -White=Blanc -Grey Banner=Bannière Grise -Grey=Gris -Light Grey Banner=Bannière Gris Clair -Light Grey=Gris Clair -Black Banner=Bannière Noir -Black=Noir -Red Banner=Bannière Rouge -Red=Rouge -Yellow Banner=Bannière Jaune -Yellow=Jaune -Green Banner=Bannière Verte -Green=Vert -Cyan Banner=Bannière Cyan -Cyan=Cyan -Blue Banner=Bannière Bleue -Blue=Blue -Magenta Banner=Bannière Magenta -Magenta=Magenta -Orange Banner=Bannière Orange -Orange=Orange -Purple Banner=Bannière Violette -Violet=Violet -Brown Banner=Bannière Marron -Brown=Marron -Pink Banner=Bannière Rose -Pink=Rose -Lime Banner=Bannière Vert Clair -Lime=Vert Clair -Light Blue Banner=Bannière Bleue Clair -Light Blue=Bleu Clair -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Les bannières sont de grands blocs décoratifs colorés. Ils peuvent être placés au sol et aux murs. Les bannières peuvent arborées une variété de motifs en utilisant beaucoup de colorant dans l'artisanat. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Utilisez l'artisanat pour dessiner un motif sur le dessus de la bannière. Les bannières blasonnées peuvent être à nouveau blasonnées pour combiner différents motifs. Vous pouvez dessiner jusqu'à 12 couches sur une bannière de cette façon. Si la bannière comprend un dégradé, seulement 3 couches sont possibles. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Vous pouvez copier le motif d'une bannière en plaçant deux bannières de la même couleur dans la grille de fabrication: l'une doit être décorée, l'autre doit être propre. Enfin, vous pouvez utiliser une bannière sur un chaudron avec de l'eau pour laver sa couche la plus haute. -@1 Bordure=Bordure (@1) -@1 Bricks=Blocs (@1) -@1 Roundel=Cocarde (@1) -@1 Creeper Charge=Face de Creeper (@1) -@1 Saltire=Saltire (@1) -@1 Bordure Indented=Bordure en retrait (@1) -@1 Per Bend Inverted=Division inclinée inversé (@1) -@1 Per Bend Sinister Inverted=Division oblique inversé (@1) -@1 Per Bend=Division inclinée (@1) -@1 Per Bend Sinister=Division oblique (@1) -@1 Flower Charge=Figure Fleur (@1) -@1 Gradient=Dégradé (@1) -@1 Base Gradient=Dégradé de couleurs (@1) -@1 Per Fess Inverted=Division inverse (@1) -@1 Per Fess=Division (@1) -@1 Per Pale=Division (@1) -@1 Per Pale Inverted=Division inverse (@1) -@1 Thing Charge=Chose (@ 1) -@1 Lozenge=Rhombus (@1) -@1 Skull Charge=Figure de crâne (@1) -@1 Paly=Pieux (@1) -@1 Base Dexter Canton=Coin inférieur droit (@1) -@1 Base Sinister Canton=Coin inférieur gauche (@1) -@1 Chief Dexter Canton=Coin supérieur droit (@1) -@1 Chief Sinister Canton=Coin supérieur gauche (@1) -@1 Cross=Croix (@1) -@1 Base=Pieds (@1) -@1 Pale=Mise (@1) -@1 Bend Sinister=Barre gauche inclinée (@1) -@1 Bend=Barre inclinée (@1) -@1 Pale Dexter=Flanc droit (@1) -@1 Fess=Bar (@1) -@1 Pale Sinister=Flanc gauche (@1) -@1 Chief=Principal (@1) -@1 Chevron=Chevron (@1) -@1 Chevron Inverted=Contre-chevrons (@1) -@1 Base Indented=Pied dentelé (@1)t -@1 Chief Indented=Tête dentelée (@1) -And one additional layer=Et une couche supplémentaire -And @1 additional layers=Et @1 couches supplémentaires -Paintable decoration=Décoration à peindre diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr deleted file mode 100644 index 9a21c08cf..000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Biały sztandar -White=Biały -Grey Banner=Szary sztandar -Grey=Szary -Light Grey Banner=Jasnoszary sztandar -Light Grey=Jasnoszary -Black Banner=Czarny sztandar -Black=Czarny -Red Banner=Czerwony sztandar -Red=Czerwony -Yellow Banner=Żółty sztandar -Yellow=Żółty -Green Banner=Zielony sztandar -Green=Zielony -Cyan Banner=Błękitny sztandar -Cyan=Błękitny -Blue Banner=Niebieski sztandar -Blue=Niebieski -Magenta Banner=Karmazynowy sztandar -Magenta=Karmazynowy -Orange Banner=Pomarańczowy sztandar -Orange=Pomarańczowy -Purple Banner=Fioletowy sztandar -Violet=Fioletowy -Brown Banner=Brązowy sztandar -Brown=Brązowy -Pink Banner=Różowy sztandar -Pink=Różowy -Lime Banner=Jasnozielony sztandar -Lime=Jasnozielony -Light Blue Banner=Jasnoniebieski sztandar -Light Blue=Jasnoniebieski -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Sztandary są kolorowymi dekoracyjnymi blokami. Mogą być postawione na ziemi i na ścianach. Sztandary mogą być upiększone różnymi wzorami przy użyciu sporej ilości farby podczas wytwarzania. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Użyj wytwarzania aby narysować wzór na górze sztandaru. Upiększone sztandary mogą być upiększone ponownie by połączyć kilka wzorów. Możesz narysować do 12 warstw na sztandarze w ten sposób. Jeśli baner zawiera gradient tylko 3 warstwy są możliwe. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Możesz skopiować wzór sztandaru kładąc dwa sztandary tego samego koloru w siatce wytwarzania. Jeden z nich musi być upiększony, drugi czysty. Możesz również użyć sztandar na kociołku z wodą aby zmyć górną warstwę. -@1 Bordure=@1 z obramowaniem -@1 Bricks=@1 murowany -@1 Roundel=@1 krąg -@1 Creeper Charge=@1 creeper -@1 Saltire=@1 skośny krzyż -@1 Bordure Indented=@1 z ząbkowanym obramowaniem -@1 Per Bend Inverted=@1 z lewą dolną połową -@1 Per Bend Sinister Inverted=@1 z prawą dolną połową -@1 Per Bend=@1 z prawą górną połową -@1 Per Bend Sinister=@1 z lewą górną połową -@1 Flower Charge=@1 kwiat -@1 Gradient=@1 gradient -@1 Base Gradient=@1 odwrócony -@1 Per Fess Inverted=@1 z dolną połową -@1 Per Fess=@1 z górną połową -@1 Per Pale=@1 z lewą połową -@1 Per Pale Inverted=@1 z prawą połową -@1 Thing Charge=@1 kształt czegoś -@1 Lozenge=@1 romb -@1 Skull Charge=@1 kształt czaszki -@1 Paly=@1 z pionowymi paskami -@1 Base Dexter Canton=@1 lewy dolny róg -@1 Base Sinister Canton=@1 prawy dolny róg -@1 Chief Dexter Canton=@1 lewy górny róg -@1 Chief Sinister Canton=@1 prawy górny róg -@1 Cross=@1 krzyż -@1 Base=@1 dolny -@1 Pale=@1 pionowy pasek -@1 Bend Sinister=@1 odwrócony skos -@1 Bend=@1 skos -@1 Pale Dexter=@1 lewy -@1 Fess=@1 poziomy pasek -@1 Pale Sinister=@1 prawy -@1 Chief=@1 górny -@1 Chevron=@1 dolny trójkąt -@1 Chevron Inverted=@1 górny trójkąt -@1 Base Indented=@1 ząbkowany dolny -@1 Chief Indented=@1 ząbkowany górny -And one additional layer=I jedna dodatkowa warstwa -And @1 additional layers=I @1 dodatkowych warstw -Paintable decoration=Dekoracja do malowania diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr deleted file mode 100644 index a6cee5a67..000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Белый флаг -White=Белый -Grey Banner=Серый флаг -Grey=Серый -Light Grey Banner=Светло-серый флаг -Light Grey=Светло-серый -Black Banner=Чёрный флаг -Black=Чёрный -Red Banner=Красный флаг -Red=Красный -Yellow Banner=Жёлтый флаг -Yellow=Жёлтый -Green Banner=Зелёный флаг -Green=Зелёный -Cyan Banner=Голубой флаг -Cyan=Голубой -Blue Banner=Синий флаг -Blue=Синий -Magenta Banner=Фиолетовый флаг -Magenta=Фиолетовый -Orange Banner=Оранжевый флаг -Orange=Оранжевый -Purple Banner=Пурпурный флаг -Violet=Пурпурный -Brown Banner=Коричневый флаг -Brown=Коричневый -Pink Banner=Розовый флаг -Pink=Розовый -Lime Banner=Зелёный лаймовый флаг -Lime=Зелёный лаймовый -Light Blue Banner=Светло-голубой флаг -Light Blue=Светло-голубой -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Баннеры - высокие цветные декоративные блоки. Их можно размещать на полу и на стенах. Флаги можно украшать разнообразными узорами при помощью красителей во время создания. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Используйте крафтинг, чтобы нарисовать узор поверх флага. Украшенные флаги можно украсить повторно, чтобы сочетать разные узоры. Таким способом вы можете нарисовать до 12 слоев на одном флаге. Если флаг содержит градиент, возможно только 3 слоя. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Вы можете скопировать рисунок флага, поместив два флага одного цвета в крафтинговую решётку - один должен быть украшенный, другой - чистый. Наконец, вы можете [использовать] флаг на котле с водой для смывания верхнего слоя. -@1 Bordure=@1 Кайма -@1 Bricks=@1 Кирпичи -@1 Roundel=@1 Рондо -@1 Creeper Charge=@1 Атака крипера -@1 Saltire=@1 Андреевский крест -@1 Bordure Indented=@1 Кайма с отступом -@1 Per Bend Inverted=@1 Повторяющийся изгиб поворотом -@1 Per Bend Sinister Inverted=@1 Повторяющийся зловещий изгиб с поворотом -@1 Per Bend=@1 Повторяющийся изгиб -@1 Per Bend Sinister=@1 Зловещий изгиб -@1 Flower Charge=@1 Забота о цветке -@1 Gradient=@1 Градиент -@1 Base Gradient=@1 Основной градиент -@1 Per Fess Inverted=@1 Обратное деление щита -@1 Per Fess=@1 Деление щита -@1 Per Pale=@1 Вертикальное деление щита -@1 Per Pale Inverted=@1 Вертикальное обратное деление -@1 Thing Charge=@1 Атака существа -@1 Lozenge=@1 Ромб -@1 Skull Charge=@1 Атака черепа -@1 Paly=@1 Бледный -@1 Base Dexter Canton=@1 Основной правый кант -@1 Base Sinister Canton=@1 Основной зловещий кант -@1 Chief Dexter Canton=@1 Главный правый кант -@1 Chief Sinister Canton=@1 Главный зловещий кант -@1 Cross=@1 Крест -@1 Base=@1 Основа -@1 Pale=@1 Черта -@1 Bend Sinister=@1 Зловещий изгиб -@1 Bend=@1 Изгиб -@1 Pale Dexter=@1 Черты справа -@1 Fess=@1 Разделение -@1 Pale Sinister=@1 Бледный зловещий -@1 Chief=@1 Главный -@1 Chevron=@1 Шеврон -@1 Chevron Inverted=@1 Инвертированный шеврон -@1 Base Indented=@1 Инвертированный основной -@1 Chief Indented=@1 Инвертированный главный -And one additional layer=И один индивидуальный слой -And @1 additional layers=И @1 дополнительныйх слойёв -Paintable decoration=Художественное украшение diff --git a/mods/ITEMS/mcl_banners/locale/template.txt b/mods/ITEMS/mcl_banners/locale/template.txt deleted file mode 100644 index cb8ec0b0c..000000000 --- a/mods/ITEMS/mcl_banners/locale/template.txt +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner= -White= -Grey Banner= -Grey= -Light Grey Banner= -Light Grey= -Black Banner= -Black= -Red Banner= -Red= -Yellow Banner= -Yellow= -Green Banner= -Green= -Cyan Banner= -Cyan= -Blue Banner= -Blue= -Magenta Banner= -Magenta= -Orange Banner= -Orange= -Purple Banner= -Violet= -Brown Banner= -Brown= -Pink Banner= -Pink= -Lime Banner= -Lime= -Light Blue Banner= -Light Blue= -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.= -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.= -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.= -@1 Bordure= -@1 Bricks= -@1 Roundel= -@1 Creeper Charge= -@1 Saltire= -@1 Bordure Indented= -@1 Per Bend Inverted= -@1 Per Bend Sinister Inverted= -@1 Per Bend= -@1 Per Bend Sinister= -@1 Flower Charge= -@1 Gradient= -@1 Base Gradient= -@1 Per Fess Inverted= -@1 Per Fess= -@1 Per Pale= -@1 Per Pale Inverted= -@1 Thing Charge= -@1 Lozenge= -@1 Skull Charge= -@1 Paly= -@1 Base Dexter Canton= -@1 Base Sinister Canton= -@1 Chief Dexter Canton= -@1 Chief Sinister Canton= -@1 Cross= -@1 Base= -@1 Pale= -@1 Bend Sinister= -@1 Bend= -@1 Pale Dexter= -@1 Fess= -@1 Pale Sinister= -@1 Chief= -@1 Chevron= -@1 Chevron Inverted= -@1 Base Indented= -@1 Chief Indented= -And one additional layer= -And @1 additional layers= -Paintable decoration= diff --git a/mods/ITEMS/mcl_banners/mod.conf b/mods/ITEMS/mcl_banners/mod.conf deleted file mode 100644 index 8c3117206..000000000 --- a/mods/ITEMS/mcl_banners/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_banners -author = 22i -description = Adds decorative banners in different colors which can be emblazoned with patterns, offering a countless number of combinations. -depends = mcl_colors -optional_depends = mcl_sounds, mcl_core, mcl_wool, mcl_cauldrons, doc, screwdriver diff --git a/mods/ITEMS/mcl_banners/models/amc_banner.b3d b/mods/ITEMS/mcl_banners/models/amc_banner.b3d deleted file mode 100644 index 0e0d6d1c9..000000000 Binary files a/mods/ITEMS/mcl_banners/models/amc_banner.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/models/amc_banner_hanging.b3d b/mods/ITEMS/mcl_banners/models/amc_banner_hanging.b3d deleted file mode 100644 index 86ec07a03..000000000 Binary files a/mods/ITEMS/mcl_banners/models/amc_banner_hanging.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/patterncraft.lua b/mods/ITEMS/mcl_banners/patterncraft.lua deleted file mode 100644 index 767235b1e..000000000 --- a/mods/ITEMS/mcl_banners/patterncraft.lua +++ /dev/null @@ -1,558 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local N = function(s) return s end - --- Pattern crafting. This file contains the code for crafting all the --- emblazonings you can put on the banners. It's quite complicated; --- run-of-the-mill crafting won't work here. - --- Maximum number of layers which can be put on a banner by crafting. -local max_layers_crafting = 12 - --- Max. number lines in the descriptions for the banner layers. --- This is done to avoid huge tooltips. -local max_layer_lines = 6 - --- List of patterns with crafting rules -local d = "group:dye" -- dye -local e = "" -- empty slot (one of them must contain the banner) -local patterns = { - ["border"] = { - name = N("@1 Bordure"), - { d, d, d }, - { d, e, d }, - { d, d, d }, - }, - ["bricks"] = { - name = N("@1 Bricks"), - type = "shapeless", - { e, "mcl_core:brick_block", d }, - }, - ["circle"] = { - name = N("@1 Roundel"), - { e, e, e }, - { e, d, e }, - { e, e, e }, - }, - ["creeper"] = { - name = N("@1 Creeper Charge"), - type = "shapeless", - { e, "mcl_heads:creeper", d }, - }, - ["cross"] = { - name = N("@1 Saltire"), - { d, e, d }, - { e, d, e }, - { d, e, d }, - }, - ["curly_border"] = { - name = N("@1 Bordure Indented"), - type = "shapeless", - { e, "mcl_core:vine", d }, - }, - ["diagonal_up_left"] = { - name = N("@1 Per Bend Inverted"), - { e, e, e }, - { d, e, e }, - { d, d, e }, - }, - ["diagonal_up_right"] = { - name = N("@1 Per Bend Sinister Inverted"), - { e, e, e }, - { e, e, d }, - { e, d, d }, - }, - ["diagonal_right"] = { - name = N("@1 Per Bend"), - { e, d, d }, - { e, e, d }, - { e, e, e }, - }, - ["diagonal_left"] = { - name = N("@1 Per Bend Sinister"), - { d, d, e }, - { d, e, e }, - { e, e, e }, - }, - ["flower"] = { - name = N("@1 Flower Charge"), - type = "shapeless", - { e, "mcl_flowers:oxeye_daisy", d }, - }, - ["gradient"] = { - name = N("@1 Gradient"), - { d, e, d }, - { e, d, e }, - { e, d, e }, - }, - ["gradient_up"] = { - name = N("@1 Base Gradient"), - { e, d, e }, - { e, d, e }, - { d, e, d }, - }, - ["half_horizontal_bottom"] = { - name = N("@1 Per Fess Inverted"), - { e, e, e }, - { d, d, d }, - { d, d, d }, - }, - ["half_horizontal"] = { - name = N("@1 Per Fess"), - { d, d, d }, - { d, d, d }, - { e, e, e }, - }, - ["half_vertical"] = { - name = N("@1 Per Pale"), - { d, d, e }, - { d, d, e }, - { d, d, e }, - }, - ["half_vertical_right"] = { - name = N("@1 Per Pale Inverted"), - { e, d, d }, - { e, d, d }, - { e, d, d }, - }, - ["thing"] = { - -- Symbol used for the “Thing”: U+1F65D 🙝 - - name = N("@1 Thing Charge"), - type = "shapeless", - { e, "mcl_core:apple_gold_enchanted", d }, - }, - ["rhombus"] = { - name = N("@1 Lozenge"), - { e, d, e }, - { d, e, d }, - { e, d, e }, - }, - ["skull"] = { - name = N("@1 Skull Charge"), - type = "shapeless", - { e, "mcl_heads:wither_skeleton", d }, - }, - ["small_stripes"] = { - name = N("@1 Paly"), - { d, e, d }, - { d, e, d }, - { e, e, e }, - }, - ["square_bottom_left"] = { - name = N("@1 Base Dexter Canton"), - { e, e, e }, - { e, e, e }, - { d, e, e }, - }, - ["square_bottom_right"] = { - name = N("@1 Base Sinister Canton"), - { e, e, e }, - { e, e, e }, - { e, e, d }, - }, - ["square_top_left"] = { - name = N("@1 Chief Dexter Canton"), - { d, e, e }, - { e, e, e }, - { e, e, e }, - }, - ["square_top_right"] = { - name = N("@1 Chief Sinister Canton"), - { e, e, d }, - { e, e, e }, - { e, e, e }, - }, - ["straight_cross"] = { - name = N("@1 Cross"), - { e, d, e }, - { d, d, d }, - { e, d, e }, - }, - ["stripe_bottom"] = { - name = N("@1 Base"), - { e, e, e }, - { e, e, e }, - { d, d, d }, - }, - ["stripe_center"] = { - name = N("@1 Pale"), - { e, d, e }, - { e, d, e }, - { e, d, e }, - }, - ["stripe_downleft"] = { - name = N("@1 Bend Sinister"), - { e, e, d }, - { e, d, e }, - { d, e, e }, - }, - ["stripe_downright"] = { - name = N("@1 Bend"), - { d, e, e }, - { e, d, e }, - { e, e, d }, - }, - ["stripe_left"] = { - name = N("@1 Pale Dexter"), - { d, e, e }, - { d, e, e }, - { d, e, e }, - }, - ["stripe_middle"] = { - name = N("@1 Fess"), - { e, e, e }, - { d, d, d }, - { e, e, e }, - }, - ["stripe_right"] = { - name = N("@1 Pale Sinister"), - { e, e, d }, - { e, e, d }, - { e, e, d }, - }, - ["stripe_top"] = { - name = N("@1 Chief"), - { d, d, d }, - { e, e, e }, - { e, e, e }, - }, - ["triangle_bottom"] = { - name = N("@1 Chevron"), - { e, e, e }, - { e, d, e }, - { d, e, d }, - }, - ["triangle_top"] = { - name = N("@1 Chevron Inverted"), - { d, e, d }, - { e, d, e }, - { e, e, e }, - }, - ["triangles_bottom"] = { - name = N("@1 Base Indented"), - { e, e, e }, - { d, e, d }, - { e, d, e }, - }, - ["triangles_top"] = { - name = N("@1 Chief Indented"), - { e, d, e }, - { d, e, d }, - { e, e, e }, - }, -} - --- Just a simple reverse-lookup table from dye itemstring to banner color ID --- to avoid some pointless future iterations. -local dye_to_colorid_mapping = {} -for colorid, colortab in pairs(mcl_banners.colors) do - dye_to_colorid_mapping[colortab[5]] = colorid -end - -local dye_to_itemid_mapping = {} -for colorid, colortab in pairs(mcl_banners.colors) do - dye_to_itemid_mapping[colortab[5]] = colortab[1] -end - --- Create a banner description containing all the layer names -function mcl_banners.make_advanced_banner_description(description, layers) - if layers == nil or #layers == 0 then - -- No layers, revert to default - return "" - else - local layerstrings = {} - for l=1, #layers do - -- Prevent excess length description - if l > max_layer_lines then - break - end - -- Layer text line. - local color = mcl_banners.colors[layers[l].color][6] - local pattern_name = patterns[layers[l].pattern].name - -- The pattern name is a format string - -- (e.g. “@1 Base” → “Yellow Base”) - table.insert(layerstrings, S(pattern_name, S(color))) - end - -- Warn about missing information - if #layers == max_layer_lines + 1 then - table.insert(layerstrings, S("And one additional layer")) - elseif #layers > max_layer_lines + 1 then - table.insert(layerstrings, S("And @1 additional layers", #layers - max_layer_lines)) - end - - -- Final string concatenations: Just a list of strings - local append = table.concat(layerstrings, "\n") - description = description .. "\n" .. minetest.colorize(mcl_colors.GRAY, append) - return description - end -end - ---[[ This is for handling all those complex pattern crafting recipes. -Parameters same as for minetest.register_craft_predict. -craft_predict is set true when called from minetest.craft_preview, in this case, this function -MUST NOT change the crafting grid. -]] -local function banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv, craft_predict) - if minetest.get_item_group(itemstack:get_name(), "banner") ~= 1 then - return - end - - --[[ Basic item checks: Banners and dyes ]] - local banner -- banner item - local banner2 -- second banner item (used when copying) - local dye -- itemstring of the dye being used - local banner_index -- crafting inventory index of the banner - local banner2_index - for i = 1, player:get_inventory():get_size("craft") do - local itemname = old_craft_grid[i]:get_name() - if minetest.get_item_group(itemname, "banner") == 1 then - if not banner then - banner = old_craft_grid[i] - banner_index = i - elseif not banner2 then - banner2 = old_craft_grid[i] - banner2_index = i - else - return - end - -- Check if all dyes are equal - elseif minetest.get_item_group(itemname, "dye") == 1 then - if dye == nil then - dye = itemname - elseif itemname ~= dye then - return ItemStack("") - end - end - end - if not banner then - return - end - - --[[ Check copy ]] - if banner2 then - -- Two banners found: This means copying! - - local b1meta = banner:get_meta() - local b2meta = banner2:get_meta() - local b1layers_raw = b1meta:get_string("layers") - local b2layers_raw = b2meta:get_string("layers") - local b1layers = minetest.deserialize(b1layers_raw) - local b2layers = minetest.deserialize(b2layers_raw) - if type(b1layers) ~= "table" then - b1layers = {} - end - if type(b2layers) ~= "table" then - b2layers = {} - end - - -- For copying to be allowed, one banner has to have no layers while the other one has at least 1 layer. - -- The banner with layers will be used as a source. - local src_banner, src_layers, src_layers_raw, src_desc, src_index - if #b1layers == 0 and #b2layers > 0 then - src_banner = banner2 - src_layers = b2layers - src_layers_raw = b2layers_raw - src_desc = minetest.registered_items[src_banner:get_name()].description - src_index = banner2_index - elseif #b2layers == 0 and #b1layers > 0 then - src_banner = banner - src_layers = b1layers - src_layers_raw = b1layers_raw - src_desc = minetest.registered_items[src_banner:get_name()].description - src_index = banner_index - else - return ItemStack("") - end - - -- Set output metadata - local imeta = itemstack:get_meta() - imeta:set_string("layers", src_layers_raw) - -- Generate new description. This clears any (anvil) name from the original banners. - imeta:set_string("description", mcl_banners.make_advanced_banner_description(src_desc, src_layers)) - - if not craft_predict then - -- Don't destroy source banner so this recipe is a true copy - craft_inv:set_stack("craft", src_index, src_banner) - end - - return itemstack - end - - -- No two banners found - -- From here on we check which banner pattern should be added - - --[[ Check patterns ]] - - -- Get old layers - local ometa = banner:get_meta() - local layers_raw = ometa:get_string("layers") - local layers = minetest.deserialize(layers_raw) - if type(layers) ~= "table" then - layers = {} - end - -- Disallow crafting when a certain number of layers is reached or exceeded - if #layers >= max_layers_crafting then - return ItemStack("") - end - - local matching_pattern - local max_i = player:get_inventory():get_size("craft") - -- Find the matching pattern - for pattern_name, pattern in pairs(patterns) do - -- Shaped / fixed - if pattern.type == nil then - local pattern_ok = true - local inv_i = 1 - -- This complex code just iterates through the pattern slots one-by-one and compares them with the pattern - for p=1, #pattern do - local row = pattern[p] - for r=1, #row do - local itemname = old_craft_grid[inv_i]:get_name() - local pitem = row[r] - if (pitem == d and minetest.get_item_group(itemname, "dye") == 0) or (pitem == e and itemname ~= e and inv_i ~= banner_index) then - pattern_ok = false - break - end - inv_i = inv_i + 1 - if inv_i > max_i then - break - end - end - if inv_i > max_i then - break - end - end - -- Everything matched! We found our pattern! - if pattern_ok then - matching_pattern = pattern_name - break - end - - elseif pattern.type == "shapeless" then - local orig = pattern[1] - local no_mismatches_so_far = true - -- This code compares the craft grid with the required items - for o=1, #orig do - local item_ok = false - for i=1, max_i do - local itemname = old_craft_grid[i]:get_name() - if (orig[o] == e) or -- Empty slot: Always wins - (orig[o] ~= e and orig[o] == itemname) or -- non-empty slot: Exact item match required - (orig[o] == d and minetest.get_item_group(itemname, "dye") == 1) then -- Dye slot - item_ok = true - break - end - end - -- Sorry, item not found. :-( - if not item_ok then - no_mismatches_so_far = false - break - end - end - -- Ladies and Gentlemen, we have a winner! - if no_mismatches_so_far then - matching_pattern = pattern_name - break - end - end - - if matching_pattern then - break - end - end - if not matching_pattern then - return ItemStack("") - end - - -- Add the new layer and update other metadata - local color = dye_to_colorid_mapping[dye] - table.insert(layers, {pattern=matching_pattern, color=color}) - - local imeta = itemstack:get_meta() - imeta:set_string("layers", minetest.serialize(layers)) - - local mname = ometa:get_string("name") - -- Only change description if banner does not have a name - if mname == "" then - local odesc = itemstack:get_definition().description - local description = mcl_banners.make_advanced_banner_description(odesc, layers) - imeta:set_string("description", description) - else - imeta:set_string("description", ometa:get_string("description")) - imeta:set_string("name", mname) - end - - if craft_predict then - local itemid_prefix = "mcl_banners:banner_preview" - local coloritemid = dye_to_itemid_mapping[dye] - return ItemStack(itemid_prefix .. "_" .. matching_pattern .. "_" .. coloritemid) - else - return itemstack - end -end - -minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv) - return banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv, true) -end) -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - return banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv, false) -end) - --- Register crafting recipes for all the patterns -for pattern_name, pattern in pairs(patterns) do - -- Shaped and fixed recipes - if pattern.type == nil then - for colorid, colortab in pairs(mcl_banners.colors) do - local banner = "mcl_banners:banner_item_"..colortab[1] - local bannered = false - local recipe = {} - for row_id=1, #pattern do - local row = pattern[row_id] - local newrow = {} - for r=1, #row do - if row[r] == e and not bannered then - newrow[r] = banner - bannered = true - else - newrow[r] = row[r] - end - end - table.insert(recipe, newrow) - end - minetest.register_craft({ - output = banner, - recipe = recipe, - }) - end - -- Shapeless recipes - elseif pattern.type == "shapeless" then - for colorid, colortab in pairs(mcl_banners.colors) do - local banner = "mcl_banners:banner_item_"..colortab[1] - local orig = pattern[1] - local recipe = {} - for r=1, #orig do - if orig[r] == e then - recipe[r] = banner - else - recipe[r] = orig[r] - end - end - - minetest.register_craft({ - type = "shapeless", - output = banner, - recipe = recipe, - }) - end - end -end - --- Register crafting recipe for copying the banner pattern -for colorid, colortab in pairs(mcl_banners.colors) do - local banner = "mcl_banners:banner_item_"..colortab[1] - minetest.register_craft({ - type = "shapeless", - output = banner, - recipe = { banner, banner }, - }) -end diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png deleted file mode 100644 index 3ccd92564..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png deleted file mode 100644 index 4a912ade6..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_base_inverted.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_base_inverted.png deleted file mode 100644 index d8365a4de..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_base_inverted.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_border.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_border.png deleted file mode 100644 index 411282ec3..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_bricks.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_bricks.png deleted file mode 100644 index e44eb051f..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_circle.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_circle.png deleted file mode 100644 index 1ae3d39d4..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_circle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_creeper.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_creeper.png deleted file mode 100644 index 8b575d770..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_creeper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_cross.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_cross.png deleted file mode 100644 index 314cf8e74..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_curly_border.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_curly_border.png deleted file mode 100644 index 2afcb0eff..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_curly_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_left.png deleted file mode 100644 index 4dbf324fc..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_right.png deleted file mode 100644 index 4dc0e321c..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_left.png deleted file mode 100644 index 4e92f0102..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_right.png deleted file mode 100644 index 3c6958cbf..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_fallback_wood.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_fallback_wood.png deleted file mode 100644 index 4960f4fc5..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_fallback_wood.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_flower.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_flower.png deleted file mode 100644 index 7a0ae2615..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_flower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient.png deleted file mode 100644 index 80aa50a28..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient_up.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient_up.png deleted file mode 100644 index 11222e3f5..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient_up.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal.png deleted file mode 100644 index 22db69add..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal_bottom.png deleted file mode 100644 index 018f29c21..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical.png deleted file mode 100644 index 6961d6af0..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical_right.png deleted file mode 100644 index 3536d8e82..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png deleted file mode 100644 index 31a75b37b..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png deleted file mode 100644 index 9ed2c05d9..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_rhombus.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_rhombus.png deleted file mode 100644 index a4f9b6391..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_rhombus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_skull.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_skull.png deleted file mode 100644 index 5adc11968..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_skull.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_small_stripes.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_small_stripes.png deleted file mode 100644 index 330a92021..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_small_stripes.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_left.png deleted file mode 100644 index f7c3883e7..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_right.png deleted file mode 100644 index 67c518313..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_left.png deleted file mode 100644 index dc9c59d92..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_right.png deleted file mode 100644 index 928aa51ea..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_straight_cross.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_straight_cross.png deleted file mode 100644 index 42175c018..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_straight_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_bottom.png deleted file mode 100644 index 13eb73b13..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_center.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_center.png deleted file mode 100644 index 13d352a1f..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_center.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downleft.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downleft.png deleted file mode 100644 index 4e2f89a29..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downleft.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downright.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downright.png deleted file mode 100644 index 7759c2f50..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downright.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_left.png deleted file mode 100644 index 8bff4b3a3..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_middle.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_middle.png deleted file mode 100644 index 28c0ca2b0..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_middle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_right.png deleted file mode 100644 index 7e9d7b245..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_top.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_top.png deleted file mode 100644 index 9ce1f9182..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_thing.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_thing.png deleted file mode 100644 index 4d28d5cb2..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_thing.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_bottom.png deleted file mode 100644 index 5ac7e9e2e..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_top.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_top.png deleted file mode 100644 index 7f626c26d..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_bottom.png deleted file mode 100644 index 0098f612e..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_top.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_top.png deleted file mode 100644 index 9241f87f6..000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/init.lua b/mods/ITEMS/mcl_barrels/init.lua deleted file mode 100644 index 09b16eee3..000000000 --- a/mods/ITEMS/mcl_barrels/init.lua +++ /dev/null @@ -1,204 +0,0 @@ -local S = minetest.get_translator("mcl_barrels") -local F = minetest.formspec_escape -local C = minetest.colorize - ---TODO: fix barrel rotation placement - -local open_barrels = {} - -local drop_content = mcl_util.drop_items_from_meta_container("main") - -local function on_blast(pos) - local node = minetest.get_node(pos) - drop_content(pos, node) - minetest.remove_node(pos) -end - --- Simple protection checking functions -local function protection_check_move(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end -end - -local function protection_check_put_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end -end - -local function barrel_open(pos, node, clicker) - local name = minetest.get_meta(pos):get_string("name") - - if name == "" then - name = S("Barrel") - end - - local playername = clicker:get_player_name() - - minetest.show_formspec(playername, - "mcl_barrels:barrel_"..pos.x.."_"..pos.y.."_"..pos.z, - table.concat({ - "size[9,8.75]", - "label[0,0;"..F(C("#313131", name)).."]", - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]", - mcl_formspec.get_itemslot_bg(0, 0.5, 9, 3), - "label[0,4.0;"..F(C("#313131", S("Inventory"))).."]", - "list[current_player;main;0,4.5;9,3;9]", - mcl_formspec.get_itemslot_bg(0, 4.5, 9, 3), - "list[current_player;main;0,7.74;9,1;]", - mcl_formspec.get_itemslot_bg(0, 7.74, 9, 1), - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]", - "listring[current_player;main]", - }) - ) - - minetest.swap_node(pos, { name = "mcl_barrels:barrel_open", param2 = node.param2 }) - open_barrels[playername] = pos -end - -local function close_forms(pos) - local players = minetest.get_connected_players() - local formname = "mcl_barrels:barrel_"..pos.x.."_"..pos.y.."_"..pos.z - for p = 1, #players do - if vector.distance(players[p]:get_pos(), pos) <= 30 then - minetest.close_formspec(players[p]:get_player_name(), formname) - end - end -end - -local function update_after_close(pos) - local node = minetest.get_node_or_nil(pos) - if not node then return end - if node.name == "mcl_barrels:barrel_open" then - minetest.swap_node(pos, {name = "mcl_barrels:barrel_closed", param2 = node.param2}) - end -end - -local function close_barrel(player) - local name = player:get_player_name() - local open = open_barrels[name] - if open == nil then - return - end - - update_after_close(open) - - open_barrels[name] = nil -end - -minetest.register_node("mcl_barrels:barrel_closed", { - description = S("Barrel"), - _tt_help = S("27 inventory slots"), - _doc_items_longdesc = S("Barrels are containers which provide 27 inventory slots."), - _doc_items_usagehelp = S("To access its inventory, rightclick it. When broken, the items will drop out."), - tiles = {"mcl_barrels_barrel_top.png^[transformR270", "mcl_barrels_barrel_bottom.png", "mcl_barrels_barrel_side.png"}, - paramtype = "light", - paramtype2 = "facedir", - on_place = function(itemstack, placer, pointed_thing) - minetest.rotate_and_place(itemstack, placer, pointed_thing, minetest.is_creative_enabled(placer:get_player_name()), {}, false) - return itemstack - end, - stack_max = 64, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy = 1, axey = 1, container = 2, material_wood = 1, flammable = -1, deco_block = 1}, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = protection_check_put_take, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from barrel at "..minetest.pos_to_string(pos)) - end, - after_dig_node = drop_content, - on_blast = on_blast, - on_rightclick = barrel_open, - on_destruct = close_forms, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, -}) - -minetest.register_node("mcl_barrels:barrel_open", { - description = S("Barrel Open"), - _tt_help = S("27 inventory slots"), - _doc_items_longdesc = S("Barrels are containers which provide 27 inventory slots."), - _doc_items_usagehelp = S("To access its inventory, rightclick it. When broken, the items will drop out."), - _doc_items_create_entry = false, - tiles = {"mcl_barrels_barrel_top_open.png", "mcl_barrels_barrel_bottom.png", "mcl_barrels_barrel_side.png"}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mcl_barrels:barrel_closed", - stack_max = 64, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy = 1, axey = 1, container = 2, material_wood = 1, flammable = -1, deco_block = 1, not_in_creative_inventory = 1}, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = protection_check_put_take, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from barrel at "..minetest.pos_to_string(pos)) - end, - after_dig_node = drop_content, - on_blast = on_blast, - on_rightclick = barrel_open, - on_destruct = close_forms, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, -}) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname:find("mcl_barrels:") == 1 and fields.quit then - close_barrel(player) - end -end) - -minetest.register_on_leaveplayer(function(player) - close_barrel(player) -end) - ---Minecraft Java Edition craft -minetest.register_craft({ - output = "mcl_barrels:barrel_closed", - recipe = { - {"group:wood", "group:wood_slab", "group:wood"}, - {"group:wood", "", "group:wood"}, - {"group:wood", "group:wood_slab", "group:wood"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_barrels:barrel_closed", - burntime = 15, -}) diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.de.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.de.tr deleted file mode 100644 index e1fa1b603..000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.es.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.es.tr deleted file mode 100644 index e1fa1b603..000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.es.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.fr.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.fr.tr deleted file mode 100644 index 0e93d1ee5..000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel=Tonneau -Barrels are containers which provide 27 inventory slots.=Les tonneaux sont des conteneurs qui offrent 27 emplacements d'inventaire. -To access its inventory, rightclick it. When broken, the items will drop out.=Pour accéder à son inventaire, faites un clic droit dessus. Une fois cassés, les articles tomberont. -27 inventory slots=27 emplacements d'inventaire \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.pl.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.pl.tr deleted file mode 100644 index e1fa1b603..000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.ru.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.ru.tr deleted file mode 100644 index e1fa1b603..000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/template.txt b/mods/ITEMS/mcl_barrels/locale/template.txt deleted file mode 100644 index e1fa1b603..000000000 --- a/mods/ITEMS/mcl_barrels/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/mod.conf b/mods/ITEMS/mcl_barrels/mod.conf deleted file mode 100644 index 2b0088b79..000000000 --- a/mods/ITEMS/mcl_barrels/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_barrels -depends = mcl_util, mcl_formspec, mcl_sounds -author = AFCMS \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_bottom.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_bottom.png deleted file mode 100755 index 9c5788061..000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_side.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_side.png deleted file mode 100755 index 8a01cc4a9..000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top.png deleted file mode 100755 index 8af5a5c90..000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top_open.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top_open.png deleted file mode 100755 index 1d3a02be1..000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top_open.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/README.txt b/mods/ITEMS/mcl_beds/README.txt deleted file mode 100644 index 34b493702..000000000 --- a/mods/ITEMS/mcl_beds/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -Minetest Game mod: beds -======================= -See license.txt for license information. - -Authors of source code ----------------------- -Originally by BlockMen (MIT) -Various Minetest developers and contributors (MIT) - -Authors of media (textures) ---------------------------- -BlockMen (CC BY-SA 3.0) - -This mod adds a bed to Minetest which allows to skip the night. -To sleep, rightclick the bed. -Another feature is a controlled respawning. If you have slept in bed your respawn point is set to the beds location and you will respawn there after -death. -Use the mcl_playersSleepingPercentage setting to enable/disable night skipping or set a percentage of how many players need to sleep to skip the night. \ No newline at end of file diff --git a/mods/ITEMS/mcl_beds/api.lua b/mods/ITEMS/mcl_beds/api.lua deleted file mode 100644 index 86cc079fe..000000000 --- a/mods/ITEMS/mcl_beds/api.lua +++ /dev/null @@ -1,279 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local minetest_get_node = minetest.get_node -local minetest_get_node_or_nil = minetest.get_node_or_nil -local minetest_remove_node = minetest.remove_node -local minetest_facedir_to_dir = minetest.facedir_to_dir -local minetest_add_item = minetest.add_item -local vector_add = vector.add -local vector_subtract = vector.subtract - -local function get_bed_next_node(pos, node) - local node = node or minetest_get_node_or_nil(pos) - if not node then return end - - local dir = minetest_facedir_to_dir(node.param2) - - local pos2, bottom - if string.sub(node.name, -4) == "_top" then - pos2 = vector_subtract(pos, dir) - else - pos2 = vector_add(pos, dir) - bottom = true - end - - local node2 = minetest_get_node(pos2) - return pos2, node2, bottom, dir -end - -local function rotate(pos, node, user, mode, new_param2) - if mode ~= screwdriver.ROTATE_FACE then - return false - end - - local p, node2, bottom = get_bed_next_node(pos, node) - if not node2 then return end - - local name = node2.name - if not minetest.get_item_group(name, "bed") == 2 or not node.param2 == node2.param2 then return false end - - if bottom then - name = string.sub(name, 1, -5) - else - name = string.sub(name, 1, -8) - end - - if minetest.is_protected(p, user:get_player_name()) then - minetest.record_protection_violation(p, user:get_player_name()) - return false - end - - local newp - local new_dir = minetest_facedir_to_dir(new_param2) - - if bottom then - newp = vector_add(pos, new_dir) - else - newp = vector_subtract(pos, new_dir) - end - - local node3 = minetest_get_node_or_nil(newp) - if not node3 then return false end - - local node_def = minetest.registered_nodes[node3.name] - if not node_def or not node_def.buildable_to then return false end - - if minetest.is_protected(newp, user:get_player_name()) then - minetest.record_protection_violation(newp, user:get_player_name()) - return false - end - - node.param2 = new_param2 - -- do not remove_node here - it will trigger destroy_bed() - minetest.swap_node(p, {name = "air"}) - minetest.swap_node(pos, node) - minetest.swap_node(newp, {name = name .. (bottom and "_top" or "_bottom"), param2 = new_param2}) - - return true -end - - -local function destruct_bed(pos, oldnode) - local node = oldnode or minetest_get_node_or_nil(pos) - if not node then return end - - local pos2, node2, bottom = get_bed_next_node(pos, oldnode) - - if bottom then - minetest_add_item(pos, node.name) - if node2 and string.sub(node2.name, -4) == "_top" then - minetest_remove_node(pos2) - end - else - if node2 and string.sub(node2.name, -7) == "_bottom" then - minetest_remove_node(pos2) - end - end -end - -local function kick_player_after_destruct(destruct_pos) - for name, player_bed_pos in pairs(mcl_beds.bed_pos) do - if vector.distance(destruct_pos, player_bed_pos) < 0.1 then - local player = minetest.get_player_by_name(name) - if player and player:is_player() then - mcl_beds.kick_player(player) - break - end - end - end -end - -local beddesc = S("Beds allow you to sleep at night and make the time pass faster.") -local beduse = S("To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.") -if minetest.settings:get_bool("enable_bed_respawn") == false then - beddesc = beddesc .. "\n" .. S("You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.") -else - beddesc = beddesc .. "\n" .. S("By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.") -end -if minetest.settings:get_bool("enable_bed_night_skip") == false then - beddesc = beddesc .. "\n" .. S("In this world, going to bed won't skip the night, but it will skip thunderstorms.") -else - beddesc = beddesc .. "\n" .. S("Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.") -end - -local default_sounds -if minetest.get_modpath("mcl_sounds") then - default_sounds = mcl_sounds.node_sound_wood_defaults({ - footstep = { gain = 0.5, name = "mcl_sounds_cloth" }, - }) -end - -function mcl_beds.register_bed(name, def) - local node_box_bottom, selection_box_bottom, collision_box_bottom - if def.nodebox and def.nodebox.bottom then - node_box_bottom = { type = "fixed", fixed = def.nodebox.bottom } - end - if def.selectionbox and def.selectionbox.bottom then - selection_box_bottom = { type = "fixed", fixed = def.selectionbox.bottom } - end - if def.collisionbox and def.collisionbox.bottom then - collision_box_bottom = { type = "fixed", fixed = def.collisionbox.bottom } - end - minetest.register_node(name .. "_bottom", { - description = def.description, - _tt_help = S("Allows you to sleep"), - _doc_items_longdesc = def._doc_items_longdesc or beddesc, - _doc_items_usagehelp = def._doc_items_usagehelp or beduse, - _doc_items_create_entry = def._doc_items_create_entry, - _doc_items_entry_name = def._doc_items_entry_name, - inventory_image = def.inventory_image, - wield_image = def.wield_image, - drawtype = "nodebox", - tiles = def.tiles.bottom, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - stack_max = 1, - groups = {handy=1, bed = 1, dig_by_piston=1, bouncy=66, fall_damage_add_percent=-50, deco_block = 1, flammable=-1}, - _mcl_hardness = 0.2, - _mcl_blast_resistance = 1, - sounds = def.sounds or default_sounds, - node_box = node_box_bottom, - selection_box = selection_box_bottom, - collision_box = collision_box_bottom, - drop = "", - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - - -- Use pointed node's on_rightclick function first, if present - local node = minetest_get_node(under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local pos - local undername = minetest_get_node(under).name - if minetest.registered_items[undername] and minetest.registered_items[undername].buildable_to then - pos = under - else - pos = pointed_thing.above - end - - if minetest.is_protected(pos, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(pos, placer:get_player_name()) - return itemstack - end - - local node_def = minetest.registered_nodes[minetest_get_node(pos).name] - if not node_def or not node_def.buildable_to then - return itemstack - end - - local dir = minetest.dir_to_facedir(placer:get_look_dir()) - local botpos = vector_add(pos, minetest_facedir_to_dir(dir)) - - if minetest.is_protected(botpos, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(botpos, placer:get_player_name()) - return itemstack - end - - local botdef = minetest.registered_nodes[minetest_get_node(botpos).name] - if not botdef or not botdef.buildable_to then - return itemstack - end - - minetest.set_node(pos, {name = name .. "_bottom", param2 = dir}) - minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end, - - after_destruct = destruct_bed, - - on_destruct = kick_player_after_destruct, - - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - mcl_beds.on_rightclick(pos, clicker, false) - return itemstack - end, - - on_rotate = rotate, - }) - - local node_box_top, selection_box_top, collision_box_top - if def.nodebox and def.nodebox.top then - node_box_top = { type = "fixed", fixed = def.nodebox.top } - end - if def.selectionbox and def.selectionbox.top then - selection_box_top = { type = "fixed", fixed = def.selectionbox.top } - end - if def.collisionbox and def.collisionbox.top then - collision_box_top = { type = "fixed", fixed = def.collisionbox.top } - end - - minetest.register_node(name .. "_top", { - drawtype = "nodebox", - tiles = def.tiles.top, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - -- FIXME: Should be bouncy=66, but this would be a higher bounciness than slime blocks! - groups = {handy = 1, flammable = -1, bed = 2, dig_by_piston=1, bouncy=33, fall_damage_add_percent=-50, not_in_creative_inventory = 1}, - _mcl_hardness = 0.2, - _mcl_blast_resistance = 1, - sounds = def.sounds or default_sounds, - drop = "", - node_box = node_box_top, - selection_box = selection_box_top, - collision_box = collision_box_top, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - mcl_beds.on_rightclick(pos, clicker, true) - return itemstack - end, - on_rotate = rotate, - after_destruct = destruct_bed, - }) - - minetest.register_alias(name, name .. "_bottom") - - if def.recipe then - minetest.register_craft({ - output = name, - recipe = def.recipe - }) - end - - doc.add_entry_alias("nodes", name.."_bottom", "nodes", name.."_top") -end - - diff --git a/mods/ITEMS/mcl_beds/beds.lua b/mods/ITEMS/mcl_beds/beds.lua deleted file mode 100644 index 5043c85d2..000000000 --- a/mods/ITEMS/mcl_beds/beds.lua +++ /dev/null @@ -1,113 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - -local nodebox = { - bottom = { - {-0.5, -5/16, -0.5, 0.5, 0.06, 0.5}, - {-0.5, -0.5, -0.5, -5/16, -5/16, -5/16}, - {0.5, -0.5, -0.5, 5/16, -5/16, -5/16}, - }, - top = { - {-0.5, -5/16, -0.5, 0.5, 0.06, 0.5}, - {-0.5, -0.5, 0.5, -5/16, -5/16, 5/16}, - {0.5, -0.5, 0.5, 5/16, -5/16, 5/16}, - }, -} - -local colors = { - -- { ID, decription, wool, dye } - { "red", S("Red Bed"), "mcl_wool:red", "mcl_dye:red" }, - { "blue", S("Blue Bed"), "mcl_wool:blue", "mcl_dye:blue" }, - { "cyan", S("Cyan Bed"), "mcl_wool:cyan", "mcl_dye:cyan" }, - { "grey", S("Grey Bed"), "mcl_wool:grey", "mcl_dye:dark_grey" }, - { "silver", S("Light Grey Bed"), "mcl_wool:silver", "mcl_dye:grey" }, - { "black", S("Black Bed"), "mcl_wool:black", "mcl_dye:black" }, - { "yellow", S("Yellow Bed"), "mcl_wool:yellow", "mcl_dye:yellow" }, - { "green", S("Green Bed"), "mcl_wool:green", "mcl_dye:dark_green" }, - { "magenta", S("Magenta Bed"), "mcl_wool:magenta", "mcl_dye:magenta" }, - { "orange", S("Orange Bed"), "mcl_wool:orange", "mcl_dye:orange" }, - { "purple", S("Purple Bed"), "mcl_wool:purple", "mcl_dye:violet" }, - { "brown", S("Brown Bed"), "mcl_wool:brown", "mcl_dye:brown" }, - { "pink", S("Pink Bed"), "mcl_wool:pink", "mcl_dye:pink" }, - { "lime", S("Lime Bed"), "mcl_wool:lime", "mcl_dye:green" }, - { "light_blue", S("Light Blue Bed"), "mcl_wool:light_blue", "mcl_dye:lightblue" }, - { "white", S("White Bed"), "mcl_wool:white", "mcl_dye:white" }, -} -local canonical_color = "red" - -for c=1, #colors do - local colorid = colors[c][1] - local is_canonical = colorid == canonical_color - - -- Recoloring recipe for white bed - if minetest.get_modpath("mcl_dye") then - minetest.register_craft({ - type = "shapeless", - output = "mcl_beds:bed_"..colorid.."_bottom", - recipe = { "mcl_beds:bed_white_bottom", colors[c][4] }, - }) - end - - -- Main bed recipe - local main_recipe - if minetest.get_modpath("mcl_wool") then - main_recipe = { - {colors[c][3], colors[c][3], colors[c][3]}, - {"group:wood", "group:wood", "group:wood"} - } - end - - local entry_name, create_entry - if mod_doc then - if is_canonical then - entry_name = S("Bed") - else - create_entry = false - end - end - -- Register bed - mcl_beds.register_bed("mcl_beds:bed_"..colorid, { - description = colors[c][2], - _doc_items_entry_name = entry_name, - _doc_items_create_entry = create_entry, - inventory_image = "mcl_beds_bed_"..colorid..".png", - wield_image = "mcl_beds_bed_"..colorid..".png", - tiles = { - bottom = { - "mcl_beds_bed_top_bottom_"..colorid..".png^[transformR90", - "default_wood.png^mcl_beds_bed_bottom_bottom.png", - "mcl_beds_bed_side_bottom_r_"..colorid..".png", - "mcl_beds_bed_side_bottom_r_"..colorid..".png^[transformfx", - "mcl_beds_bed_side_top_"..colorid..".png", - "mcl_beds_bed_side_bottom_"..colorid..".png" - }, - top = { - "mcl_beds_bed_top_top_"..colorid..".png^[transformR90", - "default_wood.png^mcl_beds_bed_bottom_top.png", - "mcl_beds_bed_side_top_r_"..colorid..".png", - "mcl_beds_bed_side_top_r_"..colorid..".png^[transformfx", - "mcl_beds_bed_side_top_"..colorid..".png", - "mcl_beds_bed_side_bottom_"..colorid..".png" - } - }, - nodebox = nodebox, - selectionbox = { - bottom = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - top = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - }, - -- Simplified collision box because Minetest acts weird if we use the nodebox one - collisionbox = { - bottom = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - top = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - }, - recipe = main_recipe, - }) - if mod_doc and not is_canonical then - doc.add_entry_alias("nodes", "mcl_beds:bed_"..canonical_color.."_bottom", "nodes", "mcl_beds:bed_"..colorid.."_bottom") - doc.add_entry_alias("nodes", "mcl_beds:bed_"..canonical_color.."_bottom", "nodes", "mcl_beds:bed_"..colorid.."_top") - end - -end - -minetest.register_alias("beds:bed_bottom", "mcl_beds:bed_red_bottom") -minetest.register_alias("beds:bed_top", "mcl_beds:bed_red_top") diff --git a/mods/ITEMS/mcl_beds/functions.lua b/mods/ITEMS/mcl_beds/functions.lua deleted file mode 100644 index c1e76c90a..000000000 --- a/mods/ITEMS/mcl_beds/functions.lua +++ /dev/null @@ -1,406 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local F = minetest.formspec_escape - -local math = math -local vector = vector -local player_in_bed = 0 -local is_sp = minetest.is_singleplayer() -local weather_mod = minetest.get_modpath("mcl_weather") -local explosions_mod = minetest.get_modpath("mcl_explosions") -local spawn_mod = minetest.get_modpath("mcl_spawn") -local worlds_mod = minetest.get_modpath("mcl_worlds") - --- Helper functions - -local function get_look_yaw(pos) - local n = minetest.get_node(pos) - local param = n.param2 - if param == 1 then - return math.pi / 2, param - elseif param == 3 then - return -math.pi / 2, param - elseif param == 0 then - return math.pi, param - else - return 0, param - end -end - -local function players_in_bed_setting() - return tonumber(minetest.settings:get("mcl_playersSleepingPercentage")) or 100 -end - -local function is_night_skip_enabled() - return players_in_bed_setting() <= 100 -end - -local function check_in_beds(players) - if not players then - players = minetest.get_connected_players() - end - if player_in_bed <= 0 then - return false - end - return players_in_bed_setting() <= (player_in_bed * 100) / #players -end - --- These monsters do not prevent sleep -local monster_exceptions = { - ["mobs_mc:ghast"] = true, - ["mobs_mc:enderdragon"] = true, - ["mobs_mc:killer_bunny"] = true, - ["mobs_mc:slime_big"] = true, - ["mobs_mc:slime_small"] = true, - ["mobs_mc:slime_tiny"] = true, - ["mobs_mc:magma_cube_big"] = true, - ["mobs_mc:magma_cube_small"] = true, - ["mobs_mc:magma_cube_tiny"] = true, - ["mobs_mc:shulker"] = true, -} - -local function lay_down(player, pos, bed_pos, state, skip) - local name = player:get_player_name() - local hud_flags = player:hud_get_flags() - - if not player or not name then - return false - end - - local yaw, param2, dir, bed_pos2, bed_center - if bed_pos then - yaw, param2 = get_look_yaw(bed_pos) - dir = minetest.facedir_to_dir(param2) - bed_pos2 = {x = bed_pos.x - dir.x, y = bed_pos.y, z = bed_pos.z - dir.z} - bed_center = {x = bed_pos.x - dir.x/2, y = bed_pos.y + 0.1, z = bed_pos.z - dir.z/2} - - -- save respawn position when entering bed - if spawn_mod and mcl_spawn.set_spawn_pos(player, bed_pos, nil) then - minetest.chat_send_player(name, S("New respawn position set!")) - end - - -- No sleeping if too far away - if vector.distance(bed_pos, pos) > 2 and vector.distance(bed_pos2, pos) > 2 then - return false, S("You can't sleep, the bed's too far away!") - end - - for _, other_pos in pairs(mcl_beds.bed_pos) do - if vector.distance(bed_pos2, other_pos) < 0.1 then - return false, S("This bed is already occupied!") - end - end - - -- No sleeping while moving. Slightly different behaviour than in MC. - -- FIXME: Velocity threshold should be 0.01 but Minetest 5.3.0 - -- sometimes reports incorrect Y speed. A velocity threshold - -- of 0.125 still seems good enough. - if vector.length(player:get_velocity() or player:get_player_velocity()) > 0.125 then - return false, S("You have to stop moving before going to bed!") - end - - -- No sleeping if monsters nearby. - -- The exceptions above apply. - -- Zombie pigmen only prevent sleep while they are hostle. - for _, obj in pairs(minetest.get_objects_inside_radius(bed_pos, 8)) do - if obj and not obj:is_player() then - local ent = obj:get_luaentity() - local mobname = ent.name - local def = minetest.registered_entities[mobname] - -- Approximation of monster detection range - if def.is_mob and ((mobname ~= "mobs_mc:pigman" and def.type == "monster" and not monster_exceptions[mobname]) or (mobname == "mobs_mc:pigman" and ent.state == "attack")) then - if math.abs(bed_pos.y - obj:get_pos().y) <= 5 then - return false, S("You can't sleep now, monsters are nearby!") - end - end - end - end - end - - -- stand up - if state ~= nil and not state then - local p = mcl_beds.pos[name] or nil - if mcl_beds.player[name] then - mcl_beds.player[name] = nil - player_in_bed = player_in_bed - 1 - end - mcl_beds.pos[name] = nil - mcl_beds.bed_pos[name] = nil - if p then - player:set_pos(p) - end - - -- skip here to prevent sending player specific changes (used for leaving players) - if skip then - return false - end - - -- physics, eye_offset, etc - player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) - if player:get_look_vertical() > 0 then - player:set_look_vertical(0) - end - mcl_player.player_attached[name] = false - playerphysics.remove_physics_factor(player, "speed", "mcl_beds:sleeping") - playerphysics.remove_physics_factor(player, "jump", "mcl_beds:sleeping") - player:get_meta():set_string("mcl_beds:sleeping", "false") - hud_flags.wielditem = true - mcl_player.player_set_animation(player, "stand" , 30) - - -- lay down - else - local n1 = minetest.get_node({x = bed_pos.x, y = bed_pos.y + 1, z = bed_pos.z}) - local n2 = minetest.get_node({x = bed_pos2.x, y = bed_pos2.y + 1, z = bed_pos2.z}) - local def1 = minetest.registered_nodes[n1.name] - local def2 = minetest.registered_nodes[n2.name] - if def1.walkable or def2.walkable then - return false, S("You can't sleep, the bed is obstructed!") - elseif (def1.damage_per_second and def1.damage_per_second > 0) or (def2.damage_per_second and def2.damage_per_second > 0) then - return false, S("It's too dangerous to sleep here!") - end - - -- Check day of time and weather - local tod = minetest.get_timeofday() * 24000 - -- Values taken from Minecraft Wiki with offset of +6000 - if tod < 18541 and tod > 5458 and (not weather_mod or (mcl_weather.get_weather() ~= "thunder")) then - return false, S("You can only sleep at night or during a thunderstorm.") - end - - mcl_beds.player[name] = 1 - mcl_beds.pos[name] = pos - mcl_beds.bed_pos[name] = bed_pos2 - player_in_bed = player_in_bed + 1 - -- physics, eye_offset, etc - player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0}) - player:set_look_horizontal(yaw) - - -- With head tracking: - player:set_look_vertical(0) - -- Without head tracking: - -- player:set_look_vertical(-(math.pi/2)) - - player:get_meta():set_string("mcl_beds:sleeping", "true") - playerphysics.add_physics_factor(player, "speed", "mcl_beds:sleeping", 0) - playerphysics.add_physics_factor(player, "jump", "mcl_beds:sleeping", 0) - player:set_pos(bed_center) - mcl_player.player_attached[name] = true - hud_flags.wielditem = false - mcl_player.player_set_animation(player, "lay" , 0) - end - - player:hud_set_flags(hud_flags) - return true -end - -local function update_formspecs(finished, ges) - local ges = ges or #minetest.get_connected_players() - local form_n = "size[12,5;true]" - local all_in_bed = players_in_bed_setting() <= (player_in_bed * 100) / ges - local night_skip = is_night_skip_enabled() - local button_leave = "button_exit[4,3;4,0.75;leave;"..F(S("Leave bed")).."]" - local button_abort = "button_exit[4,3;4,0.75;leave;"..F(S("Abort sleep")).."]" - local bg_presleep = "bgcolor[#00000080;true]" - local bg_sleep = "bgcolor[#000000FF;true]" - - if finished then - for name,_ in pairs(mcl_beds.player) do - minetest.close_formspec(name, "mcl_beds_form") - end - return - elseif not is_sp then - local text = S("Players in bed: @1/@2", player_in_bed, ges) - if not night_skip then - text = text .. "\n" .. S("Note: Night skip is disabled.") - form_n = form_n .. bg_presleep - form_n = form_n .. button_leave - elseif all_in_bed then - text = text .. "\n" .. S("You're sleeping.") - form_n = form_n .. bg_sleep - form_n = form_n .. button_abort - else - local comment = "You will fall asleep when " - if players_in_bed_setting() == 100 then - comment = S(comment .. "all players are in bed.") - else - comment = S(comment .. "@1% of all players are in bed.", players_in_bed_setting()) - end - text = text .. "\n" .. comment - form_n = form_n .. bg_presleep - form_n = form_n .. button_leave - end - form_n = form_n .. "label[0.5,1;"..F(text).."]" - else - local text - if night_skip then - text = S("You're sleeping.") - form_n = form_n .. bg_sleep - form_n = form_n .. button_abort - else - text = S("You're in bed.") .. "\n" .. S("Note: Night skip is disabled.") - form_n = form_n .. bg_presleep - form_n = form_n .. button_leave - end - form_n = form_n .. "label[0.5,1;"..F(text).."]" - end - - for name,_ in pairs(mcl_beds.player) do - minetest.show_formspec(name, "mcl_beds_form", form_n) - end -end - --- Public functions - --- Handle environment stuff related to sleeping: skip night and thunderstorm -function mcl_beds.sleep() - local storm_skipped = mcl_beds.skip_thunderstorm() - -- Always clear weather - if weather_mod then - mcl_weather.change_weather("none") - end - if is_night_skip_enabled() then - if not storm_skipped then - mcl_beds.skip_night() - end - mcl_beds.kick_players() - end -end - --- Throw all players out of bed -function mcl_beds.kick_players() - for name, _ in pairs(mcl_beds.player) do - local player = minetest.get_player_by_name(name) - lay_down(player, nil, nil, false) - end - update_formspecs(false) -end - --- Throw a player out of bed -function mcl_beds.kick_player(player) - local name = player:get_player_name() - if mcl_beds.player[name] then - lay_down(player, nil, nil, false) - update_formspecs(false) - minetest.close_formspec(name, "mcl_beds_form") - end -end - -function mcl_beds.skip_night() - minetest.set_timeofday(0.25) -- tod = 6000 -end - -function mcl_beds.skip_thunderstorm() - -- Skip thunderstorm - if weather_mod and mcl_weather.get_weather() == "thunder" then - -- Sleep for a half day (=minimum thunderstorm duration) - minetest.set_timeofday((minetest.get_timeofday() + 0.5) % 1) - return true - end - return false -end - -function mcl_beds.on_rightclick(pos, player, is_top) - -- Anti-Inception: Don't allow to sleep while you're sleeping - if player:get_meta():get_string("mcl_beds:sleeping") == "true" then - return - end - if worlds_mod then - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" or dim == "end" then - -- Bed goes BOOM in the Nether or End. - local node = minetest.get_node(pos) - local dir = minetest.facedir_to_dir(node.param2) - - minetest.remove_node(pos) - minetest.remove_node(string.sub(node.name, -4) == "_top" and vector.subtract(pos, dir) or vector.add(pos, dir)) - if explosions_mod then - mcl_explosions.explode(pos, 5, {drop_chance = 1.0, fire = true}) - end - return - end - end - local name = player:get_player_name() - local ppos = player:get_pos() - - -- move to bed - if not mcl_beds.player[name] then - local message - if is_top then - message = select(2, lay_down(player, ppos, pos)) - else - local node = minetest.get_node(pos) - local dir = minetest.facedir_to_dir(node.param2) - local other = vector.add(pos, dir) - message = select(2, lay_down(player, ppos, other)) - end - if message then - mcl_title.set(player, "actionbar", {text=message, color="white", stay=60}) - end - else - lay_down(player, nil, nil, false) - end - - update_formspecs(false) - - -- skip the night and let all players stand up - if check_in_beds() then - minetest.after(5, function() - if check_in_beds() then - update_formspecs(is_night_skip_enabled()) - mcl_beds.sleep() - end - end) - end -end - --- Callbacks -minetest.register_on_joinplayer(function(player) - local meta = player:get_meta() - if meta:get_string("mcl_beds:sleeping") == "true" then - -- Make player awake on joining server - meta:set_string("mcl_beds:sleeping", "false") - end - - playerphysics.remove_physics_factor(player, "speed", "mcl_beds:sleeping") - playerphysics.remove_physics_factor(player, "jump", "mcl_beds:sleeping") - update_formspecs(false) -end) - -minetest.register_on_leaveplayer(function(player) - lay_down(player, nil, nil, false, true) - local players = minetest.get_connected_players() - local name = player:get_player_name() - for n, player in ipairs(players) do - if player:get_player_name() == name then - players[n] = nil - break - end - end - if check_in_beds(players) then - minetest.after(5, function() - if check_in_beds() then - update_formspecs(is_night_skip_enabled()) - mcl_beds.sleep() - end - end) - end - update_formspecs(false, #players) -end) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "mcl_beds_form" then - return - end - if fields.quit or fields.leave then - lay_down(player, nil, nil, false) - update_formspecs(false) - end - - if fields.force then - update_formspecs(is_night_skip_enabled()) - mcl_beds.sleep() - end -end) - -minetest.register_on_player_hpchange(function(player, hp_change) - if hp_change < 0 then - mcl_beds.kick_player(player) - end -end) diff --git a/mods/ITEMS/mcl_beds/init.lua b/mods/ITEMS/mcl_beds/init.lua deleted file mode 100644 index ad9dbdded..000000000 --- a/mods/ITEMS/mcl_beds/init.lua +++ /dev/null @@ -1,13 +0,0 @@ -mcl_beds = {} -mcl_beds.player = {} -mcl_beds.pos = {} -mcl_beds.bed_pos = {} - -local modpath = minetest.get_modpath("mcl_beds") - --- Load files - -dofile(modpath .. "/functions.lua") -dofile(modpath .. "/api.lua") -dofile(modpath .. "/beds.lua") -dofile(modpath .. "/respawn_anchor.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_beds/license.txt b/mods/ITEMS/mcl_beds/license.txt deleted file mode 100644 index 0494b36b4..000000000 --- a/mods/ITEMS/mcl_beds/license.txt +++ /dev/null @@ -1,60 +0,0 @@ -License of source code ----------------------- - -The MIT License (MIT) -Copyright (C) 2014-2016 BlockMen -Copyright (C) 2014-2016 Various Minetest developers and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or -substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -For more details: -https://opensource.org/licenses/MIT - - -Licenses of media (textures) ----------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2014-2016 BlockMen - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr deleted file mode 100644 index 7fe400b7f..000000000 --- a/mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr +++ /dev/null @@ -1,43 +0,0 @@ -# textdomain: mcl_beds -Beds allow you to sleep at night and make the time pass faster.=Mit Betten können Sie in der Nacht schlafen und die Zeit schneller verstreichen lassen. -To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=Um ein Bett zu benutzen, stellen Sie sich direkt davor und rechtsklicken Sie darauf, um darin zu schlafen. Schlafen funktioniert nur, wenn die Sonne untergeht, in der Nacht oder während eines Gewittersturms. Das Bett muss außerdem fern von Gefahren sein. -You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=Sie hörten von anderen Welten, in denen ein Bett den Startpunkt für Ihr nächstes Leben setzen würde. Aber diese Welt ist keine solche. -By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=Indem Sie ein Bett benutzen, setzen Sie den Startpunkt Ihres nächsten Lebens. Wenn Sie sterben, werden Sie Ihr nächstes Leben auf diesem Bett beginnen, es sei denn, es ist blockiert oder zerstört. -In this world, going to bed won't skip the night, but it will skip thunderstorms.=In dieser Welt können mit dem Bett Nächte nicht übersprungen werden, nur Gewitterstürme. -Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=Mit Schlaf können Sie die Nacht überspringen. Die Nacht wird übersprungen, wenn alle Spieler in dieser Welt sich schlafen gelegt haben. Die Nacht wird dann nach ein paar Sekunden übersprungen. Gewitterstürme werden auf die gleiche Weise übersprungen. -Bed=Bett -Red Bed=Rotes Bett -Blue Bed=Blaues Bett -Cyan Bed=Türkises Bett -Grey Bed=Graues Bett -Light Grey Bed=Hellgraues Bett -Black Bed=Schwarzes Bett -Yellow Bed=Gelbes Bett -Green Bed=Grünes Bett -Magenta Bed=Magenta Bett -Orange Bed=Orange Bett -Purple Bed=Violettes Bett -Brown Bed=Braunes Bett -Pink Bed=Rosa Bett -Lime Bed=Lindgrünes Bett -Light Blue Bed=Hellblaues Bett -White Bed=Weißes Bett -You can't sleep, the bed's too far away!=Sie können nicht schlafen, das Bett ist zu weit weg! -This bed is already occupied!=Dieses Bett ist schon belegt! -You have to stop moving before going to bed!=Sie müssen anhalten, bevor Sie zu Bett gehen! -You can't sleep now, monsters are nearby!=Sie können jetzt nicht schlafen, Monster sind in der Nähe! -You can't sleep, the bed is obstructed!=Sie können nicht schlafen, das Bett ist blockiert! -It's too dangerous to sleep here!=Es ist zu gefährlich, hier zu schlafen! -New respawn position set! But you can only sleep at night or during a thunderstorm.=Neue Wiedereinstiegsposition gesetzt! Aber Sie können nur nachts oder während eines Gewittersturms schlafen. -You can only sleep at night or during a thunderstorm.=Sie können nur nachts oder während eines Gewittersturms schlafen. -New respawn position set!=Neue Wiedereinstiegsposition gesetzt! -Leave bed=Bett verlassen -Abort sleep=Schlaf abbrechen -Players in bed: @1/@2=Spieler im Bett: @1/@2 -Note: Night skip is disabled.=Anmerkung: Überspringen der Nacht deaktiviert. -You're sleeping.=Sie schlafen. -You will fall asleep when all players are in bed.=Sie werden einschlafen, wenn alle Spieler im Bett sind. -You will fall asleep when @1% of all players are in bed.=Sie werden einschlafen, wenn @1% der Spieler im Bett sind. -You're in bed.=Sie sind im Bett. -Allows you to sleep=Zum Einschafen -Respawn Anchor=Seelenanker \ No newline at end of file diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.es.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.es.tr deleted file mode 100644 index e03087d39..000000000 --- a/mods/ITEMS/mcl_beds/locale/mcl_beds.es.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_beds -Beds allow you to sleep at night and make the time pass faster.=Las camas le permiten dormir por la noche y hacer que el tiempo pase más rápido. -To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=Para usar una cama, párate cerca de ella y haz clic derecho en la cama para dormir en ella. Dormir solo funciona cuando se oculta el sol, por la noche o durante una tormenta eléctrica. La cama también debe estar libre de cualquier peligro. -You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=Has oído hablar de otros mundos en los que una cama establecería el punto de partida para tu próxima vida. Pero este mundo no es uno de ellos. -By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=Al usar una cama, se establece como el punto de partida para tu próxima vida. Si mueres, comenzarás tu próxima vida en esta cama, a menos que esté obstruida o destruida. -In this world, going to bed won't skip the night, but it will skip thunderstorms.=En este mundo, ir a la cama no se saltará la noche, pero se saltará las tormentas eléctricas. -Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=Dormir te permite saltarte la noche. Se omite la noche cuando todos los jugadores en este mundo se fueron a dormir. La noche se salta después de dormir durante unos segundos. Las tormentas eléctricas se pueden omitir de la misma manera. -Bed=Cama -Red Bed=Cama roja -Blue Bed=Cama azul -Cyan Bed=Cama cian -Grey Bed=Cama gris -Light Grey Bed=Cama gris ocuro -Black Bed=Cama negra -Yellow Bed=Cama amarilla -Green Bed=Cama verde -Magenta Bed=Cama magenta -Orange Bed=Cama naranja -Purple Bed=Cama morada -Brown Bed=Cama marrón -Pink Bed=Cama rosa -Lime Bed=Cama verde lima -Light Blue Bed=Cama azul claro -White Bed=Cama blanca -You can't sleep, the bed's too far away!=¡No puedes dormir, la cama está muy lejos! -This bed is already occupied!=¡La cama ya está ocupada! -You have to stop moving before going to bed!=¡Tienes que dejar de moverte antes de acostarte! -You can't sleep now, monsters are nearby!=No puedes dormir ahora, ¡hay monstruos cerca! -You can't sleep, the bed is obstructed!=¡No puedes dormir, la cama está obstruida! -It's too dangerous to sleep here!=¡Es muy peligroso dormir aquí! -New respawn position set! But you can only sleep at night or during a thunderstorm.=¡Nueva posición de reaparición establecida! Pero solo puedes dormir por la noche o durante tormentas eléctricas. -You can only sleep at night or during a thunderstorm.=Solo puedes dormir por la noche o durante tormentas eléctricas. -New respawn position set!=¡Nueva posición de reaparición establecida! -Leave bed=Salir de la cama -Abort sleep=Levantarse -Players in bed: @1/@2=Jugadores en la cama: @1/@2 -Note: Night skip is disabled.=Nota: El salto nocturno está deshabilitado. -You're sleeping.=Estás durmiendo. -You will fall asleep when all players are in bed.=Te quedarás dormido cuando todos los jugadores estén en la cama. -You're in bed.=Estas en la cama. diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.fr.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.fr.tr deleted file mode 100644 index d85d48bf1..000000000 --- a/mods/ITEMS/mcl_beds/locale/mcl_beds.fr.tr +++ /dev/null @@ -1,41 +0,0 @@ -# textdomain: mcl_beds -Beds allow you to sleep at night and make the time pass faster.=Les lits vous permettent de dormir la nuit et de faire passer le temps plus rapidement. -To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=Pour utiliser un lit, tenez-vous près de lui et faites un clic droit sur le lit pour y dormir. Dormir ne fonctionne que lorsque le soleil se couche, la nuit ou pendant un orage. Le lit doit également être à l'abri de tout danger. -You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=Vous avez entendu parler d'autres mondes dans lesquels un lit serait le point de départ de votre prochaine vie. Mais ce monde n'en fait pas partie. -By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=En utilisant un lit, vous définissez le point de départ de votre prochaine vie. Si vous mourez, vous commencerez votre prochaine vie dans ce lit, à moins qu'il ne soit obstrué ou détruit. -In this world, going to bed won't skip the night, but it will skip thunderstorms.=Dans ce monde, aller au lit ne sautera pas la nuit, mais cela évitera les orages. -Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=Dormir vous permet de sauter la nuit. La nuit est sautée lorsque tous les joueurs de ce monde se sont endormis. La nuit est sautée après avoir dormi quelques secondes. Les orages peuvent être évités de la même manière. -Bed=Lit -Red Bed=Lit Rouge -Blue Bed=Lit Bleu -Cyan Bed=Lit Cyan -Grey Bed=Lit Gris -Light Grey Bed=Lit Gris Clair -Black Bed=Lit Noir -Yellow Bed=Lit Jaune -Green Bed=Lit Vert -Magenta Bed=Lit Magenta -Orange Bed=Lit Orange -Purple Bed=Lit Violet -Brown Bed=Lit Marron -Pink Bed=Lit Rose -Lime Bed=Lit Vert Clair -Light Blue Bed=Lit Bleu Clair -White Bed=Lit Blanc -You can't sleep, the bed's too far away!=Vous ne pouvez pas dormir, le lit est trop loin! -This bed is already occupied!=Ce lit est déjà occupé! -You have to stop moving before going to bed!=Vous devez arrêter de bouger avant de vous coucher! -You can't sleep now, monsters are nearby!=Vous ne pouvez pas dormir maintenant, les monstres sont à proximité! -You can't sleep, the bed is obstructed!=Vous ne pouvez pas dormir, le lit est obstrué! -It's too dangerous to sleep here!=C'est trop dangereux de dormir ici! -New respawn position set! But you can only sleep at night or during a thunderstorm.=Nouvelle position de réapparition définie! Mais vous ne pouvez dormir que la nuit ou pendant un orage. -You can only sleep at night or during a thunderstorm.=Vous ne pouvez dormir que la nuit ou pendant un orage. -New respawn position set!=Nouvelle position de réapparition définie! -Leave bed=Quitter le lit -Abort sleep=Abandonner le sommeil -Players in bed: @1/@2=Joueurs au lit: @1/@2 -Note: Night skip is disabled.=Remarque: Le saut de nuit est désactivé. -You're sleeping.=Tu dors. -You will fall asleep when all players are in bed.=Vous vous endormirez lorsque tous les joueurs seront au lit. -You're in bed.=Tu es au lit. -Allows you to sleep=Vous permet de dormir diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr deleted file mode 100644 index 3a1d8f6ce..000000000 --- a/mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr +++ /dev/null @@ -1,41 +0,0 @@ -# textdomain: mcl_beds -Beds allow you to sleep at night and make the time pass faster.=Łóżka pozwalają na spanie w nocy i sprawiają, że czas płynie szybciej. -To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=Aby użyć łóżka stań blisko niego i kliknij je prawym przyciskiem myszy aby na nim zasnąć. Spać można tylko przy zachodzie słońca, w nocy lub podczas burz. Łóżko nie może być również narażone na niebezpieczeństwo. -You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=Słyszałaś o światach w których łóżko byłoby twoim punktem wyjścia w następnym życiu. Ten świat nie jest jednym z nich. -By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=Korzystając z łóżka ustawiasz punkt wyjścia w następnym życiu. Jeśli umrzesz, odrodzisz się przy tym łóżku chyba, że zostanie zniszczone lub zawalone. -In this world, going to bed won't skip the night, but it will skip thunderstorms.=W tym świecie pójście do łóżka nie ominie nocy, jednak może pominąć burze. -Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=Spanie pozwala pominąć noc. Noc jest pomijana gdy wszyscy gracze w tym świecie pójdą spać. Jest ona pomijana po kilku sekundach. Burze można pomijać w ten sam sposób. -Bed=Łóżko -Red Bed=Czerwone łóżko -Blue Bed=Niebieskie łóżko -Cyan Bed=Błękitne łóżko -Grey Bed=Szare łóżko -Light Grey Bed=Jasnoszare łóżko -Black Bed=Czarne łóżko -Yellow Bed=Żółte łóżko -Green Bed=Zielone łóżko -Magenta Bed=Karmazynowe łóżko -Orange Bed=Pomarańczowe łóżko -Purple Bed=Fioletowe łóżko -Brown Bed=Brązowe łóżko -Pink Bed=Różowe łóżko -Lime Bed=Jasnozielone łóżko -Light Blue Bed=Jasnoniebieskie łóżko -White Bed=Białe łóżko -You can't sleep, the bed's too far away!=Nie możesz spać, łóżko jest zbyt daleko! -This bed is already occupied!=To łóżko jest zajęte! -You have to stop moving before going to bed!=Musisz przestać się poruszać przed pójściem do spania! -You can't sleep now, monsters are nearby!=Nie możesz spać, w pobliżu są potwory! -You can't sleep, the bed is obstructed!=Nie możesz spać, łóżko jest zawalone! -It's too dangerous to sleep here!=Tu jest zbyt niebezpiecznie by spać! -New respawn position set! But you can only sleep at night or during a thunderstorm.=Nowa pozycja do odrodzenia ustawiona! Ale możesz spać tylko podczas nocy, bądź burzy. -You can only sleep at night or during a thunderstorm.=Możesz spać tylko podczas nocy, bądź burzy. -New respawn position set!=Nowa pozycja odradzania ustawiona! -Leave bed=Opuść łóżka -Abort sleep=Przerwij sen -Players in bed: @1/@2=Graczy w łóżkach: @1/@2 -Note: Night skip is disabled.=Uwaga: Pomijanie nocy wyłączone. -You're sleeping.=Śpisz. -You will fall asleep when all players are in bed.=Zaśniesz gdy wszyscy gracze będą w łóżkach. -You're in bed.=Jesteś w łóżku. -Allows you to sleep=Pozwala spać diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.ru.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.ru.tr deleted file mode 100644 index 8093e95fb..000000000 --- a/mods/ITEMS/mcl_beds/locale/mcl_beds.ru.tr +++ /dev/null @@ -1,41 +0,0 @@ -# textdomain: mcl_beds -Beds allow you to sleep at night and make the time pass faster.=На кровати можно спать по ночам и заставлять ночи проходить быстрее. -To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=Чтобы использовать кровать, встаньте рядом и кликните по ней правой кнопкой. Вы сможете уснуть, только если солнце в закате, либо уже наступила ночь, либо идёт гроза. Кровать при этом должна в месте, свободном от любых опасностей. -You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=Вы слышали о других мирах, где кровать становится стартовой точкой для вашей следующей жизни. Но этот мир не такой. -By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=Воспользовавшись кроватью, вы устанавливаете стартовую точку для вашей следующей жизни. Если вы умрёте, ваша новая жизнь начнётся в этой кровати, если она не уничтожена и не загромождена. -In this world, going to bed won't skip the night, but it will skip thunderstorms.=В этом мире использование кровати не заставит ночь пройти скорее, но может сократить время грозового шторма. -Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=Сон позволяет вам пропустить ночь. Если все игроки в этом мире лягут спать, ночь будет пропущена. Она закончится буквально через несколько секунд. Таким же способом можно пропускать грозы. -Bed=Кровать -Red Bed=Красная кровать -Blue Bed=Синяя кровать -Cyan Bed=Голубая кровать -Grey Bed=Серая кровать -Light Grey Bed=Светло-серая кровать -Black Bed=Чёрная кровать -Yellow Bed=Жёлтая кровать -Green Bed=Зелёная кровать -Magenta Bed=Фиолетовая кровать -Orange Bed=Оранжевая кровать -Purple Bed=Пурпурная кровать -Brown Bed=Коричневая кровать -Pink Bed=Розовая кровать -Lime Bed=Зелёная лаймовая кровать -Light Blue Bed=Светло-голубая кровать -White Bed=Белая кровать -You can't sleep, the bed's too far away!=Не удаётся лечь, кровать слишком далеко! -This bed is already occupied!=Эта кровать уже занята! -You have to stop moving before going to bed!=Вам нужно перестать двигаться, чтобы лечь! -You can't sleep now, monsters are nearby!=Вы не можете спать, монстры слишком близко! -You can't sleep, the bed is obstructed!=Здесь не удастся поспать, кровать загромождена! -It's too dangerous to sleep here!=Спать здесь слишком опасно! -New respawn position set! But you can only sleep at night or during a thunderstorm.=Новая точка возрождения успешно задана! Но спать вы можете только ночью или во время грозы. -You can only sleep at night or during a thunderstorm.=Вы можете спать только ночью или во время грозы. -New respawn position set!=Задана новая точка возрождения! -Leave bed=Покинуть кровать -Abort sleep=Прервать сон -Players in bed: @1/@2=Игроков в кроватях: @1/@2 -Note: Night skip is disabled.=Предупреждение: Пропускание ночи отключено. -You're sleeping.=Вы спите... -You will fall asleep when all players are in bed.=Вы уснёте, когда лягут все игроки. -You're in bed.=Вы в кровати. -Allows you to sleep=Позволяет вам спать diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.zh_TW.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.zh_TW.tr deleted file mode 100644 index fd0a58629..000000000 --- a/mods/ITEMS/mcl_beds/locale/mcl_beds.zh_TW.tr +++ /dev/null @@ -1,41 +0,0 @@ -# textdomain: mcl_beds -Beds allow you to sleep at night and make the time pass faster.=床可以讓你在晚上睡覺,讓時間過得更快。 -To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=要使用床,站在靠近床的地方,右鍵點擊床,就可以在床上睡覺。只有在太陽落山、晚上或雷雨時才能睡覺。床也必須遠離任何危險。 -You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=你聽說過其他的世界,在這個世界裡,一張床會成為你的重生點。但這個世界並不是其中之一。 -By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=通過使用一張床,你設定了重生點。如果你死了,你將在這張床上重生,除非它被阻礙或破壞。 -In this world, going to bed won't skip the night, but it will skip thunderstorms.=在這個世界上,上床睡覺不會跳過夜晚,但是會跳過雷暴。 -Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=睡覺可以跳過夜晚。當這個世界的所有玩家都進入睡眠狀態幾秒後,夜晚就會被跳過。雷雨也可以用同樣的方式跳過。 -Bed=床 -Red Bed=紅色床 -Blue Bed=藍色床 -Cyan Bed=青色床 -Grey Bed=灰色床 -Light Grey Bed=淺灰色床 -Black Bed=黑色床 -Yellow Bed=黃色床 -Green Bed=綠色床 -Magenta Bed=洋紅色床 -Orange Bed=橙色床 -Purple Bed=紫色床 -Brown Bed=棕色床 -Pink Bed=粉紅色床 -Lime Bed=淺綠色床 -Light Blue Bed=淺藍色床 -White Bed=白色床 -You can't sleep, the bed's too far away!=你無法休息,床離你太遠了! -This bed is already occupied!=這張床已被佔用! -You have to stop moving before going to bed!=在睡覺前,你必須停下! -You can't sleep now, monsters are nearby!=你無法休息,有怪物在附近遊蕩! -You can't sleep, the bed is obstructed!=你無法休息,床已被阻擋! -It's too dangerous to sleep here!=在這裏睡太危險了! -New respawn position set! But you can only sleep at night or during a thunderstorm.=你設定了重生點,但你只能在晚上或雷雨時才能睡覺。 -You can only sleep at night or during a thunderstorm.=你只能在晚上或雷雨時才能睡覺。 -New respawn position set!=你設定了重生點! -Leave bed=起來 -Abort sleep=醒來 -Players in bed: @1/@2=@2位玩家中的@1位在床上 -Note: Night skip is disabled.=注意:睡覺以跳過夜晚被停用 -You're sleeping.=你睡着了。 -You will fall asleep when all players are in bed.=你會在所有玩家在床上時睡着 -You're in bed.=你在床上。 -Allows you to sleep=允許你睡覺 diff --git a/mods/ITEMS/mcl_beds/locale/template.txt b/mods/ITEMS/mcl_beds/locale/template.txt deleted file mode 100644 index 69c493880..000000000 --- a/mods/ITEMS/mcl_beds/locale/template.txt +++ /dev/null @@ -1,43 +0,0 @@ -# textdomain: mcl_beds -Beds allow you to sleep at night and make the time pass faster.= -To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.= -You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.= -By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.= -In this world, going to bed won't skip the night, but it will skip thunderstorms.= -Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.= -Bed= -Red Bed= -Blue Bed= -Cyan Bed= -Grey Bed= -Light Grey Bed= -Black Bed= -Yellow Bed= -Green Bed= -Magenta Bed= -Orange Bed= -Purple Bed= -Brown Bed= -Pink Bed= -Lime Bed= -Light Blue Bed= -White Bed= -You can't sleep, the bed's too far away!= -This bed is already occupied!= -You have to stop moving before going to bed!= -You can't sleep now, monsters are nearby!= -You can't sleep, the bed is obstructed!= -It's too dangerous to sleep here!= -New respawn position set! But you can only sleep at night or during a thunderstorm.= -You can only sleep at night or during a thunderstorm.= -New respawn position set!= -Leave bed= -Abort sleep= -Players in bed: @1/@2= -Note: Night skip is disabled.= -You're sleeping.= -You will fall asleep when all players are in bed.= -You will fall asleep when @1% of all players are in bed.= -You're in bed.= -Allows you to sleep= -Respawn Anchor= diff --git a/mods/ITEMS/mcl_beds/mod.conf b/mods/ITEMS/mcl_beds/mod.conf deleted file mode 100644 index bb1ea175e..000000000 --- a/mods/ITEMS/mcl_beds/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_beds -author = BlockMen -description = -depends = playerphysics -optional_depends = mcl_sounds, mcl_worlds, mcl_wool, mcl_dye, mcl_explosions, mcl_weather, mcl_spawn, doc, mesecon \ No newline at end of file diff --git a/mods/ITEMS/mcl_beds/respawn_anchor.lua b/mods/ITEMS/mcl_beds/respawn_anchor.lua deleted file mode 100644 index 469a8ba4f..000000000 --- a/mods/ITEMS/mcl_beds/respawn_anchor.lua +++ /dev/null @@ -1,98 +0,0 @@ ---TODO: Add sounds for the respawn anchor (charge sounds etc.) - ---Nether ends at y -29077 ---Nether roof at y -28933 -local S = minetest.get_translator(minetest.get_current_modname()) ---local mod_doc = minetest.get_modpath("doc") -> maybe add documentation ? - -for i=0,4 do - local nodebox_uncharged = { --Reused the composter nodebox, since it is basicly the same - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, -0.375, 0.5, 0.5}, -- Left wall - { 0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Right wall - {-0.375, -0.5, 0.375, 0.375, 0.5, 0.5}, -- Back wall - {-0.375, -0.5, -0.5, 0.375, 0.5, -0.375}, -- Front wall - {-0.5, -0.5, -0.5, 0.5, -0.47, 0.5}, -- Bottom level, -0.47 because -0.5 is so low that you can see the texture of the block below through - } - } - - local nodebox_charged = { --Reused the composter nodebox, since it is basicly the same - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, -0.375, 0.5, 0.5}, -- Left wall - { 0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Right wall - {-0.375, -0.5, 0.375, 0.375, 0.5, 0.5}, -- Back wall - {-0.375, -0.5, -0.5, 0.375, 0.5, -0.375}, -- Front wall - {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Bottom level - } - } - - local function rightclick(pos, node, player, itemstack) - if itemstack.get_name(itemstack) == "mcl_nether:glowstone" and i ~= 4 then - minetest.set_node(pos, {name="mcl_beds:respawn_anchor_charged_" .. i+1}) - itemstack:take_item() - elseif mcl_worlds.pos_to_dimension(pos) ~= "nether" then - if node.name ~= "mcl_beds:respawn_anchor" then --only charged respawn anchors are exploding in the overworld & end in minecraft - mcl_explosions.explode(pos, 5, {drop_chance = 0, fire = true}) - end - elseif string.match(node.name, "mcl_beds:respawn_anchor_charged_") then - minetest.chat_send_player(player.get_player_name(player), S"New respawn position set!") - mcl_spawn.set_spawn_pos(player, pos, nil) - end - end - - - if i == 0 then - minetest.register_node("mcl_beds:respawn_anchor",{ - description=S("Respawn Anchor"), - tiles = { - "respawn_anchor_top_off.png", - "respawn_anchor_bottom.png", - "respawn_anchor_side0.png" - }, - drawtype = "nodebox", - node_box = nodebox_uncharged, - on_rightclick = rightclick, - groups = {pickaxey=1, material_stone=1}, - _mcl_hardness = 22.5, - sounds= mcl_sounds.node_sound_stone_defaults(), - use_texture_alpha = "blend", - }) - mesecon.register_mvps_stopper("mcl_beds:respawn_anchor") - else - minetest.register_node("mcl_beds:respawn_anchor_charged_"..i,{ - description=S("Respawn Anchor"), - tiles = { - "portal.png", - "respawn_anchor_bottom.png", - "respawn_anchor_side"..i ..".png" - }, - drawtype = "nodebox", - node_box = nodebox_charged, - on_rightclick = rightclick, - groups = {pickaxey=1, material_stone=1, not_in_creative_inventory=1}, - _mcl_hardness = 22.5, - sounds= mcl_sounds.node_sound_stone_defaults(), - drop = { - max_items = 1, - items = { - {items = {"mcl_beds:respawn_anchor"}}, - } - }, - light_source = math.min((4 * i) - 1, minetest.LIGHT_MAX), - use_texture_alpha = "blend", - }) - mesecon.register_mvps_stopper("mcl_beds:respawn_anchor_charged_"..i) - end - end - - -minetest.register_craft({ --TODO: Please change this crafting recipe once crying obsidian is implemented! - output = "mcl_beds:respawn_anchor", - recipe = { - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, - {"mcl_nether:glowstone", "mcl_nether:glowstone", "mcl_nether:glowstone"}, - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"} - } - }) diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_black.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_black.png deleted file mode 100644 index 6da9b5690..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_blue.png deleted file mode 100644 index d6bee0a72..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_bottom_bottom.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_bottom_bottom.png deleted file mode 100644 index 35c9d59ca..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_bottom_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_bottom_top.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_bottom_top.png deleted file mode 100644 index 87a0e2abd..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_bottom_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_brown.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_brown.png deleted file mode 100644 index 5cb0e4196..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_cyan.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_cyan.png deleted file mode 100644 index 03eec9c70..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_green.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_green.png deleted file mode 100644 index a2fa4bff5..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_grey.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_grey.png deleted file mode 100644 index a53dec153..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_light_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_light_blue.png deleted file mode 100644 index 2e70475ae..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_lime.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_lime.png deleted file mode 100644 index 9bfb2f9c4..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_magenta.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_magenta.png deleted file mode 100644 index b223b591e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_orange.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_orange.png deleted file mode 100644 index df14acbf9..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_pink.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_pink.png deleted file mode 100644 index e0f6365ba..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_purple.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_purple.png deleted file mode 100644 index abf4c3593..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_red.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_red.png deleted file mode 100644 index 20fcd7ca6..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_black.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_black.png deleted file mode 100644 index 302bc5b40..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_blue.png deleted file mode 100644 index 0d5b3f412..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_brown.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_brown.png deleted file mode 100644 index 25983a530..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_cyan.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_cyan.png deleted file mode 100644 index 94614b075..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_green.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_green.png deleted file mode 100644 index f4990d58f..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_grey.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_grey.png deleted file mode 100644 index 40727ca8e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_light_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_light_blue.png deleted file mode 100644 index dec15108d..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_lime.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_lime.png deleted file mode 100644 index fef72ce3b..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_magenta.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_magenta.png deleted file mode 100644 index f1cfdde62..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_orange.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_orange.png deleted file mode 100644 index e8faf315e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_pink.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_pink.png deleted file mode 100644 index f536a7960..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_purple.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_purple.png deleted file mode 100644 index acdf05e87..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_black.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_black.png deleted file mode 100644 index 84c1b31f2..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_blue.png deleted file mode 100644 index 474a8f6fb..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_brown.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_brown.png deleted file mode 100644 index fe1e8e425..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_cyan.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_cyan.png deleted file mode 100644 index 5eacdf654..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_green.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_green.png deleted file mode 100644 index d98f4263a..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_grey.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_grey.png deleted file mode 100644 index 02e80ed96..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_light_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_light_blue.png deleted file mode 100644 index c3ca6ed88..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_lime.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_lime.png deleted file mode 100644 index d33985789..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_magenta.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_magenta.png deleted file mode 100644 index 273f0f570..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_orange.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_orange.png deleted file mode 100644 index 65333f73a..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_pink.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_pink.png deleted file mode 100644 index 5907ad86f..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_purple.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_purple.png deleted file mode 100644 index 0bfa0a1b7..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_red.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_red.png deleted file mode 100644 index b324086d6..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_silver.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_silver.png deleted file mode 100644 index 0269dc778..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_white.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_white.png deleted file mode 100644 index 1ed1e0239..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_yellow.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_yellow.png deleted file mode 100644 index 378b63341..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_r_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_red.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_red.png deleted file mode 100644 index 103570e14..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_silver.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_silver.png deleted file mode 100644 index 490298dd1..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_white.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_white.png deleted file mode 100644 index 8cdbd2b1d..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_yellow.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_yellow.png deleted file mode 100644 index fed97cded..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_bottom_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_black.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_black.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_blue.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_brown.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_brown.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_cyan.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_cyan.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_green.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_green.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_grey.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_grey.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_light_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_light_blue.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_lime.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_lime.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_magenta.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_magenta.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_orange.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_orange.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_pink.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_pink.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_purple.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_purple.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_black.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_black.png deleted file mode 100644 index 5bfa983c3..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_blue.png deleted file mode 100644 index ecf58cd03..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_brown.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_brown.png deleted file mode 100644 index f1473c36a..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_cyan.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_cyan.png deleted file mode 100644 index e3c466ece..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_green.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_green.png deleted file mode 100644 index e59981a4c..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_grey.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_grey.png deleted file mode 100644 index 65052ad02..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_light_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_light_blue.png deleted file mode 100644 index 974ac6566..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_lime.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_lime.png deleted file mode 100644 index 88c367407..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_magenta.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_magenta.png deleted file mode 100644 index 04bdc7ddf..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_orange.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_orange.png deleted file mode 100644 index 5271b820a..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_pink.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_pink.png deleted file mode 100644 index ca6b5047a..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_purple.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_purple.png deleted file mode 100644 index 740824b38..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_red.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_red.png deleted file mode 100644 index 638bdd508..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_silver.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_silver.png deleted file mode 100644 index b0739432e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_white.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_white.png deleted file mode 100644 index 1e536432e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_yellow.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_yellow.png deleted file mode 100644 index a3d9c8c2b..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_r_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_red.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_red.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_silver.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_silver.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_white.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_white.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_yellow.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_yellow.png deleted file mode 100644 index 39fb8c580..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_side_top_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_silver.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_silver.png deleted file mode 100644 index 73de606f2..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_black.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_black.png deleted file mode 100644 index 046e847a6..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_blue.png deleted file mode 100644 index 0c6affda8..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_brown.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_brown.png deleted file mode 100644 index cf3eaa405..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_cyan.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_cyan.png deleted file mode 100644 index 2963d1da2..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_gray.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_gray.png deleted file mode 100644 index d1cd63897..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_gray.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_green.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_green.png deleted file mode 100644 index 4eda85f33..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_grey.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_grey.png deleted file mode 100644 index 1aa01946e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_light_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_light_blue.png deleted file mode 100644 index 949efb20e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_lime.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_lime.png deleted file mode 100644 index 14ad57bd1..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_magenta.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_magenta.png deleted file mode 100644 index ce9e6a3de..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_orange.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_orange.png deleted file mode 100644 index 036ec1169..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_pink.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_pink.png deleted file mode 100644 index b94a3d989..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_purple.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_purple.png deleted file mode 100644 index bf053e334..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_red.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_red.png deleted file mode 100644 index 77668f201..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_silver.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_silver.png deleted file mode 100644 index d17a506e3..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_white.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_white.png deleted file mode 100644 index ee8105119..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_yellow.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_yellow.png deleted file mode 100644 index d10fb92fa..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_bottom_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_black.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_black.png deleted file mode 100644 index 1c2c0abcd..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_blue.png deleted file mode 100644 index ccc492158..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_brown.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_brown.png deleted file mode 100644 index d18faece8..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_cyan.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_cyan.png deleted file mode 100644 index 0bddf475e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_green.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_green.png deleted file mode 100644 index 00b23cd8a..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_grey.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_grey.png deleted file mode 100644 index 1c4903075..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_light_blue.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_light_blue.png deleted file mode 100644 index df13cf007..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_lime.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_lime.png deleted file mode 100644 index b9194be16..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_magenta.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_magenta.png deleted file mode 100644 index 215ef796c..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_orange.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_orange.png deleted file mode 100644 index 473caf37f..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_pink.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_pink.png deleted file mode 100644 index ac8b29b9b..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_purple.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_purple.png deleted file mode 100644 index e29210540..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_red.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_red.png deleted file mode 100644 index a418835b5..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_silver.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_silver.png deleted file mode 100644 index 51609fb0c..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_white.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_white.png deleted file mode 100644 index d2dc47702..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_yellow.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_yellow.png deleted file mode 100644 index 10edecc3b..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_top_top_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_white.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_white.png deleted file mode 100644 index f4ed87dac..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_yellow.png b/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_yellow.png deleted file mode 100644 index 6705b4a80..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/mcl_beds_bed_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/portal.png b/mods/ITEMS/mcl_beds/textures/portal.png deleted file mode 100644 index 160ad95f3..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/portal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/respawn_anchor_bottom.png b/mods/ITEMS/mcl_beds/textures/respawn_anchor_bottom.png deleted file mode 100644 index d5d332c15..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/respawn_anchor_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side0.png b/mods/ITEMS/mcl_beds/textures/respawn_anchor_side0.png deleted file mode 100644 index 31a6e58f3..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side1.png b/mods/ITEMS/mcl_beds/textures/respawn_anchor_side1.png deleted file mode 100644 index ed4667a2e..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side2.png b/mods/ITEMS/mcl_beds/textures/respawn_anchor_side2.png deleted file mode 100644 index 996042015..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side3.png b/mods/ITEMS/mcl_beds/textures/respawn_anchor_side3.png deleted file mode 100644 index f0728943c..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side4.png b/mods/ITEMS/mcl_beds/textures/respawn_anchor_side4.png deleted file mode 100644 index e9bea5371..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/respawn_anchor_side4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_beds/textures/respawn_anchor_top_off.png b/mods/ITEMS/mcl_beds/textures/respawn_anchor_top_off.png deleted file mode 100644 index a180e96e7..000000000 Binary files a/mods/ITEMS/mcl_beds/textures/respawn_anchor_top_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/README.md b/mods/ITEMS/mcl_bells/README.md deleted file mode 100644 index 53cba890c..000000000 --- a/mods/ITEMS/mcl_bells/README.md +++ /dev/null @@ -1,16 +0,0 @@ -mcl_bells ---------- -Village bells for MineClone2, originally imported from mcl5, heavily modified by cora. - -License of media files ----------------------- -* sounds/bell_stroke.ogg - cc0 http://creativecommons.org/publicdomain/zero/1.0/ - * created by edsward - * modified by sorcerykid - * obtained from https://freesound.org/people/edsward/sounds/341866/ - -* textures/mcl_bells_bell.png - cc4-by-sa https://creativecommons.org/licenses/by-sa/4.0/ - * from pixelperfection by XSSheep and NovaWostra ( https://www.planetminecraft.com/texture-pack/pixel-perfection-chorus-edit/ ) - -* textures/mcl_bells_bell_*.png - cc0 http://creativecommons.org/publicdomain/zero/1.0/ - * created by cora diff --git a/mods/ITEMS/mcl_bells/init.lua b/mods/ITEMS/mcl_bells/init.lua deleted file mode 100644 index b216c6659..000000000 --- a/mods/ITEMS/mcl_bells/init.lua +++ /dev/null @@ -1,46 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_bells = {} - -local has_mcl_wip = minetest.get_modpath("mcl_wip") - -function mcl_bells.ring_once(pos) - minetest.sound_play( "mcl_bells_bell_stroke", { pos = pos, gain = 1.5, max_hear_distance = 150,}) - local vv=minetest.get_objects_inside_radius(pos,150) - for _,o in pairs(vv) do - if o.type == "npc" then - mcl_mobs:gopath(o:get_luaentity(),pos,function() end) - end - end -end - -minetest.register_node("mcl_bells:bell", { - description = S("Bell"), - inventory_image = "mcl_bells_bell.png", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - { -6/16, -6/16, -6/16, 6/16, 6/16, 6/16 }, - { -2/16, 6/16, -2/16, 2/16, 8/16, 2/16 }, - } - }, - --tiles = { "blank.png" }, - tiles = { - "mcl_bells_bell_top.png", - "mcl_bells_bell_bottom.png", - "mcl_bells_bell_side.png", - }, - is_ground_content = false, - groups = {pickaxey=2, deco_block=1 }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - on_rightclick = mcl_bells.ring_once, - use_texture_alpha = "clip", -}) - -if has_mcl_wip then - mcl_wip.register_wip_item("mcl_bells:bell") -end diff --git a/mods/ITEMS/mcl_bells/locale/mcl_bells.fr.tr b/mods/ITEMS/mcl_bells/locale/mcl_bells.fr.tr deleted file mode 100644 index a1f7a075c..000000000 --- a/mods/ITEMS/mcl_bells/locale/mcl_bells.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_observers -Bell=Cloche diff --git a/mods/ITEMS/mcl_bells/locale/template.txt b/mods/ITEMS/mcl_bells/locale/template.txt deleted file mode 100644 index 2f554c2a0..000000000 --- a/mods/ITEMS/mcl_bells/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_observers -Bell= diff --git a/mods/ITEMS/mcl_bells/mod.conf b/mods/ITEMS/mcl_bells/mod.conf deleted file mode 100644 index 18e74a7a8..000000000 --- a/mods/ITEMS/mcl_bells/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_bells -optional_depends = mcl_wip diff --git a/mods/ITEMS/mcl_bells/sounds/mcl_bells_bell_stroke.ogg b/mods/ITEMS/mcl_bells/sounds/mcl_bells_bell_stroke.ogg deleted file mode 100755 index 023d1f946..000000000 Binary files a/mods/ITEMS/mcl_bells/sounds/mcl_bells_bell_stroke.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell.png deleted file mode 100644 index eb135f0d4..000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_bottom.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_bottom.png deleted file mode 100644 index ccb89540a..000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_side.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_side.png deleted file mode 100644 index 98db2bac7..000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_top.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_top.png deleted file mode 100644 index d018844e9..000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/README.md b/mods/ITEMS/mcl_blackstone/README.md deleted file mode 100644 index d2e385f04..000000000 --- a/mods/ITEMS/mcl_blackstone/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Blackstone Mod - -This mod adds new Blocks: Blackstone, Basalt, Soul Fire, Soul Torch etc. - -## Version: - -Its version 1.0.2 - -## License - -CC BY-SA 4.0 diff --git a/mods/ITEMS/mcl_blackstone/init.lua b/mods/ITEMS/mcl_blackstone/init.lua deleted file mode 100644 index 4909edf2f..000000000 --- a/mods/ITEMS/mcl_blackstone/init.lua +++ /dev/null @@ -1,373 +0,0 @@ -local S = minetest.get_translator("mcl_blackstone") - - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_3way -end - ---Blocks -minetest.register_node("mcl_blackstone:blackstone", { - description = S("Blackstone"), - tiles = {"mcl_blackstone.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1, cobble=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) -minetest.register_node("mcl_blackstone:blackstone_gilded", { - description = S("Gilded Blackstone"), - tiles = {"mcl_blackstone.png^mcl_blackstone_gilded_side.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1, xp=1}, - drop = { - max_items = 1, - items = { - {items = {"mcl_core:gold_nugget 2"},rarity = 5}, - {items = {"mcl_core:gold_nugget 3"},rarity = 5}, - {items = {"mcl_core:gold_nugget 4"},rarity = 5}, - {items = {"mcl_core:gold_nugget 5"},rarity = 5}, - {items = {"mcl_blackstone:blackstone_gilded"}, rarity = 8}, - } - }, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, -}) -minetest.register_node("mcl_blackstone:nether_gold", { - description = S("Nether Gold Ore"), - tiles = {"mcl_nether_netherrack.png^mcl_blackstone_gilded_side.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1, xp=1}, - drop = { - max_items = 1, - items = { - {items = {"mcl_core:gold_nugget 2"},rarity = 5}, - {items = {"mcl_core:gold_nugget 3"},rarity = 5}, - {items = {"mcl_core:gold_nugget 4"},rarity = 5}, - {items = {"mcl_core:gold_nugget 5"},rarity = 5}, - {items = {"mcl_blackstone:nether_gold"}, rarity = 8}, - } - }, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, -}) -minetest.register_node("mcl_blackstone:basalt_polished", { - description = S("Polished Basalt"), - tiles = {"mcl_blackstone_basalt_top_polished.png", "mcl_blackstone_basalt_top_polished.png", "mcl_blackstone_basalt_side_polished.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - on_rotate = on_rotate, - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) -minetest.register_node("mcl_blackstone:basalt", { - description = S("Basalt"), - tiles = {"mcl_blackstone_basalt_top.png", "mcl_blackstone_basalt_top.png", "mcl_blackstone_basalt_side.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - on_rotate = on_rotate, - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) -minetest.register_node("mcl_blackstone:blackstone_polished", { - description = S("Polished Blackstone"), - tiles = {"mcl_blackstone_polished.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) -minetest.register_node("mcl_blackstone:blackstone_chiseled_polished", { - description = S("Chiseled Polished Blackstone"), - tiles = {"mcl_blackstone_chiseled_polished.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) -minetest.register_node("mcl_blackstone:blackstone_brick_polished", { - description = S("Polished Blackstone Bricks"), - tiles = {"mcl_blackstone_polished_bricks.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) -minetest.register_node("mcl_blackstone:quartz_brick", { - description = S("Quartz Bricks"), - tiles = {"mcl_backstone_quartz_bricks.png"}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) -minetest.register_node("mcl_blackstone:soul_soil", { - description = S("Soul Soil"), - tiles = {"mcl_blackstone_soul_soil.png"}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_sand_defaults(), - groups = { cracky = 3, handy = 1, shovely = 1, soul_block = 1 }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) -minetest.register_node("mcl_blackstone:soul_fire", { - description = S("Eternal Soul Fire"), - _doc_items_longdesc = minetest.registered_nodes["mcl_fire:eternal_fire"]._doc_items_longdesc , - drawtype = "firelike", - tiles = { - { - name = "soul_fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "soul_fire_basic_flame.png", - paramtype = "light", - light_source = 10, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 2, - _mcl_node_death_message = minetest.registered_nodes["mcl_fire:fire"]._mcl_node_death_message, - groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston = 1, destroys_items = 1, set_on_fire=8}, - floodable = true, - drop = "", - on_flood = function(pos, oldnode, newnode) - if minetest.get_item_group(newnode.name, "water") > 0 then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - end - end, - on_construct=function(pos) - local under = minetest.get_node(vector.offset(pos,0,-1,0)).name - if minetest.get_item_group(under,"soul_block") > 0 then - minetest.swap_node(pos, {name = "air"}) - end - end -}) - -local old_onconstruct=minetest.registered_nodes["mcl_fire:fire"].on_construct -minetest.registered_nodes["mcl_fire:fire"].on_construct=function(pos) - local under = minetest.get_node(vector.offset(pos,0,-1,0)).name - if minetest.get_item_group(under,"soul_block") > 0 then - minetest.swap_node(pos, {name = "mcl_blackstone:soul_fire"}) - end - old_onconstruct(pos) -end - ---slabs/stairs -mcl_stairs.register_stair_and_slab_simple("blackstone", "mcl_blackstone:blackstone", "Blackstone Stair", "Blackstone Slab", "Double Blackstone Slab") -mcl_stairs.register_stair_and_slab_simple("blackstone_polished", "mcl_blackstone:blackstone_polished", "Polished Blackstone Stair", "Polished Blackstone Slab", "Polished Double Blackstone Slab") -mcl_stairs.register_stair_and_slab_simple("blackstone_chiseled_polished", "mcl_blackstone:blackstone_chiseled_polished", "Polished Chiseled Blackstone Stair", "Chiseled Polished Blackstone Slab", "Double Polished Chiseled Blackstone Slab") -mcl_stairs.register_stair_and_slab_simple("blackstone_brick_polished", "mcl_blackstone:blackstone_brick_polished", "Polished Blackstone Brick Stair", "Polished Blackstone Brick Slab", "Double Polished Blackstone Brick Slab") - ---Wall -mcl_walls.register_wall("mcl_blackstone:wall", S("Blackstone Wall"), "mcl_blackstone:blackstone") - ---lavacooling -minetest.register_abm({ - label = "Lava cooling (basalt)", - nodenames = {"group:lava"}, - neighbors = {"mcl_core:ice"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local water = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, "mcl_core:ice") - local lavatype = minetest.registered_nodes[node.name].liquidtype - for w=1, #water do - local waternode = minetest.get_node(water[w]) - local watertype = minetest.registered_nodes[waternode.name].liquidtype - if water[w].y < pos.y and water[w].x == pos.x and water[w].z == pos.z then - minetest.set_node(water[w], {name="mcl_blackstone:basalt"}) - elseif lavatype == "flowing" and water[w].y == pos.y and (water[w].x == pos.x or water[w].z == pos.z) then - minetest.set_node(pos, {name="mcl_blackstone:basalt"}) - elseif lavatype == "flowing" and water[w].y > pos.y and water[w].x == pos.x and water[w].z == pos.z then - minetest.set_node(pos, {name="mcl_blackstone:basalt"}) - end - end - end, -}) - -minetest.register_abm({ - label = "Lava cooling (blackstone)", - nodenames = {"group:lava"}, - neighbors = {"mcl_core:packed_ice"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local water = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, "mcl_core:packed_ice") - local lavatype = minetest.registered_nodes[node.name].liquidtype - for w=1, #water do - local waternode = minetest.get_node(water[w]) - local watertype = minetest.registered_nodes[waternode.name].liquidtype - if water[w].y < pos.y and water[w].x == pos.x and water[w].z == pos.z then - minetest.set_node(water[w], {name="mcl_blackstone:blackstone"}) - elseif lavatype == "flowing" and water[w].y == pos.y and (water[w].x == pos.x or water[w].z == pos.z) then - minetest.set_node(pos, {name="mcl_blackstone:blackstone"}) - elseif lavatype == "flowing" and water[w].y > pos.y and water[w].x == pos.x and water[w].z == pos.z then - minetest.set_node(pos, {name="mcl_blackstone:blackstone"}) - end - end - end, -}) - ---crafting -minetest.register_craft({ - output = "mcl_blackstone:blackstone_polished 4", - recipe = { - {"mcl_blackstone:blackstone","mcl_blackstone:blackstone"}, - {"mcl_blackstone:blackstone","mcl_blackstone:blackstone"}, - } -}) -minetest.register_craft({ - output = "mcl_blackstone:basalt_polished 4", - recipe = { - {"mcl_blackstone:basalt","mcl_blackstone:basalt"}, - {"mcl_blackstone:basalt","mcl_blackstone:basalt"}, - } -}) -minetest.register_craft({ - output = "mcl_blackstone:blackstone_chiseled_polished 2", - recipe = { - {"mcl_blackstone:blackstone_polished"}, - {"mcl_blackstone:blackstone_polished"}, - } -}) -minetest.register_craft({ - output = "mcl_blackstone:blackstone_brick_polished 4", - recipe = { - {"mcl_blackstone:blackstone_polished","mcl_blackstone:blackstone_polished"}, - {"mcl_blackstone:blackstone_polished","mcl_blackstone:blackstone_polished"}, - } -}) -minetest.register_craft({ - output = "mcl_blackstone:quartz_brick 4", - recipe = { - {"mcl_nether:quartz_block","mcl_nether:quartz_block"}, - {"mcl_nether:quartz_block","mcl_nether:quartz_block"}, - } -}) -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_ingot", - recipe = "mcl_blackstone:nether_gold", - cooktime = 10, -}) -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_ingot", - recipe = "mcl_blackstone:blackstone_gilded", - cooktime = 10, -}) -minetest.register_craft({ - type = "cooking", - output = "mcl_nether:quartz_smooth", - recipe = "mcl_nether:quartz_block", - cooktime = 10, -}) ---[[ Commented out for now because there the discussion how to handle this is ongoing] ---Generating -local specialstones = { "mcl_blackstone:blackstone", "mcl_blackstone:basalt", "mcl_blackstone:soul_soil" } -for s=1, #specialstones do - local node = specialstones[s] - minetest.register_ore({ - ore_type = "blob", - ore = node, - wherein = {"mcl_nether:netherrack"}, - clust_scarcity = 830, - clust_num_ores = 28, - clust_size = 3, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - minetest.register_ore({ - ore_type = "blob", - ore = node, - wherein = {"mcl_nether:netherrack"}, - clust_scarcity = 8*8*8, - clust_num_ores = 40, - clust_size = 5, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) -end - -if minetest.settings:get_bool("mcl_generate_ores", true) then - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_blackstone:blackstone_gilded", - wherein = "mcl_blackstone:blackstone", - clust_scarcity = 4775, - clust_num_ores = 2, - clust_size = 2, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_blackstone:nether_gold", - wherein = "mcl_nether:netherrack", - clust_scarcity = 830, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_blackstone:nether_gold", - wherein = "mcl_nether:netherrack", - clust_scarcity = 1660, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) -end ---]] ---soul torch -mcl_torches.register_torch({ - name="soul_torch", - description=S("Soul Torch"), - doc_items_longdesc = S("Torches are light sources which can be placed at the side or on the top of most blocks."), - doc_items_hidden = false, - icon="soul_torch_on_floor.png", - tiles = {{ - name = "soul_torch_on_floor_animated.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, - light = 12, --soul torches are a bit dimmer than normal torches - groups = {dig_immediate = 3, deco_block = 1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - particles = true, -}) - -minetest.register_craft({ - output = "mcl_blackstone:soul_torch 4", - recipe = { - {"group:coal"}, - { "mcl_core:stick" }, - { "group:soul_block" }, - } -}) diff --git a/mods/ITEMS/mcl_blackstone/locale/mcl_blackstone.de.tr b/mods/ITEMS/mcl_blackstone/locale/mcl_blackstone.de.tr deleted file mode 100644 index dee9cd15e..000000000 --- a/mods/ITEMS/mcl_blackstone/locale/mcl_blackstone.de.tr +++ /dev/null @@ -1,28 +0,0 @@ -# textdomain: mcl_blackstone -Blackstone=Schwarzstein -Polished Blackstone=Polierter Schwarzstein -Chieseled Polished Blackstone=Gemeißelter polierter Schwarzstein -Polished Blackstone Bricks=Polierter Schwarzsteinziegel -Basalt=Basalt -Polished Basalt=Polierter Basalt -Blackstone Slab=Schwarzstein Stufe -Polished Blackstone Slab=Polierte Schwarzstein Stufe -Chieseled Polished Blackstone Slab=Gemeißelte Polierte Schwarzstein Stufe -Polished Blackstone Brick Slab=Polierte Schwarzsteinziegel Stufe -Blackstone Stairs=Schwarzstein Treppe -Polished Blackstone Stairs=Polierte Schwarzstein Treppe -Chieseled Polished Blackstone Stairs=Gemeißelte Polierte Schwarzstein Treppe -Polished Blackstone Brick Stairs=Polierte Schwarzsteinziegel Treppe -Quartz Bricks=Quartz Ziegel -Soul Torch=Seelenfakel -Soul Lantern=Seelenlaterne -Soul Soil=Seelenerde -Eternal Soul Fire=Seelenfeuer -Gilded Blackstone=Vergoldeter Schwarzstein -Nether Gold Ore=Nethergolderz -Smooth Basalt=Glatter Basalt - -@1 has been cooked crisp.=@1 wurde knusprig gebraten. -@1 felt the burn.=@1 ist völlig verbrannt. -@1 died in the flames.=@1 starb in den Flammen. -@1 died in a fire.=@1 starb in einem Feuer. diff --git a/mods/ITEMS/mcl_blackstone/locale/template.txt b/mods/ITEMS/mcl_blackstone/locale/template.txt deleted file mode 100644 index 0af51d7d3..000000000 --- a/mods/ITEMS/mcl_blackstone/locale/template.txt +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_blackstone -Blackstone= -Polished Blackstone= -Chieseled Polished Blackstone= -Polished Blackstone Bricks= -Basalt= -Polished Basalt= -Blackstone Slab= -Polished Blackstone Slab= -Chieseled Polished Blackstone Slab= -Polished Blackstone Brick Slab= -Blackstone Stairs= -Polished Blackstone Stairs= -Chieseled Polished Blackstone Stairs= -Polished Blackstone Brick Stairs= -Quartz Bricks= -Soul Torch= -Soul Lantern= -Soul Soil= -Eternal Soul Fire= -Gilded Blackstone= -Nether Gold Ore= -Smooth Basalt= diff --git a/mods/ITEMS/mcl_blackstone/mod.conf b/mods/ITEMS/mcl_blackstone/mod.conf deleted file mode 100644 index 8728f5b01..000000000 --- a/mods/ITEMS/mcl_blackstone/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_blackstone -author = debian044 -depends = mcl_core, screwdriver, mcl_stairs, mclx_stairs, mcl_walls, mclx_fences, mcl_torches, mcl_fire diff --git a/mods/ITEMS/mcl_blackstone/textures/lantern.png b/mods/ITEMS/mcl_blackstone/textures/lantern.png deleted file mode 100644 index a0cec3cbf..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/lantern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/lantern_bottom.png b/mods/ITEMS/mcl_blackstone/textures/lantern_bottom.png deleted file mode 100644 index b424385a2..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/lantern_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/lantern_top.png b/mods/ITEMS/mcl_blackstone/textures/lantern_top.png deleted file mode 100644 index 60e85591a..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/lantern_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_backstone_quartz_bricks.png b/mods/ITEMS/mcl_blackstone/textures/mcl_backstone_quartz_bricks.png deleted file mode 100644 index 7fd3e6be6..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_backstone_quartz_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone.png deleted file mode 100644 index a811c6940..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_side.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_side.png deleted file mode 100644 index badbb65b9..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_side_polished.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_side_polished.png deleted file mode 100644 index 556b4ae9f..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_side_polished.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_smooth.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_smooth.png deleted file mode 100644 index 3455bae19..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_smooth.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_top.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_top.png deleted file mode 100644 index 0793a4d67..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_top_polished.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_top_polished.png deleted file mode 100644 index d5b85bd97..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_basalt_top_polished.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_chain.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_chain.png deleted file mode 100644 index 79e9a85aa..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_chiseled_polished.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_chiseled_polished.png deleted file mode 100644 index 8519bdd28..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_chiseled_polished.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_gilded_side.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_gilded_side.png deleted file mode 100644 index 1b8b5dee0..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_gilded_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_polished.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_polished.png deleted file mode 100644 index 4ef4edb51..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_polished.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_polished_bricks.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_polished_bricks.png deleted file mode 100644 index 6a774443e..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_polished_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_soul_soil.png b/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_soul_soil.png deleted file mode 100644 index bb65a2e4b..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_blackstone_soul_soil.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/mcl_nether_nether_wart_block_blue.png b/mods/ITEMS/mcl_blackstone/textures/mcl_nether_nether_wart_block_blue.png deleted file mode 100644 index adebf6233..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/mcl_nether_nether_wart_block_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/soul_fire_basic_flame.png b/mods/ITEMS/mcl_blackstone/textures/soul_fire_basic_flame.png deleted file mode 100644 index 74bd64d32..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/soul_fire_basic_flame.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/soul_fire_basic_flame_animated.png b/mods/ITEMS/mcl_blackstone/textures/soul_fire_basic_flame_animated.png deleted file mode 100644 index 010679eac..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/soul_fire_basic_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/soul_mcl_burning_entity_flame_animated.png b/mods/ITEMS/mcl_blackstone/textures/soul_mcl_burning_entity_flame_animated.png deleted file mode 100644 index 795d3e9a7..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/soul_mcl_burning_entity_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/soul_mcl_burning_hud_flame_animated.png b/mods/ITEMS/mcl_blackstone/textures/soul_mcl_burning_hud_flame_animated.png deleted file mode 100644 index 046695716..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/soul_mcl_burning_hud_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/soul_torch_on_floor.png b/mods/ITEMS/mcl_blackstone/textures/soul_torch_on_floor.png deleted file mode 100644 index 81bdddc07..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/soul_torch_on_floor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blackstone/textures/soul_torch_on_floor_animated.png b/mods/ITEMS/mcl_blackstone/textures/soul_torch_on_floor_animated.png deleted file mode 100644 index b125743b0..000000000 Binary files a/mods/ITEMS/mcl_blackstone/textures/soul_torch_on_floor_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blast_furnace/README.md b/mods/ITEMS/mcl_blast_furnace/README.md deleted file mode 100644 index e96c21942..000000000 --- a/mods/ITEMS/mcl_blast_furnace/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Blast Furnaces for MineClone 2. -Heavily based on Minetest Game (default/furnace.lua) and the MineClone 2 Furnaces. - -License of source code ----------------------- -LGPLv2.1 -Based on code from Minetest Game. -Modified by Wuzzy. -MCl 2 Furances modified by PrairieWind. - -License of media ----------------- -See the main MineClone 2 README.md file. diff --git a/mods/ITEMS/mcl_blast_furnace/init.lua b/mods/ITEMS/mcl_blast_furnace/init.lua deleted file mode 100644 index 168c28bd5..000000000 --- a/mods/ITEMS/mcl_blast_furnace/init.lua +++ /dev/null @@ -1,575 +0,0 @@ - -local S = minetest.get_translator(minetest.get_current_modname()) - -local LIGHT_ACTIVE_FURNACE = 13 - --- --- Formspecs --- - -local function active_formspec(fuel_percent, item_percent) - return "size[9,8.75]".. - "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Blast Furnace"))).."]".. - "list[context;src;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;fuel;2.75,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[context;dst;5.75,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. - "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. - (100-fuel_percent)..":default_furnace_fire_fg.png]".. - "image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[lowpart:".. - (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. - -- Craft guide button temporarily removed due to Minetest bug. - -- TODO: Add it back when the Minetest bug is fixed. - --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. - --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[context;dst]".. - "listring[current_player;main]".. - "listring[context;src]".. - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[current_player;main]" -end - -local inactive_formspec = "size[9,8.75]".. - "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Blast Furnace"))).."]".. - "list[context;src;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;fuel;2.75,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[context;dst;5.75,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. - "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. - "image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]".. - -- Craft guide button temporarily removed due to Minetest bug. - -- TODO: Add it back when the Minetest bug is fixed. - --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. - --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[context;dst]".. - "listring[current_player;main]".. - "listring[context;src]".. - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[current_player;main]" - -local receive_fields = function(pos, formname, fields, sender) - if fields.craftguide then - mcl_craftguide.show(sender:get_player_name()) - end -end - -local function give_xp(pos, player) - local meta = minetest.get_meta(pos) - local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2),-1.95) - local xp = meta:get_int("xp") - if xp > 0 then - if player then - mcl_experience.add_xp(player, xp) - else - mcl_experience.throw_xp(vector.add(pos, dir), xp) - end - meta:set_int("xp", 0) - end -end - --- --- Node callback functions that are the same for active and inactive furnace --- - -local function allow_metadata_inventory_put(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - -- Test stack with size 1 because we burn one fuel at a time - local teststack = ItemStack(stack) - teststack:set_count(1) - local output, decremented_input = minetest.get_craft_result({method="fuel", width=1, items={teststack}}) - if output.time ~= 0 then - -- Only allow to place 1 item if fuel get replaced by recipe. - -- This is the case for lava buckets. - local replace_item = decremented_input.items[1] - if replace_item:is_empty() then - -- For most fuels, just allow to place everything - return stack:get_count() - else - if inv:get_stack(listname, index):get_count() == 0 then - return 1 - else - return 0 - end - end - else - return 0 - end - elseif listname == "src" then - return stack:get_count() - elseif listname == "dst" then - return 0 - end -end - -local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local stack = inv:get_stack(from_list, from_index) - return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) -end - -local function allow_metadata_inventory_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - return stack:get_count() -end - -local function on_metadata_inventory_take(pos, listname, index, stack, player) - -- Award smelting achievements - if listname == "dst" then - if stack:get_name() == "mcl_core:iron_ingot" then - awards.unlock(player:get_player_name(), "mcl:acquireIron") - end - give_xp(pos, player) - end -end - -local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - if from_list == "dst" then - give_xp(pos, player) - end -end - -local function spawn_flames(pos, param2) - local minrelpos, maxrelpos - local dir = minetest.facedir_to_dir(param2) - if dir.x > 0 then - minrelpos = { x = -0.6, y = -0.05, z = -0.25 } - maxrelpos = { x = -0.55, y = -0.45, z = 0.25 } - elseif dir.x < 0 then - minrelpos = { x = 0.55, y = -0.05, z = -0.25 } - maxrelpos = { x = 0.6, y = -0.45, z = 0.25 } - elseif dir.z > 0 then - minrelpos = { x = -0.25, y = -0.05, z = -0.6 } - maxrelpos = { x = 0.25, y = -0.45, z = -0.55 } - elseif dir.z < 0 then - minrelpos = { x = -0.25, y = -0.05, z = 0.55 } - maxrelpos = { x = 0.25, y = -0.45, z = 0.6 } - else - return - end - mcl_particles.add_node_particlespawner(pos, { - amount = 4, - time = 0, - minpos = vector.add(pos, minrelpos), - maxpos = vector.add(pos, maxrelpos), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.4, - maxsize = 0.8, - texture = "mcl_particles_flame.png", - glow = LIGHT_ACTIVE_FURNACE, - }, "low") -end - -local function swap_node(pos, name) - local node = minetest.get_node(pos) - if node.name == name then - return - end - node.name = name - minetest.swap_node(pos, node) - if name == "mcl_blast_furnace:blast_furnace_active" then - spawn_flames(pos, node.param2) - else - mcl_particles.delete_node_particlespawners(pos) - end -end - -local function blast_furnace_reset_delta_time(pos) - local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get("time_speed") or 72) - if (time_speed < 0.1) then - return - end - local time_multiplier = 86400 / time_speed - local current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - - -- TODO: Change meta:get/set_string() to get/set_float() for "last_gametime". - -- In Windows *_float() works OK but under Linux it returns rounded unusable values like 449540.000000000 - local last_game_time = meta:get_string("last_gametime") - if last_game_time then - last_game_time = tonumber(last_game_time) - end - if not last_game_time or last_game_time < 1 or math.abs(last_game_time - current_game_time) <= 1.5 then - return - end - - meta:set_string("last_gametime", tostring(current_game_time)) -end - -local function blast_furnace_get_delta_time(pos, elapsed) - local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get("time_speed") or 72) - local current_game_time - if (time_speed < 0.1) then - return meta, elapsed - else - local time_multiplier = 86400 / time_speed - current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - end - - local last_game_time = meta:get_string("last_gametime") - if last_game_time then - last_game_time = tonumber(last_game_time) - end - if not last_game_time or last_game_time < 1 then - last_game_time = current_game_time - 0.1 - elseif last_game_time == current_game_time then - current_game_time = current_game_time + 1.0 - end - - local elapsed_game_time = .0 + current_game_time - last_game_time - - meta:set_string("last_gametime", tostring(current_game_time)) - - return meta, elapsed_game_time -end - -local function blast_furnace_node_timer(pos, elapsed) - -- - -- Inizialize metadata - -- - local meta, elapsed_game_time = blast_furnace_get_delta_time(pos, elapsed) - - local fuel_time = meta:get_float("fuel_time") or 0 - local src_time = meta:get_float("src_time") or 0 - local src_item = meta:get_string("src_item") or "" - local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - - local inv = meta:get_inventory() - local srclist, fuellist - - local cookable, cooked - local active = true - local fuel - - srclist = inv:get_list("src") - fuellist = inv:get_list("fuel") - - -- Check if src item has been changed - if srclist[1]:get_name() ~= src_item then - -- Reset cooking progress in this case - src_time = 0 - src_item = srclist[1]:get_name() - end - - local update = true - while elapsed_game_time > 0.00001 and update do - -- - -- Cooking - -- - - local el = elapsed_game_time - - -- Check if we have cookable content: cookable - local aftercooked - cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - cookable = minetest.get_item_group(inv:get_stack("src", 1):get_name(), "blast_furnace_smeltable") == 1 - if cookable then - -- Successful cooking requires space in dst slot and time - if not inv:room_for_item("dst", cooked.item) then - cookable = false - end - end - - if cookable then -- fuel lasts long enough, adjust el to cooking duration - el = math.min(el, cooked.time - src_time) - end - - -- Check if we have enough fuel to burn - active = fuel_time < fuel_totaltime - if cookable and not active then - -- We need to get new fuel - local afterfuel - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - - if fuel.time == 0 then - -- No valid fuel in fuel list -- stop - fuel_totaltime = 0 - src_time = 0 - update = false - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - fuel_time = 0 - fuel_totaltime = fuel.time - el = math.min(el, fuel_totaltime) - active = true - fuellist = inv:get_list("fuel") - end - elseif active then - el = math.min(el, fuel_totaltime - fuel_time) - -- The furnace is currently active and has enough fuel - fuel_time = (fuel_time + el) *2 --multiply speed of fuel consumption to match proper output - end - - -- If there is a cookable item then check if it is ready yet - if cookable and active then - -- In the src_time variable, the *2 is the multiplication that makes the blast furnace work faster than a normal furnace. - src_time = (src_time + el)*2 - -- Place result in dst list if done - if src_time >= cooked.time then - inv:add_item("dst", cooked.item) - inv:set_stack("src", 1, aftercooked.items[1]) - srclist = inv:get_list("src") - src_time = 0 - - meta:set_int("xp", meta:get_int("xp") + 1) -- ToDo give each recipe an idividial XP count - end - end - - elapsed_game_time = elapsed_game_time - el - end - - if fuel and fuel_totaltime > fuel.time then - fuel_totaltime = fuel.time - end - if srclist and srclist[1]:is_empty() then - src_time = 0 - end - - -- - -- Update formspec and node - -- - local formspec = inactive_formspec - local item_percent = 0 - if cookable then - item_percent = math.floor(src_time / cooked.time * 100) - end - - local result = false - - if active then - local fuel_percent = 0 - if fuel_totaltime > 0 then - fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) - end - formspec = active_formspec(fuel_percent, item_percent) - swap_node(pos, "mcl_blast_furnace:blast_furnace_active") - -- make sure timer restarts automatically - result = true - else - swap_node(pos, "mcl_blast_furnace:blast_furnace") - -- stop timer on the inactive furnace - minetest.get_node_timer(pos):stop() - end - - -- - -- Set meta values - -- - meta:set_float("fuel_totaltime", fuel_totaltime) - meta:set_float("fuel_time", fuel_time) - meta:set_float("src_time", src_time) - if srclist then - meta:set_string("src_item", src_item) - else - meta:set_string("src_item", "") - end - meta:set_string("formspec", formspec) - - return result -end - -local on_rotate, after_rotate_active -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple - after_rotate_active = function(pos) - local node = minetest.get_node(pos) - mcl_particles.delete_node_particlespawners(pos) - if node.name == "mcl_blast_furnace:blast_furnace" then - return - end - spawn_flames(pos, node.param2) - end -end - -minetest.register_node("mcl_blast_furnace:blast_furnace", { - description = S("Blast Furnace"), - _tt_help = S("Smelts ores faster than furnace"), - _doc_items_longdesc = S("Blast Furnaces smelt several items, mainly ores and armor, using a furnace fuel, into something else."), - _doc_items_usagehelp = - S([[ - Use the furnace to open the furnace menu. - Place a furnace fuel in the lower slot and the source material in the upper slot. - The furnace will slowly use its fuel to smelt the item. - The result will be placed into the output slot at the right side. - ]]).."\n".. - S("Use the recipe book to see what ores you can smelt, what you can use as fuel and how long it will burn."), - _doc_items_hidden = false, - tiles = { - "blast_furnace_top.png", "blast_furnace_top.png", - "blast_furnace_side.png", "blast_furnace_side.png", - "blast_furnace_side.png", "blast_furnace_front.png" - }, - paramtype2 = "facedir", - groups = {pickaxey=1, container=4, deco_block=1, material_stone=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - - on_timer = blast_furnace_node_timer, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for _, listname in ipairs({"src", "dst", "fuel"}) do - local stack = inv:get_stack(listname, 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", inactive_formspec) - local inv = meta:get_inventory() - inv:set_size("src", 1) - inv:set_size("fuel", 1) - inv:set_size("dst", 1) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - give_xp(pos) - end, - - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - -- Reset accumulated game time when player works with furnace: - blast_furnace_reset_delta_time(pos) - minetest.get_node_timer(pos):start(1.0) - - on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - end, - on_metadata_inventory_put = function(pos) - -- Reset accumulated game time when player works with furnace: - blast_furnace_reset_delta_time(pos) - -- start timer function, it will sort out whether furnace can burn or not. - minetest.get_node_timer(pos):start(1.0) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - -- Reset accumulated game time when player works with furnace: - blast_furnace_reset_delta_time(pos) - -- start timer function, it will helpful if player clears dst slot - minetest.get_node_timer(pos):start(1.0) - - on_metadata_inventory_take(pos, listname, index, stack, player) - end, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - on_receive_fields = receive_fields, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_blast_furnace:blast_furnace_active", { - description = S("Burning Blast Furnace"), - _doc_items_create_entry = false, - tiles = { - "blast_furnace_top.png", "blast_furnace_top.png", - "blast_furnace_side.png", "blast_furnace_side.png", - "blast_furnace_side.png", {name = "blast_furnace_front_on.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 48}}, - }, - paramtype2 = "facedir", - paramtype = "light", - light_source = LIGHT_ACTIVE_FURNACE, - drop = "mcl_blast_furnace:blast_furnace", - groups = {pickaxey=1, container=4, deco_block=1, not_in_creative_inventory=1, material_stone=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_timer = blast_furnace_node_timer, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for _, listname in ipairs({"src", "dst", "fuel"}) do - local stack = inv:get_stack(listname, 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2:to_table()) - end, - - on_construct = function(pos) - local node = minetest.get_node(pos) - spawn_flames(pos, node.param2) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - give_xp(pos) - end, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - on_metadata_inventory_move = on_metadata_inventory_move, - on_metadata_inventory_take = on_metadata_inventory_take, - on_receive_fields = receive_fields, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - on_rotate = on_rotate, - after_rotate = after_rotate_active, -}) - -minetest.register_craft({ - output = "mcl_blast_furnace:blast_furnace", - recipe = { - { "mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot" }, - { "mcl_core:iron_ingot", "mcl_furnaces:furnace", "mcl_core:iron_ingot" }, - { "mcl_core:stone_smooth", "mcl_core:stone_smooth", "mcl_core:stone_smooth" }, - } -}) - --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_blast_furnace:blast_furnace", "nodes", "mcl_blast_furnace:blast_furnace_active") -end - -minetest.register_lbm({ - label = "Active blast_furnace flame particles", - name = "mcl_blast_furnace:flames", - nodenames = {"mcl_blast_furnace:blast_furnace_active"}, - run_at_every_load = true, - action = function(pos, node) - spawn_flames(pos, node.param2) - end, -}) - diff --git a/mods/ITEMS/mcl_blast_furnace/mod.conf b/mods/ITEMS/mcl_blast_furnace/mod.conf deleted file mode 100644 index e330e80e4..000000000 --- a/mods/ITEMS/mcl_blast_furnace/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_blast_furnace -depends = mcl_init, mcl_formspec, mcl_core, mcl_furnaces, mcl_sounds, mcl_craftguide, mcl_achievements, mcl_particles -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_front.png b/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_front.png deleted file mode 100644 index 02acd6d31..000000000 Binary files a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_front_on.png b/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_front_on.png deleted file mode 100644 index 712bac83f..000000000 Binary files a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_front_on.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_side.png b/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_side.png deleted file mode 100644 index 966b001e2..000000000 Binary files a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_top.png b/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_top.png deleted file mode 100644 index 03ce91b5c..000000000 Binary files a/mods/ITEMS/mcl_blast_furnace/textures/blast_furnace_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/init.lua b/mods/ITEMS/mcl_books/init.lua deleted file mode 100644 index 446be8cd6..000000000 --- a/mods/ITEMS/mcl_books/init.lua +++ /dev/null @@ -1,366 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local max_text_length = 4500 -- TODO: Increase to 12800 when scroll bar was added to written book -local max_title_length = 64 - -local header = "" -if minetest.get_modpath("mcl_init") then - header = "no_prepend[]" .. mcl_vars.gui_nonbg .. mcl_vars.gui_bg_color .. - "style_type[button;border=false;bgimg=mcl_books_button9.png;bgimg_pressed=mcl_books_button9_pressed.png;bgimg_middle=2,2]" -end - --- Book -minetest.register_craftitem("mcl_books:book", { - description = S("Book"), - _doc_items_longdesc = S("Books are used to make bookshelves and book and quills."), - inventory_image = "default_book.png", - stack_max = 64, - groups = { book=1, craftitem = 1, enchantability = 1 }, - _mcl_enchanting_enchanted_tool = "mcl_enchanting:book_enchanted", -}) - -if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - type = "shapeless", - output = "mcl_books:book", - recipe = { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper", "mcl_mobitems:leather", } - }) -end - --- Get the included text out of the book item --- itemstack: Book item --- meta: Meta of book (optional) -local function get_text(itemstack) - -- Grab the text - local meta = itemstack:get_meta() - local text = meta:get_string("text") - - -- Backwards-compability with MCL2 0.21.0 - -- Remember that get_metadata is deprecated since MT 0.4.16! - if text == nil or text == "" then - local meta_legacy = itemstack:get_metadata() - if itemstack:get_name() == "mcl_books:written_book" then - local des = minetest.deserialize(meta_legacy) - if des then - text = des.text - end - else - text = meta_legacy - end - end - - -- Security check - if not text then - text = "" - end - return text -end - -local function make_description(title, author, generation) - local desc - if generation == 0 then - desc = S("“@1”", title) - elseif generation == 1 then - desc = S("Copy of “@1”", title) - elseif generation == 2 then - desc = S("Copy of Copy of “@1”", title) - else - desc = S("Tattered Book") - end - desc = desc .. "\n" .. minetest.colorize(mcl_colors.GRAY, S("by @1", author)) - return desc -end - -local function cap_text_length(text, max_length) - return string.sub(text, 1, max_length) -end - -local function write(itemstack, user, pointed_thing) - -- Call on_rightclick if the pointed node defines it - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - end - - local text = get_text(itemstack) - local formspec = "size[8,9]".. - header.. - "background[-0.5,-0.5;9,10;mcl_books_book_bg.png]".. - "textarea[0.75,0.1;7.25,9;text;;"..minetest.formspec_escape(text).."]".. - "button[0.75,7.95;3,1;sign;"..minetest.formspec_escape(S("Sign")).."]".. - "button_exit[4.25,7.95;3,1;ok;"..minetest.formspec_escape(S("Done")).."]" - minetest.show_formspec(user:get_player_name(), "mcl_books:writable_book", formspec) -end - -local function read(itemstack, user, pointed_thing) - -- Call on_rightclick if the pointed node defines it - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - end - - local text = get_text(itemstack) - local formspec = "size[8,9]".. - header.. - "background[-0.5,-0.5;9,10;mcl_books_book_bg.png]".. - "textarea[0.75,0.1;7.25,9;;"..minetest.formspec_escape(text)..";]".. - "button_exit[2.25,7.95;3,1;ok;"..minetest.formspec_escape(S("Done")).."]" - minetest.show_formspec(user:get_player_name(), "mcl_books:written_book", formspec) -end - --- Book and Quill -minetest.register_craftitem("mcl_books:writable_book", { - description = S("Book and Quill"), - _tt_help = S("Write down some notes"), - _doc_items_longdesc = S("This item can be used to write down some notes."), - _doc_items_usagehelp = S("Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.").."\n".. - S("A book can hold up to 4500 characters. The title length is limited to 64 characters."), - inventory_image = "mcl_books_book_writable.png", - groups = { book=1 }, - stack_max = 1, - on_place = write, - on_secondary_use = write, -}) - -minetest.register_on_player_receive_fields(function ( player, formname, fields ) - if ((formname == "mcl_books:writable_book") and fields and fields.text) then - local stack = player:get_wielded_item() - if (stack:get_name() and (stack:get_name() == "mcl_books:writable_book")) then - local meta = stack:get_meta() - local text = cap_text_length(fields.text, max_text_length) - if fields.ok then - meta:set_string("text", text) - player:set_wielded_item(stack) - elseif fields.sign then - meta:set_string("text", text) - player:set_wielded_item(stack) - - local name = player:get_player_name() - local formspec = "size[8,9]".. - header.. - "background[-0.5,-0.5;9,10;mcl_books_book_bg.png]".. - "field[0.75,1;7.25,1;title;"..minetest.formspec_escape(minetest.colorize("#000000", S("Enter book title:")))..";]".. - "label[0.75,1.5;"..minetest.formspec_escape(minetest.colorize("#404040", S("by @1", name))).."]".. - "button_exit[0.75,7.95;3,1;sign;"..minetest.formspec_escape(S("Sign and Close")).."]".. - "tooltip[sign;"..minetest.formspec_escape(S("Note: The book will no longer be editable after signing")).."]".. - "button[4.25,7.95;3,1;cancel;"..minetest.formspec_escape(S("Cancel")).."]" - minetest.show_formspec(player:get_player_name(), "mcl_books:signing", formspec) - end - end - elseif ((formname == "mcl_books:signing") and fields and fields.sign and fields.title) then - local newbook = ItemStack("mcl_books:written_book") - local book = player:get_wielded_item() - local name = player:get_player_name() - if book:get_name() == "mcl_books:writable_book" then - local title = fields.title - if string.len(title) == 0 then - title = S("Nameless Book") - end - title = cap_text_length(title, max_title_length) - local meta = newbook:get_meta() - local text = cap_text_length(get_text(book), max_text_length) - meta:set_string("title", title) - meta:set_string("author", name) - meta:set_string("text", text) - meta:set_string("description", make_description(title, name, 0)) - - -- The book copy counter. 0 = original, 1 = copy of original, 2 = copy of copy of original, … - meta:set_int("generation", 0) - - player:set_wielded_item(newbook) - else - minetest.log("error", "[mcl_books] "..name.." failed to sign a book!") - end - elseif ((formname == "mcl_books:signing") and fields and fields.cancel) then - local book = player:get_wielded_item() - if book:get_name() == "mcl_books:writable_book" then - write(book, player, { type = "nothing" }) - end - end -end) - -if minetest.get_modpath("mcl_dye") and minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - type = "shapeless", - output = "mcl_books:writable_book", - recipe = { "mcl_books:book", "mcl_dye:black", "mcl_mobitems:feather" }, - }) -end - --- Written Book -minetest.register_craftitem("mcl_books:written_book", { - description = S("Written Book"), - _doc_items_longdesc = S("Written books contain some text written by someone. They can be read and copied, but not edited."), - _doc_items_usagehelp = S("Hold it in your hand, then rightclick to read the book.").."\n\n".. - -S("To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied."), - inventory_image = "mcl_books_book_written.png", - groups = { not_in_creative_inventory=1, book=1, no_rename=1 }, - stack_max = 16, - on_place = read, - on_secondary_use = read -}) - --- Copy books - --- This adds 8 recipes -local baq = "mcl_books:writable_book" -local wb = "mcl_books:written_book" -local recipes = { - {wb, baq}, - {baq, baq, wb}, - {baq, baq, wb, baq}, - {baq, baq, baq, baq, wb}, - {baq, baq, baq, baq, wb, baq}, - {baq, baq, baq, baq, wb, baq, baq}, - {baq, baq, baq, baq, wb, baq, baq, baq}, - {baq, baq, baq, baq, wb, baq, baq, baq, baq}, -} -for r=#recipes, 1, -1 do - minetest.register_craft({ - type = "shapeless", - output = "mcl_books:written_book "..r, - recipe = recipes[r], - }) -end - -minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv) - if itemstack:get_name() ~= "mcl_books:written_book" then - return - end - - local original - for i = 1, player:get_inventory():get_size("craft") do - if old_craft_grid[i]:get_name() == "mcl_books:written_book" then - original = old_craft_grid[i] - end - end - if not original then - return - end - - local ometa = original:get_meta() - local generation = ometa:get_int("generation") - - -- Check generation, don't allow crafting with copy of copy of book - if generation >= 2 then - return ItemStack("") - else - -- Valid copy. Let's update the description field of the result item - -- so it is properly displayed in the crafting grid. - local imeta = itemstack:get_meta() - local title = cap_text_length(ometa:get_string("title"), max_title_length) - local author = ometa:get_string("author") - - -- Increase book generation and update description - generation = generation + 1 - if generation < 1 then - generation = 1 - end - - local desc = make_description(title, author, generation) - imeta:set_string("description", desc) - return itemstack - end -end) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if itemstack:get_name() ~= "mcl_books:written_book" then - return - end - - local original - local index - for i = 1, player:get_inventory():get_size("craft") do - if old_craft_grid[i]:get_name() == "mcl_books:written_book" then - original = old_craft_grid[i] - index = i - end - end - if not original then - return - end - - -- copy of the book - local text = get_text(original) - if not text or text == "" then - local copymeta = original:get_metadata() - itemstack:set_metadata(copymeta) - else - local ometa = original:get_meta() - local generation = ometa:get_int("generation") - - -- No copy of copy of copy of book allowed - if generation >= 2 then - return ItemStack("") - end - - -- Copy metadata - local imeta = itemstack:get_meta() - local title = cap_text_length(ometa:get_string("title"), max_title_length) - local author = ometa:get_string("author") - imeta:set_string("title", title) - imeta:set_string("author", author) - imeta:set_string("text", cap_text_length(text, max_text_length)) - - -- Increase book generation and update description - generation = generation + 1 - if generation < 1 then - generation = 1 - end - - local desc = make_description(title, author, generation) - - imeta:set_string("description", desc) - imeta:set_int("generation", generation) - end - -- put the book with metadata back in the craft grid - craft_inv:set_stack("craft", index, original) -end) - -local wood_sound -if minetest.get_modpath("mcl_sounds") then - wood_sound = mcl_sounds.node_sound_wood_defaults() -end - --- Bookshelf -minetest.register_node("mcl_books:bookshelf", { - description = S("Bookshelf"), - _doc_items_longdesc = S("Bookshelves are used for decoration."), - tiles = {"mcl_books_bookshelf_top.png", "mcl_books_bookshelf_top.png", "default_bookshelf.png"}, - stack_max = 64, - is_ground_content = false, - groups = { - handy=1, axey=1, deco_block=1, material_wood=1, - flammable=3, fire_encouragement=30, fire_flammability=20 - }, - drop = "mcl_books:book 3", - sounds = wood_sound, - _mcl_blast_resistance = 1.5, - _mcl_hardness = 1.5, - _mcl_silk_touch_drop = true, -}) - -minetest.register_craft({ - output = "mcl_books:bookshelf", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"mcl_books:book", "mcl_books:book", "mcl_books:book"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_books:bookshelf", - burntime = 15, -}) - diff --git a/mods/ITEMS/mcl_books/locale/mcl_books.de.tr b/mods/ITEMS/mcl_books/locale/mcl_books.de.tr deleted file mode 100644 index df51c1859..000000000 --- a/mods/ITEMS/mcl_books/locale/mcl_books.de.tr +++ /dev/null @@ -1,26 +0,0 @@ -# textdomain: mcl_books -Book=Buch -Books are used to make bookshelves and book and quills.=Bücher werden zur Herstellung von Bücherregalen und Büchern mit Federkiel gebraucht. -“@1”=„@1“ -Copy of “@1”=Kopie von „@1“ -Copy of Copy of “@1”=Kopie von Kopie von „@1“ -Tattered Book=Zerfleddertes Buch -by @1=von @1 -Sign=Signieren -Done=Fertig -This item can be used to write down some notes.=Dies kann benutzt werden, um ein paar Notizen aufzuschreiben. -Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=Halten Sie es in der Hand, dann rechtsklicken Sie, um die Notizen zu sehen und zu ändern. Sie können den Text beliebig ändern. Sie können das Buch auch signieren und in ein geschriebenes Buch verwandeln, das gestapelt, aber nicht mehr geändert werden kann. -A book can hold up to 4500 characters. The title length is limited to 64 characters.=Ein Buch kann bis zu 4500 Zeichen enthalten. Die Titellänge ist begrenzt auf 64 Zeichen. -Enter book title:=Buchtitel eingeben: -Note: The book will no longer be editable after signing=Anmerkung: Das Buch kann nach der Signierung nicht länger@nbearbeitet werden -Sign and Close=Signieren und schließen -Cancel=Abbrechen -Nameless Book=Namenloses Buch -Written Book=Geschriebenes Buch -Written books contain some text written by someone. They can be read and copied, but not edited.=Geschriebene Bücher enthalten etwas Text, den jemand geschrieben hat. Sie können gelesen und kopiert, aber nicht geändert werden. -Hold it in your hand, then rightclick to read the book.=Halten Sie es in Ihrer Hand und rechtsklicken Sie, um das Buch zu lesen. -To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=Um den Text zu kopieren, platzieren Sie es ins Fertigungsgitter mit einem Buch mit Federkiel (oder mehreren) und fertigen Sie die Kopie an. Das geschriebene Buch bleibt. Kopien von Kopien können nicht kopiert werden. -Bookshelf=Bücherregal -Bookshelves are used for decoration.=Bücherregale werden zur Dekoration benutzt. -Book and Quill=Buch und Federkiel -Write down some notes=Zum Aufschreiben von Notizen diff --git a/mods/ITEMS/mcl_books/locale/mcl_books.es.tr b/mods/ITEMS/mcl_books/locale/mcl_books.es.tr deleted file mode 100644 index d1e0d947a..000000000 --- a/mods/ITEMS/mcl_books/locale/mcl_books.es.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_books -Book=Libro -Books are used to make bookshelves and book and quills.=Los libros se usan para hacer estanterías, libros y plumas. -“@1”="@1“ -Copy of “@1”=Copia de "@1“ -Copy of Copy of “@1”=Kopie von Kopie von „@1“ -Tatter ed Book=Libro andrajoso -by @1=por @1 -Sign=Firmar -Done=Hecho -This item can be used to write down some notes.=Este elemento se puede usar para escribir algunas notas. -Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=Sosténgalo en la mano, luego haga clic derecho para leer las notas actuales y luego edite. Puede editar el texto con la frecuencia que desee. También puede firmar el libro que lo convierte en un libro escrito que puede apilar, pero ya no se puede editar. -A book can hold up to 4500 characters. The title length is limited to 64 characters.=Un libro puede contener hasta 4500 caracteres. La longitud del título está limitada a 64 caracteres. -Enter book title:=Inserta el título del libro: -Note: The book will no longer be editable after signing=Nota: El libro ya no será editable después de firmarlo -Sign and Close=Firmar y cerrar libro -Cancel=Cancelar -Nameless Book=Libro sin nombre -Written Book=Libro escrito -Written books contain some text written by someone. They can be read and copied, but not edited.=Los libros escritos contienen texto escrito por alguien. Pueden leerse y copiarse, pero no editarse. -Hold it in your hand, then rightclick to read the book.=Sostenlo en tu mano, luego haz clic derecho para leer el libro. -To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=Para copiar el texto del libro escrito, colóquelo en la cuadrícula de elaboración junto con un libro y pluma (o varios de esos) y haga manualidades. El libro escrito no se consumirá. Las copias de copias no se pueden copiar. -Bookshelf=Librería -Bookshelves are used for decoration.=Las librerías se utilizan para la decoración. -Book and Quill=Libro y pluma diff --git a/mods/ITEMS/mcl_books/locale/mcl_books.fr.tr b/mods/ITEMS/mcl_books/locale/mcl_books.fr.tr deleted file mode 100644 index 7024cf5d0..000000000 --- a/mods/ITEMS/mcl_books/locale/mcl_books.fr.tr +++ /dev/null @@ -1,28 +0,0 @@ -# textdomain: mcl_books -Book=Livre -Books are used to make bookshelves and book and quills.=Les livres sont utilisés pour fabriquer des étagères et des livres et des plumes. -“@1”="@1" -Copy of “@1”=Copie de "@1" -Copy of Copy of “@1”=Copie de Copie de "@1" -Tattered Book=Livre en lambeaux -by @1=ar @1 -# as in “to sign a book” -Sign=Signer -Done=Terminé -This item can be used to write down some notes.=Cet élément peut être utilisé pour écrire certaines notes. -Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=Tenez-le dans la main, puis faites un clic droit pour lire les notes actuelles et modifiez-les ensuite. Vous pouvez modifier le texte aussi souvent que vous le souhaitez. Vous pouvez également signer le livre qui le transforme en livre écrit que vous pouvez empiler, mais il ne peut plus être édité. -A book can hold up to 4500 characters. The title length is limited to 64 characters.=Un livre peut contenir jusqu'à 4500 caractères. La longueur du titre est limitée à 64 caractères. -Enter book title:=Entrez le titre du livre: -by @1=par @1 -Note: The book will no longer be editable after signing=Remarque: le livre ne sera plus modifiable après la signature -Sign and Close=Signez et fermez -Cancel=Annuler -Nameless Book=Livre sans nom -Written Book=Livre écrit -Written books contain some text written by someone. They can be read and copied, but not edited.=Les livres écrits contiennent du texte écrit par quelqu'un. Ils peuvent être lus et copiés, mais pas modifiés. -Hold it in your hand, then rightclick to read the book.=Tenez-le dans votre main, puis faites un clic droit pour lire le livre. -To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=Pour copier le texte du livre écrit, placez-le dans la grille d'artisanat avec un livre et une plume (ou plusieurs de ceux-ci) et de l'artisanat. Le livre écrit ne sera pas consommé. Les copies de copies ne peuvent pas être copiées. -Bookshelf=Bibliothèque -Bookshelves are used for decoration.=Les bibliothèques sont utilisées pour la décoration. -Book and Quill=Livre et Plume -Write down some notes=Notez quelques notes diff --git a/mods/ITEMS/mcl_books/locale/mcl_books.pl.tr b/mods/ITEMS/mcl_books/locale/mcl_books.pl.tr deleted file mode 100644 index 8ef0db873..000000000 --- a/mods/ITEMS/mcl_books/locale/mcl_books.pl.tr +++ /dev/null @@ -1,28 +0,0 @@ -# textdomain: mcl_books -Book=Książka -Books are used to make bookshelves and book and quills.=Książki są używane do tworzenia półek z książkami oraz książek z piórem. -“@1”=„@1” -Copy of “@1”=Kopia „@” -Copy of Copy of “@1”=Kopia kopii „@” -Tattered Book=Podarta książka -by @1=autorstwa @1 -# as in “to sign a book” -Sign=Podpisz -Done=Skończone -This item can be used to write down some notes.=Ten przedmiot może być wykorzystany do zapisania notatek -Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=Weź ją do ręki, następnie kliknij prawym przyciskiem by przeczytać notatki i je edytować. Możesz edytować tekst tak często jak tylko chcesz. Możesz także podpisać książkę, co zamienia ją w zapisaną książkę, którą można grupować, ale nie można jej edytować. -A book can hold up to 4500 characters. The title length is limited to 64 characters.=W książce zmieści się maksymalnie 4500 znaków. Długość tytułu jest ograniczona do 64 znaków. -Enter book title:=Wprowadź tytuł książki: -by @1=autorstwa @1 -Note: The book will no longer be editable after signing=Uwaga: Książki nie da się edytować po podpisaniu -Sign and Close=Podpisz i zamknij -Cancel=Anuluj -Nameless Book=Nienazwana książka -Written Book=Zapisana książka -Written books contain some text written by someone. They can be read and copied, but not edited.=Zapisane książki przechowują tekst napisany przez kogoś. Mogą być czytane i kopiowane, ale nie edytowane. -Hold it in your hand, then rightclick to read the book.=Weź ją do ręki i kliknij prawym, aby przeczytać książkę. -To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=Aby skopiować tekst z zapisanej książki umieść ją w siatce wytwarzania z książką z piórem (lub kilkoma) i wytwarzaj. Zapisana książka nie zostanie wykorzystana. Kopie kopii nie mogą być kopiowane. -Bookshelf=Półka z książkami -Bookshelves are used for decoration.=Półki z książkami są używane jako dekoracje -Book and Quill=Książka z piórem -Write down some notes=Zapisz jakieś notatki diff --git a/mods/ITEMS/mcl_books/locale/mcl_books.ru.tr b/mods/ITEMS/mcl_books/locale/mcl_books.ru.tr deleted file mode 100644 index a4cc9804c..000000000 --- a/mods/ITEMS/mcl_books/locale/mcl_books.ru.tr +++ /dev/null @@ -1,28 +0,0 @@ -# textdomain: mcl_books -Book=Книги -Books are used to make bookshelves and book and quills.=Из книг можно создавать книжные полки и книги с перьями. -“@1”=“@1” -Copy of “@1”=Копия “@1” -Copy of Copy of “@1”=Копия копии “@1” -Tattered Book=Потрёпанная книга -by @1=игрока @1 -# as in “to sign a book” -Sign=Подписать -Done=Готово -This item can be used to write down some notes.=Этот предмет можно использовать для записи заметок. -Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=Удерживая его в руке, кликните правой, чтобы прочитать текущие записи и отредактировать. Вы можете редактировать текст, сколько захотите. Вы также можете подписать книгу, что превратит её в подписанную книгу, её можно будет уложить в стопку с другими такими же, но больше нельзя будет редактировать. -A book can hold up to 4500 characters. The title length is limited to 64 characters.=Книга может содержать до 4500 символов. Длина названия ограничена 64 символами. -Enter book title:=Введите название книги -by @1=игрока @1 -Note: The book will no longer be editable after signing=Предупреждение: Книгу больше нельзя будет редактировать, если вы её подпишете. -Sign and Close=Подписать и закрыть -Cancel=Отмена -Nameless Book=Безымянная книга -Written Book=Подписанная книга -Written books contain some text written by someone. They can be read and copied, but not edited.=Подписанная книга содержит текст, написанный кем-то. Она может быть прочитана и скопирована, но её нельзя редактировать. -Hold it in your hand, then rightclick to read the book.=Удерживая в руке, кликните правой, чтобы прочитать книгу. -To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=Чтобы скопировать текст подписанной книги, поместите её в крафтинговую решётку вместе с книгой с пером (или сразу несколькими) и скрафтите. Подписанная книга не израсходуется. Не могут быть скопированы копии копий. -Bookshelf=Книжная полка -Bookshelves are used for decoration.=Книжные полки используют в качестве украшений -Book and Quill=Книга с пером -Write down some notes=Сделайте какие-нибудь записи diff --git a/mods/ITEMS/mcl_books/locale/mcl_books.zh_TW.tr b/mods/ITEMS/mcl_books/locale/mcl_books.zh_TW.tr deleted file mode 100644 index eb3ab51a7..000000000 --- a/mods/ITEMS/mcl_books/locale/mcl_books.zh_TW.tr +++ /dev/null @@ -1,27 +0,0 @@ -# textdomain: mcl_books -Book=書 -Books are used to make bookshelves and book and quills.=書籍用於製作書櫃以及書和羽毛筆。 -“@1”=「@1」 -Copy of “@1”=「@1」的複本 -Copy of Copy of “@1”=「@1」的複本的複本 -Tattered Book=破舊的書 -by @1=由 @1 篇寫 -# as in “to sign a book” -Sign=署名 -Done=退出 -This item can be used to write down some notes.=這個物品可以用來寫下一些筆記。 -Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=把它拿在手裡,然後右鍵閱讀當前的筆記,然後進行編輯。你可以隨心所欲地編輯文字。你也可以在書上署名名,這就把它變成了一本完成的書,你可以把它疊起來,但它不能再被編輯了。 -A book can hold up to 4500 characters. The title length is limited to 64 characters.=一本書最多可以容納4500個字符。標題長度限制為64個字符。 -Enter book title:=輸入書本標題: -Note: The book will no longer be editable after signing=注意:在署名後,它不能再被編輯了。 -Sign and Close=署名並退出 -Cancel=取消 -Nameless Book=未命名的書 -Written Book=完成的書 -Written books contain some text written by someone. They can be read and copied, but not edited.=完成的書包含一些由玩家寫的文字。它們可以被閱讀和復制,但不能被編輯。 -Hold it in your hand, then rightclick to read the book.=把書放在手裏,右鍵閱讀它。 -To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=要復製完成的書的文本,請將其與書和羽毛筆(或多個)一起放入製作網格,然後製作。完成的書不會被消耗掉。複本的複本不能被複製。 -Bookshelf=書櫃 -Bookshelves are used for decoration.=書櫃是一種裝飾行方塊 -Book and Quill=書和羽毛筆 -Write down some notes=寫下一些筆記 diff --git a/mods/ITEMS/mcl_books/locale/template.txt b/mods/ITEMS/mcl_books/locale/template.txt deleted file mode 100644 index 8667d1f0b..000000000 --- a/mods/ITEMS/mcl_books/locale/template.txt +++ /dev/null @@ -1,28 +0,0 @@ -# textdomain: mcl_books -Book= -Books are used to make bookshelves and book and quills.= -“@1”= -Copy of “@1”= -Copy of Copy of “@1”= -Tattered Book= -by @1= -# as in “to sign a book” -Sign= -Done= -This item can be used to write down some notes.= -Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.= -A book can hold up to 4500 characters. The title length is limited to 64 characters.= -Enter book title:= -by @1= -Note: The book will no longer be editable after signing= -Sign and Close= -Cancel= -Nameless Book= -Written Book= -Written books contain some text written by someone. They can be read and copied, but not edited.= -Hold it in your hand, then rightclick to read the book.= -To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.= -Bookshelf= -Bookshelves are used for decoration.= -Book and Quill= -Write down some notes= diff --git a/mods/ITEMS/mcl_books/mod.conf b/mods/ITEMS/mcl_books/mod.conf deleted file mode 100644 index cea9a5dd8..000000000 --- a/mods/ITEMS/mcl_books/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_books -author = celeron55 -description = Books mod for MCL2 -optional_depends = mcl_init, mcl_core, mcl_sounds, mcl_mobitems, mcl_dye, mcl_colors diff --git a/mods/ITEMS/mcl_books/textures/default_book.png b/mods/ITEMS/mcl_books/textures/default_book.png deleted file mode 100644 index e9c2d9db6..000000000 Binary files a/mods/ITEMS/mcl_books/textures/default_book.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/textures/default_bookshelf.png b/mods/ITEMS/mcl_books/textures/default_bookshelf.png deleted file mode 100644 index 48fb5ec89..000000000 Binary files a/mods/ITEMS/mcl_books/textures/default_bookshelf.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/textures/mcl_books_book_bg.png b/mods/ITEMS/mcl_books/textures/mcl_books_book_bg.png deleted file mode 100644 index 835c54407..000000000 Binary files a/mods/ITEMS/mcl_books/textures/mcl_books_book_bg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/textures/mcl_books_book_writable.png b/mods/ITEMS/mcl_books/textures/mcl_books_book_writable.png deleted file mode 100644 index caaeacde6..000000000 Binary files a/mods/ITEMS/mcl_books/textures/mcl_books_book_writable.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/textures/mcl_books_book_written.png b/mods/ITEMS/mcl_books/textures/mcl_books_book_written.png deleted file mode 100644 index cbf85836c..000000000 Binary files a/mods/ITEMS/mcl_books/textures/mcl_books_book_written.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/textures/mcl_books_bookshelf_top.png b/mods/ITEMS/mcl_books/textures/mcl_books_bookshelf_top.png deleted file mode 100644 index b82bcfec8..000000000 Binary files a/mods/ITEMS/mcl_books/textures/mcl_books_bookshelf_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/textures/mcl_books_button9.png b/mods/ITEMS/mcl_books/textures/mcl_books_button9.png deleted file mode 100644 index 27b80a89b..000000000 Binary files a/mods/ITEMS/mcl_books/textures/mcl_books_button9.png and /dev/null differ diff --git a/mods/ITEMS/mcl_books/textures/mcl_books_button9_pressed.png b/mods/ITEMS/mcl_books/textures/mcl_books_button9_pressed.png deleted file mode 100644 index 08d4272de..000000000 Binary files a/mods/ITEMS/mcl_books/textures/mcl_books_button9_pressed.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/README.txt b/mods/ITEMS/mcl_bows/README.txt deleted file mode 100644 index fe879c95c..000000000 --- a/mods/ITEMS/mcl_bows/README.txt +++ /dev/null @@ -1,16 +0,0 @@ -This mod adds bows and arrows for MineClone 2. - -License: -* Source code: LGPL 3.0 - * Incorporates code from the [bow] mod by Arcelmi. - https://github.com/Arcelmi/minetest-bows - -* Textures: See MineClone 2 license notes. -* Sounds: - * mcl_bows_bow_shoot.ogg: CC0 by Freesound.org user JoeDinesSound - https://freesound.org/people/JoeDinesSound/sounds/534942/ - * mcl_bows_hit_other.ogg: CC0 by Freesound.org user JoeDinesSound - https://freesound.org/people/JoeDinesSound/sounds/534952/ - * mcl_bows_hit_player.ogg: CC BY 3.0 by Freesound.org user tim.kahn. - https://freesound.org/people/tim.kahn/sounds/38495/ - http://creativecommons.org/licenses/by/3.0/ diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua deleted file mode 100644 index 1816184bb..000000000 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ /dev/null @@ -1,537 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_target = minetest.get_modpath("mcl_target") - -local math = math -local vector = vector - --- Time in seconds after which a stuck arrow is deleted -local ARROW_TIMEOUT = 60 --- Time after which stuck arrow is rechecked for being stuck -local STUCK_RECHECK_TIME = 5 - ---local GRAVITY = 9.81 - -local YAW_OFFSET = -math.pi/2 - -local function dir_to_pitch(dir) - --local dir2 = vector.normalize(dir) - local xz = math.abs(dir.x) + math.abs(dir.z) - return -math.atan2(-dir.y, xz) -end - -local function random_arrow_positions(positions, placement) - if positions == "x" then - return math.random(-4, 4) - elseif positions == "y" then - return math.random(0, 10) - end - if placement == "front" and positions == "z" then - return 3 - elseif placement == "back" and positions == "z" then - return -3 - end - return 0 -end - -local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") -local mod_button = minetest.get_modpath("mesecons_button") - -minetest.register_craftitem("mcl_bows:arrow", { - description = S("Arrow"), - _tt_help = S("Ammunition").."\n"..S("Damage from bow: 1-10").."\n"..S("Damage from dispenser: 3"), - _doc_items_longdesc = S("Arrows are ammunition for bows and dispensers.").."\n".. -S("An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.").."\n".. -S("Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons."), - _doc_items_usagehelp = S("To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it."), - inventory_image = "mcl_bows_arrow_inv.png", - groups = { ammo=1, ammo_bow=1, ammo_bow_regular=1, ammo_crossbow=1 }, - _on_dispense = function(itemstack, dispenserpos, droppos, dropnode, dropdir) - -- Shoot arrow - local shootpos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51)) - local yaw = math.atan2(dropdir.z, dropdir.x) + YAW_OFFSET - mcl_bows.shoot_arrow(itemstack:get_name(), shootpos, dropdir, yaw, nil, 19, 3) - end, -}) - -local ARROW_ENTITY={ - physical = true, - pointable = false, - visual = "mesh", - mesh = "mcl_bows_arrow.obj", - visual_size = {x=-1, y=1}, - textures = {"mcl_bows_arrow.png"}, - collisionbox = {-0.19, -0.125, -0.19, 0.19, 0.125, 0.19}, - collide_with_objects = false, - _fire_damage_resistant = true, - - _lastpos={}, - _startpos=nil, - _damage=1, -- Damage on impact - _is_critical=false, -- Whether this arrow would deal critical damage - _stuck=false, -- Whether arrow is stuck - _stucktimer=nil,-- Amount of time (in seconds) the arrow has been stuck so far - _stuckrechecktimer=nil,-- An additional timer for periodically re-checking the stuck status of an arrow - _stuckin=nil, --Position of node in which arow is stuck. - _shooter=nil, -- ObjectRef of player or mob who shot it - _is_arrow = true, - _in_player = false, - _blocked = false, - _viscosity=0, -- Viscosity of node the arrow is currently in - _deflection_cooloff=0, -- Cooloff timer after an arrow deflection, to prevent many deflections in quick succession -} - --- Destroy arrow entity self at pos and drops it as an item -local function spawn_item(self, pos) - if not minetest.is_creative_enabled("") then - local item = minetest.add_item(pos, "mcl_bows:arrow") - item:set_velocity(vector.new(0, 0, 0)) - item:set_yaw(self.object:get_yaw()) - end - mcl_burning.extinguish(self.object) - self.object:remove() -end - -local function damage_particles(pos, is_critical) - if is_critical then - minetest.add_particlespawner({ - amount = 15, - time = 0.1, - minpos = vector.offset(pos, -0.5, -0.5, -0.5), - maxpos = vector.offset(pos, 0.5, 0.5, 0.5), - minvel = vector.new(-0.1, -0.1, -0.1), - maxvel = vector.new(0.1, 0.1, 0.1), - minexptime = 1, - maxexptime = 2, - minsize = 1.5, - maxsize = 1.5, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_crit.png^[colorize:#bc7a57:127", - }) - end -end - -function ARROW_ENTITY.on_step(self, dtime) - mcl_burning.tick(self.object, dtime, self) - - self._time_in_air = self._time_in_air + .001 - - local pos = self.object:get_pos() - local dpos = vector.round(vector.new(pos)) -- digital pos - local node = minetest.get_node(dpos) - - if self._stuck then - self._stucktimer = self._stucktimer + dtime - self._stuckrechecktimer = self._stuckrechecktimer + dtime - if self._stucktimer > ARROW_TIMEOUT then - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - -- Drop arrow as item when it is no longer stuck - -- FIXME: Arrows are a bit slow to react and continue to float in mid air for a few seconds. - if self._stuckrechecktimer > STUCK_RECHECK_TIME then - local stuckin_def - if self._stuckin then - stuckin_def = minetest.registered_nodes[minetest.get_node(self._stuckin).name] - end - -- TODO: In MC, arrow just falls down without turning into an item - if stuckin_def and stuckin_def.walkable == false then - spawn_item(self, pos) - return - end - self._stuckrechecktimer = 0 - end - -- Pickup arrow if player is nearby (not in Creative Mode) - local objects = minetest.get_objects_inside_radius(pos, 1) - for _,obj in ipairs(objects) do - if obj:is_player() then - if self._collectable and not minetest.is_creative_enabled(obj:get_player_name()) then - if obj:get_inventory():room_for_item("main", "mcl_bows:arrow") then - obj:get_inventory():add_item("main", "mcl_bows:arrow") - minetest.sound_play("item_drop_pickup", { - pos = pos, - max_hear_distance = 16, - gain = 1.0, - }, true) - end - end - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - end - - -- Check for object "collision". Done every tick (hopefully this is not too stressing) - else - - if self._damage >= 9 and self._in_player == false then - minetest.add_particlespawner({ - amount = 1, - time = .001, - minpos = pos, - maxpos = pos, - minvel = vector.new(-0.1,-0.1,-0.1), - maxvel = vector.new(0.1,0.1,0.1), - minexptime = 0.5, - maxexptime = 0.5, - minsize = 2, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mobs_mc_arrow_particle.png", - glow = 1, - }) - end - -- We just check for any hurtable objects nearby. - -- The radius of 3 is fairly liberal, but anything lower than than will cause - -- arrow to hilariously go through mobs often. - -- TODO: Implement an ACTUAL collision detection (engine support needed). - local objs = minetest.get_objects_inside_radius(pos, 1.5) - local closest_object - local closest_distance - - if self._deflection_cooloff > 0 then - self._deflection_cooloff = self._deflection_cooloff - dtime - end - - -- Iterate through all objects and remember the closest attackable object - for k, obj in pairs(objs) do - local ok = false - -- Arrows can only damage players and mobs - if obj:is_player() then - ok = true - elseif obj:get_luaentity() then - if (obj:get_luaentity().is_mob or obj:get_luaentity()._hittable_by_projectile) then - ok = true - end - end - - if ok then - local dist = vector.distance(pos, obj:get_pos()) - if not closest_object or not closest_distance then - closest_object = obj - closest_distance = dist - elseif dist < closest_distance then - closest_object = obj - closest_distance = dist - end - end - end - - -- If an attackable object was found, we will damage the closest one only - - if closest_object then - local obj = closest_object - local is_player = obj:is_player() - local lua = obj:get_luaentity() - if obj == self._shooter and self._time_in_air > 1.02 or obj ~= self._shooter and (is_player or (lua and (lua.is_mob or lua._hittable_by_projectile))) then - if obj:get_hp() > 0 then - -- Check if there is no solid node between arrow and object - local ray = minetest.raycast(self.object:get_pos(), obj:get_pos(), true) - for pointed_thing in ray do - if pointed_thing.type == "object" and pointed_thing.ref == closest_object then - -- Target reached! We can proceed now. - break - elseif pointed_thing.type == "node" then - local nn = minetest.get_node(minetest.get_pointed_thing_position(pointed_thing)).name - local def = minetest.registered_nodes[nn] - if (not def) or def.walkable then - -- There's a node in the way. Delete arrow without damage - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - end - end - - -- Punch target object but avoid hurting enderman. - if not lua or lua.name ~= "mobs_mc:enderman" then - if not self._in_player then - damage_particles(self.object:get_pos(), self._is_critical) - end - if mcl_burning.is_burning(self.object) then - mcl_burning.set_on_fire(obj, 5) - end - if not self._in_player and not self._blocked then - obj:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=self._damage}, - }, self.object:get_velocity()) - if obj:is_player() then - if not mcl_shields.is_blocking(obj) then - local placement - self._placement = math.random(1, 2) - if self._placement == 1 then - placement = "front" - else - placement = "back" - end - self._in_player = true - if self._placement == 2 then - self._rotation_station = 90 - else - self._rotation_station = -90 - end - self._y_position = random_arrow_positions("y", placement) - self._x_position = random_arrow_positions("x", placement) - if self._y_position > 6 and self._x_position < 2 and self._x_position > -2 then - self._attach_parent = "Head" - self._y_position = self._y_position - 6 - elseif self._x_position > 2 then - self._attach_parent = "Arm_Right" - self._y_position = self._y_position - 3 - self._x_position = self._x_position - 2 - elseif self._x_position < -2 then - self._attach_parent = "Arm_Left" - self._y_position = self._y_position - 3 - self._x_position = self._x_position + 2 - else - self._attach_parent = "Body" - end - self._z_rotation = math.random(-30, 30) - self._y_rotation = math.random( -30, 30) - self.object:set_attach( - obj, self._attach_parent, - vector.new(self._x_position, self._y_position, random_arrow_positions("z", placement)), - vector.new(0, self._rotation_station + self._y_rotation, self._z_rotation) - ) - else - self._blocked = true - self.object:set_velocity(vector.multiply(self.object:get_velocity(), -0.25)) - end - minetest.after(150, function() - self.object:remove() - end) - end - end - end - - - if is_player then - if self._shooter and self._shooter:is_player() and not self._in_player and not self._blocked then - -- “Ding” sound for hitting another player - minetest.sound_play({name="mcl_bows_hit_player", gain=0.1}, {to_player=self._shooter:get_player_name()}, true) - end - end - - if lua then - local entity_name = lua.name - -- Achievement for hitting skeleton, wither skeleton or stray (TODO) with an arrow at least 50 meters away - -- NOTE: Range has been reduced because mobs unload much earlier than that ... >_> - -- TODO: This achievement should be given for the kill, not just a hit - if self._shooter and self._shooter:is_player() and vector.distance(pos, self._startpos) >= 20 then - if mod_awards and (entity_name == "mobs_mc:skeleton" or entity_name == "mobs_mc:stray" or entity_name == "mobs_mc:witherskeleton") then - awards.unlock(self._shooter:get_player_name(), "mcl:snipeSkeleton") - end - end - end - if not self._in_player and not self._blocked then - minetest.sound_play({name="mcl_bows_hit_other", gain=0.3}, {pos=self.object:get_pos(), max_hear_distance=16}, true) - end - end - if not obj:is_player() then - mcl_burning.extinguish(self.object) - if self._piercing == 0 then - self.object:remove() - end - end - return - end - end - end - - -- Check for node collision - if self._lastpos.x~=nil and not self._stuck then - local def = minetest.registered_nodes[node.name] - local vel = self.object:get_velocity() - -- Arrow has stopped in one axis, so it probably hit something. - -- This detection is a bit clunky, but sadly, MT does not offer a direct collision detection for us. :-( - if (math.abs(vel.x) < 0.0001) or (math.abs(vel.z) < 0.0001) or (math.abs(vel.y) < 0.00001) then - -- Check for the node to which the arrow is pointing - local dir - if math.abs(vel.y) < 0.00001 then - if self._lastpos.y < pos.y then - dir = vector.new(0, 1, 0) - else - dir = vector.new(0, -1, 0) - end - else - dir = minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(self.object:get_yaw()-YAW_OFFSET))) - end - self._stuckin = vector.add(dpos, dir) - local snode = minetest.get_node(self._stuckin) - local sdef = minetest.registered_nodes[snode.name] - - -- If node is non-walkable, unknown or ignore, don't make arrow stuck. - -- This causes a deflection in the engine. - if not sdef or sdef.walkable == false or snode.name == "ignore" then - self._stuckin = nil - if self._deflection_cooloff <= 0 then - -- Lose 1/3 of velocity on deflection - local newvel = vector.multiply(vel, 0.6667) - - self.object:set_velocity(newvel) - -- Reset deflection cooloff timer to prevent many deflections happening in quick succession - self._deflection_cooloff = 1.0 - end - else - - -- Node was walkable, make arrow stuck - self._stuck = true - self._stucktimer = 0 - self._stuckrechecktimer = 0 - - self.object:set_velocity(vector.new(0, 0, 0)) - self.object:set_acceleration(vector.new(0, 0, 0)) - - minetest.sound_play({name="mcl_bows_hit_other", gain=0.3}, {pos=self.object:get_pos(), max_hear_distance=16}, true) - - if mcl_burning.is_burning(self.object) and snode.name == "mcl_tnt:tnt" then - tnt.ignite(self._stuckin) - end - - -- Activate target - if mod_target and snode.name == "mcl_target:target_off" then - mcl_target.hit(self._stuckin, 1) --10 redstone ticks - end - - -- Push the button! Push, push, push the button! - if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then - local bdir = minetest.wallmounted_to_dir(node.param2) - -- Check the button orientation - if vector.equals(vector.add(dpos, bdir), self._stuckin) then - mesecon.push_button(dpos, node) - end - end - end - elseif (def and def.liquidtype ~= "none") then - -- Slow down arrow in liquids - local v = def.liquid_viscosity - if not v then - v = 0 - end - --local old_v = self._viscosity - self._viscosity = v - local vpenalty = math.max(0.1, 0.98 - 0.1 * v) - if math.abs(vel.x) > 0.001 then - vel.x = vel.x * vpenalty - end - if math.abs(vel.z) > 0.001 then - vel.z = vel.z * vpenalty - end - self.object:set_velocity(vel) - end - end - - -- Update yaw - if not self._stuck then - local vel = self.object:get_velocity() - local yaw = minetest.dir_to_yaw(vel)+YAW_OFFSET - local pitch = dir_to_pitch(vel) - self.object:set_rotation({ x = 0, y = yaw, z = pitch }) - end - - -- Update internal variable - self._lastpos = pos -end - --- Force recheck of stuck arrows when punched. --- Otherwise, punching has no effect. -function ARROW_ENTITY.on_punch(self) - if self._stuck then - self._stuckrechecktimer = STUCK_RECHECK_TIME - end -end - -function ARROW_ENTITY.get_staticdata(self) - local out = { - lastpos = self._lastpos, - startpos = self._startpos, - damage = self._damage, - is_critical = self._is_critical, - stuck = self._stuck, - stuckin = self._stuckin, - stuckin_player = self._in_player, - } - if self._stuck then - -- If _stucktimer is missing for some reason, assume the maximum - if not self._stucktimer then - self._stucktimer = ARROW_TIMEOUT - end - out.stuckstarttime = minetest.get_gametime() - self._stucktimer - end - if self._shooter and self._shooter:is_player() then - out.shootername = self._shooter:get_player_name() - end - return minetest.serialize(out) -end - -function ARROW_ENTITY.on_activate(self, staticdata, dtime_s) - self._time_in_air = 1.0 - local data = minetest.deserialize(staticdata) - if data then - self._stuck = data.stuck - if data.stuck then - if data.stuckstarttime then - -- First, check if the stuck arrow is aleady past its life timer. - -- If yes, delete it. - self._stucktimer = minetest.get_gametime() - data.stuckstarttime - if self._stucktimer > ARROW_TIMEOUT then - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - end - - -- Perform a stuck recheck on the next step. - self._stuckrechecktimer = STUCK_RECHECK_TIME - - self._stuckin = data.stuckin - end - - -- Get the remaining arrow state - self._lastpos = data.lastpos - self._startpos = data.startpos - self._damage = data.damage - self._is_critical = data.is_critical - if data.shootername then - local shooter = minetest.get_player_by_name(data.shootername) - if shooter and shooter:is_player() then - self._shooter = shooter - end - end - - if data.stuckin_player then - self.object:remove() - end - end - self.object:set_armor_groups({ immortal = 1 }) -end - -minetest.register_on_respawnplayer(function(player) - for _, obj in pairs(player:get_children()) do - local ent = obj:get_luaentity() - if ent and ent.name and string.find(ent.name, "mcl_bows:arrow_entity") then - obj:remove() - end - end -end) - -minetest.register_entity("mcl_bows:arrow_entity", ARROW_ENTITY) - -if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - output = "mcl_bows:arrow 4", - recipe = { - {"mcl_core:flint"}, - {"mcl_core:stick"}, - {"mcl_mobitems:feather"} - } - }) -end - -if minetest.get_modpath("doc_identifier") then - doc.sub.identifier.register_object("mcl_bows:arrow_entity", "craftitems", "mcl_bows:arrow") -end diff --git a/mods/ITEMS/mcl_bows/bow.lua b/mods/ITEMS/mcl_bows/bow.lua deleted file mode 100644 index 23b6b4310..000000000 --- a/mods/ITEMS/mcl_bows/bow.lua +++ /dev/null @@ -1,393 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_bows = {} - --- local arrows = { --- ["mcl_bows:arrow"] = "mcl_bows:arrow_entity", --- } - -local GRAVITY = 9.81 -local BOW_DURABILITY = 385 - --- Charging time in microseconds -local BOW_CHARGE_TIME_HALF = 200000 -- bow level 1 -local BOW_CHARGE_TIME_FULL = 500000 -- bow level 2 (full charge) - --- Factor to multiply with player speed while player uses bow --- This emulates the sneak speed. -local PLAYER_USE_BOW_SPEED = tonumber(minetest.settings:get("movement_speed_crouch")) / tonumber(minetest.settings:get("movement_speed_walk")) - --- TODO: Use Minecraft speed (ca. 53 m/s) --- Currently nerfed because at full speed the arrow would easily get out of the range of the loaded map. -local BOW_MAX_SPEED = 40 - ---[[ Store the charging state of each player. -keys: player name -value: -nil = not charging or player not existing -number: currently charging, the number is the time from minetest.get_us_time - in which the charging has started -]] -local bow_load = {} - --- Another player table, this one stores the wield index of the bow being charged -local bow_index = {} - -function mcl_bows.shoot_arrow(arrow_item, pos, dir, yaw, shooter, power, damage, is_critical, bow_stack, collectable) - local obj = minetest.add_entity({x=pos.x,y=pos.y,z=pos.z}, arrow_item.."_entity") - if power == nil then - power = BOW_MAX_SPEED --19 - end - if damage == nil then - damage = 3 - end - local knockback - if bow_stack then - local enchantments = mcl_enchanting.get_enchantments(bow_stack) - if enchantments.power then - damage = damage + (enchantments.power + 1) / 4 - end - if enchantments.punch then - knockback = enchantments.punch * 3 - end - if enchantments.flame then - mcl_burning.set_on_fire(obj, math.huge) - end - end - obj:set_velocity({x=dir.x*power, y=dir.y*power, z=dir.z*power}) - obj:set_acceleration({x=0, y=-GRAVITY, z=0}) - obj:set_yaw(yaw-math.pi/2) - local le = obj:get_luaentity() - le._shooter = shooter - le._source_object = shooter - le._damage = damage - le._is_critical = is_critical - le._startpos = pos - le._knockback = knockback - le._collectable = collectable - minetest.sound_play("mcl_bows_bow_shoot", {pos=pos, max_hear_distance=16}, true) - if shooter and shooter:is_player() then - if obj:get_luaentity().player == "" then - obj:get_luaentity().player = shooter - end - obj:get_luaentity().node = shooter:get_inventory():get_stack("main", 1):get_name() - end - return obj -end - -local function get_arrow(player) - local inv = player:get_inventory() - local arrow_stack, arrow_stack_id - for i=1, inv:get_size("main") do - local it = inv:get_stack("main", i) - if not it:is_empty() and minetest.get_item_group(it:get_name(), "ammo_bow") ~= 0 then - arrow_stack = it - arrow_stack_id = i - break - end - end - return arrow_stack, arrow_stack_id -end - -local function player_shoot_arrow(itemstack, player, power, damage, is_critical) - local arrow_stack, arrow_stack_id = get_arrow(player) - local arrow_itemstring - local has_infinity_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "infinity") - local infinity_used = false - - if minetest.is_creative_enabled(player:get_player_name()) then - if arrow_stack then - arrow_itemstring = arrow_stack:get_name() - else - arrow_itemstring = "mcl_bows:arrow" - end - else - if not arrow_stack then - return false - end - arrow_itemstring = arrow_stack:get_name() - if has_infinity_enchantment and minetest.get_item_group(arrow_itemstring, "ammo_bow_regular") > 0 then - infinity_used = true - else - arrow_stack:take_item() - end - local inv = player:get_inventory() - inv:set_stack("main", arrow_stack_id, arrow_stack) - end - if not arrow_itemstring then - return false - end - local playerpos = player:get_pos() - local dir = player:get_look_dir() - local yaw = player:get_look_horizontal() - - mcl_bows.shoot_arrow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, dir, yaw, player, power, damage, is_critical, player:get_wielded_item(), not infinity_used) - return true -end - --- Bow item, uncharged state -minetest.register_tool("mcl_bows:bow", { - description = S("Bow"), - _tt_help = S("Launches arrows"), - _doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes.").."\n".. -S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."), - _doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot."), - _doc_items_durability = BOW_DURABILITY, - inventory_image = "mcl_bows_bow.png", - wield_scale = mcl_vars.tool_wield_scale, - stack_max = 1, - range = 4, - -- Trick to disable digging as well - on_use = function() return end, - on_place = function(itemstack, player, pointed_thing) - if pointed_thing and pointed_thing.type == "node" then - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if player and not player:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, player, itemstack) or itemstack - end - end - end - - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - on_secondary_use = function(itemstack) - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - groups = {weapon=1,weapon_ranged=1,bow=1,enchantability=1}, - _mcl_uses = 385, -}) - --- Iterates through player inventory and resets all the bows in "charging" state back to their original stage -local function reset_bows(player) - local inv = player:get_inventory() - local list = inv:get_list("main") - for place, stack in pairs(list) do - if stack:get_name() == "mcl_bows:bow" or stack:get_name() == "mcl_bows:bow_enchanted" then - stack:get_meta():set_string("active", "") - elseif stack:get_name()=="mcl_bows:bow_0" or stack:get_name()=="mcl_bows:bow_1" or stack:get_name()=="mcl_bows:bow_2" then - stack:set_name("mcl_bows:bow") - stack:get_meta():set_string("active", "") - list[place] = stack - elseif stack:get_name()=="mcl_bows:bow_0_enchanted" or stack:get_name()=="mcl_bows:bow_1_enchanted" or stack:get_name()=="mcl_bows:bow_2_enchanted" then - stack:set_name("mcl_bows:bow_enchanted") - stack:get_meta():set_string("active", "") - list[place] = stack - end - end - inv:set_list("main", list) -end - --- Resets the bow charging state and player speed. To be used when the player is no longer charging the bow -local function reset_bow_state(player, also_reset_bows) - bow_load[player:get_player_name()] = nil - bow_index[player:get_player_name()] = nil - if minetest.get_modpath("playerphysics") then - playerphysics.remove_physics_factor(player, "speed", "mcl_bows:use_bow") - end - if also_reset_bows then - reset_bows(player) - end -end - --- Bow in charging state -for level=0, 2 do - minetest.register_tool("mcl_bows:bow_"..level, { - description = S("Bow"), - _doc_items_create_entry = false, - inventory_image = "mcl_bows_bow_"..level..".png", - wield_scale = mcl_vars.tool_wield_scale, - stack_max = 1, - range = 0, -- Pointing range to 0 to prevent punching with bow :D - groups = {not_in_creative_inventory=1, not_in_craft_guide=1, bow=1, enchantability=1}, - -- Trick to disable digging as well - on_use = function() return end, - on_drop = function(itemstack, dropper, pos) - reset_bow_state(dropper) - itemstack:get_meta():set_string("active", "") - if mcl_enchanting.is_enchanted(itemstack:get_name()) then - itemstack:set_name("mcl_bows:bow_enchanted") - else - itemstack:set_name("mcl_bows:bow") - end - minetest.item_drop(itemstack, dropper, pos) - itemstack:take_item() - return itemstack - end, - -- Prevent accidental interaction with itemframes and other nodes - on_place = function(itemstack) - return itemstack - end, - _mcl_uses = 385, - }) -end - - -controls.register_on_release(function(player, key, time) - if key~="RMB" then return end - --local inv = minetest.get_inventory({type="player", name=player:get_player_name()}) - local wielditem = player:get_wielded_item() - if (wielditem:get_name()=="mcl_bows:bow_0" or wielditem:get_name()=="mcl_bows:bow_1" or wielditem:get_name()=="mcl_bows:bow_2" or - wielditem:get_name()=="mcl_bows:bow_0_enchanted" or wielditem:get_name()=="mcl_bows:bow_1_enchanted" or wielditem:get_name()=="mcl_bows:bow_2_enchanted") then - - local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) - local speed, damage - local p_load = bow_load[player:get_player_name()] - local charge - -- Type sanity check - if type(p_load) == "number" then - charge = minetest.get_us_time() - p_load - else - -- In case something goes wrong ... - -- Just assume minimum charge. - charge = 0 - minetest.log("warning", "[mcl_bows] Player "..player:get_player_name().." fires arrow with non-numeric bow_load!") - end - charge = math.max(math.min(charge, BOW_CHARGE_TIME_FULL), 0) - - local charge_ratio = charge / BOW_CHARGE_TIME_FULL - charge_ratio = math.max(math.min(charge_ratio, 1), 0) - - -- Calculate damage and speed - -- Fully charged - local is_critical = false - if charge >= BOW_CHARGE_TIME_FULL then - speed = BOW_MAX_SPEED - local r = math.random(1,5) - if r == 1 then - -- 20% chance for critical hit - damage = 10 - is_critical = true - else - damage = 9 - end - -- Partially charged - else - -- Linear speed and damage increase - speed = math.max(4, BOW_MAX_SPEED * charge_ratio) - damage = math.max(1, math.floor(9 * charge_ratio)) - end - - local has_shot = player_shoot_arrow(wielditem, player, speed, damage, is_critical) - - if enchanted then - wielditem:set_name("mcl_bows:bow_enchanted") - else - wielditem:set_name("mcl_bows:bow") - end - - if has_shot and not minetest.is_creative_enabled(player:get_player_name()) then - local durability = BOW_DURABILITY - local unbreaking = mcl_enchanting.get_enchantment(wielditem, "unbreaking") - if unbreaking > 0 then - durability = durability * (unbreaking + 1) - end - wielditem:add_wear(65535/durability) - end - player:set_wielded_item(wielditem) - reset_bow_state(player, true) - end -end) - -controls.register_on_hold(function(player, key, time) - local name = player:get_player_name() - local creative = minetest.is_creative_enabled(name) - if key ~= "RMB" or not (creative or get_arrow(player)) then - return - end - --local inv = minetest.get_inventory({type="player", name=name}) - local wielditem = player:get_wielded_item() - if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then - local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) - if enchanted then - wielditem:set_name("mcl_bows:bow_0_enchanted") - else - wielditem:set_name("mcl_bows:bow_0") - end - player:set_wielded_item(wielditem) - if minetest.get_modpath("playerphysics") then - -- Slow player down when using bow - playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_bow", PLAYER_USE_BOW_SPEED) - end - bow_load[name] = minetest.get_us_time() - bow_index[name] = player:get_wield_index() - else - if player:get_wield_index() == bow_index[name] then - if type(bow_load[name]) == "number" then - if wielditem:get_name() == "mcl_bows:bow_0" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_HALF then - wielditem:set_name("mcl_bows:bow_1") - elseif wielditem:get_name() == "mcl_bows:bow_0_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_HALF then - wielditem:set_name("mcl_bows:bow_1_enchanted") - elseif wielditem:get_name() == "mcl_bows:bow_1" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then - wielditem:set_name("mcl_bows:bow_2") - elseif wielditem:get_name() == "mcl_bows:bow_1_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then - wielditem:set_name("mcl_bows:bow_2_enchanted") - end - else - if wielditem:get_name() == "mcl_bows:bow_0" or wielditem:get_name() == "mcl_bows:bow_1" or wielditem:get_name() == "mcl_bows:bow_2" then - wielditem:set_name("mcl_bows:bow") - elseif wielditem:get_name() == "mcl_bows:bow_0_enchanted" or wielditem:get_name() == "mcl_bows:bow_1_enchanted" or wielditem:get_name() == "mcl_bows:bow_2_enchanted" then - wielditem:set_name("mcl_bows:bow_enchanted") - end - end - player:set_wielded_item(wielditem) - else - reset_bow_state(player, true) - end - end -end) - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local wielditem = player:get_wielded_item() - local wieldindex = player:get_wield_index() - --local controls = player:get_player_control() - if type(bow_load[name]) == "number" and ((wielditem:get_name()~="mcl_bows:bow_0" and wielditem:get_name()~="mcl_bows:bow_1" and wielditem:get_name()~="mcl_bows:bow_2" and wielditem:get_name()~="mcl_bows:bow_0_enchanted" and wielditem:get_name()~="mcl_bows:bow_1_enchanted" and wielditem:get_name()~="mcl_bows:bow_2_enchanted") or wieldindex ~= bow_index[name]) then - reset_bow_state(player, true) - end - end -end) - -minetest.register_on_joinplayer(function(player) - reset_bows(player) -end) - -minetest.register_on_leaveplayer(function(player) - reset_bow_state(player, true) -end) - -if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - output = "mcl_bows:bow", - recipe = { - {"", "mcl_core:stick", "mcl_mobitems:string"}, - {"mcl_core:stick", "", "mcl_mobitems:string"}, - {"", "mcl_core:stick", "mcl_mobitems:string"}, - } - }) - minetest.register_craft({ - output = "mcl_bows:bow", - recipe = { - {"mcl_mobitems:string", "mcl_core:stick", ""}, - {"mcl_mobitems:string", "", "mcl_core:stick"}, - {"mcl_mobitems:string", "mcl_core:stick", ""}, - } - }) -end - -minetest.register_craft({ - type = "fuel", - recipe = "group:bow", - burntime = 15, -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("tools", "mcl_bows:bow", "tools", "mcl_bows:bow_0") - doc.add_entry_alias("tools", "mcl_bows:bow", "tools", "mcl_bows:bow_1") - doc.add_entry_alias("tools", "mcl_bows:bow", "tools", "mcl_bows:bow_2") -end diff --git a/mods/ITEMS/mcl_bows/crossbow.lua b/mods/ITEMS/mcl_bows/crossbow.lua deleted file mode 100644 index b211f6b39..000000000 --- a/mods/ITEMS/mcl_bows/crossbow.lua +++ /dev/null @@ -1,454 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_bows_s = {} - --- local arrows = { --- ["mcl_bows:arrow"] = "mcl_bows:arrow_entity", --- } - -local GRAVITY = 9.81 -local BOW_DURABILITY = 385 - --- Charging time in microseconds -local _BOW_CHARGE_TIME_HALF = 350000 -- bow level 1 -local _BOW_CHARGE_TIME_FULL = 900000 -- bow level 2 (full charge) - -local BOW_CHARGE_TIME_HALF = 350000 -- bow level 1 -local BOW_CHARGE_TIME_FULL = 900000 -- bow level 2 (full charge) - --- Factor to multiply with player speed while player uses bow --- This emulates the sneak speed. -local PLAYER_USE_CROSSBOW_SPEED = tonumber(minetest.settings:get("movement_speed_crouch")) / tonumber(minetest.settings:get("movement_speed_walk")) - --- TODO: Use Minecraft speed (ca. 53 m/s) --- Currently nerfed because at full speed the arrow would easily get out of the range of the loaded map. -local BOW_MAX_SPEED = 68 - -local function play_load_sound(id, pos) - minetest.sound_play("mcl_bows_crossbow_drawback_"..id, {pos=pos, max_hear_distance=12}, true) -end - ---[[ Store the charging state of each player. -keys: player name -value: -nil = not charging or player not existing -number: currently charging, the number is the time from minetest.get_us_time - in which the charging has started -]] -local bow_load = {} - --- Another player table, this one stores the wield index of the bow being charged -local bow_index = {} - -function mcl_bows_s.shoot_arrow_crossbow(arrow_item, pos, dir, yaw, shooter, power, damage, is_critical, crossbow_stack, collectable) - local obj = minetest.add_entity({x=pos.x,y=pos.y,z=pos.z}, arrow_item.."_entity") - if power == nil then - power = BOW_MAX_SPEED --19 - end - if damage == nil then - damage = 3 - end - local knockback - if crossbow_stack then - local enchantments = mcl_enchanting.get_enchantments(crossbow_stack) - if enchantments.piercing then - obj:get_luaentity()._piercing = 1 * enchantments.piercing - else - obj:get_luaentity()._piercing = 0 - end - end - obj:set_velocity({x=dir.x*power, y=dir.y*power, z=dir.z*power}) - obj:set_acceleration({x=0, y=-GRAVITY, z=0}) - obj:set_yaw(yaw-math.pi/2) - local le = obj:get_luaentity() - le._shooter = shooter - le._source_object = shooter - le._damage = damage - le._is_critical = is_critical - le._startpos = pos - le._knockback = knockback - le._collectable = collectable - minetest.sound_play("mcl_bows_crossbow_shoot", {pos=pos, max_hear_distance=16}, true) - if shooter and shooter:is_player() then - if obj:get_luaentity().player == "" then - obj:get_luaentity().player = shooter - end - obj:get_luaentity().node = shooter:get_inventory():get_stack("main", 1):get_name() - end - return obj -end - -local function get_arrow(player) - local inv = player:get_inventory() - local arrow_stack, arrow_stack_id - for i=1, inv:get_size("main") do - local it = inv:get_stack("main", i) - if not it:is_empty() and minetest.get_item_group(it:get_name(), "ammo_crossbow") ~= 0 then - arrow_stack = it - arrow_stack_id = i - break - end - end - return arrow_stack, arrow_stack_id -end - -local function player_shoot_arrow(wielditem, player, power, damage, is_critical) - local has_multishot_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "multishot") - local arrow_itemstring = wielditem:get_meta():get("arrow") - - if not arrow_itemstring then - return false - end - - local playerpos = player:get_pos() - local dir = player:get_look_dir() - local yaw = player:get_look_horizontal() - - if has_multishot_enchantment then - mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, {x=dir.x, y=dir.y, z=dir.z + .2}, yaw, player, power, damage, is_critical, player:get_wielded_item(), false) - mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, {x=dir.x, y=dir.y, z=dir.z - .2}, yaw, player, power, damage, is_critical, player:get_wielded_item(), false) - mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, dir, yaw, player, power, damage, is_critical, player:get_wielded_item(), true) - else - mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, dir, yaw, player, power, damage, is_critical, player:get_wielded_item(), true) - end - return true -end - --- Bow item, uncharged state -minetest.register_tool("mcl_bows:crossbow", { - description = S("Crossbow"), - _tt_help = S("Launches arrows"), - _doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes.").."\n".. -S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."), - _doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot."), - _doc_items_durability = BOW_DURABILITY, - inventory_image = "mcl_bows_crossbow.png", - wield_scale = mcl_vars.tool_wield_scale, - stack_max = 1, - range = 4, - -- Trick to disable digging as well - on_use = function() return end, - on_place = function(itemstack, player, pointed_thing) - if pointed_thing and pointed_thing.type == "node" then - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if player and not player:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, player, itemstack) or itemstack - end - end - end - - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - on_secondary_use = function(itemstack) - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - groups = {weapon=1,weapon_ranged=1,crossbow=1,enchantability=1}, - _mcl_uses = 326, -}) - -minetest.register_tool("mcl_bows:crossbow_loaded", { - description = S("Corssbow"), - _tt_help = S("Launches arrows"), - _doc_items_longdesc = S("Corssbow are ranged weapons to shoot arrows at your foes.").."\n".. -S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."), - _doc_items_usagehelp = S("To use the corssbow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to load an arrow into the chamber, then to shoot press left mouse."), - _doc_items_durability = BOW_DURABILITY, - inventory_image = "mcl_bows_crossbow_3.png", - wield_scale = mcl_vars.tool_wield_scale, - stack_max = 1, - range = 4, - -- Trick to disable digging as well - on_use = function() return end, - on_place = function(itemstack, player, pointed_thing) - if pointed_thing and pointed_thing.type == "node" then - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if player and not player:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, player, itemstack) or itemstack - end - end - end - - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - on_secondary_use = function(itemstack) - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - groups = {weapon=1,weapon_ranged=1,crossbow=1,enchantability=1}, - _mcl_uses = 326, -}) - --- Iterates through player inventory and resets all the bows in "charging" state back to their original stage -local function reset_bows(player) - local inv = player:get_inventory() - local list = inv:get_list("main") - for place, stack in pairs(list) do - if stack:get_name() == "mcl_bows:crossbow" or stack:get_name() == "mcl_bows:crossbow_enchanted" then - stack:get_meta():set_string("active", "") - elseif stack:get_name()=="mcl_bows:crossbow_0" or stack:get_name()=="mcl_bows:crossbow_1" or stack:get_name()=="mcl_bows:crossbow_2" then - stack:set_name("mcl_bows:crossbow") - stack:get_meta():set_string("active", "") - list[place] = stack - elseif stack:get_name()=="mcl_bows:crossbow_0_enchanted" or stack:get_name()=="mcl_bows:crossbow_1_enchanted" or stack:get_name()=="mcl_bows:crossbow_2_enchanted" then - stack:set_name("mcl_bows:crossbow_enchanted") - stack:get_meta():set_string("active", "") - list[place] = stack - end - end - inv:set_list("main", list) -end - --- Resets the bow charging state and player speed. To be used when the player is no longer charging the bow -local function reset_bow_state(player, also_reset_bows) - bow_load[player:get_player_name()] = nil - bow_index[player:get_player_name()] = nil - if minetest.get_modpath("playerphysics") then - playerphysics.remove_physics_factor(player, "speed", "mcl_bows:use_crossbow") - end - if also_reset_bows then - reset_bows(player) - end -end - --- Bow in charging state -for level=0, 2 do - minetest.register_tool("mcl_bows:crossbow_"..level, { - description = S("Crossbow"), - _doc_items_create_entry = false, - inventory_image = "mcl_bows_crossbow_"..level..".png", - wield_scale = mcl_vars.tool_wield_scale, - stack_max = 1, - range = 0, -- Pointing range to 0 to prevent punching with bow :D - groups = {not_in_creative_inventory=1, not_in_craft_guide=1, bow=1, enchantability=1}, - -- Trick to disable digging as well - on_use = function() return end, - on_drop = function(itemstack, dropper, pos) - reset_bow_state(dropper) - itemstack:get_meta():set_string("active", "") - if mcl_enchanting.is_enchanted(itemstack:get_name()) then - itemstack:set_name("mcl_bows:crossbow_enchanted") - else - itemstack:set_name("mcl_bows:crossbow") - end - minetest.item_drop(itemstack, dropper, pos) - itemstack:take_item() - return itemstack - end, - -- Prevent accidental interaction with itemframes and other nodes - on_place = function(itemstack) - return itemstack - end, - _mcl_uses = 385, - }) -end - - -controls.register_on_release(function(player, key, time) - if key~="RMB" then return end - --local inv = minetest.get_inventory({type="player", name=player:get_player_name()}) - local wielditem = player:get_wielded_item() - if wielditem:get_name()=="mcl_bows:crossbow_2" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2" and minetest.is_creative_enabled(player:get_player_name()) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and minetest.is_creative_enabled(player:get_player_name()) then - local arrow_stack, arrow_stack_id = get_arrow(player) - local arrow_itemstring - - if minetest.is_creative_enabled(player:get_player_name()) then - if arrow_stack then - arrow_itemstring = arrow_stack:get_name() - else - arrow_itemstring = "mcl_bows:arrow" - end - else - arrow_itemstring = arrow_stack:get_name() - arrow_stack:take_item() - player:get_inventory():set_stack("main", arrow_stack_id, arrow_stack) - end - - wielditem:get_meta():set_string("arrow", arrow_itemstring) - - if wielditem:get_name()=="mcl_bows:crossbow_2" then - wielditem:set_name("mcl_bows:crossbow_loaded") - else - wielditem:set_name("mcl_bows:crossbow_loaded_enchanted") - end - player:set_wielded_item(wielditem) - minetest.sound_play("mcl_bows_crossbow_load", {pos=player:get_pos(), max_hear_distance=16}, true) - else - reset_bow_state(player, true) - end -end) - -controls.register_on_press(function(player, key, time) - if key~="LMB" then return end - local wielditem = player:get_wielded_item() - if wielditem:get_name()=="mcl_bows:crossbow_loaded" or wielditem:get_name()=="mcl_bows:crossbow_loaded_enchanted" then - local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) - local speed, damage - local p_load = bow_load[player:get_player_name()] - local charge - -- Type sanity check - if type(p_load) == "number" then - charge = minetest.get_us_time() - p_load - else - -- In case something goes wrong ... - -- Just assume minimum charge. - charge = 0 - minetest.log("warning", "[mcl_bows] Player "..player:get_player_name().." fires arrow with non-numeric bow_load!") - end - charge = math.max(math.min(charge, BOW_CHARGE_TIME_FULL), 0) - - local charge_ratio = charge / BOW_CHARGE_TIME_FULL - charge_ratio = math.max(math.min(charge_ratio, 1), 0) - - -- Calculate damage and speed - -- Fully charged - local is_critical = false - speed = BOW_MAX_SPEED - local r = math.random(1,5) - if r == 1 then - -- 20% chance for critical hit - damage = 10 - is_critical = true - else - damage = 9 - end - - local has_shot = player_shoot_arrow(wielditem, player, speed, damage, is_critical) - - if enchanted then - wielditem:set_name("mcl_bows:crossbow_enchanted") - else - wielditem:set_name("mcl_bows:crossbow") - end - - if has_shot and not minetest.is_creative_enabled(player:get_player_name()) then - local durability = BOW_DURABILITY - local unbreaking = mcl_enchanting.get_enchantment(wielditem, "unbreaking") - local multishot = mcl_enchanting.get_enchantment(wielditem, "multishot") - if unbreaking > 0 then - durability = durability * (unbreaking + 1) - end - if multishot then - durability = durability / 3 - end - wielditem:add_wear(65535/durability) - end - player:set_wielded_item(wielditem) - reset_bow_state(player, true) - end -end) - -controls.register_on_hold(function(player, key, time) - local name = player:get_player_name() - local creative = minetest.is_creative_enabled(name) - if key ~= "RMB" then - return - end - --local inv = minetest.get_inventory({type="player", name=name}) - local wielditem = player:get_wielded_item() - local enchantments = mcl_enchanting.get_enchantments(wielditem) - if enchantments.quick_charge then - BOW_CHARGE_TIME_HALF = _BOW_CHARGE_TIME_HALF - (enchantments.quick_charge * 0.13 * 1000000 * .5) - BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL - (enchantments.quick_charge * 0.13 * 1000000) - else - BOW_CHARGE_TIME_HALF = _BOW_CHARGE_TIME_HALF - BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL - end - - if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then - local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) - if enchanted then - wielditem:set_name("mcl_bows:crossbow_0_enchanted") - play_load_sound(0, player:get_pos()) - else - wielditem:set_name("mcl_bows:crossbow_0") - play_load_sound(0, player:get_pos()) - end - player:set_wielded_item(wielditem) - if minetest.get_modpath("playerphysics") then - -- Slow player down when using bow - playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_crossbow", PLAYER_USE_CROSSBOW_SPEED) - end - bow_load[name] = minetest.get_us_time() - bow_index[name] = player:get_wield_index() - else - if player:get_wield_index() == bow_index[name] then - if type(bow_load[name]) == "number" then - if wielditem:get_name() == "mcl_bows:crossbow_0" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_HALF then - wielditem:set_name("mcl_bows:crossbow_1") - play_load_sound(1, player:get_pos()) - elseif wielditem:get_name() == "mcl_bows:crossbow_0_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_HALF then - wielditem:set_name("mcl_bows:crossbow_1_enchanted") - play_load_sound(1, player:get_pos()) - elseif wielditem:get_name() == "mcl_bows:crossbow_1" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then - wielditem:set_name("mcl_bows:crossbow_2") - play_load_sound(2, player:get_pos()) - elseif wielditem:get_name() == "mcl_bows:crossbow_1_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then - wielditem:set_name("mcl_bows:crossbow_2_enchanted") - play_load_sound(2, player:get_pos()) - end - else - if wielditem:get_name() == "mcl_bows:crossbow_0" or wielditem:get_name() == "mcl_bows:crossbow_1" or wielditem:get_name() == "mcl_bows:crossbow_2" then - wielditem:set_name("mcl_bows:crossbow") - play_load_sound(1, player:get_pos()) - elseif wielditem:get_name() == "mcl_bows:crossbow_0_enchanted" or wielditem:get_name() == "mcl_bows:crossbow_1_enchanted" or wielditem:get_name() == "mcl_bows:crossbow_2_enchanted" then - wielditem:set_name("mcl_bows:crossbow_enchanted") - play_load_sound(1, player:get_pos()) - end - end - player:set_wielded_item(wielditem) - else - reset_bow_state(player, true) - end - end -end) - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local wielditem = player:get_wielded_item() - local wieldindex = player:get_wield_index() - --local controls = player:get_player_control() - if type(bow_load[name]) == "number" and ((wielditem:get_name()~="mcl_bows:crossbow_0" and wielditem:get_name()~="mcl_bows:crossbow_1" and wielditem:get_name()~="mcl_bows:crossbow_2" and wielditem:get_name()~="mcl_bows:crossbow_0_enchanted" and wielditem:get_name()~="mcl_bows:crossbow_1_enchanted" and wielditem:get_name()~="mcl_bows:crossbow_2_enchanted") or wieldindex ~= bow_index[name]) then - reset_bow_state(player, true) - end - end -end) - -minetest.register_on_joinplayer(function(player) - reset_bows(player) -end) - -minetest.register_on_leaveplayer(function(player) - reset_bow_state(player, true) -end) - -if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - output = "mcl_bows:crossbow", - recipe = { - {"mcl_core:stick", "mcl_core:iron_ingot", "mcl_core:stick"}, - {"mcl_mobitems:string", "mcl_bows:arrow", "mcl_mobitems:string"}, - {"", "mcl_core:stick", ""}, - } - }) -end - -minetest.register_craft({ - type = "fuel", - recipe = "group:bow", - burntime = 15, -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("tools", "mcl_bows:crossbow", "tools", "mcl_bows:crossbow_0") - doc.add_entry_alias("tools", "mcl_bows:crossbow", "tools", "mcl_bows:crossbow_1") - doc.add_entry_alias("tools", "mcl_bows:crossbow", "tools", "mcl_bows:crossbow_2") -end diff --git a/mods/ITEMS/mcl_bows/init.lua b/mods/ITEMS/mcl_bows/init.lua deleted file mode 100644 index d5b06dac7..000000000 --- a/mods/ITEMS/mcl_bows/init.lua +++ /dev/null @@ -1,11 +0,0 @@ ---Bow -dofile(minetest.get_modpath("mcl_bows") .. "/arrow.lua") -dofile(minetest.get_modpath("mcl_bows") .. "/bow.lua") -dofile(minetest.get_modpath("mcl_bows") .. "/rocket.lua") - ---Crossbow -dofile(minetest.get_modpath("mcl_bows") .. "/crossbow.lua") - ---Compatiblility with older MineClone worlds -minetest.register_alias("mcl_throwing:bow", "mcl_bows:bow") -minetest.register_alias("mcl_throwing:arrow", "mcl_bows:arrow") diff --git a/mods/ITEMS/mcl_bows/locale/mcl_bows.de.tr b/mods/ITEMS/mcl_bows/locale/mcl_bows.de.tr deleted file mode 100644 index c3b426810..000000000 --- a/mods/ITEMS/mcl_bows/locale/mcl_bows.de.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_bows -Arrow=Pfeil -Arrows are ammunition for bows and dispensers.=Pfeile sind Munition für Bögen und Werfer. -An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=Ein Bogen von einem Pfeil richtet regulär 1-9 Schaden an. Mit voller Zugkraft gibt es eine 20%-ige Chance auf einen kritischen Treffer mit 10 Schaden. Ein Pfeil aus einem Werfer richtet immer 3 Schaden an. -Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=Pfeile können in festen Blöcken stecken bleiben und wieder aufgesammelt werden. Sie können auf Holzknöpfe drücken. -To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=Um Pfeile als Munition für dne Bogen zu benutzen, platzieren Sie sie einfach irgendwo im Inventar, sie werden automatisch benutzt. Um Pfeile als Munition für Werfer zu benutzen, platzieren Sie sie ins Inventar eines Werferr. Um einen steckengebliebenen Pfeil aufzusammeln, gehen Sie einfach zu ihm hin. -Bow=Bogen -Bows are ranged weapons to shoot arrows at your foes.=Bogen sind Fernwaffen, um Pfeile auf Ihre Feinde zu schießen. -The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=Die Geschwindigkeit und der Schaden des Bogens erhöht sich, je länger sie den Bogen spannen. Der reguläre Schaden des Pfeiles ist zwischen 1 und 9. Ist der Bogen voll gespannt, gibt es eine 20%-ig Change für einen kritischen Treffer, der 10 Schaden anrichtet. -To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=Um den Bogen zu benutzen, muss sich im Inventar mindestens ein Pfeil befinden (außer im Kreativmodus). Halten sie die rechte Maustaste gedrückt zum Spannen, lassen Sie sie los zum Schießen. -Bow=Bogen -Ammunition=Munition -Damage from bow: 1-10=Schaden vom Bogen: 1-10 -Damage from dispenser: 3=Schaden vom Werfer: 3 -Launches arrows=Verschießt Pfeile diff --git a/mods/ITEMS/mcl_bows/locale/mcl_bows.es.tr b/mods/ITEMS/mcl_bows/locale/mcl_bows.es.tr deleted file mode 100644 index 539afdcf0..000000000 --- a/mods/ITEMS/mcl_bows/locale/mcl_bows.es.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_bows -Arrow=Flecha -Arrows are ammunition for bows and dispensers.=Las flechas son municiones para arcos y dispensadores. -An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=Una flecha disparada desde un arco tiene un daño regular de 1-9. A plena carga, hay un 20% de posibilidades de que un golpe crítico inflija 10 daños en su lugar. Una flecha disparada desde un dispensador siempre causa 3 de daño. -Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=Las flechas pueden atascarse en bloques sólidos y pueden recuperarse nuevamente. También son capaces de presionar botones de madera. -To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=Para usar flechas como municiones para un arco, simplemente colóquelas en cualquier parte de su inventario, se usarán automáticamente. Para usar flechas como municiones para un dispensador, colóquelas en el inventario del dispensador. Para recuperar una flecha que se pega en un bloque, simplemente camine cerca de ella. -Bow=Arco -Bows are ranged weapons to shoot arrows at your foes.=Los arcos son armas a distancia para disparar flechas a tus enemigos. -The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=La velocidad y el daño de la flecha aumentan cuanto más tiempo tenses. El daño regular de la flecha está entre 1 y 9. A plena carga, también hay un 20% de un golpe crítico, que en vez de eso causa 10 de daño. -To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=Para usar el arco, primero debes de tener al menos una flecha en cualquier parte de su inventario (a menos que esté en modo creativo). Mantenga presionado el botón derecho del mouse para tensar, suelte para disparar. -Bow=Arco \ No newline at end of file diff --git a/mods/ITEMS/mcl_bows/locale/mcl_bows.fr.tr b/mods/ITEMS/mcl_bows/locale/mcl_bows.fr.tr deleted file mode 100644 index 313081e48..000000000 --- a/mods/ITEMS/mcl_bows/locale/mcl_bows.fr.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_bows -Arrow=Flèche -Arrows are ammunition for bows and dispensers.=Les flèches sont des munitions pour les arcs et les distributeurs. -An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=Une flèche tirée d'un arc a des dégâts réguliers de 1 à 9. À pleine charge, il y a 20% de chances qu'un coup critique inflige 10 dégâts à la place. Une flèche tirée depuis un distributeur inflige toujours 3 dégâts. -Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=Les flèches peuvent se coincer sur des blocs solides et peuvent être récupérées à nouveau. Ils sont également capables de pousser des boutons en bois. -To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=Pour utiliser des flèches comme munitions pour un arc, il suffit de les placer n'importe où dans votre inventaire, elles seront utilisées automatiquement. Pour utiliser des flèches comme munitions pour un distributeur, placez-les dans l'inventaire du distributeur. Pour récupérer une flèche qui colle dans un bloc, il vous suffit de vous en approcher. -Bow=Arc -Bows are ranged weapons to shoot arrows at your foes.=Les arcs sont des armes à distance pour tirer des flèches sur vos ennemis. -The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=La vitesse et les dégâts de la flèche augmentent plus vous chargez. Les dégâts réguliers de la flèche sont compris entre 1 et 9. À pleine charge, il y a également 20% d'un coup critique, infligeant 10 dégâts à la place. -To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=Pour utiliser l'arc, vous devez d'abord avoir au moins une flèche n'importe où dans votre inventaire (sauf en mode créatif). Maintenez enfoncé le bouton droit de la souris pour charger, relâchez pour tirer. -Bow=Arc -Ammunition=Munition -Damage from bow: 1-10=Dégâts de l'arc: 1-10 -Damage from dispenser: 3=Dégâts du distributeur: 3 -Launches arrows=Lance des flèches diff --git a/mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr b/mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr deleted file mode 100644 index a518ac0ea..000000000 --- a/mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_bows -Arrow=Strzała -Arrows are ammunition for bows and dispensers.=Strzały są amunicją do łuku i dozowników. -An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=Strzała wypuszczona z łuku ma typowe obrażania 1-9. Przy pełnym napięciu jest szansa 20% na trafienie krytyczne zadające 10 obrażeń. Strzała wystrzelona z dozownika zawsze zadaje 3 obrażenia. -Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=Strzały zatrzymują się na stałych blokach i mogą być wówczas odzyskane. Są również w stanie klikać drewniane przyciski. -To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=Aby użyć strzał jako amunicję do łuku umieść je gdziekolwiek w twoim ekwipunku, będą użyte automatyczne. Aby użyć strzał jako amunicję do dozownika umieść je w jego ekwipunku. Aby odzyskać strzałę wbitą w blok po prostu podejdź do niej. -Bow=Łuk -Bows are ranged weapons to shoot arrows at your foes.=Łuki to bronie dystansowe do strzelania strzałami w twoich przeciwników. -The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=Szybkość i obrażenia strzały wzrastają im dłużej ją naciągasz. Zwykłe obrażenia strzały są pomiędzy 1 a 9. Przy pełnym napięciu jest szansa 20% na trafienie krytyczne zadające 10 obrażeń. -To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=Aby użyć łuku musisz mieć przynajmniej jedną strzałę gdziekolwiek w twoim ekwipunku (chyba, że to tryb Kreatywny). Przytrzymaj prawy przycisk myszy aby napiąć łuk, puść by strzelić. -Bow=Łuk -Ammunition=Amunicja -Damage from bow: 1-10=Obrażenia z łuku 1-10 -Damage from dispenser: 3=Obrażenia z dozownika: 3 -Launches arrows=Strzela strzałami - diff --git a/mods/ITEMS/mcl_bows/locale/mcl_bows.ru.tr b/mods/ITEMS/mcl_bows/locale/mcl_bows.ru.tr deleted file mode 100644 index 6a1b7ed31..000000000 --- a/mods/ITEMS/mcl_bows/locale/mcl_bows.ru.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_bows -Arrow=Стрела -Arrows are ammunition for bows and dispensers.=Стрелы - это боеприпасы для луков и диспенсеров. -An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=Стрела, выпущенная из лука, обычно наносит урон 1-9. При полном натяжении есть 20-процентный шанс критического удара с уроном 10. Стрела из диспенсера всегда наносит урон уровня 3. -Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=Стрелы могут застревать в твёрдых блоках, их можно подбирать для повторного использования. Они также способны нажимать деревянные кнопки. -To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=Чтобы использовать стрелы в качестве боеприпасов для лука, просто положите их в любую ячейку вашего инвентаря, и они будут использоваться автоматически. Чтобы использовать стрелы в качестве боеприпасов для диспенсера, поместите их в инвентарь диспенсера. Чтобы взять стрелу, застрявшую в блоке, просто пройдите рядом с ней. -Bow=Лук -Bows are ranged weapons to shoot arrows at your foes.=Лук - это оружие дальнего боя, чтобы стрелять стрелами по вашим врагам. -The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=Скорость и урон стрелы увеличиваются, пока вы её натягиваете. Обычный урон стрелы находится между 1 и 9. При полном натяжении есть 20-процентный шанс критического удара с уроном 10. -To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=Чтобы использовать лук, нужно иметь хотя бы одну стрелу в вашем инвентаре (за исключением творческого режима). Удерживайте правую клавишу мыши, чтобы натягивать тетиву, затем отпустите, чтобы выстрелить. -Bow=Лук -Ammunition=Боеприпасы -Damage from bow: 1-10=Урон от лука: 1-10 -Damage from dispenser: 3=Урон от диспенсера: 3 -Launches arrows=Пускает стрелы diff --git a/mods/ITEMS/mcl_bows/locale/mcl_bows.zh_TW.tr b/mods/ITEMS/mcl_bows/locale/mcl_bows.zh_TW.tr deleted file mode 100644 index 6b59895d3..000000000 --- a/mods/ITEMS/mcl_bows/locale/mcl_bows.zh_TW.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_bows -Arrow=箭 -Arrows are ammunition for bows and dispensers.=箭頭是弓箭和發射器的彈藥。 -An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=從弓上射出的箭有1-9的常規傷害。在最大能量的情況下,有20%的機會暴擊,造成10的傷害。從發射器中發射的箭總是造成3點傷害。 -Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=箭頭可能會卡在固體方塊上,可以再次取回。他們也能按下木質按鈕。 -To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=要把箭作為弓的彈藥,只需把它們放在你物品欄的任何地方,它們就會被自動使用。要使用箭作為發射器的彈藥,把它們放在發射器的物品欄中。要取回插在方塊上的箭,只需走到它附近。 -Bow=弓 -Bows are ranged weapons to shoot arrows at your foes.=弓是遠程武器,可以向敵人發射箭頭。 -The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=拉弓時間越長,箭的速度和傷害越大。箭的常規傷害在1到9之間。在拉滿弓的情況下,20%的機會暴擊,造成10的傷害。 -To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=要使用這把弓,你首先需要在你物品欄的任何地方至少有一支箭(除非在創造模式下)。按住鼠標右鍵充電,鬆開即可射擊。 -Ammunition=彈藥 -Damage from bow: 1-10=從弓發射時的傷害:1-10 -Damage from dispenser: 3=從發射器發射時的傷害:3 -Launches arrows=發射箭 diff --git a/mods/ITEMS/mcl_bows/locale/template.txt b/mods/ITEMS/mcl_bows/locale/template.txt deleted file mode 100644 index 228b61709..000000000 --- a/mods/ITEMS/mcl_bows/locale/template.txt +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_bows -Arrow= -Arrows are ammunition for bows and dispensers.= -An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.= -Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.= -To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.= -Bow= -Bows are ranged weapons to shoot arrows at your foes.= -The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.= -To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.= -Bow= -Ammunition= -Damage from bow: 1-10= -Damage from dispenser: 3= -Launches arrows= diff --git a/mods/ITEMS/mcl_bows/mod.conf b/mods/ITEMS/mcl_bows/mod.conf deleted file mode 100644 index 7b174826a..000000000 --- a/mods/ITEMS/mcl_bows/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mcl_bows -author = Arcelmi -description = This mod adds bows and arrows for MineClone 2. -depends = controls, mcl_particles, mcl_enchanting, mcl_init, mcl_util, mcl_shields -optional_depends = awards, mcl_achievements, mcl_core, mcl_mobitems, playerphysics, doc, doc_identifier, mesecons_button - diff --git a/mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj b/mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj deleted file mode 100644 index bee2c0f4b..000000000 --- a/mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj +++ /dev/null @@ -1,56 +0,0 @@ -# Blender v2.92.0 OBJ File: '' -# www.blender.org -mtllib mcl_bows_arrow.mtl -o Plane -v 3.782006 1.444249 -0.000500 -v 3.782006 -1.443249 -0.000500 -v -3.782006 -1.443249 -0.000500 -v -3.782006 1.444249 -0.000500 -v 3.331104 -1.100076 -1.064829 -v 3.331104 1.069925 -1.064830 -v 3.331104 1.069925 1.085017 -v 3.331104 -1.100076 1.085017 -v 3.782006 0.001000 -1.443750 -v -3.782006 0.001000 -1.443749 -v -3.782006 0.001000 1.443750 -v 3.782006 0.001000 1.443749 -v 3.782006 1.444249 0.000500 -v -3.782006 1.444249 0.000500 -v -3.782006 -1.443249 0.000500 -v 3.782006 -1.443249 0.000500 -v 3.782006 0.000000 -1.443750 -v 3.782006 -0.000000 1.443749 -v -3.782006 -0.000000 1.443750 -v -3.782006 0.000000 -1.443749 -vt -0.000893 0.835148 -vt -0.000893 1.008567 -vt 0.486244 1.008567 -vt 0.486244 0.835148 -vt 0.159016 0.682983 -vt 0.159016 0.849928 -vt -0.005031 0.849928 -vt -0.005031 0.682983 -vt -0.000893 0.835148 -vt 0.486244 0.835148 -vt 0.486244 1.008567 -vt -0.000893 1.008567 -vt -0.000893 0.835148 -vt 0.486244 0.835148 -vt 0.486244 1.008567 -vt -0.000893 1.008567 -vt -0.000893 0.835148 -vt -0.000893 1.008567 -vt 0.486244 1.008567 -vt 0.486244 0.835148 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn -0.0000 -1.0000 -0.0000 -usemtl Material.002 -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/2 6/6/2 7/7/2 8/8/2 -f 9/9/3 10/10/3 11/11/3 12/12/3 -f 13/13/4 14/14/4 15/15/4 16/16/4 -f 17/17/5 18/18/5 19/19/5 20/20/5 diff --git a/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.b3d b/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.b3d deleted file mode 100644 index 0a34f1eaa..000000000 Binary files a/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.mtl b/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.mtl deleted file mode 100644 index f231bdf4c..000000000 --- a/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.mtl +++ /dev/null @@ -1,10 +0,0 @@ -# Blender MTL File: 'None' -# Material Count: 1 - -newmtl None -Ns 500 -Ka 0.8 0.8 0.8 -Kd 0.8 0.8 0.8 -Ks 0.8 0.8 0.8 -d 1 -illum 2 diff --git a/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.obj b/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.obj deleted file mode 100644 index e2bd11d34..000000000 --- a/mods/ITEMS/mcl_bows/models/mcl_bows_rocket.obj +++ /dev/null @@ -1,1016 +0,0 @@ -# Blender v3.0.0 Alpha OBJ File: '' -# www.blender.org -mtllib mcl_bows_rocket.mtl -o Plane -v -1.414214 -0.063116 0.000000 -v 0.000000 -0.063116 1.414214 -v -0.000000 -0.063116 -1.414214 -v 1.414214 -0.063116 -0.000000 -v -1.414214 -0.062205 0.000000 -v 0.000000 -0.062205 1.414214 -v -0.000000 -0.062205 -1.414214 -v 1.414214 -0.062205 -0.000000 -v -1.414214 -0.060838 0.000000 -v 0.000000 -0.060838 1.414214 -v -0.000000 -0.060838 -1.414214 -v 1.414214 -0.060838 -0.000000 -v -1.414214 -0.059926 0.000000 -v 0.000000 -0.059926 1.414214 -v -0.000000 -0.059926 -1.414214 -v 1.414214 -0.059926 -0.000000 -v -1.414214 -0.058559 0.000000 -v 0.000000 -0.058559 1.414214 -v -0.000000 -0.058559 -1.414214 -v 1.414214 -0.058559 -0.000000 -v -1.414214 -0.057648 0.000000 -v 0.000000 -0.057648 1.414214 -v -0.000000 -0.057648 -1.414214 -v 1.414214 -0.057648 -0.000000 -v -1.414214 -0.056281 0.000000 -v 0.000000 -0.056281 1.414214 -v -0.000000 -0.056281 -1.414214 -v 1.414214 -0.056281 -0.000000 -v -1.414214 -0.055369 0.000000 -v 0.000000 -0.055369 1.414214 -v -0.000000 -0.055369 -1.414214 -v 1.414214 -0.055369 -0.000000 -v -1.414214 -0.054002 0.000000 -v 0.000000 -0.054002 1.414214 -v -0.000000 -0.054002 -1.414214 -v 1.414214 -0.054002 -0.000000 -v -1.414214 -0.053091 0.000000 -v 0.000000 -0.053091 1.414214 -v -0.000000 -0.053091 -1.414214 -v 1.414214 -0.053091 -0.000000 -v -1.414214 -0.051723 0.000000 -v 0.000000 -0.051723 1.414214 -v -0.000000 -0.051723 -1.414214 -v 1.414214 -0.051723 -0.000000 -v -1.414214 -0.050812 0.000000 -v 0.000000 -0.050812 1.414214 -v -0.000000 -0.050812 -1.414214 -v 1.414214 -0.050812 -0.000000 -v -1.414214 -0.049445 0.000000 -v 0.000000 -0.049445 1.414214 -v -0.000000 -0.049445 -1.414214 -v 1.414214 -0.049445 -0.000000 -v -1.414214 -0.048533 0.000000 -v 0.000000 -0.048533 1.414214 -v -0.000000 -0.048533 -1.414214 -v 1.414214 -0.048533 -0.000000 -v -1.414214 -0.047166 0.000000 -v 0.000000 -0.047166 1.414214 -v -0.000000 -0.047166 -1.414214 -v 1.414214 -0.047166 -0.000000 -v -1.414214 -0.046255 0.000000 -v 0.000000 -0.046255 1.414214 -v -0.000000 -0.046255 -1.414214 -v 1.414214 -0.046255 -0.000000 -v -1.414214 -0.044888 0.000000 -v 0.000000 -0.044888 1.414214 -v -0.000000 -0.044888 -1.414214 -v 1.414214 -0.044888 -0.000000 -v -1.414214 -0.043976 0.000000 -v 0.000000 -0.043976 1.414214 -v -0.000000 -0.043976 -1.414214 -v 1.414214 -0.043976 -0.000000 -v -1.414214 -0.042609 0.000000 -v 0.000000 -0.042609 1.414214 -v -0.000000 -0.042609 -1.414214 -v 1.414214 -0.042609 -0.000000 -v -1.414214 -0.041698 0.000000 -v 0.000000 -0.041698 1.414214 -v -0.000000 -0.041698 -1.414214 -v 1.414214 -0.041698 -0.000000 -v -1.414214 -0.040331 0.000000 -v 0.000000 -0.040331 1.414214 -v -0.000000 -0.040331 -1.414214 -v 1.414214 -0.040331 -0.000000 -v -1.414214 -0.039419 0.000000 -v 0.000000 -0.039419 1.414214 -v -0.000000 -0.039419 -1.414214 -v 1.414214 -0.039419 -0.000000 -v -1.414214 -0.038052 0.000000 -v 0.000000 -0.038052 1.414214 -v -0.000000 -0.038052 -1.414214 -v 1.414214 -0.038052 -0.000000 -v -1.414214 -0.037141 0.000000 -v 0.000000 -0.037141 1.414214 -v -0.000000 -0.037141 -1.414214 -v 1.414214 -0.037141 -0.000000 -v -1.414214 -0.035773 0.000000 -v 0.000000 -0.035773 1.414214 -v -0.000000 -0.035773 -1.414214 -v 1.414214 -0.035773 -0.000000 -v -1.414214 -0.034862 0.000000 -v 0.000000 -0.034862 1.414214 -v -0.000000 -0.034862 -1.414214 -v 1.414214 -0.034862 -0.000000 -v -1.414214 -0.033495 0.000000 -v 0.000000 -0.033495 1.414214 -v -0.000000 -0.033495 -1.414214 -v 1.414214 -0.033495 -0.000000 -v -1.414214 -0.032583 0.000000 -v 0.000000 -0.032583 1.414214 -v -0.000000 -0.032583 -1.414214 -v 1.414214 -0.032583 -0.000000 -v -1.414214 -0.031216 0.000000 -v 0.000000 -0.031216 1.414214 -v -0.000000 -0.031216 -1.414214 -v 1.414214 -0.031216 -0.000000 -v -1.414214 -0.030305 0.000000 -v 0.000000 -0.030305 1.414214 -v -0.000000 -0.030305 -1.414214 -v 1.414214 -0.030305 -0.000000 -v -1.414214 -0.028938 0.000000 -v 0.000000 -0.028938 1.414214 -v -0.000000 -0.028938 -1.414214 -v 1.414214 -0.028938 -0.000000 -v -1.414214 -0.028026 0.000000 -v 0.000000 -0.028026 1.414214 -v -0.000000 -0.028026 -1.414214 -v 1.414214 -0.028026 -0.000000 -v -1.414214 -0.026659 0.000000 -v 0.000000 -0.026659 1.414214 -v -0.000000 -0.026659 -1.414214 -v 1.414214 -0.026659 -0.000000 -v -1.414214 -0.025748 0.000000 -v 0.000000 -0.025748 1.414214 -v -0.000000 -0.025748 -1.414214 -v 1.414214 -0.025748 -0.000000 -v -1.414214 -0.024381 0.000000 -v 0.000000 -0.024381 1.414214 -v -0.000000 -0.024381 -1.414214 -v 1.414214 -0.024381 -0.000000 -v -1.414214 -0.023469 0.000000 -v 0.000000 -0.023469 1.414214 -v -0.000000 -0.023469 -1.414214 -v 1.414214 -0.023469 -0.000000 -v -1.414214 -0.022102 0.000000 -v 0.000000 -0.022102 1.414214 -v -0.000000 -0.022102 -1.414214 -v 1.414214 -0.022102 -0.000000 -v -1.414214 -0.021191 0.000000 -v 0.000000 -0.021191 1.414214 -v -0.000000 -0.021191 -1.414214 -v 1.414214 -0.021191 -0.000000 -v -1.414214 -0.019824 0.000000 -v 0.000000 -0.019824 1.414214 -v -0.000000 -0.019824 -1.414214 -v 1.414214 -0.019824 -0.000000 -v -1.414214 -0.018912 0.000000 -v 0.000000 -0.018912 1.414214 -v -0.000000 -0.018912 -1.414214 -v 1.414214 -0.018912 -0.000000 -v -1.414214 -0.017545 0.000000 -v 0.000000 -0.017545 1.414214 -v -0.000000 -0.017545 -1.414214 -v 1.414214 -0.017545 -0.000000 -v -1.414214 -0.016634 0.000000 -v 0.000000 -0.016634 1.414214 -v -0.000000 -0.016634 -1.414214 -v 1.414214 -0.016634 -0.000000 -v -1.414214 -0.015266 0.000000 -v 0.000000 -0.015266 1.414214 -v -0.000000 -0.015266 -1.414214 -v 1.414214 -0.015266 -0.000000 -v -1.414214 -0.014355 0.000000 -v 0.000000 -0.014355 1.414214 -v -0.000000 -0.014355 -1.414214 -v 1.414214 -0.014355 -0.000000 -v -1.414214 -0.012988 0.000000 -v 0.000000 -0.012988 1.414214 -v -0.000000 -0.012988 -1.414214 -v 1.414214 -0.012988 -0.000000 -v -1.414214 -0.012076 0.000000 -v 0.000000 -0.012076 1.414214 -v -0.000000 -0.012076 -1.414214 -v 1.414214 -0.012076 -0.000000 -v -1.414214 -0.010709 0.000000 -v 0.000000 -0.010709 1.414214 -v -0.000000 -0.010709 -1.414214 -v 1.414214 -0.010709 -0.000000 -v -1.414214 -0.009798 0.000000 -v 0.000000 -0.009798 1.414214 -v -0.000000 -0.009798 -1.414214 -v 1.414214 -0.009798 -0.000000 -v -1.414214 -0.008431 0.000000 -v 0.000000 -0.008431 1.414214 -v -0.000000 -0.008431 -1.414214 -v 1.414214 -0.008431 -0.000000 -v -1.414214 -0.007519 0.000000 -v 0.000000 -0.007519 1.414214 -v -0.000000 -0.007519 -1.414214 -v 1.414214 -0.007519 -0.000000 -v -1.414214 -0.006152 0.000000 -v 0.000000 -0.006152 1.414214 -v -0.000000 -0.006152 -1.414214 -v 1.414214 -0.006152 -0.000000 -v -1.414214 -0.005241 0.000000 -v 0.000000 -0.005241 1.414214 -v -0.000000 -0.005241 -1.414214 -v 1.414214 -0.005241 -0.000000 -v -1.414214 -0.003874 0.000000 -v 0.000000 -0.003874 1.414214 -v -0.000000 -0.003874 -1.414214 -v 1.414214 -0.003874 -0.000000 -v -1.414214 -0.002962 0.000000 -v 0.000000 -0.002962 1.414214 -v -0.000000 -0.002962 -1.414214 -v 1.414214 -0.002962 -0.000000 -v -1.414214 -0.001595 0.000000 -v 0.000000 -0.001595 1.414214 -v -0.000000 -0.001595 -1.414214 -v 1.414214 -0.001595 -0.000000 -v -1.414214 -0.000684 0.000000 -v 0.000000 -0.000684 1.414214 -v -0.000000 -0.000684 -1.414214 -v 1.414214 -0.000684 -0.000000 -v -1.414214 0.000684 0.000000 -v 0.000000 0.000684 1.414214 -v -0.000000 0.000684 -1.414214 -v 1.414214 0.000684 -0.000000 -v -1.414214 0.001595 0.000000 -v 0.000000 0.001595 1.414214 -v -0.000000 0.001595 -1.414214 -v 1.414214 0.001595 -0.000000 -v -1.414214 0.002962 0.000000 -v 0.000000 0.002962 1.414214 -v -0.000000 0.002962 -1.414214 -v 1.414214 0.002962 -0.000000 -v -1.414214 0.003874 0.000000 -v 0.000000 0.003874 1.414214 -v -0.000000 0.003874 -1.414214 -v 1.414214 0.003874 -0.000000 -v -1.414214 0.005241 0.000000 -v 0.000000 0.005241 1.414214 -v -0.000000 0.005241 -1.414214 -v 1.414214 0.005241 -0.000000 -v -1.414214 0.006152 0.000000 -v 0.000000 0.006152 1.414214 -v -0.000000 0.006152 -1.414214 -v 1.414214 0.006152 -0.000000 -v -1.414214 0.007519 0.000000 -v 0.000000 0.007519 1.414214 -v -0.000000 0.007519 -1.414214 -v 1.414214 0.007519 -0.000000 -v -1.414214 0.008431 0.000000 -v 0.000000 0.008431 1.414214 -v -0.000000 0.008431 -1.414214 -v 1.414214 0.008431 -0.000000 -v -1.414214 0.009798 0.000000 -v 0.000000 0.009798 1.414214 -v -0.000000 0.009798 -1.414214 -v 1.414214 0.009798 -0.000000 -v -1.414214 0.010709 0.000000 -v 0.000000 0.010709 1.414214 -v -0.000000 0.010709 -1.414214 -v 1.414214 0.010709 -0.000000 -v -1.414214 0.012076 0.000000 -v 0.000000 0.012076 1.414214 -v -0.000000 0.012076 -1.414214 -v 1.414214 0.012076 -0.000000 -v -1.414214 0.012988 0.000000 -v 0.000000 0.012988 1.414214 -v -0.000000 0.012988 -1.414214 -v 1.414214 0.012988 -0.000000 -v -1.414214 0.014355 0.000000 -v 0.000000 0.014355 1.414214 -v -0.000000 0.014355 -1.414214 -v 1.414214 0.014355 -0.000000 -v -1.414214 0.015266 0.000000 -v 0.000000 0.015266 1.414214 -v -0.000000 0.015266 -1.414214 -v 1.414214 0.015266 -0.000000 -v -1.414214 0.016634 0.000000 -v 0.000000 0.016634 1.414214 -v -0.000000 0.016634 -1.414214 -v 1.414214 0.016634 -0.000000 -v -1.414214 0.017545 0.000000 -v 0.000000 0.017545 1.414214 -v -0.000000 0.017545 -1.414214 -v 1.414214 0.017545 -0.000000 -v -1.414214 0.018912 0.000000 -v 0.000000 0.018912 1.414214 -v -0.000000 0.018912 -1.414214 -v 1.414214 0.018912 -0.000000 -v -1.414214 0.019824 0.000000 -v 0.000000 0.019824 1.414214 -v -0.000000 0.019824 -1.414214 -v 1.414214 0.019824 -0.000000 -v -1.414214 0.021191 0.000000 -v 0.000000 0.021191 1.414214 -v -0.000000 0.021191 -1.414214 -v 1.414214 0.021191 -0.000000 -v -1.414214 0.022102 0.000000 -v 0.000000 0.022102 1.414214 -v -0.000000 0.022102 -1.414214 -v 1.414214 0.022102 -0.000000 -v -1.414214 0.023469 0.000000 -v 0.000000 0.023469 1.414214 -v -0.000000 0.023469 -1.414214 -v 1.414214 0.023469 -0.000000 -v -1.414214 0.024381 0.000000 -v 0.000000 0.024381 1.414214 -v -0.000000 0.024381 -1.414214 -v 1.414214 0.024381 -0.000000 -v -1.414214 0.025748 0.000000 -v 0.000000 0.025748 1.414214 -v -0.000000 0.025748 -1.414214 -v 1.414214 0.025748 -0.000000 -v -1.414214 0.026659 0.000000 -v 0.000000 0.026659 1.414214 -v -0.000000 0.026659 -1.414214 -v 1.414214 0.026659 -0.000000 -v -1.414214 0.028026 0.000000 -v 0.000000 0.028026 1.414214 -v -0.000000 0.028026 -1.414214 -v 1.414214 0.028026 -0.000000 -v -1.414214 0.028938 0.000000 -v 0.000000 0.028938 1.414214 -v -0.000000 0.028938 -1.414214 -v 1.414214 0.028938 -0.000000 -v -1.414214 0.030305 0.000000 -v 0.000000 0.030305 1.414214 -v -0.000000 0.030305 -1.414214 -v 1.414214 0.030305 -0.000000 -v -1.414214 0.031216 0.000000 -v 0.000000 0.031216 1.414214 -v -0.000000 0.031216 -1.414214 -v 1.414214 0.031216 -0.000000 -v -1.414214 0.032584 0.000000 -v 0.000000 0.032584 1.414214 -v -0.000000 0.032584 -1.414214 -v 1.414214 0.032584 -0.000000 -v -1.414214 0.033495 0.000000 -v 0.000000 0.033495 1.414214 -v -0.000000 0.033495 -1.414214 -v 1.414214 0.033495 -0.000000 -v -1.414214 0.034862 0.000000 -v 0.000000 0.034862 1.414214 -v -0.000000 0.034862 -1.414214 -v 1.414214 0.034862 -0.000000 -v -1.414214 0.035774 0.000000 -v 0.000000 0.035774 1.414214 -v -0.000000 0.035774 -1.414214 -v 1.414214 0.035774 -0.000000 -v -1.414214 0.037141 0.000000 -v 0.000000 0.037141 1.414214 -v -0.000000 0.037141 -1.414214 -v 1.414214 0.037141 -0.000000 -v -1.414214 0.038052 0.000000 -v 0.000000 0.038052 1.414214 -v -0.000000 0.038052 -1.414214 -v 1.414214 0.038052 -0.000000 -v -1.414214 0.039419 0.000000 -v 0.000000 0.039419 1.414214 -v -0.000000 0.039419 -1.414214 -v 1.414214 0.039419 -0.000000 -v -1.414214 0.040331 0.000000 -v 0.000000 0.040331 1.414214 -v -0.000000 0.040331 -1.414214 -v 1.414214 0.040331 -0.000000 -v -1.414214 0.041698 0.000000 -v 0.000000 0.041698 1.414214 -v -0.000000 0.041698 -1.414214 -v 1.414214 0.041698 -0.000000 -v -1.414214 0.042609 0.000000 -v 0.000000 0.042609 1.414214 -v -0.000000 0.042609 -1.414214 -v 1.414214 0.042609 -0.000000 -v -1.414214 0.043976 0.000000 -v 0.000000 0.043976 1.414214 -v -0.000000 0.043976 -1.414214 -v 1.414214 0.043976 -0.000000 -v -1.414214 0.044888 0.000000 -v 0.000000 0.044888 1.414214 -v -0.000000 0.044888 -1.414214 -v 1.414214 0.044888 -0.000000 -v -1.414214 0.046255 0.000000 -v 0.000000 0.046255 1.414214 -v -0.000000 0.046255 -1.414214 -v 1.414214 0.046255 -0.000000 -v -1.414214 0.047166 0.000000 -v 0.000000 0.047166 1.414214 -v -0.000000 0.047166 -1.414214 -v 1.414214 0.047166 -0.000000 -v -1.414214 0.048533 0.000000 -v 0.000000 0.048533 1.414214 -v -0.000000 0.048533 -1.414214 -v 1.414214 0.048533 -0.000000 -v -1.414214 0.049445 0.000000 -v 0.000000 0.049445 1.414214 -v -0.000000 0.049445 -1.414214 -v 1.414214 0.049445 -0.000000 -v -1.414214 0.050812 0.000000 -v 0.000000 0.050812 1.414214 -v -0.000000 0.050812 -1.414214 -v 1.414214 0.050812 -0.000000 -v -1.414214 0.051723 0.000000 -v 0.000000 0.051723 1.414214 -v -0.000000 0.051723 -1.414214 -v 1.414214 0.051723 -0.000000 -v -1.414214 0.053091 0.000000 -v 0.000000 0.053091 1.414214 -v -0.000000 0.053091 -1.414214 -v 1.414214 0.053091 -0.000000 -v -1.414214 0.054002 0.000000 -v 0.000000 0.054002 1.414214 -v -0.000000 0.054002 -1.414214 -v 1.414214 0.054002 -0.000000 -v -1.414214 0.055369 0.000000 -v 0.000000 0.055369 1.414214 -v -0.000000 0.055369 -1.414214 -v 1.414214 0.055369 -0.000000 -v -1.414214 0.056281 0.000000 -v 0.000000 0.056281 1.414214 -v -0.000000 0.056281 -1.414214 -v 1.414214 0.056281 -0.000000 -v -1.414214 0.057648 0.000000 -v 0.000000 0.057648 1.414214 -v -0.000000 0.057648 -1.414214 -v 1.414214 0.057648 -0.000000 -v -1.414214 0.058559 0.000000 -v 0.000000 0.058559 1.414214 -v -0.000000 0.058559 -1.414214 -v 1.414214 0.058559 -0.000000 -v -1.414214 0.059926 0.000000 -v 0.000000 0.059926 1.414214 -v -0.000000 0.059926 -1.414214 -v 1.414214 0.059926 -0.000000 -v -1.414214 0.060838 0.000000 -v 0.000000 0.060838 1.414214 -v -0.000000 0.060838 -1.414214 -v 1.414214 0.060838 -0.000000 -v -1.414214 0.062205 0.000000 -v 0.000000 0.062205 1.414214 -v -0.000000 0.062205 -1.414214 -v 1.414214 0.062205 -0.000000 -v -1.414214 0.063116 0.000000 -v 0.000000 0.063116 1.414214 -v -0.000000 0.063116 -1.414214 -v 1.414214 0.063116 -0.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 1/1/1 3/2/1 4/3/1 2/4/1 -f 5/5/2 6/6/2 8/7/2 7/8/2 -f 9/9/1 11/10/1 12/11/1 10/12/1 -f 13/13/2 14/14/2 16/15/2 15/16/2 -f 17/17/1 19/18/1 20/19/1 18/20/1 -f 21/21/2 22/22/2 24/23/2 23/24/2 -f 25/25/1 27/26/1 28/27/1 26/28/1 -f 29/29/2 30/30/2 32/31/2 31/32/2 -f 33/33/1 35/34/1 36/35/1 34/36/1 -f 37/37/2 38/38/2 40/39/2 39/40/2 -f 41/41/1 43/42/1 44/43/1 42/44/1 -f 45/45/2 46/46/2 48/47/2 47/48/2 -f 49/49/1 51/50/1 52/51/1 50/52/1 -f 53/53/2 54/54/2 56/55/2 55/56/2 -f 57/57/1 59/58/1 60/59/1 58/60/1 -f 61/61/2 62/62/2 64/63/2 63/64/2 -f 65/65/1 67/66/1 68/67/1 66/68/1 -f 69/69/2 70/70/2 72/71/2 71/72/2 -f 73/73/1 75/74/1 76/75/1 74/76/1 -f 77/77/2 78/78/2 80/79/2 79/80/2 -f 81/81/1 83/82/1 84/83/1 82/84/1 -f 85/85/2 86/86/2 88/87/2 87/88/2 -f 89/89/1 91/90/1 92/91/1 90/92/1 -f 93/93/2 94/94/2 96/95/2 95/96/2 -f 97/97/1 99/98/1 100/99/1 98/100/1 -f 101/101/2 102/102/2 104/103/2 103/104/2 -f 105/105/1 107/106/1 108/107/1 106/108/1 -f 109/109/2 110/110/2 112/111/2 111/112/2 -f 113/113/1 115/114/1 116/115/1 114/116/1 -f 117/117/2 118/118/2 120/119/2 119/120/2 -f 121/121/1 123/122/1 124/123/1 122/124/1 -f 125/125/2 126/126/2 128/127/2 127/128/2 -f 129/129/1 131/130/1 132/131/1 130/132/1 -f 133/133/2 134/134/2 136/135/2 135/136/2 -f 137/137/1 139/138/1 140/139/1 138/140/1 -f 141/141/2 142/142/2 144/143/2 143/144/2 -f 145/145/1 147/146/1 148/147/1 146/148/1 -f 149/149/2 150/150/2 152/151/2 151/152/2 -f 153/153/1 155/154/1 156/155/1 154/156/1 -f 157/157/2 158/158/2 160/159/2 159/160/2 -f 161/161/1 163/162/1 164/163/1 162/164/1 -f 165/165/2 166/166/2 168/167/2 167/168/2 -f 169/169/1 171/170/1 172/171/1 170/172/1 -f 173/173/2 174/174/2 176/175/2 175/176/2 -f 177/177/1 179/178/1 180/179/1 178/180/1 -f 181/181/2 182/182/2 184/183/2 183/184/2 -f 185/185/1 187/186/1 188/187/1 186/188/1 -f 189/189/2 190/190/2 192/191/2 191/192/2 -f 193/193/1 195/194/1 196/195/1 194/196/1 -f 197/197/2 198/198/2 200/199/2 199/200/2 -f 201/201/1 203/202/1 204/203/1 202/204/1 -f 205/205/2 206/206/2 208/207/2 207/208/2 -f 209/209/1 211/210/1 212/211/1 210/212/1 -f 213/213/2 214/214/2 216/215/2 215/216/2 -f 217/217/1 219/218/1 220/219/1 218/220/1 -f 221/221/2 222/222/2 224/223/2 223/224/2 -f 225/225/1 227/226/1 228/227/1 226/228/1 -f 229/229/2 230/230/2 232/231/2 231/232/2 -f 233/233/1 235/234/1 236/235/1 234/236/1 -f 237/237/2 238/238/2 240/239/2 239/240/2 -f 241/241/1 243/242/1 244/243/1 242/244/1 -f 245/245/2 246/246/2 248/247/2 247/248/2 -f 249/249/1 251/250/1 252/251/1 250/252/1 -f 253/253/2 254/254/2 256/255/2 255/256/2 -f 257/257/1 259/258/1 260/259/1 258/260/1 -f 261/261/2 262/262/2 264/263/2 263/264/2 -f 265/265/1 267/266/1 268/267/1 266/268/1 -f 269/269/2 270/270/2 272/271/2 271/272/2 -f 273/273/1 275/274/1 276/275/1 274/276/1 -f 277/277/2 278/278/2 280/279/2 279/280/2 -f 281/281/1 283/282/1 284/283/1 282/284/1 -f 285/285/2 286/286/2 288/287/2 287/288/2 -f 289/289/1 291/290/1 292/291/1 290/292/1 -f 293/293/2 294/294/2 296/295/2 295/296/2 -f 297/297/1 299/298/1 300/299/1 298/300/1 -f 301/301/2 302/302/2 304/303/2 303/304/2 -f 305/305/1 307/306/1 308/307/1 306/308/1 -f 309/309/2 310/310/2 312/311/2 311/312/2 -f 313/313/1 315/314/1 316/315/1 314/316/1 -f 317/317/2 318/318/2 320/319/2 319/320/2 -f 321/321/1 323/322/1 324/323/1 322/324/1 -f 325/325/2 326/326/2 328/327/2 327/328/2 -f 329/329/1 331/330/1 332/331/1 330/332/1 -f 333/333/2 334/334/2 336/335/2 335/336/2 -f 337/337/1 339/338/1 340/339/1 338/340/1 -f 341/341/2 342/342/2 344/343/2 343/344/2 -f 345/345/1 347/346/1 348/347/1 346/348/1 -f 349/349/2 350/350/2 352/351/2 351/352/2 -f 353/353/1 355/354/1 356/355/1 354/356/1 -f 357/357/2 358/358/2 360/359/2 359/360/2 -f 361/361/1 363/362/1 364/363/1 362/364/1 -f 365/365/2 366/366/2 368/367/2 367/368/2 -f 369/369/1 371/370/1 372/371/1 370/372/1 -f 373/373/2 374/374/2 376/375/2 375/376/2 -f 377/377/1 379/378/1 380/379/1 378/380/1 -f 381/381/2 382/382/2 384/383/2 383/384/2 -f 385/385/1 387/386/1 388/387/1 386/388/1 -f 389/389/2 390/390/2 392/391/2 391/392/2 -f 393/393/1 395/394/1 396/395/1 394/396/1 -f 397/397/2 398/398/2 400/399/2 399/400/2 -f 401/401/1 403/402/1 404/403/1 402/404/1 -f 405/405/2 406/406/2 408/407/2 407/408/2 -f 409/409/1 411/410/1 412/411/1 410/412/1 -f 413/413/2 414/414/2 416/415/2 415/416/2 -f 417/417/1 419/418/1 420/419/1 418/420/1 -f 421/421/2 422/422/2 424/423/2 423/424/2 -f 425/425/1 427/426/1 428/427/1 426/428/1 -f 429/429/2 430/430/2 432/431/2 431/432/2 -f 433/433/1 435/434/1 436/435/1 434/436/1 -f 437/437/2 438/438/2 440/439/2 439/440/2 -f 441/441/1 443/442/1 444/443/1 442/444/1 -f 445/445/2 446/446/2 448/447/2 447/448/2 diff --git a/mods/ITEMS/mcl_bows/rocket.lua b/mods/ITEMS/mcl_bows/rocket.lua deleted file mode 100644 index b8ad2c1f0..000000000 --- a/mods/ITEMS/mcl_bows/rocket.lua +++ /dev/null @@ -1,699 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math -local vector = vector - --- Time in seconds after which a stuck arrow is deleted -local ARROW_TIMEOUT = 1 --- Time after which stuck arrow is rechecked for being stuck -local STUCK_RECHECK_TIME = 0.1 - ---local GRAVITY = 9.81 - -local YAW_OFFSET = -math.pi/2 - -local function dir_to_pitch(dir) - --local dir2 = vector.normalize(dir) - local xz = math.abs(dir.x) + math.abs(dir.z) - return -math.atan2(-dir.y, xz) -end - -local function damage_explosion(self, damagemulitplier) - local p = self.object:get_pos() - mcl_explosions.explode(p, 3, {}) - local objects = minetest.get_objects_inside_radius(p, 8) - for _,obj in pairs(objects) do - if obj:is_player() then - mcl_util.deal_damage(obj, damagemulitplier - vector.distance(p, obj:get_pos()), {type = "explosion"}) - elseif obj:get_luaentity().is_mob then - obj:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=damagemulitplier - vector.distance(p, obj:get_pos())}, - }, self.object:get_velocity()) - end - end -end - -local function particle_explosion(self) - local particle_pattern = math.random(1, 3) - local fpitch - --local true_type - local type = math.random(1, 2) - local size = math.random(1, 3) - local colors = {"red", "yellow", "blue", "green", "white"} - local this_colors = {colors[math.random(#colors)], colors[math.random(#colors)], colors[math.random(#colors)]} - - if size == 1 then - fpitch = math.random(200, 300) - elseif size == 2 then - fpitch = math.random(100, 130) - else - fpitch = math.random(60, 70) - end - - --[[if type == 1 then - true_type = "Popper" - else - true_type = "Floof" - end]] - - if type == 1 then - minetest.sound_play("mcl_bows_firework", { - pos = self.object:get_pos(), - max_hear_distance = 100, - gain = 3.0, - pitch = fpitch/100 - }, true) - else - minetest.sound_play("mcl_bows_firework_soft", { - pos = self.object:get_pos(), - max_hear_distance = 100, - gain = 4.0, - pitch = fpitch/100 - }, true) - end - - if particle_pattern == 1 then - minetest.add_particlespawner({ - amount = 400 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-7 * size,-7 * size,-7 * size), - maxvel = vector.new(7 * size,7 * size,7 * size), - minexptime = .6 * size / 2, - maxexptime = .9 * size / 2, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[1]..".png", - glow = 14, - }) - minetest.add_particlespawner({ - amount = 400 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-2 * size,-2 * size,-2 * size), - maxvel = vector.new(2 * size,2 * size,2 * size), - minexptime = .6 * size / 2, - maxexptime = .9 * size / 2, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[2]..".png", - glow = 14, - }) - minetest.add_particlespawner({ - amount = 100 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-14 * size,-14 * size,-14 * size), - maxvel = vector.new(14 * size,14 * size,14 * size), - minexptime = .6 * size / 2, - maxexptime = .9 * size / 2, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[3]..".png", - glow = 14, - }) - elseif particle_pattern == 2 then - - minetest.add_particlespawner({ - amount = 240 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-5 * size,-5 * size,-5 * size), - maxvel = vector.new(5 * size,5 * size,5 * size), - minexptime = .6 * size / 2, - maxexptime = .9 * size / 2, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[1]..".png", - glow = 14, - }) - minetest.add_particlespawner({ - amount = 500 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-2 * size,-2 * size,-2 * size), - maxvel = vector.new(2 * size,2 * size,2 * size), - minexptime = .6 * size / 2, - maxexptime = .9 * size / 2, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[2]..".png", - glow = 14, - }) - minetest.add_particlespawner({ - amount = 350 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-3 * size,-3 * size,-3 * size), - maxvel = vector.new(3 * size,3 * size,3 * size), - minexptime = .6 * size / 2, - maxexptime = .9 * size / 2, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[3]..".png", - glow = 14, - }) - elseif particle_pattern == 3 then - - minetest.add_particlespawner({ - amount = 400 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-6 * size,-4 * size,-6 * size), - maxvel = vector.new(6 * size,4 * size,6 * size), - minexptime = .6 * size, - maxexptime = .9 * size, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[1]..".png", - glow = 14, - }) - minetest.add_particlespawner({ - amount = 120 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-8 * size,6 * size,-8 * size), - maxvel = vector.new(8 * size,6 * size,8 * size), - minexptime = .6 * size, - maxexptime = .9 * size, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[2]..".png", - glow = 14, - }) - minetest.add_particlespawner({ - amount = 130 * size, - time = 0.0001, - minpos = self.object:get_pos(), - maxpos = self.object:get_pos(), - minvel = vector.new(-3 * size,3 * size,-3 * size), - maxvel = vector.new(3 * size,3 * size,3 * size), - minexptime = .6 * size, - maxexptime = .9 * size, - minsize = 2 * size, - maxsize = 3 * size, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_firework_"..this_colors[3]..".png", - glow = 14, - }) - end - - return size - -end - -local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") -local mod_button = minetest.get_modpath("mesecons_button") -local mod_target = minetest.get_modpath("mcl_target") - -minetest.register_craftitem("mcl_bows:rocket", { - description = S("Arrow"), - _tt_help = S("Ammunition").."\n"..S("Damage from bow: 1-10").."\n"..S("Damage from dispenser: 3"), - _doc_items_longdesc = S("Arrows are ammunition for bows and dispensers.").."\n".. -S("An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.").."\n".. -S("Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons."), - _doc_items_usagehelp = S("To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it."), - inventory_image = "mcl_bows_rocket.png", - groups = { ammo=1, ammo_crossbow=1, ammo_bow_regular=1 }, - _on_dispense = function(itemstack, dispenserpos, droppos, dropnode, dropdir) - -- Shoot arrow - local shootpos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51)) - local yaw = math.atan2(dropdir.z, dropdir.x) + YAW_OFFSET - mcl_bows.shoot_arrow(itemstack:get_name(), shootpos, dropdir, yaw, nil, 19, 3) - end, -}) - - - -local ARROW_ENTITY={ - physical = true, - pointable = false, - visual = "mesh", - mesh = "mcl_bows_rocket.obj", - visual_size = {x=2.5, y=2.5}, - textures = {"mcl_bows_rocket.png"}, - collisionbox = {-0.19, -0.125, -0.19, 0.19, 0.125, 0.19}, - collide_with_objects = false, - _fire_damage_resistant = true, - - _lastpos={}, - _startpos=nil, - _damage=1, -- Damage on impact - _is_critical=false, -- Whether this arrow would deal critical damage - _stuck=false, -- Whether arrow is stuck - _fuse=nil,-- Amount of time (in seconds) the arrow has been stuck so far - _fuserechecktimer=nil,-- An additional timer for periodically re-checking the stuck status of an arrow - _stuckin=nil, --Position of node in which arow is stuck. - _shooter=nil, -- ObjectRef of player or mob who shot it - _is_arrow = true, - - _viscosity=0, -- Viscosity of node the arrow is currently in - _deflection_cooloff=0, -- Cooloff timer after an arrow deflection, to prevent many deflections in quick succession -} - --- Destroy arrow entity self at pos and drops it as an item -local function spawn_item(self, pos) - if not minetest.is_creative_enabled("") then - local item = minetest.add_item(pos, "mcl_bows:rocket") - item:set_velocity({x=0, y=0, z=0}) - item:set_yaw(self.object:get_yaw()) - end - mcl_burning.extinguish(self.object) - self.object:remove() -end - -local function damage_particles(pos, is_critical) - if is_critical then - minetest.add_particlespawner({ - amount = 15, - time = 0.1, - minpos = {x=pos.x-0.5, y=pos.y-0.5, z=pos.z-0.5}, - maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5}, - minvel = {x=-0.1, y=-0.1, z=-0.1}, - maxvel = {x=0.1, y=0.1, z=0.1}, - minacc = {x=0, y=0, z=0}, - maxacc = {x=0, y=0, z=0}, - minexptime = 1, - maxexptime = 2, - minsize = 1.5, - maxsize = 1.5, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_crit.png^[colorize:#bc7a57:127", - }) - end -end - -function ARROW_ENTITY.on_step(self, dtime) - mcl_burning.tick(self.object, dtime, self) - - self._time_in_air = self._time_in_air + .001 - - - local pos = self.object:get_pos() - local dpos = table.copy(pos) -- digital pos - dpos = vector.round(dpos) - local node = minetest.get_node(dpos) - - if not self._fuse then - self._fuse = 0 - end - if not self._fuserechecktimer then - self._fuserechecktimer = 0 - end - - self._fuse = self._fuse + dtime - self._fuserechecktimer = self._fuserechecktimer + dtime - - if self._fuse > ARROW_TIMEOUT then - self._stuck = true - end - if self._stuck then - if self._fuse > ARROW_TIMEOUT then - local eploded_particle = particle_explosion(self) - damage_explosion(self, eploded_particle * 17) - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - -- Drop arrow as item when it is no longer stuck - -- FIXME: Arrows are a bit slow to react and continue to float in mid air for a few seconds. - if self._fuserechecktimer > STUCK_RECHECK_TIME then - local stuckin_def - if self._stuckin then - stuckin_def = minetest.registered_nodes[minetest.get_node(self._stuckin).name] - end - -- TODO: In MC, arrow just falls down without turning into an item - if stuckin_def and stuckin_def.walkable == false then - spawn_item(self, pos) - return - end - self._fuserechecktimer = 0 - end - -- Pickup arrow if player is nearby (not in Creative Mode) - local objects = minetest.get_objects_inside_radius(pos, 1) - for _,obj in ipairs(objects) do - if obj:is_player() then - if self._collectable and not minetest.is_creative_enabled(obj:get_player_name()) then - if obj:get_inventory():room_for_item("main", "mcl_bows:rocket") then - obj:get_inventory():add_item("main", "mcl_bows:rocket") - minetest.sound_play("item_drop_pickup", { - pos = pos, - max_hear_distance = 16, - gain = 1.0, - }, true) - end - end - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - end - - -- Check for object "collision". Done every tick (hopefully this is not too stressing) - else - - if self._in_player == false then - minetest.add_particlespawner({ - amount = 1, - time = .0001, - minpos = pos, - maxpos = pos, - minvel = vector.new(-0.1,-0.1,-0.1), - maxvel = vector.new(0.1,0.1,0.1), - minexptime = 0.5, - maxexptime = 0.5, - minsize = 2, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mcl_bows_rocket_particle.png", - glow = 1, - }) - end - -- We just check for any hurtable objects nearby. - -- The radius of 3 is fairly liberal, but anything lower than than will cause - -- arrow to hilariously go through mobs often. - -- TODO: Implement an ACTUAL collision detection (engine support needed). - local objs = minetest.get_objects_inside_radius(pos, 1.5) - local closest_object - local closest_distance - - if self._deflection_cooloff > 0 then - self._deflection_cooloff = self._deflection_cooloff - dtime - end - - -- Iterate through all objects and remember the closest attackable object - for k, obj in pairs(objs) do - local ok = false - -- Arrows can only damage players and mobs - if obj:is_player() then - ok = true - elseif obj:get_luaentity() then - if (obj:get_luaentity().is_mob or obj:get_luaentity()._hittable_by_projectile) then - ok = true - end - end - - if ok then - local dist = vector.distance(pos, obj:get_pos()) - if not closest_object or not closest_distance then - closest_object = obj - closest_distance = dist - elseif dist < closest_distance then - closest_object = obj - closest_distance = dist - end - end - end - - -- If an attackable object was found, we will damage the closest one only - - if closest_object then - local obj = closest_object - local is_player = obj:is_player() - local lua = obj:get_luaentity() - if obj == self._shooter and self._time_in_air > 1.02 or obj ~= self._shooter and (is_player or (lua and (lua.is_mob or lua._hittable_by_projectile))) then - if obj:get_hp() > 0 then - -- Check if there is no solid node between arrow and object - local ray = minetest.raycast(self.object:get_pos(), obj:get_pos(), true) - for pointed_thing in ray do - if pointed_thing.type == "object" and pointed_thing.ref == closest_object then - -- Target reached! We can proceed now. - break - elseif pointed_thing.type == "node" then - local nn = minetest.get_node(minetest.get_pointed_thing_position(pointed_thing)).name - local def = minetest.registered_nodes[nn] - if (not def) or def.walkable then - -- There's a node in the way. Delete arrow without damage - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - end - end - - -- Punch target object but avoid hurting enderman. - if not lua or lua.name ~= "mobs_mc:enderman" then - if self._in_player == false then - damage_particles(self.object:get_pos(), self._is_critical) - end - if mcl_burning.is_burning(self.object) then - mcl_burning.set_on_fire(obj, 5) - end - if self._in_player == false then - obj:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=self._damage}, - }, self.object:get_velocity()) - if obj:is_player() then - local eploded_particle = particle_explosion(self) - damage_explosion(self, eploded_particle * 17) - mcl_burning.extinguish(self.object) - self.object:remove() - end - end - end - - - if is_player then - if self._shooter and self._shooter:is_player() and self._in_player == false then - -- “Ding” sound for hitting another player - minetest.sound_play({name="mcl_bows_hit_player", gain=0.1}, {to_player=self._shooter:get_player_name()}, true) - end - end - - if lua then - local entity_name = lua.name - -- Achievement for hitting skeleton, wither skeleton or stray (TODO) with an arrow at least 50 meters away - -- NOTE: Range has been reduced because mobs unload much earlier than that ... >_> - -- TODO: This achievement should be given for the kill, not just a hit - if self._shooter and self._shooter:is_player() and vector.distance(pos, self._startpos) >= 20 then - if mod_awards and (entity_name == "mobs_mc:skeleton" or entity_name == "mobs_mc:stray" or entity_name == "mobs_mc:witherskeleton") then - awards.unlock(self._shooter:get_player_name(), "mcl:snipeSkeleton") - end - end - end - if self._in_player == false then - minetest.sound_play({name="mcl_bows_hit_other", gain=0.3}, {pos=self.object:get_pos(), max_hear_distance=16}, true) - end - end - if not obj:is_player() then - mcl_burning.extinguish(self.object) - if self._piercing == 0 then - local eploded_particle = particle_explosion(self) - damage_explosion(self, eploded_particle * 17) - self.object:remove() - end - end - return - end - end - end - - -- Check for node collision - if self._lastpos.x~=nil and not self._stuck then - local def = minetest.registered_nodes[node.name] - local vel = self.object:get_velocity() - -- Arrow has stopped in one axis, so it probably hit something. - -- This detection is a bit clunky, but sadly, MT does not offer a direct collision detection for us. :-( - if (math.abs(vel.x) < 0.0001) or (math.abs(vel.z) < 0.0001) or (math.abs(vel.y) < 0.00001) then - -- Check for the node to which the arrow is pointing - local dir - if math.abs(vel.y) < 0.00001 then - if self._lastpos.y < pos.y then - dir = {x=0, y=1, z=0} - else - dir = {x=0, y=-1, z=0} - end - else - dir = minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(self.object:get_yaw()-YAW_OFFSET))) - end - self._stuckin = vector.add(dpos, dir) - local snode = minetest.get_node(self._stuckin) - local sdef = minetest.registered_nodes[snode.name] - - -- If node is non-walkable, unknown or ignore, don't make arrow stuck. - -- This causes a deflection in the engine. - if not sdef or sdef.walkable == false or snode.name == "ignore" then - self._stuckin = nil - if self._deflection_cooloff <= 0 then - -- Lose 1/3 of velocity on deflection - local newvel = vector.multiply(vel, 0.6667) - - self.object:set_velocity(newvel) - -- Reset deflection cooloff timer to prevent many deflections happening in quick succession - self._deflection_cooloff = 1.0 - end - else - - -- Node was walkable, make arrow stuck - self._stuck = true - self._fuserechecktimer = 0 - - self.object:set_velocity({x=0, y=0, z=0}) - self.object:set_acceleration({x=0, y=0, z=0}) - - minetest.sound_play({name="mcl_bows_hit_other", gain=0.3}, {pos=self.object:get_pos(), max_hear_distance=16}, true) - - if mcl_burning.is_burning(self.object) and snode.name == "mcl_tnt:tnt" then - tnt.ignite(self._stuckin) - end - - -- Activate target - if mod_target and snode.name == "mcl_target:target_off" then - mcl_target.hit(self._stuckin, 1) --10 redstone ticks - end - - -- Push the button! Push, push, push the button! - if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then - local bdir = minetest.wallmounted_to_dir(node.param2) - -- Check the button orientation - if vector.equals(vector.add(dpos, bdir), self._stuckin) then - mesecon.push_button(dpos, node) - end - end - end - elseif (def and def.liquidtype ~= "none") then - -- Slow down arrow in liquids - local v = def.liquid_viscosity - if not v then - v = 0 - end - --local old_v = self._viscosity - self._viscosity = v - local vpenalty = math.max(0.1, 0.98 - 0.1 * v) - if math.abs(vel.x) > 0.001 then - vel.x = vel.x * vpenalty - end - if math.abs(vel.z) > 0.001 then - vel.z = vel.z * vpenalty - end - self.object:set_velocity(vel) - end - end - - -- Update yaw - if not self._stuck then - local vel = self.object:get_velocity() - local yaw = minetest.dir_to_yaw(vel)+YAW_OFFSET - local pitch = dir_to_pitch(vel) - self.object:set_rotation({ x = 0, y = yaw, z = pitch }) - end - - -- Update internal variable - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -end - --- Force recheck of stuck arrows when punched. --- Otherwise, punching has no effect. -function ARROW_ENTITY.on_punch(self) - if self._stuck then - self._fuserechecktimer = STUCK_RECHECK_TIME - end -end - -function ARROW_ENTITY.get_staticdata(self) - local out = { - lastpos = self._lastpos, - startpos = self._startpos, - damage = self._damage, - is_critical = self._is_critical, - stuck = self._stuck, - stuckin = self._stuckin, - } - if self._stuck then - -- If _fuse is missing for some reason, assume the maximum - if not self._fuse then - self._fuse = ARROW_TIMEOUT - end - out.stuckstarttime = minetest.get_gametime() - self._fuse - end - if self._shooter and self._shooter:is_player() then - out.shootername = self._shooter:get_player_name() - end - return minetest.serialize(out) -end - -function ARROW_ENTITY.on_activate(self, staticdata, dtime_s) - self._time_in_air = 1.0 - self._in_player = false - local data = minetest.deserialize(staticdata) - if data then - self._stuck = data.stuck - if data.stuck then - if data.stuckstarttime then - -- First, check if the stuck arrow is aleady past its life timer. - -- If yes, delete it. - self._fuse = minetest.get_gametime() - data.stuckstarttime - if self._fuse > ARROW_TIMEOUT then - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - end - - self._fuse = 2 - -- Perform a stuck recheck on the next step. - self._fuserechecktimer = STUCK_RECHECK_TIME - - self._stuckin = data.stuckin - end - - -- Get the remaining arrow state - self._lastpos = data.lastpos - self._startpos = data.startpos - self._damage = data.damage - self._is_critical = data.is_critical - if data.shootername then - local shooter = minetest.get_player_by_name(data.shootername) - if shooter and shooter:is_player() then - self._shooter = shooter - end - end - end - self.object:set_armor_groups({ immortal = 1 }) -end - -minetest.register_entity("mcl_bows:rocket_entity", ARROW_ENTITY) - -if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - output = "mcl_bows:rocket 1", - recipe = { - {"mcl_core:paper"}, - {"mcl_fireworks:rocket_2"}, - {"mcl_bows:arrow"}, - } - }) -end - -if minetest.get_modpath("doc_identifier") then - doc.sub.identifier.register_object("mcl_bows:rocket_entity", "craftitems", "mcl_bows:rocket") -end diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_bow_shoot.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_bow_shoot.ogg deleted file mode 100644 index ca8b0f718..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_bow_shoot.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_0.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_0.ogg deleted file mode 100644 index f4f81b307..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_0.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_1.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_1.ogg deleted file mode 100644 index c8c06b4fa..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_2.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_2.ogg deleted file mode 100644 index 4ddd20c42..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_load.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_load.ogg deleted file mode 100644 index 02d2fd1af..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_load.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_shoot.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_shoot.ogg deleted file mode 100644 index a7d7b69d1..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_shoot.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_firework.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_firework.ogg deleted file mode 100644 index ea9a4c4be..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_firework.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_firework_soft.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_firework_soft.ogg deleted file mode 100644 index 8b2e7bc5b..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_firework_soft.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_hit_other.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_hit_other.ogg deleted file mode 100644 index 6956e4d8d..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_hit_other.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_hit_player.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_hit_player.ogg deleted file mode 100644 index abf6163a3..000000000 Binary files a/mods/ITEMS/mcl_bows/sounds/mcl_bows_hit_player.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow.png deleted file mode 100644 index f7bd92a9c..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_back.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_back.png deleted file mode 100644 index 4fa82ce26..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_front.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_front.png deleted file mode 100644 index 054561f72..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_inv.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_inv.png deleted file mode 100644 index 8635d28a1..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_overlay.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_overlay.png deleted file mode 100644 index ee628e29d..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_bow.png deleted file mode 100644 index 7d695bc93..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_0.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_0.png deleted file mode 100644 index 8bb41ea44..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_1.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_1.png deleted file mode 100644 index f85304e40..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_2.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_2.png deleted file mode 100644 index 205220f2c..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_bow_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow.png deleted file mode 100644 index b688dab94..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_0.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_0.png deleted file mode 100644 index 41daad6d8..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_1.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_1.png deleted file mode 100644 index 3769f2967..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_2.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_2.png deleted file mode 100644 index b1bb50feb..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_3.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_3.png deleted file mode 100644 index 8a8f1b03f..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_blue.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_blue.png deleted file mode 100644 index 608dbe0d0..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_green.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_green.png deleted file mode 100644 index acd74d6d1..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_red.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_red.png deleted file mode 100644 index 4d7355c57..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_white.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_white.png deleted file mode 100644 index 1860ee53c..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_yellow.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_yellow.png deleted file mode 100644 index c2b745def..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_firework_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_rocket.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_rocket.png deleted file mode 100644 index 800185ce0..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_rocket.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_rocket_particle.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_rocket_particle.png deleted file mode 100644 index 12a894c72..000000000 Binary files a/mods/ITEMS/mcl_bows/textures/mcl_bows_rocket_particle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua deleted file mode 100644 index 2ff2a806f..000000000 --- a/mods/ITEMS/mcl_brewing/init.lua +++ /dev/null @@ -1,982 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local function active_brewing_formspec(fuel_percent, brew_percent) - - return "size[9,8.75]".. - "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. - "label[4,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Brewing Stand"))).."]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.75,9,1).. - "list[context;fuel;0.5,1.75;1,1;]".. - mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]".. - "list[context;input;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;stand;4.5,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. - "list[context;stand;6,2.8;1,1;1]".. - mcl_formspec.get_itemslot_bg(6,2.8,1,1).."image[6,2.8;1,1;mcl_brewing_bottle_bg.png]".. - "list[context;stand;7.5,2.5;1,1;2]".. - mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. - - "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[lowpart:".. - (100-fuel_percent)..":mcl_brewing_burner_active.png^[transformR270]".. - - "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png^[lowpart:".. - (brew_percent)..":mcl_brewing_bubbles_active.png]".. - - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[context;input]".. - "listring[context;stand]" -end - -local brewing_formspec = "size[9,8.75]".. - "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. - "label[4,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Brewing Stand"))).."]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.75,9,1).. - "list[context;fuel;0.5,1.75;1,1;]".. - mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]".. - "list[context;input;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;stand;4.5,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. - "list[context;stand;6,2.8;1,1;1]".. - mcl_formspec.get_itemslot_bg(6,2.8,1,1).."image[6,2.8;1,1;mcl_brewing_bottle_bg.png]".. - "list[context;stand;7.5,2.5;1,1;2]".. - mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. - - "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[transformR270]".. - "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png]".. - - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[context;input]".. - "listring[context;stand]" - - ---[[local function swap_node(pos, name) - local node = minetest.get_node(pos) - if node.name == name then - return - end - node.name = name - minetest.swap_node(pos, node) -end]] - - -local function brewable(inv) - - local ingredient = inv:get_stack("input",1):get_name() - local stands = {} - local stand_size = inv:get_size("stand") - local was_alchemy = {false,false,false} - - local bottle, alchemy - - for i=1,stand_size do - - bottle = inv:get_stack("stand", i):get_name() - alchemy = mcl_potions.get_alchemy(ingredient, bottle) - - if alchemy then - stands[i] = alchemy - was_alchemy[i] = true - else - stands[i] = bottle - end - - end - -- if any stand holds a new potion, return the list of new potions - for i=1,#was_alchemy do - if was_alchemy[i] then return stands end - end - - return false -end - - -local function brewing_stand_timer(pos, elapsed) - -- Inizialize metadata - local meta = minetest.get_meta(pos) - - local fuel_timer = meta:get_float("fuel_timer") or 0 - local BREW_TIME = 20 -- all brews brew the same - local BURN_TIME = BREW_TIME * 10 - - --local input_item = meta:get_string("input_item") or "" - local stand_timer = meta:get_float("stand_timer") or 0 - local fuel = meta:get_float("fuel") or 0 - local inv = meta:get_inventory() - - --local input_list, stand_list, fuel_list - local brew_output, d - local input_count, fuel_name, fuel_count, formspec, fuel_percent, brew_percent - - local update = true - - while update do - - update = false - - --input_list = inv:get_list("input") - --stand_list = inv:get_list("stand") - --fuel_list = inv:get_list("fuel") - - -- TODO ... fix this. Goal is to reset the process if the stand changes - -- for i=1, inv:get_size("stand", i) do -- reset the process due to change - -- local _name = inv:get_stack("stand", i):get_name() - -- if _name ~= stand_items[i] then - -- stand_timer = 0 - -- stand_items[i] = _name - -- update = true -- need to update the stand with new data - -- return 1 - -- end - -- end - - brew_output = brewable(inv) - if fuel ~= 0 and brew_output then - - fuel_timer = fuel_timer + elapsed - stand_timer = stand_timer + elapsed - - if fuel_timer >= BURN_TIME then --replace with more fuel - fuel = 0 --force a new fuel grab - fuel_timer = 0 - end - - d = 0.5 - minetest.add_particlespawner({ - amount = 4, - time = 1, - minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, - minvel = {x=-0.1, y=0, z=-0.1}, - maxvel = {x=0.1, y=0.5, z=0.1}, - minacc = {x=-0.05, y=0, z=-0.05}, - maxacc = {x=0.05, y=.1, z=0.05}, - minexptime = 1, - maxexptime = 2, - minsize = 0.5, - maxsize = 2, - collisiondetection = true, - vertical = false, - texture = "mcl_brewing_bubble_sprite.png", - }) - - -- Replace the stand item with the brew result - if stand_timer >= BREW_TIME then - - input_count = inv:get_stack("input",1):get_count() - if (input_count-1) ~= 0 then - inv:set_stack("input",1,inv:get_stack("input",1):get_name().." "..(input_count-1)) - else - inv:set_stack("input",1,"") - end - - for i=1, inv:get_size("stand") do - if brew_output[i] then - minetest.sound_play("mcl_brewing_complete", {pos=pos, gain=0.4, max_hear_range=6}, true) - inv:set_stack("stand", i, brew_output[i]) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pos, gain=0.6, max_hear_range=6}, true) - end - end - stand_timer = 0 - update = false -- stop the update if brew is complete - end - - elseif fuel == 0 then --get more fuel from fuel_list - - -- only allow blaze powder fuel - fuel_name = inv:get_stack("fuel",1):get_name() - fuel_count = inv:get_stack("fuel",1):get_count() - - if fuel_name == "mcl_mobitems:blaze_powder" then -- Grab another fuel - - if (fuel_count-1) ~= 0 then - inv:set_stack("fuel",1,fuel_name.." "..(fuel_count-1)) - else - inv:set_stack("fuel",1,"") - end - update = true - fuel = 1 - else -- no fuel available - update = false - end - - end - - elapsed = 0 - end - - --update formspec - formspec = brewing_formspec - - local result = false - - if fuel_timer ~= 0 then - fuel_percent = math.floor(fuel_timer/BURN_TIME*100 % BURN_TIME) - brew_percent = math.floor(stand_timer/BREW_TIME*100) - formspec = active_brewing_formspec(fuel_percent, brew_percent*1 % 100) - result = true - else - minetest.get_node_timer(pos):stop() - end - - meta:set_float("fuel_timer", fuel_timer) - meta:set_float("stand_timer", stand_timer) - meta:set_float("fuel", fuel) - meta:set_string("formspec", formspec) - - return result -end - - ---[[local function allow_metadata_inventory_put(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - - -- Test stack with size 1 because we burn one fuel at a time - local teststack = ItemStack(stack) - teststack:set_count(1) - local output, decremented_input = minetest.get_craft_result({method="fuel", width=1, items={teststack}}) - if output.time ~= 0 then - -- Only allow to place 1 item if fuel get replaced by recipe. - -- This is the case for lava buckets. - local replace_item = decremented_input.items[1] - if replace_item:is_empty() then - -- For most fuels, just allow to place everything - return stack:get_count() - else - if inv:get_stack(listname, index):get_count() == 0 then - return 1 - else - return 0 - end - end - else - return 0 - end - elseif listname == "input" then - return stack:get_count() - elseif listname == "stand" then - return 0 - end -end]] - - --- Drop input items of brewing_stand at pos with metadata meta -local function drop_brewing_stand_items(pos, meta) - - local inv = meta:get_inventory() - - local stack = inv:get_stack("fuel", 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - - local stack = inv:get_stack("input", 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - - for i=1, inv:get_size("stand") do - local stack = inv:get_stack("stand", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end -end - - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple -end - -local doc_string = - S("To use a brewing stand, rightclick it.").."\n".. - S("To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.").."\n".. - S("Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.").."\n".. - S("When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.").."\n".. - S("Different combinations of brewing materials and liquids will give different results. Try to experiment!") - -local tiles = { - "mcl_brewing_top.png", --top - "mcl_brewing_base.png", --bottom - "mcl_brewing_side.png", --right - "mcl_brewing_side.png", --left - "mcl_brewing_side.png", --back - "mcl_brewing_side.png^[transformFX", --front -} - -local function allow_put(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end -end - -local function on_put(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local str = "" - local stack - for i=1, inv:get_size("stand") do - stack = inv:get_stack("stand", i) - if not stack:is_empty() then - str = str.."1" - else str = str.."0" - end - end - minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str}) - minetest.get_node_timer(pos):start(1.0) - --some code here to enforce only potions getting placed on stands -end - ---[[local function after_dig(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - meta:from_table(oldmetadata) - drop_brewing_stand_items(pos, meta) -end]] - -local function on_destruct(pos) - local meta = minetest.get_meta(pos) - drop_brewing_stand_items(pos, meta) -end - -local function allow_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end -end - - -minetest.register_node("mcl_brewing:stand_000", { - description = S("Brewing Stand"), - _doc_items_longdesc = S("The stand allows you to brew potions!"), - _doc_items_usagehelp = doc_string, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, brewitem=1 }, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) -minetest.register_node("mcl_brewing:stand_100", { - description = S("Brewing Stand"), - _doc_items_create_entry = false, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_brewing:stand_010", { - description = S("Brewing Stand"), - _doc_items_create_entry = false, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - - {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_brewing:stand_001", { - description = S("Brewing Stand"), - _doc_items_create_entry = false, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_brewing:stand_110", { - description = S("Brewing Stand"), - _doc_items_create_entry = false, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - - {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_brewing:stand_101", { - description = S("Brewing Stand"), - _doc_items_create_entry = false, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_brewing:stand_011", { - description = S("Brewing Stand"), - _doc_items_create_entry = false, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_brewing:stand_111", { - description = S("Brewing Stand"), - _doc_items_create_entry = false, - _tt_help = S("Brew Potions"), - groups = {pickaxey=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - drop = "mcl_brewing:stand", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume - { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base - {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base - {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - - {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 - {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 - {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 - {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - - {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 - {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 - {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 - {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - - {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 - {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 - {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 - } - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - on_destruct = on_destruct, - allow_metadata_inventory_take = allow_take, - allow_metadata_inventory_put = allow_put, - on_metadata_inventory_put = on_put, - on_metadata_inventory_take = on_put, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("fuel", 1) - inv:set_size("stand", 3) - local form = brewing_formspec - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - end, - on_timer = brewing_stand_timer, - on_rotate = on_rotate, -}) - -minetest.register_craft({ - output = "mcl_brewing:stand_000", - recipe = { - { "", "mcl_mobitems:blaze_rod", "" }, - { "group:cobble", "group:cobble", "group:cobble" }, - } -}) - -minetest.register_alias("mcl_brewing:stand", "mcl_brewing:stand_000") - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_brewing:stand_000", "nodes", "mcl_brewing:stand_001") - doc.add_entry_alias("nodes", "mcl_brewing:stand_000", "nodes", "mcl_brewing:stand_010") - doc.add_entry_alias("nodes", "mcl_brewing:stand_000", "nodes", "mcl_brewing:stand_011") - doc.add_entry_alias("nodes", "mcl_brewing:stand_000", "nodes", "mcl_brewing:stand_100") - doc.add_entry_alias("nodes", "mcl_brewing:stand_000", "nodes", "mcl_brewing:stand_101") - doc.add_entry_alias("nodes", "mcl_brewing:stand_000", "nodes", "mcl_brewing:stand_110") - doc.add_entry_alias("nodes", "mcl_brewing:stand_000", "nodes", "mcl_brewing:stand_111") -end - -if minetest.get_modpath("mesecons_mvps") then - for _, s in ipairs({"000", "001", "010", "011", "100", "101", "110", "111"}) do - mesecon.register_mvps_stopper("mcl_brewing:stand_" .. s) - end -end diff --git a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.de.tr b/mods/ITEMS/mcl_brewing/locale/mcl_brewing.de.tr deleted file mode 100644 index fb127c914..000000000 --- a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.de.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_brewing -Brewing Stand=Braustand -Inventory=Inventar -To use a brewing stand, rightclick it.=Um einen Braustand zu benutzen, rechtsklicken Sie ihn. -To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.=Zum Brauen benötigt man Lohenstaub als Brennstoff, ein Braumaterial und mindestens 1 Glasflasche, die mit einer Flüssigkeit gefüllt ist. -Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.=Platzieren Sie den Lohenstaub in den linken Plartz, das Braumaterial in den mittleren Platz und 1-3 Glasflaschen in die übrigen Plätze. -When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.=Wenn Sie eine gute Kombination gefunden haben, beginnt der Brauvorgang automatisch, und es entsteht Dampf. Der Brennstoff und das Brühmaterial wird aufbraucht. Die Tränke werden bald fertig sein. -Different combinations of brewing materials and liquids will give different results. Try to experiment!=Unterschiedliche Kombinationen von Braumaterialien und Flüssigkeiten werden zu unterschiedlichen Ergebnissen führen. Experimentieren Sie! -The stand allows you to brew potions!=Der Stand ermöglicht das Brauen von Tränken. -Brew Potions=Tränke brauen diff --git a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.fr.tr b/mods/ITEMS/mcl_brewing/locale/mcl_brewing.fr.tr deleted file mode 100644 index 232026fba..000000000 --- a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.fr.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_brewing -Brewing Stand=Alambic -Inventory=Inventaire -To use a brewing stand, rightclick it.=Pour utiliser un alambic, faites un clic droit dessus. -To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.=Pour distiller, vous avez besoin de poudre de blaze comme carburant, d'un ingrédient à distiller et d'au moins 1 bouteille en verre remplie d'un liquide. -Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.=Placez la poudre de blaze dans l'emplacement de gauche, l'ingrédient à distiller dans l'emplacement du milieu et 1 à 3 bouteilles dans les emplacements restantes. -When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.=Lorsque vous avez trouvé une bonne combinaison, la distillation commencera automatiquement et de la vapeur commencera à apparaître, consommant le carburant et l'ingrédient à distiller. Les potions seront bientôt prêtes. -Different combinations of brewing materials and liquids will give different results. Try to experiment!=Différentes combinaisons d'ingrédients et de liquides donneront des résultats différents. Essayez d'expérimenter! -The stand allows you to brew potions!=L'alambic permet de produire des potions! -Brew Potions=Potions diff --git a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.pl.tr b/mods/ITEMS/mcl_brewing/locale/mcl_brewing.pl.tr deleted file mode 100644 index cdcc1f887..000000000 --- a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.pl.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_brewing -Brewing Stand=Statyw alchemiczny -Inventory=Ekwipunek -To use a brewing stand, rightclick it.=Aby użyć statywu alchemicznego kliknij go prawym przyciskiem myszy. -To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.=Aby warzyć mikstury potrzebujesz płomiennego proszku, materiału do warzenia i przynajmniej jedną butelkę wypełnioną płynem. -Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.=Wstaw płomienny proszek po lewej, materiał do warzenia w środku i 1-3 butelek w pozostałych. -When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.=Kiedy znajdziesz odpowiednią kombinację, warzenie rozpocznie się automatycznie, pojawi się para, a paliwo i materiał zaczną się zużywać. Mikstury wkrótce będą gotowe. -Different combinations of brewing materials and liquids will give different results. Try to experiment!=Różne kombinacje materiałów i płynów dadzą inne rezultaty. Spróbuj poeksperymentować! -The stand allows you to brew potions!=Statyw pozwala na warzenie mikstur! -Brew Potions=Uwarz mikstury. diff --git a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.ru.tr b/mods/ITEMS/mcl_brewing/locale/mcl_brewing.ru.tr deleted file mode 100644 index 37b96819d..000000000 --- a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.ru.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_brewing -Brewing Stand=Варочный стенд -Inventory=Инвентарь -To use a brewing stand, rightclick it.=Кликните правой, чтобы использовать варочный стенд. -To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.=Для приготовления зелья вам понадобится огненный порошок в качестве топлива, исходный материал и как минимум 1 стеклянная бутылка, наполненная жидкостью. -Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.=Поместите огненный порошок в левый отсек, исходный материал в средний отсек и 1-3 бутылки в оставшиеся отсеки. -When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.=Когда вы подберёте хорошее сочетание, приготовление зелья начнётся автоматически — появится пар и начнётся расход топлива и исходного материала. Зелья вскоре будут готовы. -Different combinations of brewing materials and liquids will give different results. Try to experiment!=Разные сочетания варочных материалов и жидкостей будут давать разные результаты. Поэкспериментируйте! -The stand allows you to brew potions!=Стенд позволяет вам варить зелья! -Brew Potions=Зельеварение diff --git a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.zh_TW.tr b/mods/ITEMS/mcl_brewing/locale/mcl_brewing.zh_TW.tr deleted file mode 100644 index da4b70890..000000000 --- a/mods/ITEMS/mcl_brewing/locale/mcl_brewing.zh_TW.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_brewing -Brewing Stand=釀造台 -Inventory=物品欄 -To use a brewing stand, rightclick it.=右鍵點擊以使用釀造台。 -To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.=釀造時,你需要烈焰粉作為燃料,一個釀造材料和至少1個裝滿液體的玻璃瓶。 -Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.=將烈焰粉放在左邊的槽中,將釀造材料放在中間的槽中,將1-3個瓶子放在其餘的槽中。 -When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.=當你找到一個好的組合時,釀造將自動開始,並開始出現蒸汽,耗盡燃料和釀造材料。藥水很快就會準備好。 -Different combinations of brewing materials and liquids will give different results. Try to experiment!=釀造材料和液體的不同組合會產生不同的結果。試著去實驗吧! -The stand allows you to brew potions!=釀造台可以讓你釀製藥水! -Brew Potions=釀造藥水 diff --git a/mods/ITEMS/mcl_brewing/locale/template.txt b/mods/ITEMS/mcl_brewing/locale/template.txt deleted file mode 100644 index e5619f1e1..000000000 --- a/mods/ITEMS/mcl_brewing/locale/template.txt +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_brewing -Brewing Stand= -Inventory= -To use a brewing stand, rightclick it.= -To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.= -Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.= -When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.= -Different combinations of brewing materials and liquids will give different results. Try to experiment!= -The stand allows you to brew potions!= -Brew Potions= diff --git a/mods/ITEMS/mcl_brewing/mod.conf b/mods/ITEMS/mcl_brewing/mod.conf deleted file mode 100644 index 0f6217f09..000000000 --- a/mods/ITEMS/mcl_brewing/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_brewing -author = bzoss -depends = mcl_init, mcl_formspec, mcl_sounds, mcl_potions, mcl_mobitems -optional_depends = mcl_core, doc, screwdriver, mesecons_mvps diff --git a/mods/ITEMS/mcl_brewing/sounds/mcl_brewing_complete.ogg b/mods/ITEMS/mcl_brewing/sounds/mcl_brewing_complete.ogg deleted file mode 100644 index 1798cb273..000000000 Binary files a/mods/ITEMS/mcl_brewing/sounds/mcl_brewing_complete.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png deleted file mode 100644 index 8831ffb9b..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png deleted file mode 100644 index c0c4fd2be..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubble_sprite.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubble_sprite.png deleted file mode 100644 index 74447439e..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubble_sprite.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png deleted file mode 100644 index 780352408..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png deleted file mode 100644 index 2a367807a..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png deleted file mode 100644 index e2e8e8afe..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png deleted file mode 100644 index 93655b673..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png deleted file mode 100644 index fd730958a..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png deleted file mode 100644 index 0ed2f4029..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png deleted file mode 100644 index 818e41d4b..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png deleted file mode 100644 index 057a405e0..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png deleted file mode 100644 index 81e000053..000000000 Binary files a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/API.md b/mods/ITEMS/mcl_buckets/API.md deleted file mode 100644 index 94ec48de5..000000000 --- a/mods/ITEMS/mcl_buckets/API.md +++ /dev/null @@ -1,54 +0,0 @@ -# mcl_buckets -Add an API to register buckets to mcl - -## mcl_buckets.register_liquid(def) - -Register a new liquid -Accept folowing params: -* source_place: a string or function. - * string: name of the node to place - * function(pos): will returns name of the node to place with pos being the placement position -* source_take: table of liquid source node names to take -* bucketname: itemstring of the new bucket item -* inventory_image: texture of the new bucket item (ignored if itemname == nil) -* name: user-visible bucket description -* longdesc: long explanatory description (for help) -* usagehelp: short usage explanation (for help) -* tt_help: very short tooltip help -* extra_check(pos, placer): (optional) function(pos) -* groups: optional list of item groups - - -**Usage exemple:** -```lua -mcl_buckets.register_liquid({ - bucketname = "dummy:bucket_dummy", - --source_place = "dummy:dummy_source", - source_place = function(pos) - if condition then - return "dummy:dummy_source" - else - return "dummy:dummy_source_nether" - end - end, - source_take = {"dummy:dummy_source"}, - inventory_image = "bucket_dummy.png", - name = S("Dummy liquid Bucket"), - longdesc = S("This bucket is filled with a dummy liquid."), - usagehelp = S("Place it to empty the bucket and create a dummy liquid source."), - tt_help = S("Places a dummy liquid source"), - extra_check = function(pos, placer) - --pos = pos where the liquid should be placed - --placer people who tried to place the bucket (can be nil) - - --no liquid node will be placed - --the bucket will not be emptied - --return false, false - - --liquid node will be placed - --the bucket will be emptied - return true, true - end, - groups = { dummy_group = 123 }, -}) -``` \ No newline at end of file diff --git a/mods/ITEMS/mcl_buckets/README.md b/mods/ITEMS/mcl_buckets/README.md deleted file mode 100644 index b783cc133..000000000 --- a/mods/ITEMS/mcl_buckets/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# MineClone2 Bucket (`mcl_bucket`) -Originally taken from Minetest Game, adapted for MineClone2. - -This mod add buckets to the game, including an API to register your own (see `API.md`). - -## License - -Copyright (C) 2011-2012 Kahrl - -Copyright (C) 2011-2012 celeron55, Perttu Ahola - -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 of the License, or -(at your option) any later version. - -http://www.gnu.org/licenses/lgpl-2.1.html - - diff --git a/mods/ITEMS/mcl_buckets/init.lua b/mods/ITEMS/mcl_buckets/init.lua deleted file mode 100644 index 85215caaf..000000000 --- a/mods/ITEMS/mcl_buckets/init.lua +++ /dev/null @@ -1,398 +0,0 @@ --- See README.txt for licensing and other information. -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) -local modpath = minetest.get_modpath(modname) - --- Compatibility with old bucket mod -minetest.register_alias("bucket:bucket_empty", "mcl_buckets:bucket_empty") -minetest.register_alias("bucket:bucket_water", "mcl_buckets:bucket_water") -minetest.register_alias("bucket:bucket_lava", "mcl_buckets:bucket_lava") - -local mod_doc = minetest.get_modpath("doc") -local mod_mcl_core = minetest.get_modpath("mcl_core") ---local mod_mclx_core = minetest.get_modpath("mclx_core") - --- Localize some functions for faster access -local vector = vector -local math = math -local string = string - -local raycast = minetest.raycast -local get_node = minetest.get_node -local set_node = minetest.set_node -local add_node = minetest.add_node -local add_item = minetest.add_item - -local registered_nodes = minetest.registered_nodes -local get_item_group = minetest.get_item_group -local is_creative_enabled = minetest.is_creative_enabled -local is_protected = minetest.is_protected -local record_protection_violation = minetest.record_protection_violation - -if mod_mcl_core then - minetest.register_craft({ - output = "mcl_buckets:bucket_empty 1", - recipe = { - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - {"", "mcl_core:iron_ingot", ""}, - }, - }) -end - -mcl_buckets = { - liquids = {}, - buckets = {}, -} - --- Sound helper functions for placing and taking liquids -local function sound_place(itemname, pos) - local def = registered_nodes[itemname] - if def and def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end - -local function sound_take(itemname, pos) - local def = registered_nodes[itemname] - if def and def.sounds and def.sounds.dug then - minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end - -local function place_liquid(pos, itemstring) - local fullness = registered_nodes[itemstring].liquid_range - sound_place(itemstring, pos) - add_node(pos, {name=itemstring, param2=fullness}) -end - -local function give_bucket(new_bucket, itemstack, user) - local inv = user:get_inventory() - if is_creative_enabled(user:get_player_name()) then - --TODO: is a full bucket added if inv doesn't contain one? - return itemstack - else - if itemstack:get_count() == 1 then - return new_bucket - else - if inv:room_for_item("main", new_bucket) then - inv:add_item("main", new_bucket) - else - add_item(user:get_pos(), new_bucket) - end - itemstack:take_item() - return itemstack - end - end -end - -local pointable_sources = {} - -local function bucket_raycast(user) - --local pos = user:get_pos() - local pos = user:get_pos() - --local pos = vector.add(user:get_pos(), user:get_bone_position("Head_Control")) - pos.y = pos.y + user:get_properties().eye_height - local look_dir = user:get_look_dir() - look_dir = vector.multiply(look_dir, 5) - local pos2 = vector.add(pos, look_dir) - - local ray = raycast(pos, pos2, false, true) - if ray then - for pointed_thing in ray do - if pointed_thing and pointable_sources[get_node(pointed_thing.above).name] then - --minetest.chat_send_all("found!") - return {under=pointed_thing.under,above=pointed_thing.above} - end - end - end - return nil -end - -local function get_node_place(source_place, place_pos) - local node_place - if type(source_place) == "function" then - node_place = source_place(place_pos) - else - node_place = source_place - end - return node_place -end - -local function get_extra_check(check, pos, user) - local result - local take_bucket - if check then - result, take_bucket = check(pos, user) - if result == nil then result = true end - if take_bucket == nil then take_bucket = true end - else - result = true - take_bucket = true - end - return result, take_bucket -end - -local function get_bucket_drop(itemstack, user, take_bucket) - -- Handle bucket item and inventory stuff - if take_bucket and not is_creative_enabled(user:get_player_name()) then - -- Add empty bucket and put it into inventory, if possible. - -- Drop empty bucket otherwise. - local new_bucket = ItemStack("mcl_buckets:bucket_empty") - if itemstack:get_count() == 1 then - return new_bucket - else - local inv = user:get_inventory() - if inv:room_for_item("main", new_bucket) then - inv:add_item("main", new_bucket) - else - add_item(user:get_pos(), new_bucket) - end - itemstack:take_item() - return itemstack - end - else - return itemstack - end -end - -local function on_place_bucket(itemstack, user, pointed_thing, def) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return - end - -- Call on_rightclick if the pointed node defines it - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - - local undernode = get_node(pointed_thing.under) - local abovenode = get_node(pointed_thing.above) - - if registered_nodes[undernode.name] and registered_nodes[undernode.name].buildable_to or get_item_group(undernode.name, "cauldron") == 1 then - local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.under, user) - if result then - local node_place = get_node_place(def.source_place, pointed_thing.under) - local pns = user:get_player_name() - - -- Check protection - if is_protected(pointed_thing.under, pns) then - record_protection_violation(pointed_thing.under, pns) - return itemstack - end - - -- Place liquid - place_liquid(pointed_thing.under, node_place) - - -- Update doc mod - if mod_doc and doc.entry_exists("nodes", node_place) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place) - end - end - return get_bucket_drop(itemstack, user, take_bucket) - elseif registered_nodes[abovenode.name] and registered_nodes[abovenode.name].buildable_to or get_item_group(abovenode.name, "cauldron") == 1 then - local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.above, user) - if result then - local node_place = get_node_place(def.source_place, pointed_thing.above) - local pns = user:get_player_name() - - -- Check protection - if is_protected(pointed_thing.above, pns) then - record_protection_violation(pointed_thing.above, pns) - return itemstack - end - - -- Place liquid - place_liquid(pointed_thing.above, node_place) - - -- Update doc mod - if mod_doc and doc.entry_exists("nodes", node_place) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place) - end - end - return get_bucket_drop(itemstack, user, take_bucket) - else - return itemstack - end -end - - -local function on_place_bucket_empty(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Call on_rightclick if the pointed node defines it - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - - local node = get_node(pointed_thing.under) - local nn = node.name - - local new_bucket - local liquid_node = bucket_raycast(user) - if liquid_node then - if is_protected(liquid_node.above, user:get_player_name()) then - record_protection_violation(liquid_node.above, user:get_player_name()) - end - local liquid_name = get_node(liquid_node.above).name - if liquid_name then - local liquid_def = mcl_buckets.liquids[liquid_name] - if liquid_def then - --minetest.chat_send_all("test") - -- Fill bucket, but not in Creative Mode - -- FIXME: remove this line - --if not is_creative_enabled(user:get_player_name()) then - if not false then - new_bucket = ItemStack({name = liquid_def.bucketname}) - if liquid_def.on_take then - liquid_def.on_take(user) - end - end - add_node(liquid_node.above, {name="air"}) - sound_take(nn, liquid_node.above) - - if mod_doc and doc.entry_exists("nodes", liquid_name) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", liquid_name) - end - if new_bucket then - return give_bucket(new_bucket, itemstack, user) - end - else - minetest.log("error", string.format("[mcl_buckets] Node [%s] has invalid group [_mcl_bucket_pointable]!", liquid_name)) - end - end - return itemstack - else - -- FIXME: replace this ugly code by cauldrons API - if nn == "mcl_cauldrons:cauldron_3" then - -- Take water out of full cauldron - set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - if not is_creative_enabled(user:get_player_name()) then - new_bucket = ItemStack("mcl_buckets:bucket_water") - end - sound_take("mcl_core:water_source", pointed_thing.under) - elseif nn == "mcl_cauldrons:cauldron_3r" then - -- Take river water out of full cauldron - set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - if not is_creative_enabled(user:get_player_name()) then - new_bucket = ItemStack("mcl_buckets:bucket_river_water") - end - sound_take("mclx_core:river_water_source", pointed_thing.under) - end - if new_bucket then - return give_bucket(new_bucket, itemstack, user) - end - end - return itemstack -end - -controls.register_on_press(function(player, key) - if key ~= "RMB" then - return - end - - local wielded_item = player:get_wielded_item() - local itemname = wielded_item:get_name() - local def = mcl_buckets.buckets[itemname] - - if itemname == "mcl_buckets:bucket_empty" then - local pointed_thing = mcl_util.get_pointed_thing(player, true) - - if not pointed_thing then - return - end - wielded_item = on_place_bucket_empty(wielded_item, player, pointed_thing) - elseif def then - local pointed_thing = mcl_util.get_pointed_thing(player, false) - - if not pointed_thing then - return - end - wielded_item = on_place_bucket(wielded_item, player, pointed_thing, def) - end - - player:set_wielded_item(wielded_item) -end) - -function mcl_buckets.register_liquid(def) - for _,source in ipairs(def.source_take) do - mcl_buckets.liquids[source] = { - source_place = def.source_place, - source_take = source, - on_take = def.on_take, - bucketname = def.bucketname, - } - pointable_sources[source] = true - if type(def.source_place) == "string" then - mcl_buckets.liquids[def.source_place] = mcl_buckets.liquids[source] - end - end - - mcl_buckets.buckets[def.bucketname] = def - - if def.bucketname == nil or def.bucketname == "" then - error(string.format("[mcl_bucket] Invalid itemname then registering [%s]!", def.name)) - end - - minetest.register_craftitem(def.bucketname, { - description = def.name, - _doc_items_longdesc = def.longdesc, - _doc_items_usagehelp = def.usagehelp, - _tt_help = def.tt_help, - inventory_image = def.inventory_image, - stack_max = 1, - groups = def.groups, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - local buildable = registered_nodes[dropnode.name].buildable_to or dropnode.name == "mcl_portals:portal" - if not buildable then return stack end - local result, take_bucket = get_extra_check(def.extra_check, droppos, nil) - if result then -- Fail placement of liquid if result is false - place_liquid(droppos, get_node_place(def.source_place, droppos)) - end - if take_bucket then - stack:set_name("mcl_buckets:bucket_empty") - end - return stack - end, - }) -end - -minetest.register_craftitem("mcl_buckets:bucket_empty", { - description = S("Empty Bucket"), - _doc_items_longdesc = S("A bucket can be used to collect and release liquids."), - _doc_items_usagehelp = S("Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else."), - _tt_help = S("Collects liquids"), - --liquids_pointable = true, - inventory_image = "bucket.png", - stack_max = 16, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Fill empty bucket with liquid or drop bucket if no liquid - local collect_liquid = false - - local liquiddef = mcl_buckets.liquids[dropnode.name] - local new_bucket - if liquiddef and liquiddef.bucketname and (dropnode.name == liquiddef.source_take) then - -- Fill bucket - new_bucket = ItemStack({name = liquiddef.bucketname}) - sound_take(dropnode.name, droppos) - collect_liquid = true - end - if collect_liquid then - set_node(droppos, {name="air"}) - - -- Fill bucket with liquid - stack = new_bucket - else - -- No liquid found: Drop empty bucket - add_item(droppos, stack) - stack:take_item() - end - return stack - end, -}) - -dofile(modpath.."/register.lua") diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.de.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.de.tr deleted file mode 100644 index 99d07109f..000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.de.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Leerer Eimer -A bucket can be used to collect and release liquids.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Hauen Sie auf eine Flüssigkeitsquelle, um sie aufzusammeln. Sie können den vollen Eimer dann benutzen, um die Flüssigkeit woanders zu platzieren. -Lava Bucket=Lavaeimer -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. Dieser hier ist voller heißer Lava, die sicher in ihm verstaut ist. Mit Vorsicht zu handhaben. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Gehen Sie zu einer sicheren Stelle und platzieren Sie den Eimer, um ihn zu leeren und eine Lavaquelle an dieser Stelle zu erzeugen. Verbrennen Sie sich nicht! -Water Bucket=Wassereimer -A bucket can be used to collect and release liquids. This one is filled with water.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. Dieser hier ist mit Wasser gefüllt. -Place it to empty the bucket and create a water source.=Platzieren Sie ihn, um den Eimer zu leeren und eine Wasserquelle zu erzeugen. -River Water Bucket=Flusswassereimer -A bucket can be used to collect and release liquids. This one is filled with river water.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. Dieser hier ist mit Flusswasser gefüllt. -Place it to empty the bucket and create a river water source.=Platzieren Sie ihn, um den Eimer zu leeren und eine Flusswasserquelle zu erzeugen. -Collects liquids=Sammelt Flüssigkeiten auf -Places a lava source=Platziert eine Lavaquelle -Places a water source=Platziert eine Wasserquelle -Places a river water source=Platziert eine Flusswasserquelle diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.es.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.es.tr deleted file mode 100644 index 27517a1a7..000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.es.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Cubo vacío -A bucket can be used to collect and release liquids.=Se puede usar un cubo para recoger y liberar líquidos. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Golpea una fuente de líquido para recolectarla. Luego puede usar el cubo lleno para colocar el líquido en otro lugar. -Lava Bucket=Cubo con lava -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Se puede usar un cubo para recoger y liberar líquidos. Este está lleno de lava caliente, contenida de forma segura en el interior. Usar con precaución. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Aléjate a una distancia segura y coloca el cubo para vaciarlo y crea una fuente de lava en este lugar. ¡No te quemes! -Water Bucket=Cubo con agua -A bucket can be used to collect and release liquids. This one is filled with water.=Se puede usar un cubo para recoger y liberar líquidos. Este está lleno de agua. -Place it to empty the bucket and create a water source.=Colóquelo para vaciar el cubo y crear una fuente de agua. -River Water Bucket=Cubo de agua de río -A bucket can be used to collect and release liquids. This one is filled with river water.=Se puede usar un cubo para recoger y liberar líquidos. Este está lleno de agua de río. -Place it to empty the bucket and create a river water source.=Colóquelo para vaciar el cubo y crear una fuente de agua de río. \ No newline at end of file diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.fr.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.fr.tr deleted file mode 100644 index 4320f7509..000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.fr.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Seau Vide -A bucket can be used to collect and release liquids.=Un seau peut être utilisé pour recueillir et libérer les liquides. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Frappez une source de liquide pour la collecter. Vous pouvez ensuite utiliser le seau rempli pour placer le liquide ailleurs. -Lava Bucket=Seau de Lave -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Un seau peut être utilisé pour recueillir et libérer les liquides. Celui-ci est rempli de lave chaude, contenue en toute sécurité à l'intérieur. Utiliser avec précaution. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Eloignez-vous et placez le seau pour le vider et créez une source de lave à cet endroit. Ne vous brûlez pas! -Water Bucket=Seau d'Eau -A bucket can be used to collect and release liquids. This one is filled with water.=Un seau peut être utilisé pour recueillir et libérer les liquides. Celui-ci est rempli d'eau. -Place it to empty the bucket and create a water source.=Placez-le pour vider le seau et créer une source d'eau. -River Water Bucket=Seau d'Eau de Rivière -A bucket can be used to collect and release liquids. This one is filled with river water.=Un seau peut être utilisé pour recueillir et libérer les liquides. Celui-ci est rempli d'eau de rivière. -Place it to empty the bucket and create a river water source.=Placez-le pour vider le seau et créer une source d'eau de rivière. -Collects liquids=Collecte des liquides -Places a lava source=Place une source de lave -Places a water source=Place une source d'eau -Places a river water source=Place une source d'eau de rivière diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr deleted file mode 100644 index f7593b14e..000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Puste wiadro -A bucket can be used to collect and release liquids.=Wiadro może być użyte do zbierania i wylewania płynów. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Uderz w źródło płynu aby je zebrać. Możesz następnie użyć pełnego wiadra aby postawić płyn gdzie indziej. -Lava Bucket=Wiadro lawy -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.= Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione lawą, bezpiecznie przechowywaną w środku. Używać z rozwagą. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Odejdź na bezpieczną odległość i umieść wiadro aby je opróżnić i utworzyć źródło lawy w danym miejscu. Nie poparz się! -Water Bucket=Wiadro wody -A bucket can be used to collect and release liquids. This one is filled with water.=Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione wodą. -Place it to empty the bucket and create a water source.=Umieść je aby opróżnić wiadro i utworzyć źródło wody. -River Water Bucket=Wiadro wody rzecznej -A bucket can be used to collect and release liquids. This one is filled with river water.= Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione wodą rzeczną. -Place it to empty the bucket and create a river water source.=Umieść je aby opróżnić wiadro i utworzyć źródło wody rzecznej. -Collects liquids=Zbiera płyny -Places a lava source=Umieszcza źródło lawy -Places a water source=Umieszcza źródło wody -Places a river water source=Umieszcza źródło wody rzecznej diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.ru.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.ru.tr deleted file mode 100644 index 9c8cd0539..000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.ru.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Пустое ведро -A bucket can be used to collect and release liquids.=Ведро может быть использовано для набора и выливания жидкостей. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Ударьте источник жидкости, чтобы зачерпнуть его. После этого вы можете в ведре перенести жидкость в другое место. -Lava Bucket=Ведро лавы -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Ведро может быть использовано для набора и выливания жидкостей. Это ведро наполнено лавой, которая безопасно хранится внутри. Используйте с осторожностью. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Стоя на безопасном расстоянии, поместите ведро в пустоту, чтобы создать источник лавы на этом участке. -Water Bucket=Ведро воды -A bucket can be used to collect and release liquids. This one is filled with water.=Ведро может быть использовано для набора и выливания жидкостей. Это ведро наполнено водой. -Place it to empty the bucket and create a water source.=Поместите ведро на пустой участок для создания водного источника. -River Water Bucket=Ведро речной воды -A bucket can be used to collect and release liquids. This one is filled with river water.=Ведро может быть использовано для набора и выливания жидкостей. Это ведро наполнено речной водой. -Place it to empty the bucket and create a river water source.=Поместите ведро на пустой участок для создания источника речной воды. -Collects liquids=Набирает жидкости -Places a lava source=Переносит источник лавы -Places a water source=Переносит источник воды -Places a river water source=Переносит источник речной воды diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.zh_TW.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.zh_TW.tr deleted file mode 100644 index a9db929b2..000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.zh_TW.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=空桶 -A bucket can be used to collect and release liquids.=桶可以用來收集和倒出液體。 -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=擊打一個液體源頭來收集它。然後你可以用裝滿的桶把液體放在其他地方。 -Lava Bucket=熔岩桶 -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=桶可以用來收集和釋放液體。這個桶裡裝的是熱的熔岩,安全地裝在裡面。使用時要小心! -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=在安全距離內,將熔岩倒出,在這個地方創造一個熔岩源頭。不要燒到自己! -Water Bucket=水桶 -A bucket can be used to collect and release liquids. This one is filled with water.=桶可以用來收集和倒出液體。這個桶裡裝的是水。 -Place it to empty the bucket and create a water source.=放置它以清空水桶並創建水源。 -River Water Bucket=河水桶 -A bucket can be used to collect and release liquids. This one is filled with river water.=桶可以用來收集和倒出液體。這個桶裡裝的是河水。 -Place it to empty the bucket and create a river water source.=放置它以清空水桶並創建河水源。 -Collects liquids=攜帶流體 -Places a lava source=放置熔岩源頭 -Places a water source=放置水源 -Places a river water source=放置河水源頭 diff --git a/mods/ITEMS/mcl_buckets/locale/template.txt b/mods/ITEMS/mcl_buckets/locale/template.txt deleted file mode 100644 index 174d1b76b..000000000 --- a/mods/ITEMS/mcl_buckets/locale/template.txt +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket= -A bucket can be used to collect and release liquids.= -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.= -Lava Bucket= -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.= -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!= -Water Bucket= -A bucket can be used to collect and release liquids. This one is filled with water.= -Place it to empty the bucket and create a water source.= -River Water Bucket= -A bucket can be used to collect and release liquids. This one is filled with river water.= -Place it to empty the bucket and create a river water source.= -Collects liquids= -Places a lava source= -Places a water source= -Places a river water source= diff --git a/mods/ITEMS/mcl_buckets/mod.conf b/mods/ITEMS/mcl_buckets/mod.conf deleted file mode 100644 index ba945b033..000000000 --- a/mods/ITEMS/mcl_buckets/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mcl_buckets -author = Kahrl -description = -depends = mcl_worlds, mcl_util, controls -optional_depends = mcl_core, mclx_core, doc - diff --git a/mods/ITEMS/mcl_buckets/register.lua b/mods/ITEMS/mcl_buckets/register.lua deleted file mode 100644 index 1a7c8fe14..000000000 --- a/mods/ITEMS/mcl_buckets/register.lua +++ /dev/null @@ -1,117 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_mcl_core = minetest.get_modpath("mcl_core") -local mod_mclx_core = minetest.get_modpath("mclx_core") -local has_awards = minetest.get_modpath("awards") - -local function sound_place(itemname, pos) - local def = minetest.registered_nodes[itemname] - if def and def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end - ---[[local sound_take = function(itemname, pos) - local def = minetest.registered_nodes[itemname] - if def and def.sounds and def.sounds.dug then - minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end]] - -if mod_mcl_core then - -- Lava bucket - mcl_buckets.register_liquid({ - source_place = function(pos) - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - return "mcl_nether:nether_lava_source" - else - return "mcl_core:lava_source" - end - end, - source_take = {"mcl_core:lava_source", "mcl_nether:nether_lava_source"}, - on_take = function(user) - if has_awards and user and user:is_player() then - awards.unlock(user:get_player_name(), "mcl:hotStuff") - end - end, - bucketname = "mcl_buckets:bucket_lava", - inventory_image = "bucket_lava.png", - name = S("Lava Bucket"), - longdesc = S("A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution."), - usagehelp = S("Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!"), - tt_help = S("Places a lava source") - }) - - -- Water bucket - mcl_buckets.register_liquid({ - source_place = "mcl_core:water_source", - source_take = {"mcl_core:water_source"}, - bucketname = "mcl_buckets:bucket_water", - inventory_image = "bucket_water.png", - name = S("Water Bucket"), - longdesc = S("A bucket can be used to collect and release liquids. This one is filled with water."), - usagehelp = S("Place it to empty the bucket and create a water source."), - tt_help = S("Places a water source"), - extra_check = function(pos, placer) - local nn = minetest.get_node(pos).name - -- Pour water into cauldron - if minetest.get_item_group(nn, "cauldron") ~= 0 then - -- Put water into cauldron - if nn ~= "mcl_cauldrons:cauldron_3" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3"}) - end - sound_place("mcl_core:water_source", pos) - return false, true - -- Evaporate water if used in Nether (except on cauldron) - else - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - return false, true - end - end - end, - groups = { water_bucket = 1 }, - }) -end - -if mod_mclx_core then - -- River water bucket - mcl_buckets.register_liquid({ - source_place = "mclx_core:river_water_source", - source_take = {"mclx_core:river_water_source"}, - bucketname = "mcl_buckets:bucket_river_water", - inventory_image = "bucket_river_water.png", - name = S("River Water Bucket"), - longdesc = S("A bucket can be used to collect and release liquids. This one is filled with river water."), - usagehelp = S("Place it to empty the bucket and create a river water source."), - tt_help = S("Places a river water source"), - extra_check = function(pos, placer) - local nn = minetest.get_node(pos).name - -- Pour into cauldron - if minetest.get_item_group(nn, "cauldron") ~= 0 then - -- Put water into cauldron - if nn ~= "mcl_cauldrons:cauldron_3r" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3r"}) - end - sound_place("mcl_core:water_source", pos) - return false, true - else - -- Evaporate water if used in Nether (except on cauldron) - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - return false, true - end - end - end, - groups = { water_bucket = 1 }, - }) -end - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_buckets:bucket_lava", - burntime = 1000, - replacements = {{"mcl_buckets:bucket_lava", "mcl_buckets:bucket_empty"}}, -}) diff --git a/mods/ITEMS/mcl_buckets/textures/bucket.png b/mods/ITEMS/mcl_buckets/textures/bucket.png deleted file mode 100644 index da2126bb8..000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/textures/bucket_lava.png b/mods/ITEMS/mcl_buckets/textures/bucket_lava.png deleted file mode 100644 index 967c2ee77..000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket_lava.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/textures/bucket_river_water.png b/mods/ITEMS/mcl_buckets/textures/bucket_river_water.png deleted file mode 100644 index 5e58c92f4..000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket_river_water.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/textures/bucket_water.png b/mods/ITEMS/mcl_buckets/textures/bucket_water.png deleted file mode 100644 index b730d0fa5..000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket_water.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cake/init.lua b/mods/ITEMS/mcl_cake/init.lua deleted file mode 100644 index 1b0824e77..000000000 --- a/mods/ITEMS/mcl_cake/init.lua +++ /dev/null @@ -1,156 +0,0 @@ ---[[ -#!#!#!#Cake mod created by Jordan4ibanez#!#!# -#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!# -]]-- - -local CAKE_HUNGER_POINTS = 2 - -local S = minetest.get_translator(minetest.get_current_modname()) - -local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"} -local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16} -local slice_2 = { -7/16, -8/16, -7/16, -3/16, 0/16, 7/16} -local slice_3 = { -7/16, -8/16, -7/16, -1/16, 0/16, 7/16} -local slice_4 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16} -local slice_5 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16} -local slice_6 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16} - -local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16} - -minetest.register_craft({ - output = "mcl_cake:cake", - recipe = { - {"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"}, - {"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"}, - {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, - }, - replacements = { - {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, - {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, - {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, - }, -}) - -minetest.register_node("mcl_cake:cake", { - description = S("Cake"), - _tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS), - _doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."), - _doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."), - tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - inventory_image = "cake.png", - wield_image = "cake.png", - paramtype = "light", - is_ground_content = false, - drawtype = "nodebox", - selection_box = { - type = "fixed", - fixed = full_cake - }, - node_box = { - type = "fixed", - fixed = full_cake - }, - stack_max = 1, - groups = { - handy = 1, attached_node = 1, dig_by_piston = 1, comparator_signal = 14, - cake = 7, food = 2, no_eat_delay = 1, compostability = 100 - }, - drop = "", - on_rightclick = function(pos, node, clicker, itemstack) - -- Cake is subject to protection - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"}) - -- Check if we were allowed to eat - if newcake:get_name() ~= "mcl_cake:cake" or minetest.is_creative_enabled(clicker:get_player_name()) then - minetest.add_node(pos,{type="node",name="mcl_cake:cake_6",param2=0}) - end - end, - sounds = mcl_sounds.node_sound_leaves_defaults(), - - _food_particles = false, - _mcl_saturation = 0.4, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -local register_slice = function(level, nodebox, desc) - local this = "mcl_cake:cake_"..level - local after_eat = "mcl_cake:cake_"..(level-1) - local on_rightclick - if level > 1 then - on_rightclick = function(pos, node, clicker, itemstack) - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"}) - -- Check if we were allowed to eat - if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then - minetest.add_node(pos,{type="node",name=after_eat,param2=0}) - end - end - else - -- Last slice - on_rightclick = function(pos, node, clicker, itemstack) - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"}) - -- Check if we were allowed to eat - if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then - minetest.remove_node(pos) - minetest.check_for_falling(pos) - end - end - end - - minetest.register_node(this, { - description = desc, - _doc_items_create_entry = false, - tiles = cake_texture, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - is_ground_content = false, - drawtype = "nodebox", - selection_box = { - type = "fixed", - fixed = nodebox, - }, - node_box = { - type = "fixed", - fixed = nodebox, - }, - groups = { - handy = 1, attached_node = 1, not_in_creative_inventory = 1, - dig_by_piston = 1, cake = level, comparator_signal = level * 2, - food = 2, no_eat_delay = 1 - }, - drop = "", - on_rightclick = on_rightclick, - sounds = mcl_sounds.node_sound_leaves_defaults(), - - _food_particles = false, - _mcl_saturation = 0.4, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_cake:cake", "nodes", "mcl_cake:cake_"..level) - end -end - -register_slice(6, slice_6, S("Cake (6 Slices Left)")) -register_slice(5, slice_5, S("Cake (5 Slices Left)")) -register_slice(4, slice_4, S("Cake (4 Slices Left)")) -register_slice(3, slice_3, S("Cake (3 Slices Left)")) -register_slice(2, slice_2, S("Cake (2 Slices Left)")) -register_slice(1, slice_1, S("Cake (1 Slice Left)")) diff --git a/mods/ITEMS/mcl_cake/locale/mcl_cake.de.tr b/mods/ITEMS/mcl_cake/locale/mcl_cake.de.tr deleted file mode 100644 index f5af4f30a..000000000 --- a/mods/ITEMS/mcl_cake/locale/mcl_cake.de.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_cake -Cake=Kuchen -Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=Kuchen können platziert und gegessen werden, um Hungerpunkte wiederherzustellen. Ein Kuchen hat 7 Stücke. Jedes Stück stellt 2 Hungerpunkte und 0,4 Sättigungspunkte wieder her. Kuchen werden zerstört, wenn sie abgebaut werden oder der Block unter ihnen bricht. -Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=Platzieren Sie ihn irgendwo, dann rechtsklicken Sie auf ihn, um ein Stück zu essen. Sie können nicht vom Kuchen naschen, wenn ihre Hungerleiste voll ist. -Cake (6 Slices Left)=Kuchen (6 Stücke übrig) -Cake (5 Slices Left)=Kuchen (5 Stücke übrig) -Cake (4 Slices Left)=Kuchen (4 Stücke übrig) -Cake (3 Slices Left)=Kuchen (3 Stücke übrig) -Cake (2 Slices Left)=Kuchen (2 Stücke übrig) -Cake (1 Slice Left)=Kuchen (1 Stück übrig) -With 7 tasty slices!=Mit 7 leckeren Stücken! -Hunger points: +@1 per slice=Hungerpunkte: +@1 pro Stück diff --git a/mods/ITEMS/mcl_cake/locale/mcl_cake.es.tr b/mods/ITEMS/mcl_cake/locale/mcl_cake.es.tr deleted file mode 100644 index 261d581e1..000000000 --- a/mods/ITEMS/mcl_cake/locale/mcl_cake.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_cake -Cake=Tarta -Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=Los pasteles se pueden colocar y comer para restaurar los puntos de hambre. Un pastel tiene 7 trozos. Cada trozo restaura 2 puntos de hambre y 0.4 puntos de saturación. Los pasteles se destruirán cuando se caven o cuando se rompa el bloque debajo de ellos. -Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=Coloque el pastel en cualquier lugar, luego haga clic derecho para comer una sola trozo. No puedes comer del pastel cuando tu barra de hambre está llena. -Cake (6 Slices Left)=Tarta (Quedan 6 trozos) -Cake (5 Slices Left)=Tarta (Quedan 5 trozos) -Cake (4 Slices Left)=Tarta (Quedan 4 trozos) -Cake (3 Slices Left)=Tarta (Quedan 3 trozos) -Cake (2 Slices Left)=Tarta (Quedan 2 trozos) -Cake (1 Slice Left)=Tarta (Queda 1 trozo) diff --git a/mods/ITEMS/mcl_cake/locale/mcl_cake.fr.tr b/mods/ITEMS/mcl_cake/locale/mcl_cake.fr.tr deleted file mode 100644 index 06e3b7ceb..000000000 --- a/mods/ITEMS/mcl_cake/locale/mcl_cake.fr.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_cake -Cake=Gâteau -Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=Les gâteaux peuvent être placés et mangés pour restaurer les points de faim. Un gâteau a 7 tranches. Chaque tranche restaure 2 points de faim et 0,4 points de saturation. Les gâteaux seront détruits lorsqu'ils seront creusés ou lorsque le bloc en dessous d'eux sera brisé. -Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=Placez le gâteau n'importe où, puis faites un clic droit pour manger une seule tranche. Vous ne pouvez pas manger du gâteau lorsque votre barre de faim est pleine. -Cake (6 Slices Left)=Gâteau (reste 6 tranches) -Cake (5 Slices Left)=Gâteau (reste 5 tranches) -Cake (4 Slices Left)=Gâteau (reste 4 tranches) -Cake (3 Slices Left)=Gâteau (reste 3 tranches) -Cake (2 Slices Left)=Gâteau (reste 2 tranches) -Cake (1 Slice Left)=Gâteau (reste 1 tranche) -With 7 tasty slices!=Avec 7 tranches savoureuses! -Hunger points: +@1 per slice=Points de faim: +@1 par tranche diff --git a/mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr b/mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr deleted file mode 100644 index f90e665e7..000000000 --- a/mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_cake -Cake=Ciasto -Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=Ciasto może być postawione i zjedzone by odzyskać punkty głodu. Ciasto ma 7 kawałków. Każdy kawałek przywraca dwa punkty głodu i 0.4 punktu nasycenia. Ciasta zostaną zniszczone przy próbie wykopania, lub gdy blok pod nimi zostanie zniszczony. -Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=Postaw ciasto gdziekolwiek, następnie kliknij prawym by zjeść pojedynczy kawałek. Nie możesz jeść ciasta gdy twój pasek głodu jest pełny. -Cake (6 Slices Left)=Ciasto (pozostały 6 kawałki) -Cake (5 Slices Left)=Ciasto (pozostały 5 kawałki) -Cake (4 Slices Left)=Ciasto (pozostały 4 kawałki) -Cake (3 Slices Left)=Ciasto (pozostały 3 kawałki) -Cake (2 Slices Left)=Ciasto (pozostały 2 kawałki) -Cake (1 Slice Left)=Ciasto (pozostał 1 kawałek) -With 7 tasty slices!=Z 7 pysznymi kawałkami! -Hunger points: +@1 per slice=Punkty głodu: +@1 za kawałek diff --git a/mods/ITEMS/mcl_cake/locale/mcl_cake.ru.tr b/mods/ITEMS/mcl_cake/locale/mcl_cake.ru.tr deleted file mode 100644 index 50a5b34c1..000000000 --- a/mods/ITEMS/mcl_cake/locale/mcl_cake.ru.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_cake -Cake=Торт -Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=Торты можно есть, восстанавливая очки голода, а также размещать на других блоках. Торт состоит из 7 кусочков. Каждый кусочек восстанавливает 2 очка голода и 0.4 очка сытости. Торты уничтожаются при выкапывании или разрушении нижестоящего блока. -Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=Поместите торт куда-нибудь, затем кликните правой, чтобы съесть кусочек. -Cake (6 Slices Left)=Торт (осталось 6 кусочков) -Cake (5 Slices Left)=Торт (осталось 5 кусочков) -Cake (4 Slices Left)=Торт (осталось 4 кусочка) -Cake (3 Slices Left)=Торт (осталось 3 кусочка) -Cake (2 Slices Left)=Торт (осталось 2 кусочка) -Cake (1 Slice Left)=Торт (остался 1 кусочек) -With 7 tasty slices!=Из 7 вкусных кусочков -Hunger points: +@1 per slice=Очки голода: +@1 с каждым куском diff --git a/mods/ITEMS/mcl_cake/locale/mcl_cake.zh_TW.tr b/mods/ITEMS/mcl_cake/locale/mcl_cake.zh_TW.tr deleted file mode 100644 index 702791b49..000000000 --- a/mods/ITEMS/mcl_cake/locale/mcl_cake.zh_TW.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_cake -Cake=蛋糕 -Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=蛋糕可以被放置和食用,以恢復飢餓值。一個蛋糕有7片。每片可以恢復2個飢餓值和0.4個飽食度。蛋糕在被挖掘或其下面的方塊被打破時將被摧毀。 -Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=將蛋糕放在任何地方,然後右鍵單擊以吃一小片。 當您的飢餓條已滿時,您不能從蛋糕上吃東西。 -Cake (6 Slices Left)=蛋糕(還剩6片) -Cake (5 Slices Left)=蛋糕(還剩5片) -Cake (4 Slices Left)=蛋糕(還剩4片) -Cake (3 Slices Left)=蛋糕(還剩3片) -Cake (2 Slices Left)=蛋糕(還剩2片) -Cake (1 Slice Left)=蛋糕(還剩1片) -With 7 tasty slices!=有七塊美味的蛋糕! -Hunger points: +@1 per slice=飢餓值:每片 +@1 diff --git a/mods/ITEMS/mcl_cake/locale/template.txt b/mods/ITEMS/mcl_cake/locale/template.txt deleted file mode 100644 index 080e73955..000000000 --- a/mods/ITEMS/mcl_cake/locale/template.txt +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_cake -Cake= -Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.= -Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.= -Cake (6 Slices Left)= -Cake (5 Slices Left)= -Cake (4 Slices Left)= -Cake (3 Slices Left)= -Cake (2 Slices Left)= -Cake (1 Slice Left)= -With 7 tasty slices!= -Hunger points: +@1 per slice= diff --git a/mods/ITEMS/mcl_cake/mod.conf b/mods/ITEMS/mcl_cake/mod.conf deleted file mode 100644 index e7260468e..000000000 --- a/mods/ITEMS/mcl_cake/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_cake -description = Add cakes to mcl -depends = mcl_core, mcl_sounds, mcl_hunger, mcl_buckets, mcl_farming, mcl_mobitems -optional_depends = doc diff --git a/mods/ITEMS/mcl_cake/textures/cake.png b/mods/ITEMS/mcl_cake/textures/cake.png deleted file mode 100644 index 736faa6db..000000000 Binary files a/mods/ITEMS/mcl_cake/textures/cake.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cake/textures/cake_bottom.png b/mods/ITEMS/mcl_cake/textures/cake_bottom.png deleted file mode 100644 index d64db7f7d..000000000 Binary files a/mods/ITEMS/mcl_cake/textures/cake_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cake/textures/cake_inner.png b/mods/ITEMS/mcl_cake/textures/cake_inner.png deleted file mode 100644 index 18c37959f..000000000 Binary files a/mods/ITEMS/mcl_cake/textures/cake_inner.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cake/textures/cake_side.png b/mods/ITEMS/mcl_cake/textures/cake_side.png deleted file mode 100644 index 3d4643e41..000000000 Binary files a/mods/ITEMS/mcl_cake/textures/cake_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cake/textures/cake_top.png b/mods/ITEMS/mcl_cake/textures/cake_top.png deleted file mode 100644 index 576c3fe8c..000000000 Binary files a/mods/ITEMS/mcl_cake/textures/cake_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/README.md b/mods/ITEMS/mcl_cartography_table/README.md deleted file mode 100644 index 4818b6784..000000000 --- a/mods/ITEMS/mcl_cartography_table/README.md +++ /dev/null @@ -1,13 +0,0 @@ -mcl_cartography_table -------------------- -Cartography Tables, by PrairieWind - -Adds Cartography Tables to MineClone 2/5. - -License of source code ----------------------- -LGPLv2.1 - -License of media ----------------- -See the main MineClone 2 README.md file. \ No newline at end of file diff --git a/mods/ITEMS/mcl_cartography_table/init.lua b/mods/ITEMS/mcl_cartography_table/init.lua deleted file mode 100644 index a7c66b4e2..000000000 --- a/mods/ITEMS/mcl_cartography_table/init.lua +++ /dev/null @@ -1,27 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) --- Cartography Table Code. Used to create and copy maps. Needs a GUI still. - -minetest.register_node("mcl_cartography_table:cartography_table", { - description = S("Cartography Table"), - _tt_help = S("Used to create or copy maps"), - _doc_items_longdesc = S("Is used to create or copy maps for use.."), - tiles = { - "cartography_table_top.png", "cartography_table_side3.png", - "cartography_table_side3.png", "cartography_table_side2.png", - "cartography_table_side3.png", "cartography_table_side1.png" - }, - paramtype2 = "facedir", - groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5 - }) - - -minetest.register_craft({ - output = "mcl_cartography_table:cartography_table", - recipe = { - { "mcl_core:paper", "mcl_core:paper", "" }, - { "group:wood", "group:wood", "" }, - { "group:wood", "group:wood", "" }, - } -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_cartography_table/mod.conf b/mods/ITEMS/mcl_cartography_table/mod.conf deleted file mode 100644 index ebea16197..000000000 --- a/mods/ITEMS/mcl_cartography_table/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_cartography_table -author = PrairieWind -description = Adds the cartography table villager workstation to MineClone 2/5. Used to copy and create maps. \ No newline at end of file diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side1.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side1.png deleted file mode 100644 index 7573d6b98..000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side2.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side2.png deleted file mode 100644 index f5dbd7ce5..000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side3.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side3.png deleted file mode 100644 index 740303ba1..000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_top.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_top.png deleted file mode 100644 index cefff1fbd..000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua deleted file mode 100644 index 55866f5cc..000000000 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ /dev/null @@ -1,143 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Cauldron mod, adds cauldrons. - --- TODO: Extinguish fire of burning entities - --- Convenience function because the cauldron nodeboxes are very similar -local create_cauldron_nodebox = function(water_level) - local floor_y - if water_level == 0 then -- empty - floor_y = -0.1875 - elseif water_level == 1 then -- 1/3 filled - floor_y = 1/16 - elseif water_level == 2 then -- 2/3 filled - floor_y = 4/16 - elseif water_level == 3 then -- full - floor_y = 7/16 - end - return { - type = "fixed", - fixed = { - {-0.5, -0.1875, -0.5, -0.375, 0.5, 0.5}, -- Left wall - {0.375, -0.1875, -0.5, 0.5, 0.5, 0.5}, -- Right wall - {-0.375, -0.1875, 0.375, 0.375, 0.5, 0.5}, -- Back wall - {-0.375, -0.1875, -0.5, 0.375, 0.5, -0.375}, -- Front wall - {-0.5, -0.3125, -0.5, 0.5, floor_y, 0.5}, -- Floor - {-0.5, -0.5, -0.5, -0.375, -0.3125, -0.25}, -- Left front foot, part 1 - {-0.375, -0.5, -0.5, -0.25, -0.3125, -0.375}, -- Left front foot, part 2 - {-0.5, -0.5, 0.25, -0.375, -0.3125, 0.5}, -- Left back foot, part 1 - {-0.375, -0.5, 0.375, -0.25, -0.3125, 0.5}, -- Left back foot, part 2 - {0.375, -0.5, 0.25, 0.5, -0.3125, 0.5}, -- Right back foot, part 1 - {0.25, -0.5, 0.375, 0.375, -0.3125, 0.5}, -- Right back foot, part 2 - {0.375, -0.5, -0.5, 0.5, -0.3125, -0.25}, -- Right front foot, part 1 - {0.25, -0.5, -0.5, 0.375, -0.3125, -0.375}, -- Right front foot, part 2 - } - } -end - -local cauldron_nodeboxes = {} -for w=0,3 do - cauldron_nodeboxes[w] = create_cauldron_nodebox(w) -end - - --- Empty cauldron -minetest.register_node("mcl_cauldrons:cauldron", { - description = S("Cauldron"), - _tt_help = S("Stores water"), - _doc_items_longdesc = S("Cauldrons are used to store water and slowly fill up under rain."), - _doc_items_usagehelp = S("Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water."), - wield_image = "mcl_cauldrons_cauldron.png", - inventory_image = "mcl_cauldrons_cauldron.png", - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - groups = {pickaxey=1, deco_block=1, cauldron=1}, - node_box = cauldron_nodeboxes[0], - selection_box = { type = "regular" }, - tiles = { - "mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_top.png", - "mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_bottom.png", - "mcl_cauldrons_cauldron_side.png" - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_hardness = 2, - _mcl_blast_resistance = 2, -}) - --- Template function for cauldrons with water -local register_filled_cauldron = function(water_level, description, river_water) - local id = "mcl_cauldrons:cauldron_"..water_level - local water_tex - if river_water then - id = id .. "r" - water_tex = "default_river_water_source_animated.png^[verticalframe:16:0" - else - water_tex = "default_water_source_animated.png^[verticalframe:16:0" - end - minetest.register_node(id, { - description = description, - _doc_items_create_entry = false, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - groups = {pickaxey=1, not_in_creative_inventory=1, cauldron=(1+water_level), cauldron_filled=water_level, comparator_signal=water_level}, - node_box = cauldron_nodeboxes[water_level], - collision_box = cauldron_nodeboxes[0], - selection_box = { type = "regular" }, - tiles = { - "("..water_tex..")^mcl_cauldrons_cauldron_top.png", - "mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_bottom.png", - "mcl_cauldrons_cauldron_side.png" - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - drop = "mcl_cauldrons:cauldron", - _mcl_hardness = 2, - _mcl_blast_resistance = 2, - }) - - -- Add entry aliases for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_cauldrons:cauldron", "nodes", id) - end -end - --- Filled cauldrons (3 levels) -register_filled_cauldron(1, S("Cauldron (1/3 Water)")) -register_filled_cauldron(2, S("Cauldron (2/3 Water)")) -register_filled_cauldron(3, S("Cauldron (3/3 Water)")) - -if minetest.get_modpath("mclx_core") then - register_filled_cauldron(1, S("Cauldron (1/3 River Water)"), true) - register_filled_cauldron(2, S("Cauldron (2/3 River Water)"), true) - register_filled_cauldron(3, S("Cauldron (3/3 River Water)"), true) -end - -minetest.register_craft({ - output = "mcl_cauldrons:cauldron", - recipe = { - { "mcl_core:iron_ingot", "", "mcl_core:iron_ingot" }, - { "mcl_core:iron_ingot", "", "mcl_core:iron_ingot" }, - { "mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot" }, - } -}) - -minetest.register_abm({ - label = "cauldrons", - nodenames = {"group:cauldron_filled"}, - interval = 0.5, - chance = 1, - action = function(pos, node) - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.4)) do - if mcl_burning.is_burning(obj) then - mcl_burning.extinguish(obj) - local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1 - minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)}) - break - end - end - end -}) diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr deleted file mode 100644 index fe1d9aa81..000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Kessel -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Kessel werden benutzt, um Wasser zu lagern, im Regen werden sie langsam aufgefüllt. Kessel können auch verwendet werden, um Banner abzuwaschen. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Platzieren Sie einen Wassereinmer in den Kessel, um ihn mit Wasser zu füllen. Platzieren Sie einen leeren Eimer auf einen vollen Kessel, um das Wasser aufzusammeln. Platzieren Sie eine Wasserflasche in den Kessel, um ihn zu einem Drittel mit Wasser zu füllen. Benutzen Sie ein bemaltes Banner auf den Kessel, um die oberste Schicht abzuwaschen. -Cauldron (1/3 Water)=Kessel (1/3 Wasser) -Cauldron (2/3 Water)=Kessel (2/3 Wasser) -Cauldron (3/3 Water)=Kessel (3/3 Wasser) -Cauldron (1/3 River Water)=Kessel (1/3 Wasser) -Cauldron (2/3 River Water)=Kessel (2/3 Flusswasser) -Cauldron (3/3 River Water)=Kessel (3/3 Flusswasser) -Stores water=Speichert Wasser diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr deleted file mode 100644 index 9748e61b4..000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Caldera -Cauldrons are used to store water and slowly fill up under rain.=Los calderos se usan para almacenar agua y llenarse lentamente bajo la lluvia. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water.=Coloque un cubo de agua en el caldero para llenarlo con agua. Coloque un cubo vacío en un caldero lleno para recuperar el agua. Coloque una botella de agua en el caldero para llenar el caldero hasta un tercio con agua. Coloque una botella de vidrio en un caldero con agua para recuperar un tercio del agua. -Cauldron (1/3 Water)=Caldera (1/3 de agua) -Cauldron (2/3 Water)=Caldera (2/3 de agua) -Cauldron (3/3 Water)=Caldera (3/3 de agua) -Cauldron (1/3 River Water)=Caldera (1/3 de agua de río) -Cauldron (2/3 River Water)=Caldera (2/3 de agua de río) -Cauldron (3/3 River Water)=Caldera (3/3 de agua de río) diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr deleted file mode 100644 index 58826d9ab..000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Kocioł -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Kotły są wykorzystywane do przechowywania wody oraz powoli wypełniają się podczas deszczu. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Umieść wiadro wody w kotle by wypełnić go wodą. Umieść puste wiadro na pełnym kotle by odzyskać wodę. Umieść szklaną butelkę w kotle z wodą aby odzyskać jedną trzecią wody. Użyj upiększonego sztandaru na kotle z wodą aby zmyć górną warstwę. -Cauldron (1/3 Water)=Kocioł (1/3 wody) -Cauldron (2/3 Water)=Kocioł (2/3 wody) -Cauldron (3/3 Water)=Kocioł (3/3 wody) -Cauldron (1/3 River Water)=Kocioł (1/3 rzecznej wody) -Cauldron (2/3 River Water)=Kocioł (2/3 rzecznej wody) -Cauldron (3/3 River Water)=Kocioł (3/3 rzecznej wody) -Stores water=Przechowuje wodę diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.zh_TW.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.zh_TW.tr deleted file mode 100644 index ea3b97c41..000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.zh_TW.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=鍋釜 -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=鍋釜是用來儲水的,在雨水的作用下慢慢填滿。它們也可以用來清洗旗幟。 -Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=將水桶放入鍋釜中,使其充滿水。將一個空桶放在裝滿水的大鍋上,以取回水。將一個水瓶放入鍋釜內,使大鍋內增加三分之一的水。將一個玻璃瓶放在有水的鍋釜裡,取回三分之一的水。在有水的鍋釜上使用印有圖案的旗幟,以洗掉其上層。 -Cauldron (1/3 Water)=鍋釜(1/3 水) -Cauldron (2/3 Water)=鍋釜(2/3 水) -Cauldron (3/3 Water)=鍋釜(3/3 水) -Cauldron (1/3 River Water)=鍋釜(1/3 河水) -Cauldron (2/3 River Water)=鍋釜(2/3 河水) -Cauldron (3/3 River Water)=鍋釜(3/3 河水) -Stores water=儲存水 diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr deleted file mode 100644 index a241c5cb0..000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Chaudrons -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Les chaudrons sont utilisés pour stocker l'eau et se remplissent lentement sous la pluie. Ils peuvent également être utilisés pour laver les bannières. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Placez une marmite d'eau dans le chaudron pour le remplir d'eau. Placez un seau vide sur un chaudron plein pour récupérer l'eau. Placez une bouteille d'eau dans le chaudron pour remplir le chaudron au tiers avec de l'eau. Placez une bouteille en verre dans un chaudron avec de l'eau pour récupérer un tiers de l'eau. Utilisez une bannière blasonnée sur un chaudron avec de l'eau pour laver sa couche supérieure. -Cauldron (1/3 Water)=Chaudron (1/3 d'eau) -Cauldron (2/3 Water)=Chaudron (2/3 d'eau) -Cauldron (3/3 Water)=Chaudron (3/3 d'eau) -Cauldron (1/3 River Water)=Chaudron (1/3 d'eau de rivière) -Cauldron (2/3 River Water)=Chaudron (2/3 d'eau de rivière) -Cauldron (3/3 River Water)=Chaudron (3/3 d'eau de rivière) -Stores water=Stocke l'eau diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr deleted file mode 100644 index 6ecae1025..000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Котёл -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Котлы используются для хранения воды и медленного наполнения под дождём. Они также могут использоваться для промывания флагов. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Попытайтесь поместить ведро воды в котёл, чтобы наполнить его водой. Попытка поместить пустое ведро приведёт к освобождению котла. Поместите в котёл бутылку воды, чтобы наполнить его на треть. -Cauldron (1/3 Water)=Котёл (1/3 воды) -Cauldron (2/3 Water)=Котёл (2/3 воды) -Cauldron (3/3 Water)=Котёл (3/3 воды) -Cauldron (1/3 River Water)=Котёл (1/3 речной воды) -Cauldron (2/3 River Water)=Котёл (2/3 речной воды) -Cauldron (3/3 River Water)=Котёл (3/3 речной воды) -Stores water=Хранит воду diff --git a/mods/ITEMS/mcl_cauldrons/locale/template.txt b/mods/ITEMS/mcl_cauldrons/locale/template.txt deleted file mode 100644 index 5e18f3283..000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron= -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.= -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.= -Cauldron (1/3 Water)= -Cauldron (2/3 Water)= -Cauldron (3/3 Water)= -Cauldron (1/3 River Water)= -Cauldron (2/3 River Water)= -Cauldron (3/3 River Water)= -Stores water= diff --git a/mods/ITEMS/mcl_cauldrons/mod.conf b/mods/ITEMS/mcl_cauldrons/mod.conf deleted file mode 100644 index 4787d60f9..000000000 --- a/mods/ITEMS/mcl_cauldrons/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_cauldrons -depends = mcl_core, mcl_sounds -optional_depends = mclx_core, doc diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron.png deleted file mode 100644 index d373012fa..000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_bottom.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_bottom.png deleted file mode 100644 index afbe33e30..000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_inner.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_inner.png deleted file mode 100644 index 8a94bbaeb..000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_inner.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_side.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_side.png deleted file mode 100644 index cca0466f2..000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_top.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_top.png deleted file mode 100644 index 5f056982b..000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua deleted file mode 100644 index 9fe3a81e2..000000000 --- a/mods/ITEMS/mcl_chests/init.lua +++ /dev/null @@ -1,1456 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - --- Christmas chest setup -local it_is_christmas = false -local date = os.date("*t") -if ( - date.month == 12 and ( - date.day == 24 or - date.day == 25 or - date.day == 26 - ) -) then - it_is_christmas = true -end - -local tiles_chest_normal_small = {"mcl_chests_normal.png"} -local tiles_chest_normal_double = {"mcl_chests_normal_double.png"} - -if it_is_christmas then - tiles_chest_normal_small = {"mcl_chests_normal_present.png^mcl_chests_noise.png"} - tiles_chest_normal_double = {"mcl_chests_normal_double_present.png^mcl_chests_noise_double.png"} -end - -local tiles_chest_trapped_small = {"mcl_chests_trapped.png"} -local tiles_chest_trapped_double = {"mcl_chests_trapped_double.png"} - -if it_is_christmas then - tiles_chest_trapped_small = {"mcl_chests_trapped_present.png^mcl_chests_noise.png"} - tiles_chest_trapped_double = {"mcl_chests_trapped_double_present.png^mcl_chests_noise_double.png"} -end - -local tiles_chest_ender_small = {"mcl_chests_ender.png"} - -if it_is_christmas then - tiles_chest_ender_small = {"mcl_chests_ender_present.png^mcl_chests_noise.png"} -end - --- Chest Entity -local animate_chests = (minetest.settings:get_bool("animated_chests") ~= false) -local entity_animations = { - shulker = { - speed = 50, - open = {x = 45, y = 95}, - close = {x = 95, y = 145}, - }, - chest = { - speed = 25, - open = {x = 0, y = 7}, - close = {x = 13, y = 20}, - } -} - -minetest.register_entity("mcl_chests:chest", { - initial_properties = { - visual = "mesh", - visual_size = {x = 3, y = 3}, - pointable = false, - physical = false, - static_save = false, - }, - - set_animation = function(self, animname) - local anim_table = entity_animations[self.animation_type] - local anim = anim_table[animname] - if not anim then return end - self.object:set_animation(anim, anim_table.speed, 0, false) - end, - - open = function(self, playername) - self.players[playername] = true - if not self.is_open then - self:set_animation("open") - minetest.sound_play(self.sound_prefix .. "_open", { - pos = self.node_pos, - }) - self.is_open = true - end - end, - - close = function(self, playername) - local playerlist = self.players - playerlist[playername] = nil - if self.is_open then - if next(playerlist) then - return - end - self:set_animation("close") - minetest.sound_play(self.sound_prefix .. "_close", { - pos = self.node_pos, - }) - self.is_open = false - end - end, - - initialize = function(self, node_pos, node_name, textures, dir, double, sound_prefix, mesh_prefix, animation_type) - self.node_pos = node_pos - self.node_name = node_name - self.sound_prefix = sound_prefix - self.animation_type = animation_type - local obj = self.object - obj:set_properties({ - textures = textures, - mesh = mesh_prefix .. (double and "_double" or "") .. ".b3d", - }) - self:set_yaw(dir) - end, - - reinitialize = function(self, node_name) - self.node_name = node_name - end, - - set_yaw = function(self, dir) - self.object:set_yaw(minetest.dir_to_yaw(dir)) - end, - - check = function(self) - local node_pos, node_name = self.node_pos, self.node_name - if not node_pos or not node_name then - return false - end - local node = minetest.get_node(node_pos) - if node.name ~= node_name then - return false - end - return true - end, - - on_activate = function(self) - self.object:set_armor_groups({immortal = 1}) - self.players = {} - end, - - on_step = function(self, dtime) - if not self:check() then - self.object:remove() - end - end -}) - -local function get_entity_pos(pos, dir, double) - pos = vector.new(pos) - pos.y = pos.y - 0.49 - if double then - local add, mul, vec, cross = vector.add, vector.multiply, vector.new, vector.cross - pos = add(pos, mul(cross(dir, vec(0, 1, 0)), -0.5)) - end - return pos -end - -local function find_entity(pos) - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_chests:chest" then - return luaentity - end - end -end - -local function get_entity_info(pos, param2, double, dir, entity_pos) - dir = dir or minetest.facedir_to_dir(param2) - return dir, get_entity_pos(pos, dir, double) -end - -local function create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) - dir, entity_pos = get_entity_info(pos, param2, double, dir, entity_pos) - local obj = minetest.add_entity(entity_pos, "mcl_chests:chest") - local luaentity = obj:get_luaentity() - luaentity:initialize(pos, node_name, textures, dir, double, sound_prefix, mesh_prefix, animation_type) - return luaentity -end - -local function find_or_create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) - dir, entity_pos = get_entity_info(pos, param2, double, dir, entity_pos) - return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) -end - -local no_rotate, simple_rotate -if minetest.get_modpath("screwdriver") then - no_rotate = screwdriver.disallow - simple_rotate = function(pos, node, user, mode, new_param2) - if screwdriver.rotate_simple(pos, node, user, mode, new_param2) ~= false then - local nodename = node.name - local nodedef = minetest.registered_nodes[nodename] - local dir = minetest.facedir_to_dir(new_param2) - find_or_create_entity(pos, nodename, nodedef._chest_entity_textures, new_param2, false, nodedef._chest_entity_sound, nodedef._chest_entity_mesh, nodedef._chest_entity_animation_type, dir):set_yaw(dir) - else - return false - end - end -end - ---[[ List of open chests. -Key: Player name -Value: - If player is using a chest: { pos = } - Otherwise: nil ]] -local open_chests = {} - ---[[local function back_is_blocked(pos, dir) - pos = vector.add(pos, dir) - local def = minetest.registered_nodes[minetest.get_node(pos).name] - pos.y = pos.y + 1 - local def2 = minetest.registered_nodes[minetest.get_node(pos).name] - return not def or def.groups.opaque == 1 or not def2 or def2.groups.opaque == 1 -end]] - --- To be called if a player opened a chest -local function player_chest_open(player, pos, node_name, textures, param2, double, sound, mesh, shulker) - local name = player:get_player_name() - open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double, sound = sound, mesh = mesh, shulker = shulker} - if animate_chests then - local dir = minetest.facedir_to_dir(param2) - find_or_create_entity(pos, node_name, textures, param2, double, sound, mesh, shulker and "shulker" or "chest", dir):open(name) - end -end - --- Simple protection checking functions -local function protection_check_move(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end -end -local function protection_check_put_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end -end - -local trapped_chest_mesecons_rules = mesecon.rules.pplate - --- To be called when a chest is closed (only relevant for trapped chest atm) -local function chest_update_after_close(pos) - local node = minetest.get_node(pos) - - if node.name == "mcl_chests:trapped_chest_on_small" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - elseif node.name == "mcl_chests:trapped_chest_on_left" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - elseif node.name == "mcl_chests:trapped_chest_on_right" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - end -end - --- To be called if a player closed a chest -local function player_chest_close(player) - local name = player:get_player_name() - local open_chest = open_chests[name] - if open_chest == nil then - return - end - if animate_chests then - find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2, open_chest.double, open_chest.sound, open_chest.mesh, open_chest.shulker and "shulker" or "chest"):close(name) - end - chest_update_after_close(open_chest.pos) - - open_chests[name] = nil -end - --- This is a helper function to register both chests and trapped chests. Trapped chests will make use of the additional parameters -local function register_chest(basename, desc, longdesc, usagehelp, tt_help, tiles_table, hidden, mesecons, on_rightclick_addendum, on_rightclick_addendum_left, on_rightclick_addendum_right, drop, canonical_basename) - -- START OF register_chest FUNCTION BODY - if not drop then - drop = "mcl_chests:"..basename - else - drop = "mcl_chests:"..drop - end - -- The basename of the "canonical" version of the node, if set (e.g.: trapped_chest_on → trapped_chest). - -- Used to get a shared formspec ID and to swap the node back to the canonical version in on_construct. - if not canonical_basename then - canonical_basename = basename - end - - local function double_chest_add_item(top_inv, bottom_inv, listname, stack) - if not stack or stack:is_empty() then - return - end - - local name = stack:get_name() - - local function top_off(inv, stack) - for c, chest_stack in ipairs(inv:get_list(listname)) do - if stack:is_empty() then - break - end - - if chest_stack:get_name() == name and chest_stack:get_free_space() > 0 then - stack = chest_stack:add_item(stack) - inv:set_stack(listname, c, chest_stack) - end - end - - return stack - end - - stack = top_off(top_inv, stack) - stack = top_off(bottom_inv, stack) - - if not stack:is_empty() then - stack = top_inv:add_item(listname, stack) - if not stack:is_empty() then - bottom_inv:add_item(listname, stack) - end - end - end - - local drop_items_chest = mcl_util.drop_items_from_meta_container("main") - - local function on_chest_blast(pos) - local node = minetest.get_node(pos) - drop_items_chest(pos, node) - minetest.remove_node(pos) - end - - local function limit_put_list(stack, list) - for _, other in ipairs(list) do - stack = other:add_item(stack) - if stack:is_empty() then - break - end - end - return stack - end - - local function limit_put(stack, inv1, inv2) - local leftover = ItemStack(stack) - leftover = limit_put_list(leftover, inv1:get_list("main")) - leftover = limit_put_list(leftover, inv2:get_list("main")) - return stack:get_count() - leftover:get_count() - end - - local small_name = "mcl_chests:"..basename.."_small" - local small_textures = tiles_table.small - local left_name = "mcl_chests:"..basename.."_left" - local left_textures = tiles_table.double - - minetest.register_node("mcl_chests:"..basename, { - description = desc, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _doc_items_hidden = hidden, - drawtype = "mesh", - mesh = "mcl_chests_chest.obj", - tiles = small_textures, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {deco_block=1}, - on_construct = function(pos, node) - local node = minetest.get_node(pos) - node.name = small_name - minetest.set_node(pos, node) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - }) - - local function close_forms(canonical_basename, pos) - local players = minetest.get_connected_players() - for p=1, #players do - if vector.distance(players[p]:get_pos(), pos) <= 30 then - minetest.close_formspec(players[p]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z) - end - end - end - - minetest.register_node(small_name, { - description = desc, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _doc_items_hidden = hidden, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - _chest_entity_textures = small_textures, - _chest_entity_sound = "default_chest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - drop = drop, - groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1,chest_entity=1, not_in_creative_inventory=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local param2 = minetest.get_node(pos).param2 - local meta = minetest.get_meta(pos) - --[[ This is a workaround for Minetest issue 5894 - . - Apparently if we don't do this, large chests initially don't work when - placed at chunk borders, and some chests randomly don't work after - placing. ]] - -- FIXME: Remove this workaround when the bug has been fixed. - -- BEGIN OF WORKAROUND -- - meta:set_string("workaround", "ignore_me") - meta:set_string("workaround", nil) -- Done to keep metadata clean - -- END OF WORKAROUND -- - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - --[[ The "input" list is *another* workaround (hahahaha!) around the fact that Minetest - does not support listrings to put items into an alternative list if the first one - happens to be full. See . - This list is a hidden input-only list and immediately puts items into the appropriate chest. - It is only used for listrings and hoppers. This workaround is not that bad because it only - requires a simple “inventory allows” check for large chests.]] - -- FIXME: Refactor the listrings as soon Minetest supports alternative listrings - -- BEGIN OF LISTRING WORKAROUND - inv:set_size("input", 1) - -- END OF LISTRING WORKAROUND - if minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "right")).name == "mcl_chests:"..canonical_basename.."_small" then - minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) - create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename.."_small" then - minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) - create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) - else - minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename.."_small", param2 = param2 }) - create_entity(pos, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = protection_check_put_take, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - inv:add_item("main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, - - on_rightclick = function(pos, node, clicker) - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - local name = minetest.get_meta(pos):get_string("name") - if name == "" then - name = S("Chest") - end - - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. - "listring[current_player;main]") - - if on_rightclick_addendum then - on_rightclick_addendum(pos, node, clicker) - end - - player_chest_open(clicker, pos, small_name, small_textures, node.param2, false, "default_chest", "mcl_chests_chest") - end, - - on_destruct = function(pos) - close_forms(canonical_basename, pos) - end, - mesecons = mesecons, - on_rotate = simple_rotate, - }) - - minetest.register_node(left_name, { - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - _chest_entity_textures = left_textures, - _chest_entity_sound = "default_chest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - paramtype = "light", - paramtype2 = "facedir", - groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1,chest_entity=1,double_chest=1}, - drop = drop, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local n = minetest.get_node(pos) - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_right" then - n.name = "mcl_chests:"..canonical_basename.."_small" - minetest.swap_node(pos, n) - end - create_entity(pos, left_name, left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - on_destruct = function(pos) - local n = minetest.get_node(pos) - if n.name == small_name then - return - end - - close_forms(canonical_basename, pos) - - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_right" then - return - end - close_forms(canonical_basename, p) - - minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - -- BEGIN OF LISTRING WORKAROUND - elseif listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - return limit_put(stack, inv, other_inv) - --[[if inv:room_for_item("main", stack) then - return -1 - else - - if other_inv:room_for_item("main", stack) then - return -1 - else - return 0 - end - end]]-- - -- END OF LISTRING WORKAROUND - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - - inv:set_stack("input", 1, nil) - - double_chest_add_item(inv, other_inv, "main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, - - on_rightclick = function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - local above_def = minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name] - local above_def_other = minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name] - - if not above_def or above_def.groups.opaque == 1 or not above_def_other or above_def_other.groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - - local name = minetest.get_meta(pos):get_string("name") - if name == "" then - name = minetest.get_meta(pos_other):get_string("name") - end - if name == "" then - name = S("Large Chest") - end - - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[9,11.5]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,3.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,3.5,9,3).. - "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,7.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,7.5,9,3).. - "list[current_player;main;0,10.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,10.75,9,1).. - -- BEGIN OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. - -- END OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. - "listring[current_player;main]".. - "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]") - - if on_rightclick_addendum_left then - on_rightclick_addendum_left(pos, node, clicker) - end - - player_chest_open(clicker, pos, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") - end, - mesecons = mesecons, - on_rotate = no_rotate, - }) - - minetest.register_node("mcl_chests:"..basename.."_right", { - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, - drop = drop, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local n = minetest.get_node(pos) - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_left" then - n.name = "mcl_chests:"..canonical_basename.."_small" - minetest.swap_node(pos, n) - end - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - on_destruct = function(pos) - local n = minetest.get_node(pos) - if n.name == small_name then - return - end - - close_forms(canonical_basename, pos) - - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_left" then - return - end - close_forms(canonical_basename, p) - - minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - -- BEGIN OF LISTRING WORKAROUND - elseif listname == "input" then - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - local inv = minetest.get_inventory({type="node", pos=pos}) - --[[if other_inv:room_for_item("main", stack) then - return -1 - else - if inv:room_for_item("main", stack) then - return -1 - else - return 0 - end - end--]] - return limit_put(stack, other_inv, inv) - -- END OF LISTRING WORKAROUND - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - local inv = minetest.get_inventory({type="node", pos=pos}) - - inv:set_stack("input", 1, nil) - - double_chest_add_item(other_inv, inv, "main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, - - on_rightclick = function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 - or minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - - local name = minetest.get_meta(pos_other):get_string("name") - if name == "" then - name = minetest.get_meta(pos):get_string("name") - end - if name == "" then - name = S("Large Chest") - end - - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - - "size[9,11.5]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,3.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,3.5,9,3).. - "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,7.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,7.5,9,3).. - "list[current_player;main;0,10.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,10.75,9,1).. - -- BEGIN OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. - -- END OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]".. - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]") - - if on_rightclick_addendum_right then - on_rightclick_addendum_right(pos, node, clicker) - end - - player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") - end, - mesecons = mesecons, - on_rotate = no_rotate, - }) - - if mod_doc then - doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_left") - doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_right") - end - - -- END OF register_chest FUNCTION BODY -end - -local chestusage = S("To access its inventory, rightclick it. When broken, the items will drop out.") - -register_chest("chest", - S("Chest"), - S("Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other."), - chestusage, - S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest"), - { - small = tiles_chest_normal_small, - double = tiles_chest_normal_double, - inv = {"default_chest_top.png", "mcl_chests_chest_bottom.png", - "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", - "mcl_chests_chest_back.png", "default_chest_front.png"}, - --[[left = {"default_chest_top_big.png", "default_chest_top_big.png", - "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", - "default_chest_side_big.png^[transformFX", "default_chest_front_big.png"}, - right = {"default_chest_top_big.png^[transformFX", "default_chest_top_big.png^[transformFX", - "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", - "default_chest_side_big.png", "default_chest_front_big.png^[transformFX"},]]-- - }, - false -) - -local traptiles = { - small = tiles_chest_trapped_small, - double = tiles_chest_trapped_double, - inv = {"mcl_chests_chest_trapped_top.png", "mcl_chests_chest_trapped_bottom.png", - "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", - "mcl_chests_chest_trapped_back.png", "mcl_chests_chest_trapped_front.png"}, - --[[left = {"mcl_chests_chest_trapped_top_big.png", "mcl_chests_chest_trapped_top_big.png", - "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", - "mcl_chests_chest_trapped_side_big.png^[transformFX", "mcl_chests_chest_trapped_front_big.png"}, - right = {"mcl_chests_chest_trapped_top_big.png^[transformFX", "mcl_chests_chest_trapped_top_big.png^[transformFX", - "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", - "mcl_chests_chest_trapped_side_big.png", "mcl_chests_chest_trapped_front_big.png^[transformFX"},]]-- -} - -register_chest("trapped_chest", - S("Trapped Chest"), - S("A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other."), - chestusage, - S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest") .. "\n" .. S("Emits a redstone signal when opened"), - traptiles, - nil, - {receptor = { - state = mesecon.state.off, - rules = trapped_chest_mesecons_rules, - }}, - function(pos, node, clicker) - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_small") - mesecon.receptor_on(pos, trapped_chest_mesecons_rules) - end, - function(pos, node, clicker) - local meta = minetest.get_meta(pos) - meta:set_int("players", 1) - - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left") - mesecon.receptor_on(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_on_right", param2 = node.param2}) - mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) - end, - function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_right", param2 = node.param2}) - mesecon.receptor_on(pos, trapped_chest_mesecons_rules) - - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_on_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left") - mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) - end -) - -register_chest("trapped_chest_on", - nil, nil, nil, nil, traptiles, true, - {receptor = { - state = mesecon.state.on, - rules = trapped_chest_mesecons_rules, - }}, - nil, nil, nil, - "trapped_chest", - "trapped_chest" -) - ---[[local function close_if_trapped_chest(pos, player) - local node = minetest.get_node(pos) - - if node.name == "mcl_chests:trapped_chest_on_small" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - player_chest_close(player) - elseif node.name == "mcl_chests:trapped_chest_on_left" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - - player_chest_close(player) - elseif node.name == "mcl_chests:trapped_chest_on_right" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - - player_chest_close(player) - end -end]] - --- Disable chest when it has been closed -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname:find("mcl_chests:") == 1 then - if fields.quit then - player_chest_close(player) - end - end -end) - -minetest.register_on_leaveplayer(function(player) - player_chest_close(player) -end) - -minetest.register_craft({ - output = "mcl_chests:chest", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_chests:chest", - burntime = 15 -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_chests:trapped_chest", - burntime = 15 -}) - -minetest.register_node("mcl_chests:ender_chest", { - description = S("Ender Chest"), - _tt_help = S("27 interdimensional inventory slots") .. "\n" .. S("Put items inside, retrieve them from any ender chest"), - _doc_items_longdesc = S("Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players."), - _doc_items_usagehelp = S("Rightclick the ender chest to access your personal interdimensional inventory."), - drawtype = "mesh", - mesh = "mcl_chests_chest.obj", - tiles = tiles_chest_ender_small, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - groups = {deco_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_construct = function(pos, node) - local node = minetest.get_node(pos) - node.name = "mcl_chests:ender_chest_small" - minetest.set_node(pos, node) - end, -}) - -local formspec_ender_chest = "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Ender Chest"))).."]".. - "list[current_player;enderchest;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "listring[current_player;enderchest]".. - "listring[current_player;main]" - - -minetest.register_node("mcl_chests:ender_chest_small", { - description = S("Ender Chest"), - _tt_help = S("27 interdimensional inventory slots") .. "\n" .. S("Put items inside, retrieve them from any ender chest"), - _doc_items_longdesc = S("Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players."), - _doc_items_usagehelp = S("Rightclick the ender chest to access your personal interdimensional inventory."), - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, - }, - _chest_entity_textures = {"mcl_chests_ender.png"}, - _chest_entity_sound = "mcl_chests_enderchest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - --[[{"mcl_chests_ender_chest_top.png", "mcl_chests_ender_chest_bottom.png", - "mcl_chests_ender_chest_right.png", "mcl_chests_ender_chest_left.png", - "mcl_chests_ender_chest_back.png", "mcl_chests_ender_chest_front.png"},]]-- - -- Note: The “container” group is missing here because the ender chest does not - -- have an inventory on its own - groups = {pickaxey=1, deco_block=1, material_stone=1, chest_entity=1, not_in_creative_inventory=1}, - is_ground_content = false, - paramtype = "light", - light_source = 7, - paramtype2 = "facedir", - sounds = mcl_sounds.node_sound_stone_defaults(), - drop = "mcl_core:obsidian 8", - on_construct = function(pos) - create_entity(pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest", "chest") - end, - on_rightclick = function(pos, node, clicker) - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - minetest.show_formspec(clicker:get_player_name(), "mcl_chests:ender_chest_"..clicker:get_player_name(), formspec_ender_chest) - player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, node.param2, false, "mcl_chests_enderchest", "mcl_chests_chest") - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.quit then - player_chest_close(sender) - end - end, - _mcl_blast_resistance = 3000, - _mcl_hardness = 22.5, - _mcl_silk_touch_drop = {"mcl_chests:ender_chest"}, - on_rotate = simple_rotate, -}) - -minetest.register_on_joinplayer(function(player) - local inv = player:get_inventory() - inv:set_size("enderchest", 9*3) -end) - -minetest.register_allow_player_inventory_action(function(player, action, inv, info) - if inv:get_location().type == "player" and ( - action == "move" and (info.from_list == "enderchest" or info.to_list == "enderchest") - or action == "put" and info.listname == "enderchest" - or action == "take" and info.listname == "enderchest" - ) then - local def = player:get_wielded_item():get_definition() - - if not minetest.find_node_near(player:get_pos(), def and def.range or ItemStack():get_definition().range, "mcl_chests:ender_chest_small", true) then - return 0 - end - end -end) - -minetest.register_craft({ - output = "mcl_chests:ender_chest", - recipe = { - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, - {"mcl_core:obsidian", "mcl_end:ender_eye", "mcl_core:obsidian"}, - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, - } -}) - --- Shulker boxes -local boxtypes = { - white = S("White Shulker Box"), - grey = S("Light Grey Shulker Box"), - orange = S("Orange Shulker Box"), - cyan = S("Cyan Shulker Box"), - magenta = S("Magenta Shulker Box"), - violet = S("Purple Shulker Box"), - lightblue = S("Light Blue Shulker Box"), - blue = S("Blue Shulker Box"), - yellow = S("Yellow Shulker Box"), - brown = S("Brown Shulker Box"), - green = S("Lime Shulker Box"), - dark_green = S("Green Shulker Box"), - pink = S("Pink Shulker Box"), - red = S("Red Shulker Box"), - dark_grey = S("Grey Shulker Box"), - black = S("Black Shulker Box"), -} - -local shulker_mob_textures = { - white = "mobs_mc_shulker_white.png", - grey = "mobs_mc_shulker_silver.png", - orange = "mobs_mc_shulker_orange.png", - cyan = "mobs_mc_shulker_cyan.png", - magenta = "mobs_mc_shulker_magenta.png", - violet = "mobs_mc_shulker_purple.png", - lightblue = "mobs_mc_shulker_light_blue.png", - blue = "mobs_mc_shulker_blue.png", - yellow = "mobs_mc_shulker_yellow.png", - brown = "mobs_mc_shulker_brown.png", - green = "mobs_mc_shulker_lime.png", - dark_green = "mobs_mc_shulker_green.png", - pink = "mobs_mc_shulker_pink.png", - red = "mobs_mc_shulker_red.png", - dark_grey = "mobs_mc_shulker_gray.png", - black = "mobs_mc_shulker_black.png", -} -local canonical_shulker_color = "violet" - -local function formspec_shulker_box(name) - if name == "" then - name = S("Shulker Box") - end - return "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[context;main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "listring[context;main]".. - "listring[current_player;main]" -end - -local function set_shulkerbox_meta(nmeta, imeta) - local name = imeta:get_string("name") - nmeta:set_string("description", imeta:get_string("description")) - nmeta:set_string("name", name) - nmeta:set_string("formspec", formspec_shulker_box(name)) -end - -for color, desc in pairs(boxtypes) do - local mob_texture = shulker_mob_textures[color] - local is_canonical = color == canonical_shulker_color - local longdesc, usagehelp, create_entry, entry_name - if mod_doc then - if is_canonical then - longdesc = S("A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.") - usagehelp = S("To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.") - entry_name = S("Shulker Box") - else - create_entry = false - end - end - - local small_name = "mcl_chests:"..color.."_shulker_box_small" - - minetest.register_node("mcl_chests:"..color.."_shulker_box", { - description = desc, - _tt_help = S("27 inventory slots") .. "\n" .. S("Can be carried around with its contents"), - _doc_items_create_entry = create_entry, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - tiles = {mob_texture}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - drawtype = "mesh", - mesh = "mcl_chests_shulker.obj", - --[["mcl_chests_"..color.."_shulker_box_top.png", -- top - "[combine:16x16:-32,-28="..mob_texture, -- bottom - "[combine:16x16:0,-36="..mob_texture..":0,-16="..mob_texture, -- side - "[combine:16x16:-32,-36="..mob_texture..":-32,-16="..mob_texture, -- side - "[combine:16x16:-16,-36="..mob_texture..":-16,-16="..mob_texture, -- side - "[combine:16x16:-48,-36="..mob_texture..":-48,-16="..mob_texture, -- side]]-- - groups = {handy=1,pickaxey=1, container=3, deco_block=1, dig_by_piston=1, shulker_box=1, old_shulker_box_node=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - stack_max = 1, - drop = "", - paramtype = "light", - paramtype2 = "facedir", - on_construct = function(pos) - local node = minetest.get_node(pos) - node.name = small_name - minetest.set_node(pos, node) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - local nmeta = minetest.get_meta(pos) - local imetadata = itemstack:get_metadata() - local iinv_main = minetest.deserialize(imetadata) - local ninv = nmeta:get_inventory() - ninv:set_list("main", iinv_main) - ninv:set_size("main", 9*3) - set_shulkerbox_meta(nmeta, itemstack:get_meta()) - - if minetest.is_creative_enabled(placer:get_player_name()) then - if not ninv:is_empty("main") then - return nil - else - return itemstack - end - else - return nil - end - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Place shulker box as node - if minetest.registered_nodes[dropnode.name].buildable_to then - minetest.set_node(droppos, {name = small_name, param2 = minetest.dir_to_facedir(dropdir)}) - local ninv = minetest.get_inventory({type="node", pos=droppos}) - local imetadata = stack:get_metadata() - local iinv_main = minetest.deserialize(imetadata) - ninv:set_list("main", iinv_main) - ninv:set_size("main", 9*3) - set_shulkerbox_meta(minetest.get_meta(droppos), stack:get_meta()) - stack:take_item() - end - return stack - end, - }) - - minetest.register_node(small_name, { - description = desc, - _tt_help = S("27 inventory slots") .. "\n" .. S("Can be carried around with its contents"), - _doc_items_create_entry = create_entry, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - _chest_entity_textures = {mob_texture}, - _chest_entity_sound = "mcl_chests_shulker", - _chest_entity_mesh = "mcl_chests_shulker", - _chest_entity_animation_type = "shulker", - groups = {handy=1,pickaxey=1, container=3, deco_block=1, dig_by_piston=1, shulker_box=1, chest_entity=1, not_in_creative_inventory=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - stack_max = 1, - drop = "", - paramtype = "light", - paramtype2 = "facedir", --- TODO: Make shulker boxes rotatable --- This doesn't work, it just destroys the inventory: --- on_place = minetest.rotate_node, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_shulker_box(nil)) - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - create_entity(pos, small_name, {mob_texture}, minetest.get_node(pos).param2, false, "mcl_chests_shulker", "mcl_chests_shulker", "shulker") - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - local nmeta = minetest.get_meta(pos) - local imetadata = itemstack:get_metadata() - local iinv_main = minetest.deserialize(imetadata) - local ninv = nmeta:get_inventory() - ninv:set_list("main", iinv_main) - ninv:set_size("main", 9*3) - set_shulkerbox_meta(nmeta, itemstack:get_meta()) - - if minetest.is_creative_enabled(placer:get_player_name()) then - if not ninv:is_empty("main") then - return nil - else - return itemstack - end - else - return nil - end - end, - on_rightclick = function(pos, node, clicker) - player_chest_open(clicker, pos, small_name, {mob_texture}, node.param2, false, "mcl_chests_shulker", "mcl_chests_shulker", true) - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.quit then - player_chest_close(sender) - end - end, - on_destruct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local items = {} - for i=1, inv:get_size("main") do - local stack = inv:get_stack("main", i) - items[i] = stack:to_string() - end - local data = minetest.serialize(items) - local boxitem = ItemStack("mcl_chests:"..color.."_shulker_box") - local boxitem_meta = boxitem:get_meta() - boxitem_meta:set_string("description", meta:get_string("description")) - boxitem_meta:set_string("name", meta:get_string("name")) - boxitem:set_metadata(data) - - if minetest.is_creative_enabled("") then - if not inv:is_empty("main") then - minetest.add_item(pos, boxitem) - end - else - minetest.add_item(pos, boxitem) - end - end, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - -- Do not allow to place shulker boxes into shulker boxes - local group = minetest.get_item_group(stack:get_name(), "shulker_box") - if group == 0 or group == nil then - return stack:get_count() - else - return 0 - end - end, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, - }) - - if mod_doc and not is_canonical then - doc.add_entry_alias("nodes", "mcl_chests:"..canonical_shulker_color.."_shulker_box", "nodes", "mcl_chests:"..color.."_shulker_box") - doc.add_entry_alias("nodes", "mcl_chests:"..canonical_shulker_color.."_shulker_box_small", "nodes", "mcl_chests:"..color.."_shulker_box_small") - end - - minetest.register_craft({ - type = "shapeless", - output = "mcl_chests:"..color.."_shulker_box", - recipe = { "group:shulker_box", "mcl_dye:"..color } - }) -end - -minetest.register_craft({ - output = "mcl_chests:violet_shulker_box", - recipe = { - {"mcl_mobitems:shulker_shell"}, - {"mcl_chests:chest"}, - {"mcl_mobitems:shulker_shell"}, - } -}) - --- Save metadata of shulker box when used in crafting -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if minetest.get_item_group(itemstack:get_name(), "shulker_box") ~= 1 then - return - end - local original - for i = 1, #old_craft_grid do - local item = old_craft_grid[i]:get_name() - if minetest.get_item_group(item, "shulker_box") == 1 then - original = old_craft_grid[i] - break - end - end - if original then - local ometa = original:get_meta():to_table() - local nmeta = itemstack:get_meta() - nmeta:from_table(ometa) - return itemstack - end -end) - -local function select_and_spawn_entity(pos, node) - local node_name = node.name - local node_def = minetest.registered_nodes[node_name] - local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 - find_or_create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh, node_def._chest_entity_animation_type) -end - -minetest.register_lbm({ - label = "Spawn Chest entities", - name = "mcl_chests:spawn_chest_entities", - nodenames = {"group:chest_entity"}, - run_at_every_load = true, - action = select_and_spawn_entity, -}) - -minetest.register_lbm({ - label = "Replace old chest nodes", - name = "mcl_chests:replace_old", - nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on", "mcl_chests:ender_chest", "group:old_shulker_box_node"}, - run_at_every_load = true, - action = function(pos, node) - local node_name = node.name - node.name = node_name .. "_small" - minetest.swap_node(pos, node) - select_and_spawn_entity(pos, node) - if node_name == "mcl_chests:trapped_chest_on" then - minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) - chest_update_after_close(pos) - elseif node_name == "mcl_chests:ender_chest" then - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_ender_chest) - end - end -}) - -minetest.register_lbm({ - -- Disable active/open trapped chests when loaded because nobody could - -- have them open at loading time. - -- Fixes redstone weirdness. - label = "Disable active trapped chests", - name = "mcl_chests:reset_trapped_chests", - nodenames = { "mcl_chests:trapped_chest_on_small", "mcl_chests:trapped_chest_on_left", "mcl_chests:trapped_chest_on_right" }, - run_at_every_load = true, - action = function(pos, node) - minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) - chest_update_after_close(pos) - end, -}) - -minetest.register_lbm({ - label = "Update shulker box formspecs (0.60.0)", - name = "mcl_chests:update_shulker_box_formspecs_0_60_0", - nodenames = { "group:shulker_box" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_shulker_box) - end, -}) - -minetest.register_lbm({ - label = "Upgrade old ender chest formspec", - name = "mcl_chests:replace_old_ender_form", - nodenames = {"mcl_chests:ender_chest_small"}, - run_at_every_load = false, - action = function(pos, node) - minetest.get_meta(pos):set_string("formspec", "") - end, -}) diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.de.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.de.tr deleted file mode 100644 index b4ef79690..000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.de.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Truhe -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Truhen sind Behälter, die 27 Inventarplätze Platz bieten. Truhen verwandeln sich in große Truhen mit der doppelten Kapazität, wenn zwei Truhen nebeneinander platziert werden. -To access its inventory, rightclick it. When broken, the items will drop out.=Um auf das Inventar zuzugreifen, rechtsklicken Sie darauf. Wenn abgebaut, wird der Inhalt hinausfallen. -Trapped Chest=Mechanismustruhe -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Mechanismustruhen sind Behälter, die 27 Inventarplätze Platz bieten. Wenn sie geöffnet wird, sendet sie ein Redstone-Signal zu benachbarten Blöcken, solange sie geöffnet bleibt. Mechanismustruhen verwandeln sich in große Mechanismustruhen mit der doppelten Kapazität, wenn zwei Mechanismustruhen nebeneinander platziert werden. -Ender Chest=Endertruhe -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Endertruhen gewähren Ihnen Zugriff zu einem einzigartigen persönlichen interdimensionalen Inventar mit 27 Plätzen. Dieses Inventar ist das selbe, egal, welche Endertruhe sie benutzen. Wenn Sie einen Gegenstand in eine Endertruhe platzieren, werden Sie sie in allen anderen Endertruhen vorhinden. Jeder Spieler wird nur seine eigenen Gegenstände sehen, aber nicht die der anderen Spieler. -Rightclick the ender chest to access your personal interdimensional inventory.=Rechtsklicken Sie die Endertruhe, um auf Ihr persönliches interdimensionales Inventar zuzugreifen. -White Shulker Box=Weiße Schulkerkiste -Light Grey Shulker Box=Hellgraue Schulkerkiste -Orange Shulker Box=Orange Schulkerkiste -Cyan Shulker Box=Türkise Schulkerkiste -Magenta Shulker Box=Magenta Schulkerkiste -Purple Shulker Box=Violette Schulkerkiste -Light Blue Shulker Box=Hellblaue Schulkerkiste -Blue Shulker Box=Blaue Schulkerkiste -Yellow Shulker Box=Gelbe Schulkerkiste -Brown Shulker Box=Braune Schulkerkiste -Lime Shulker Box=Lindgrüne Schulkerkiste -Green Shulker Box=Grüne Schulkerkiste -Pink Shulker Box=Rosa Schulkerkiste -Red Shulker Box=Rote Schulkerkiste -Grey Shulker Box=Graue Schulkerkiste -Black Shulker Box=Schwarze Schulkerkiste -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Eine Schulkerkiste ist ein tragbarer Behälter, der 27 Inventarplätze für alle Gegenstände außer Schulkerkisten bietet. Schulkerkisten behalten ihr Inventar, wenn sie abgebaut werden, also können Schulkerkisten so wie ihr Inhalt als einzelne Gegenstände mitgenommen werden. Schulkerkisten gibt es in vielen verschiedenen Farben. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.=Um auf das Inventar einer Schulkerkiste zuzugreifen, platzieren Sie sie und rechtsklicken sie auf ihr. Um eine Schulkerkiste und ihren Inhalt mitzunehmen, bauen Sie sie einfach ab und sammeln Sie sie auf, der Inhalt will nicht hinausfallen. -Shulker Box=Schulkerkiste -Large Chest=Große Truhe -Inventory=Inventar -27 inventory slots=27 Inventarplätze -Can be carried around with its contents=Kann mitsamt Inhalt transportiert werden -Can be combined to a large chest=Kann zu einer großen Truhe kombiniert werden -27 interdimensional inventory slots=27 interdimensionale Inventarplätze -Put items inside, retrieve them from any ender chest=Abgelegte Gegenstände können aus beliebigen Endertruhen genommen werden -Emits a redstone signal when opened=Sendet ein Redstonesignal beim Öffnen diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.es.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.es.tr deleted file mode 100644 index 9d44bacca..000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.es.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mcl_chests -Chest=Cofre -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Los cofres son contenedores que proporcionan 27 ranuras de inventario. Los cofres se pueden convertir en cofres grandes con el doble de capacidad colocando dos cofres uno al lado del otro. -To access its inventory, rightclick it. When broken, the items will drop out.=Para acceder a su inventario, haga clic derecho. Cuando se rompen, los artículos se caerán. -Trapped Chest=Cofre trampa -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Un sofre trampa es un contenedor que proporciona 27 ranuras de inventario. Cuando se abre, envía una señal de redstone a sus bloques adyacentes siempre que permanezca abierto. Los cofres trampa se pueden convertir en grandes cofres trampa con el doble de capacidad colocando dos cofres atrapados uno al lado del otro. -Ender Chest=Cofre de ender -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Los cofres Ender le otorgan acceso a un único inventario interdimensional personal con 27 ranuras. Este inventario es el mismo sin importar desde qué cofre de acceso accedas. Si pones un elemento en un cofre de ender, lo encontrarás en todos los demás cofres de ender. Cada jugador solo verá sus propios artículos, pero no los artículos de otros jugadores. -Rightclick the ender chest to access your personal interdimensional inventory.=Haga clic derecho en el cofre ender para acceder a su inventario interdimensional personal. -White Shulker Box=Caja de shulker Blanca -Light Grey Shulker Box=Caja de shulker gris claro -Orange Shulker Box=Caja de shulker naranja -Cyan Shulker Box=Caja de shulker cian -Magenta Shulker Box=Caja de shulker magenta -Purple Shulker Box=Caja de shulker morada -Light Blue Shulker Box=Caja de shulker azul claro -Blue Shulker Box=Caja de shulker azul -Yellow Shulker Box=Caja de shulker amarilla -Brown Shulker Box=Caja de shulker marrón -Lime Shulker Box=Caja de shulker verde lima -Green Shulker Box=Caja de shulker verde -Pink Shulker Box=Caja de shulker rosa -Red Shulker Box=Caja de shulker roja -Grey Shulker Box=Caja de shulker gris -Black Shulker Box=Caja de shulker negra -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Una caja de shulker es un contenedor portátil que proporciona 27 ranuras de inventario para cualquier artículo, excepto las cajas shulker. Las cajas de shulker mantienen su inventario cuando están rotas, por lo que las cajas de shulker y sus contenidos se pueden tomar como un solo artículo. Las cajas shulker vienen en muchos colores diferentes. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.=Para acceder al inventario de un cuadro de shulker, colóquelo y haga clic con el botón derecho. Para llevar una caja de shulker y su contenido, solo rómpela y recójala, los artículos no se caerán. -Shulker Box=Caja de shulker -Large Chest=Arcón -Inventory=Inventario diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.fr.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.fr.tr deleted file mode 100644 index b84dac022..000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.fr.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Coffre -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Les coffres sont des conteneurs qui offrent 27 emplacements d'inventaire. Les coffres peuvent être transformés en grands coffres avec une capacité double en plaçant deux coffres l'un à côté de l'autre. -To access its inventory, rightclick it. When broken, the items will drop out.=Pour accéder à son inventaire, faites un clic droit dessus. Une fois cassés, les articles tomberont. -Trapped Chest=Coffre Piégé -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Un coffre piégé est un conteneur qui fournit 27 emplacements d'inventaire. Lorsqu'il est ouvert, il envoie un signal redstone à ses blocs adjacents tant qu'il reste ouvert. Les coffres piégés peuvent être transformés en grands coffres piégés avec une capacité double en plaçant deux coffres piégés l'un à côté de l'autre. -Ender Chest=Coffre Ender -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Les coffres Ender vous donnent accès à un seul inventaire interdimensionnel personnel avec 27 emplacements. Cet inventaire est le même quel que soit le coffre d'ender d'où vous y accédez. Si vous placez un objet dans un coffre d'ender, vous le trouverez dans tous les autres coffres d'ender. Chaque joueur ne verra que ses propres objets, mais pas ceux des autres joueurs. -Rightclick the ender chest to access your personal interdimensional inventory.=Faites un clic droit sur le coffre d'ender pour accéder à votre inventaire interdimensionnel personnel. -White Shulker Box=Boîte de Shulter Blanche -Light Grey Shulker Box=Boîte de Shulter Gris Clair -Orange Shulker Box=Boîte de Shulter Orange -Cyan Shulker Box=Boîte de Shulter Cyan -Magenta Shulker Box=Boîte de Shulter Magenta -Purple Shulker Box=Boîte de Shulter Violette -Light Blue Shulker Box=Boîte de Shulter Bleu Clair -Blue Shulker Box=Boîte de Shulter Bleue -Yellow Shulker Box=Boîte de Shulter Jaune -Brown Shulker Box=Boîte de Shulter Marron -Lime Shulker Box=Boîte de Shulter Vert Clair -Green Shulker Box=Boîte de Shulter Verte -Pink Shulker Box=Boîte de Shulter Rose -Red Shulker Box=Boîte de Shulter Rouge -Grey Shulker Box=Boîte de Shulter Grise -Black Shulker Box=Boîte de Shulter Noire -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Une boîte shulker est un conteneur portable qui fournit 27 emplacements d'inventaire pour tout article, à l'exception des boîtes shulker. Les boîtes Shulker conservent leur inventaire lorsqu'elles sont brisées, de sorte que les boîtes Shulker ainsi que leur contenu peuvent être considérés comme un seul élément. Les boîtes Shulker sont disponibles dans de nombreuses couleurs différentes. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.=Pour accéder à l'inventaire d'une boîte shulker, placez-la et cliquez dessus avec le bouton droit. Pour emporter une boîte shulker et son contenu, il suffit de la casser et de la récupérer, les objets ne tomberont pas. Replacez la boîte shulker pour pouvoir récupérer son contenu. -Shulker Box=Boîte de Shulter -Large Chest=Coffre Large -Inventory=Inventaire -27 inventory slots=27 emplacements d'inventaire -Can be carried around with its contents=Peut être transporté avec son contenu -Can be combined to a large chest=Peut être combiné à un grand coffre -27 interdimensional inventory slots=27 emplacements d'inventaire interdimensionnels -Put items inside, retrieve them from any ender chest=Mettez des objets à l'intérieur, récupérez-les dans n'importe quel coffre -Emits a redstone signal when opened=Émet un signal redstone à l'ouverture diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr deleted file mode 100644 index b4eee74eb..000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Skrzynia -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Skrzynie to pojemniki zawierające 27 miejsc ekwipunku. Skrzynie można zmienić w wielkie skrzynie z podwojoną pojemnością kładąc dwie skrzynie jedna obok drugiej. -To access its inventory, rightclick it. When broken, the items will drop out.=Aby zarządzać jej ekwipunkiem kliknij prawym przyciskiem. Po zniszczeniu przedmioty z niej wypadną. -Trapped Chest=Skrzynia-pułapka -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Skrzynia pułapka jest pojemnikiem zawierającym 27 miejsc ekwipunku. Gdy jest otwarta wysyła ona zasila czerwienit na sąsiadujących blokach tak długo jak jest otwarta. Skrzynie-pułapki można zmienić w wielkie skrzynie-pułapki z podwojoną pojemnością przez położenie dwóch skrzynek-pułapek jedna obok drugiej. -Ender Chest=Skrzynia kresu -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Skrzynie kresu dają dostęp do pojedynczego, osobistego, międzywymiarowego ekwipunku z 27 miejscami. Ten ekwipunek będzie zawierał to samo niezależnie od skrzyni kresu z której nim zarządzasz. Jeśli włożysz przedmiot do jednej skrzyni kresu, znajdziesz go we wszystkich innych. każdy gracz będzie widział tylko swoje przedmioty, a nie innych graczy. -Rightclick the ender chest to access your personal interdimensional inventory.=Kliknij prawym w skrzynię kresu aby mieć dostęp do twojego osobistego, międzywymiarowego ekwipunku. -White Shulker Box=Biała shulkerowa skrzynia -Light Grey Shulker Box=Jasnoszara shulkerowa skrzynia -Orange Shulker Box=Pomarańczowa shulkerowa skrzynia -Cyan Shulker Box=Błękitna shulkerowa skrzynia -Magenta Shulker Box=Karmazynowa shulkerowa skrzynia -Purple Shulker Box=Fioletowa shulkerowa skrzynia -Light Blue Shulker Box=Jasnoniebieska shulkerowa skrzynia -Blue Shulker Box=Niebieska shulkerowa skrzynia -Yellow Shulker Box=Żółta shulkerowa skrzynia -Brown Shulker Box=Brązowa shulkerowa skrzynia -Lime Shulker Box=Jasnozielona shulkerowa skrzynia -Green Shulker Box=Zielona shulkerowa skrzynia -Pink Shulker Box=Różowa shulkerowa skrzynia -Red Shulker Box=Czerwona shulkerowa skrzynia -Grey Shulker Box=Szara shulkerowa skrzynia -Black Shulker Box=Czarna shulkerowa skrzynia -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Shulkerowe skrzynie to przenośny pojemnik udostępniający 27 miejsc ekwipunku na dowolny przedmiot z wyjątkiem shulkerowych skrzyń. Shulkerowe skrzynie nie tracą swojego ekwipunku po zniszczeniu, więc te skrzynie razem z całą zawartością mogą być przechowywane jako pojedynczy przedmiot. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.=Aby dostać się do przedmiotów w shulkerowej skrzyni postaw ją i naciśnij ją prawym. Aby wziąć shulkerową skrzynię i jej zawartość ze sobą, zniszcz ją i zbierz, przedmioty nie wypadną. -Shulker Box=Shulkerowa skrzynia -Large Chest=Duża skrzynia -Inventory=Ekwipunek -27 inventory slots=27 miejsc ekwipunku -Can be carried around with its contents=Może być przenoszona razem z zawartością -Can be combined to a large chest=Może być połączona w dużą skrzynię -27 interdimensional inventory slots=27 międzywymiarowych miejsc ekwipunku -Put items inside, retrieve them from any ender chest=Włóż do niej przedmioty, miej do nich dostęp z dowolnej skrzyni kresu -Emits a redstone signal when opened=Aktywuje pobliski czerwienit gdy otwarta diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.ru.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.ru.tr deleted file mode 100644 index dc25458c2..000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.ru.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Сундук -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Сундуки это хранилища, предоставляющие 27 отсеков инвентаря. Сундук можно превратить в большой сундук, удвоив его вместительность, для этого нужно поставить ещё один сундук рядом с уже имеющимся. -To access its inventory, rightclick it. When broken, the items will drop out.=Чтобы получить доступ к инвентарю, кликните по сундуку правой клавишей. Если сломать сундук, то он превратится в носимый предмет. -Trapped Chest=Сундук-ловушка -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Сундук-ловушка - это хранилище, предоставляющее 27 отсеков инвентаря. При открытии он посылает сигнал редстоуна соседним блокам всё время, пока остается открытым. Сундук-ловушку можно превратить в большой сундук-ловушку, удвоив его вместительность, для этого нужно поставить ещё один сундук-ловушку рядом с уже имеющимся. -Ender Chest=Сундук Предела -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Сундук Предела предоставляет вам доступ к одиночному персональному межпространственному инвентарю из 27 отсеков. Этот инвентарь остаётся прежним, неважно какой из сундуков Предела вы используете для доступа к нему. Если вы положите предмет в сундук Предела, вы обнаружите его во всех остальных сундуках Предела. Каждый игрок видит только свои собственные предметы и не видит предметы остальных игроков. -Rightclick the ender chest to access your personal interdimensional inventory.=Кликните правой по сундуку Предела, чтобы получить доступ к вашему персональному межпространственному инвентарю. -White Shulker Box=Белый ящик шалкера -Light Grey Shulker Box=Светло-серый ящик шалкера -Orange Shulker Box=Оранжевый ящик шалкера -Cyan Shulker Box=Голубой ящик шалкера -Magenta Shulker Box=Фиолетовый ящик шалкера -Purple Shulker Box=Пурпурный ящик шалкера -Light Blue Shulker Box=Светло-голубой ящик шалкера -Blue Shulker Box=Синий ящик шалкера -Yellow Shulker Box=Жёлтый ящик шалкера -Brown Shulker Box=Коричневый ящик шалкера -Lime Shulker Box=Зелёный лаймовый ящик шалкера -Green Shulker Box=Зелёный ящик шалкера -Pink Shulker Box=Розовый ящик шалкера -Red Shulker Box=Красный ящик шалкера -Grey Shulker Box=Серый ящик шалкера -Black Shulker Box=Чёрный ящик шалкера -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Ящик шалкера это переносное хранилище, предоставляющее 27 отсеков инвентаря для любых предметов, за исключением ящиков шалкера. Ящики шалкера сохраняют в себе инвентарь, если их сломать, так что их вместе со всем инвентарём можно переносить как один предмет. Ящики шалкера могут быть разных цветов. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.=Чтобы получить доступ к инвентарю ящика шалкера, поставьте его куда-нибудь и кликните по нему правой клавишей. Чтобы взять с собой ящик шалкера со всем его содержимым, просто сломайте его, а потом подберите, ни один предмет из него не выпадет. Чтобы вновь получить доступ к содержимому, его надо снова поставить. -Shulker Box=Ящик шалкера -Large Chest=Большой сундук -Inventory=Инвентарь -27 inventory slots=27 отсеков инвентаря -Can be carried around with its contents=Можно переносить вместе со всем содержимым -Can be combined to a large chest=Можно объединить в большой сундук -27 interdimensional inventory slots=27 межпространственных отсеков инвентаря -Put items inside, retrieve them from any ender chest=Положите внутрь предмет и получите его из любого сундука Предела -Emits a redstone signal when opened=Подаёт сигнал редстоуна, будучи открытым diff --git a/mods/ITEMS/mcl_chests/locale/template.txt b/mods/ITEMS/mcl_chests/locale/template.txt deleted file mode 100644 index d680c24c9..000000000 --- a/mods/ITEMS/mcl_chests/locale/template.txt +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest= -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.= -To access its inventory, rightclick it. When broken, the items will drop out.= -Trapped Chest= -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.= -Ender Chest= -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.= -Rightclick the ender chest to access your personal interdimensional inventory.= -White Shulker Box= -Light Grey Shulker Box= -Orange Shulker Box= -Cyan Shulker Box= -Magenta Shulker Box= -Purple Shulker Box= -Light Blue Shulker Box= -Blue Shulker Box= -Yellow Shulker Box= -Brown Shulker Box= -Lime Shulker Box= -Green Shulker Box= -Pink Shulker Box= -Red Shulker Box= -Grey Shulker Box= -Black Shulker Box= -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.= -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.= -Shulker Box= -Large Chest= -Inventory= -27 inventory slots= -Can be carried around with its contents= -Can be combined to a large chest= -27 interdimensional inventory slots= -Put items inside, retrieve them from any ender chest= -Emits a redstone signal when opened= diff --git a/mods/ITEMS/mcl_chests/mod.conf b/mods/ITEMS/mcl_chests/mod.conf deleted file mode 100644 index 0ff5129ca..000000000 --- a/mods/ITEMS/mcl_chests/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_chests -depends = mcl_init, mcl_formspec, mcl_core, mcl_sounds, mcl_end, mesecons -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d deleted file mode 100644 index e82c7e363..000000000 Binary files a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj b/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj deleted file mode 100644 index 36268146f..000000000 --- a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj +++ /dev/null @@ -1,91 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'chest.small.facedir.blend' -# www.blender.org -mtllib chest.small.facedir.mtl -o chest_upper_upper -v 0.062513 -0.063134 -0.500468 -v 0.062513 0.186920 -0.500468 -v 0.062514 -0.063134 -0.437955 -v 0.062514 0.186920 -0.437955 -v -0.062514 -0.063134 -0.500468 -v -0.062514 0.186920 -0.500468 -v -0.062514 -0.063134 -0.437955 -v -0.062514 0.186920 -0.437955 -v 0.437907 0.061263 -0.438085 -v 0.437907 0.373830 -0.438085 -v 0.437907 0.061263 0.437729 -v 0.437907 0.373830 0.437729 -v -0.437907 0.061263 -0.438085 -v -0.437907 0.373830 -0.438085 -v -0.437907 0.061263 0.437729 -v -0.437907 0.373830 0.437729 -v 0.437595 -0.500754 -0.437772 -v 0.437595 0.124381 -0.437772 -v 0.437595 -0.500754 0.437417 -v 0.437595 0.124381 0.437417 -v -0.437595 -0.500754 -0.437772 -v -0.437595 0.124381 -0.437772 -v -0.437595 -0.500754 0.437417 -v -0.437595 0.124381 0.437417 -vt 0.015625 0.921875 -vt 0.015625 0.984375 -vt 0.000000 0.984375 -vt 0.000000 0.921875 -vt 0.093750 0.921875 -vt 0.093750 0.984375 -vt 0.062500 0.984375 -vt 0.062500 0.921875 -vt 0.046875 0.984375 -vt 0.046875 0.921875 -vt 0.078125 0.984375 -vt 0.078125 1.000000 -vt 0.046875 1.000000 -vt 0.015625 1.000000 -vt 0.218750 0.703125 -vt 0.218750 0.781250 -vt 0.000000 0.781250 -vt 0.000000 0.703125 -vt 0.875000 0.703125 -vt 0.875000 0.781250 -vt 0.656250 0.781250 -vt 0.656250 0.703125 -vt 0.437500 0.781250 -vt 0.437500 0.703125 -vt 0.656250 1.000000 -vt 0.437500 1.000000 -vt 0.218750 1.000000 -vt 0.218750 0.328125 -vt 0.218750 0.484375 -vt -0.000000 0.484375 -vt -0.000000 0.328125 -vt 0.875000 0.328125 -vt 0.875000 0.484375 -vt 0.656250 0.484375 -vt 0.656250 0.328125 -vt 0.437500 0.484375 -vt 0.437500 0.328125 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/9/5 7/11/5 5/12/5 1/13/5 -f 8/13/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/25/5 15/26/5 13/23/5 9/21/5 -f 16/26/6 12/27/6 10/16/6 14/23/6 -f 17/28/1 18/29/1 20/30/1 19/31/1 -f 19/32/2 20/33/2 24/34/2 23/35/2 -f 23/35/3 24/34/3 22/36/3 21/37/3 -f 21/37/4 22/36/4 18/29/4 17/28/4 -f 19/22/5 23/24/5 21/36/5 17/34/5 -f 24/24/6 20/15/6 18/29/6 22/36/6 diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d deleted file mode 100644 index 8d79b8ff7..000000000 Binary files a/mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d deleted file mode 100644 index 2592f86a0..000000000 Binary files a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj deleted file mode 100644 index ca12b682e..000000000 --- a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj +++ /dev/null @@ -1,159 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: 'shulkerbox2.blend' -# www.blender.org -mtllib shulkerbox2.mtl -o low1_Cube.006 -v -0.500000 -0.500001 0.500000 -v -0.500000 0.062499 0.500000 -v -0.500000 -0.500001 -0.500000 -v -0.500000 0.062499 -0.500000 -v 0.500000 -0.500001 0.500000 -v 0.500000 0.062499 0.500000 -v 0.500000 -0.500001 -0.500000 -v 0.500000 0.062499 -0.500000 -vt 0.250000 0.187500 -vt -0.000000 0.187500 -vt -0.000000 0.312500 -vt 0.250000 0.312500 -vt 1.000000 0.187500 -vt 0.750000 0.187500 -vt 0.750000 0.312500 -vt 1.000000 0.312500 -vt 0.500000 0.187500 -vt 0.500000 0.312500 -vt 0.750000 0.562500 -vt 0.750000 0.312500 -vt 0.500000 0.312500 -vt 0.500000 0.562500 -vt 0.500000 0.562500 -vt 0.250000 0.562500 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -usemtl None -s off -f 1/1/1 3/2/1 4/3/1 2/4/1 -f 3/5/2 7/6/2 8/7/2 4/8/2 -f 7/6/3 5/9/3 6/10/3 8/7/3 -f 5/9/4 1/1/4 2/4/4 6/10/4 -f 3/11/5 1/12/5 5/13/5 7/14/5 -f 8/15/6 6/10/6 2/4/6 4/16/6 -o top1_Cube.005 -v -0.500313 -0.220552 0.500313 -v -0.500313 0.530073 0.500313 -v -0.500313 -0.220552 -0.500313 -v -0.500313 0.530073 -0.500313 -v 0.500313 -0.220552 0.500313 -v 0.500313 0.530073 0.500313 -v 0.500313 -0.220552 -0.500313 -v 0.500313 0.530073 -0.500313 -vt 0.250000 0.562500 -vt -0.000000 0.562500 -vt -0.000000 0.750000 -vt 0.250000 0.750000 -vt 1.000000 0.562500 -vt 0.750000 0.562500 -vt 0.750000 0.750000 -vt 1.000000 0.750000 -vt 0.500000 0.562500 -vt 0.500000 0.750000 -vt 0.750000 1.000000 -vt 0.750000 0.750000 -vt 0.500000 0.750000 -vt 0.500000 1.000000 -vt 0.500000 1.000000 -vt 0.250000 1.000000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -usemtl None -s off -f 9/17/7 11/18/7 12/19/7 10/20/7 -f 11/21/8 15/22/8 16/23/8 12/24/8 -f 15/22/9 13/25/9 14/26/9 16/23/9 -f 13/25/10 9/17/10 10/20/10 14/26/10 -f 11/27/11 9/28/11 13/29/11 15/30/11 -f 16/31/12 14/26/12 10/20/12 12/32/12 -o top2_Cube.002 -v -0.500247 -0.220392 0.500247 -v -0.500247 0.530234 0.500247 -v -0.500247 -0.220392 -0.500378 -v -0.500247 0.530234 -0.500378 -v 0.500378 -0.220392 0.500247 -v 0.500378 0.530234 0.500247 -v 0.500378 -0.220392 -0.500378 -v 0.500378 0.530234 -0.500378 -vt 0.250000 0.562500 -vt 0.250000 0.750000 -vt -0.000000 0.750000 -vt -0.000000 0.562500 -vt 1.000000 0.562500 -vt 1.000000 0.750000 -vt 0.750000 0.750000 -vt 0.750000 0.562500 -vt 0.500000 0.750000 -vt 0.500000 0.562500 -vt 0.750000 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.750000 -vt 0.750000 0.750000 -vt 0.500000 1.000000 -vt 0.250000 1.000000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 17/33/13 18/34/13 20/35/13 19/36/13 -f 19/37/14 20/38/14 24/39/14 23/40/14 -f 23/40/15 24/39/15 22/41/15 21/42/15 -f 21/42/16 22/41/16 18/34/16 17/33/16 -f 19/43/17 23/44/17 21/45/17 17/46/17 -f 24/47/18 20/48/18 18/34/18 22/41/18 -o low2_Cube.001 -v -0.499935 -0.499936 0.499935 -v -0.499935 0.062565 0.499935 -v -0.499935 -0.499936 -0.500066 -v -0.499935 0.062565 -0.500066 -v 0.500066 -0.499936 0.499935 -v 0.500066 0.062565 0.499935 -v 0.500066 -0.499936 -0.500066 -v 0.500066 0.062565 -0.500066 -vt 0.250000 0.187500 -vt 0.250000 0.312500 -vt -0.000000 0.312500 -vt -0.000000 0.187500 -vt 1.000000 0.187500 -vt 1.000000 0.312500 -vt 0.750000 0.312500 -vt 0.750000 0.187500 -vt 0.500000 0.312500 -vt 0.500000 0.187500 -vt 0.750000 0.562500 -vt 0.500000 0.562500 -vt 0.500000 0.312500 -vt 0.750000 0.312500 -vt 0.500000 0.562500 -vt 0.250000 0.562500 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 25/49/19 26/50/19 28/51/19 27/52/19 -f 27/53/20 28/54/20 32/55/20 31/56/20 -f 31/56/21 32/55/21 30/57/21 29/58/21 -f 29/58/22 30/57/22 26/50/22 25/49/22 -f 27/59/23 31/60/23 29/61/23 25/62/23 -f 32/63/24 28/64/24 26/50/24 30/57/24 diff --git a/mods/ITEMS/mcl_chests/sounds/attributions.txt b/mods/ITEMS/mcl_chests/sounds/attributions.txt deleted file mode 100644 index 2943aecc0..000000000 --- a/mods/ITEMS/mcl_chests/sounds/attributions.txt +++ /dev/null @@ -1,2 +0,0 @@ -default_chest_open and default_chest_close - Taken from minetest_game https://github.com/minetest/minetest_game -mcl_chests_enderchest_open and mcl_chests_enderchest_close - https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/resource-packs/1245112-snowsong-the-epic-sound-pack-sound-resource-pack diff --git a/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg b/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg deleted file mode 100644 index 068d9002f..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg b/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg deleted file mode 100644 index 40b0b9341..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg deleted file mode 100644 index 7ecf4c98d..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg deleted file mode 100644 index 33bd84f8d..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg deleted file mode 100644 index e97e22b36..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg deleted file mode 100644 index d61c81ccb..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg deleted file mode 100644 index 865e81909..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg deleted file mode 100644 index 20388a403..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg deleted file mode 100644 index 4a3616448..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg deleted file mode 100644 index c63da1d10..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.1.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.1.ogg deleted file mode 100644 index 1dc602807..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg deleted file mode 100644 index e1af5da85..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg deleted file mode 100644 index d7ad1a3a9..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.4.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.4.ogg deleted file mode 100644 index faf751c9a..000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_front.png b/mods/ITEMS/mcl_chests/textures/default_chest_front.png deleted file mode 100644 index 866a33984..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_front_big.png b/mods/ITEMS/mcl_chests/textures/default_chest_front_big.png deleted file mode 100644 index bde286673..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_front_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_side_big.png b/mods/ITEMS/mcl_chests/textures/default_chest_side_big.png deleted file mode 100644 index deb006807..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_side_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_top.png b/mods/ITEMS/mcl_chests/textures/default_chest_top.png deleted file mode 100644 index 5c1beb4b5..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_top_big.png b/mods/ITEMS/mcl_chests/textures/default_chest_top_big.png deleted file mode 100644 index de56e2cab..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_top_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_black_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_black_shulker_box_top.png deleted file mode 100644 index a8564e42e..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_black_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png deleted file mode 100644 index baee128d4..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_blue_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_blue_shulker_box_top.png deleted file mode 100644 index 608887df4..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_blue_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_brown_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_brown_shulker_box_top.png deleted file mode 100644 index 95b6cbdc8..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_brown_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_back.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_back.png deleted file mode 100644 index f347e921a..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_bottom.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_bottom.png deleted file mode 100644 index cb43e55e2..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_left.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_left.png deleted file mode 100644 index d420aaba0..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_right.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_right.png deleted file mode 100644 index 4536ada86..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_back.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_back.png deleted file mode 100644 index f347e921a..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_bottom.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_bottom.png deleted file mode 100644 index cb43e55e2..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front.png deleted file mode 100644 index 67cc716bd..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front_big.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front_big.png deleted file mode 100644 index b65bfc231..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_left.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_left.png deleted file mode 100644 index d420aaba0..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_right.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_right.png deleted file mode 100644 index 4536ada86..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_side_big.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_side_big.png deleted file mode 100644 index deb006807..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_side_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top.png deleted file mode 100644 index 5c1beb4b5..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top_big.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top_big.png deleted file mode 100644 index de56e2cab..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_cyan_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_cyan_shulker_box_top.png deleted file mode 100644 index d8fe60f50..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_cyan_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_green_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_green_shulker_box_top.png deleted file mode 100644 index a0d32088b..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_green_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_grey_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_grey_shulker_box_top.png deleted file mode 100644 index 8859361ec..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_grey_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender.png deleted file mode 100644 index 8a59e5cef..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_back.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_back.png deleted file mode 100644 index 7cfbe1d7d..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_bottom.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_bottom.png deleted file mode 100644 index 03a61a59c..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_front.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_front.png deleted file mode 100644 index bbc68e78b..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_left.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_left.png deleted file mode 100644 index 1a0ceaef2..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_right.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_right.png deleted file mode 100644 index f547532f2..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_top.png deleted file mode 100644 index c109aa826..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_present.png deleted file mode 100644 index 85df1bfba..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_green_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_green_shulker_box_top.png deleted file mode 100644 index 513612da9..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_green_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_grey_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_grey_shulker_box_top.png deleted file mode 100644 index e483f6ed7..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_grey_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_lightblue_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_lightblue_shulker_box_top.png deleted file mode 100644 index 9efc68fe0..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_lightblue_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_magenta_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_magenta_shulker_box_top.png deleted file mode 100644 index 9f167d4d9..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_magenta_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_noise.png deleted file mode 100644 index 4cc99c17e..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_noise_double.png deleted file mode 100644 index 998413914..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise_double.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png deleted file mode 100644 index 9974f60d5..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double.png deleted file mode 100644 index f7357ddaa..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double_present.png deleted file mode 100644 index 55139fcb2..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_present.png deleted file mode 100644 index 23faf46b8..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_orange_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_orange_shulker_box_top.png deleted file mode 100644 index 166f9c3da..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_orange_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_pink_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_pink_shulker_box_top.png deleted file mode 100644 index a69548c31..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_pink_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_red_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_red_shulker_box_top.png deleted file mode 100644 index 8c458cdd9..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_red_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png deleted file mode 100644 index ebbca8a6a..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png deleted file mode 100644 index 88ff45825..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double_present.png deleted file mode 100644 index 2d10331f3..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_present.png deleted file mode 100644 index 473f24c57..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_violet_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_violet_shulker_box_top.png deleted file mode 100644 index eb461d395..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_violet_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_white_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_white_shulker_box_top.png deleted file mode 100644 index 8c12525bd..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_white_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_yellow_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_yellow_shulker_box_top.png deleted file mode 100644 index 5e657412d..000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_yellow_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/init.lua b/mods/ITEMS/mcl_clock/init.lua deleted file mode 100644 index 65b32b91e..000000000 --- a/mods/ITEMS/mcl_clock/init.lua +++ /dev/null @@ -1,147 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - ---[[ - mcl_clock, renew of the renew of the mcl_clock mod - - Original from Echo, here: http://forum.minetest.net/viewtopic.php?id=3795 -]]-- - -mcl_clock = {} - --- This is the itemstring of the default clock item. It is used for the default inventory image, help entries, and the like -mcl_clock.stereotype = "mcl_clock:clock" - -mcl_clock.old_time = -1 - -local clock_frames = 64 - --- Timer for random clock spinning -local random_timer = 0.0 -local random_timer_trigger = 1.0 -- random clock spinning tick in seconds. Increase if there are performance problems -local random_frame = math.random(0, clock_frames-1) - --- Image of all possible faces -mcl_clock.images = {} -for frame=0, clock_frames-1 do - local sframe = tostring(frame) - if string.len(sframe) == 1 then - sframe = "0" .. sframe - end - table.insert(mcl_clock.images, "mcl_clock_clock_"..sframe..".png") -end - -local function round(num) - return math.floor(num + 0.5) -end - -function mcl_clock.get_clock_frame() - local t = clock_frames * minetest.get_timeofday() - t = round(t) - if t == clock_frames then t = 0 end - return tostring(t) -end - -local doc_mod = minetest.get_modpath("doc") - --- Register items -function mcl_clock.register_item(name, image, creative, frame) - local g = 1 - if creative then - g = 0 - end - local use_doc = name == mcl_clock.stereotype - if doc_mod and not use_doc then - doc.add_entry_alias("craftitems", mcl_clock.stereotype, "craftitems", name) - end - local longdesc, usagehelp, tt - if use_doc then - longdesc = S("Clocks are tools which shows the current time of day in the Overworld.") - usagehelp = S("The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.") - tt = S("Displays the time of day in the Overworld") - end - minetest.register_craftitem(name, { - description = S("Clock"), - _tt_help = tt, - _doc_items_create_entry = use_doc, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - inventory_image = image, - groups = {not_in_creative_inventory=g, tool=1, clock=frame, disable_repair=1}, - wield_image = "", - stack_max = 64, - }) -end - --- This timer makes sure the clocks get updated from time to time regardless of time_speed, --- just in case some clocks in the world go wrong -local force_clock_update_timer = 0 - -minetest.register_globalstep(function(dtime) - local now = mcl_clock.get_clock_frame() - force_clock_update_timer = force_clock_update_timer + dtime - random_timer = random_timer + dtime - -- This causes the random spinning of the clock - if random_timer >= random_timer_trigger then - random_frame = (random_frame + math.random(-4, 4)) % clock_frames - random_timer = 0 - end - - if mcl_clock.old_time == now and force_clock_update_timer < 60 then - return - end - force_clock_update_timer = 0 - - mcl_clock.old_time = now - mcl_clock.random_frame = random_frame - - for p, player in pairs(minetest.get_connected_players()) do - for s, stack in pairs(player:get_inventory():get_list("main")) do - local frame - -- Clocks do not work in certain zones - if not mcl_worlds.clock_works(player:get_pos()) then - frame = random_frame - else - frame = now - end - - local count = stack:get_count() - if stack:get_name() == mcl_clock.stereotype then - player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..frame.." "..count) - elseif minetest.get_item_group(stack:get_name(), "clock") ~= 0 then - player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..frame.." "..count) - end - end - end -end) - --- Immediately set correct clock time after crafting -minetest.register_on_craft(function(itemstack) - if itemstack:get_name() == mcl_clock.stereotype then - itemstack:set_name("mcl_clock:clock_"..mcl_clock.get_clock_frame()) - end -end) - --- Clock recipe -minetest.register_craft({ - output = mcl_clock.stereotype, - recipe = { - {"", "mcl_core:gold_ingot", ""}, - {"mcl_core:gold_ingot", "mesecons:redstone", "mcl_core:gold_ingot"}, - {"", "mcl_core:gold_ingot", ""} - } -}) - --- Clock tool -mcl_clock.register_item(mcl_clock.stereotype, mcl_clock.images[1], true, 1) - --- Faces -for a=0,clock_frames-1,1 do - local b = a - if b > 31 then - b = b - 32 - else - b = b + 32 - end - mcl_clock.register_item("mcl_clock:clock_"..tostring(a), mcl_clock.images[b+1], false, a+1) -end - diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.de.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.de.tr deleted file mode 100644 index 00c2529e1..000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Uhren sind Werkzeuge, die die Tageszeit in der Oberwelt anzeigen. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=Die Uhr enthält eine rotierende Scheibe mit einem Sonnensymbol (gelbe Scheibe) und einem Mondsymbol, und sie hat einem kleinen „Pfeil“, der die jetzige Tageszeit anzeigt, indem die reale Position von Sonne und Mond im Himmel abgeschätzt wird. Die Sonne repräsentiert die Mittagszeit und der Mond repräsentiert Mitternacht. -Clock=Uhr -Displays the time of day in the Overworld=Zeigt die Tageszeit in der Oberwelt diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.es.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.es.tr deleted file mode 100644 index c8841fc6e..000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Los relojes son herramientas que muestran la hora del día en el mundo. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=El reloj contiene un disco giratorio con un símbolo del sol (disco amarillo) y un símbolo de la luna y un pequeño "puntero" que muestra la hora actual del día al estimar la posición real del sol y la luna en el cielo. El mediodía está representado por el símbolo del sol y la medianoche está representado por el símbolo de la luna. -Clock=Reloj \ No newline at end of file diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.fr.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.fr.tr deleted file mode 100644 index 604f50858..000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Les horloges sont des outils qui indiquent l'heure actuelle dans l'Overworld. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=L'horloge contient un disque rotatif avec un symbole du soleil (disque jaune) et un symbole de la lune et un petit "pointeur" qui montre l'heure actuelle en estimant la position réelle du soleil et de la lune dans le ciel. Midi est représenté par le symbole du soleil et minuit est représenté par le symbole de la lune. -Clock=Horloge -Displays the time of day in the Overworld=Affiche l'heure de la journée dans l'Overworld diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr deleted file mode 100644 index 6cb110dd8..000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Zegary to narzędzia pokazujące aktualną godzinę na Powierzchni. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=Zegar zawiera obracające się kółko z symbolami słońca (żółte kółko) i symbolem księżyca oraz małym wskaźnikiem pokazującym aktualną godzinę przez oszacowanie prawdziwej pozycji słońca i księżyca na niebie. Południe jest reprezentowane przez symbol słońca, a północ przez symbol księżyca. -Clock=Zegar -Displays the time of day in the Overworld=Pokazuje aktualną godzinę na Powierzchni diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.ru.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.ru.tr deleted file mode 100644 index dca0f960c..000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Часы это инструмент, показывающий текущее время Верхнего Мира. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=Часы имеют вращающийся диск со значком солнца (жёлтый диск) и луны, а также маленькую стрелку, которая показывает время, обозначая реальное положение солнца и луны в небе. Полдень обозначается символом солнца, а полночь символом луны. -Clock=Часы -Displays the time of day in the Overworld=Показывают время Верхнего Мира diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.zh_TW.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.zh_TW.tr deleted file mode 100644 index c6834373f..000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.zh_TW.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=時鐘顯示世界上當前時間的工具。 -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=時鐘包含一個帶有太陽符號(黃色圓盤)和月亮符號的旋轉圓盤,以及一個小「指針」,通過估計太陽和月亮在天空中的實際位置來顯示當前的時間。正午由太陽符號表示,午夜由月亮符號表示。 -Clock=時鐘 -Displays the time of day in the Overworld=顯示世界上當前的時間 diff --git a/mods/ITEMS/mcl_clock/locale/template.txt b/mods/ITEMS/mcl_clock/locale/template.txt deleted file mode 100644 index 6589666c9..000000000 --- a/mods/ITEMS/mcl_clock/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.= -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.= -Clock= -Displays the time of day in the Overworld= diff --git a/mods/ITEMS/mcl_clock/mod.conf b/mods/ITEMS/mcl_clock/mod.conf deleted file mode 100644 index e358ff29a..000000000 --- a/mods/ITEMS/mcl_clock/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_clock -description = A fantasy clock item roughly shows the time of day. -depends = mcl_init, mcl_worlds, mesecons -optional_depends = doc diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_00.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_00.png deleted file mode 100644 index 3a8870c88..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_00.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_01.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_01.png deleted file mode 100644 index e31b5411f..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_01.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_02.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_02.png deleted file mode 100644 index b2a2ea964..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_02.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_03.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_03.png deleted file mode 100644 index 87fca7085..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_03.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_04.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_04.png deleted file mode 100644 index 0e16c349a..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_04.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_05.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_05.png deleted file mode 100644 index 117034edc..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_05.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_06.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_06.png deleted file mode 100644 index a2553baed..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_06.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_07.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_07.png deleted file mode 100644 index 1e5d7c969..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_07.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_08.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_08.png deleted file mode 100644 index dcd2d52b3..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_08.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_09.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_09.png deleted file mode 100644 index 069c11fc5..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_09.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_10.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_10.png deleted file mode 100644 index 68395a4c1..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_10.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_11.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_11.png deleted file mode 100644 index 8fcf0a83d..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_11.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_12.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_12.png deleted file mode 100644 index ec7227308..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_12.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_13.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_13.png deleted file mode 100644 index 501c5fa7d..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_13.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_14.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_14.png deleted file mode 100644 index 1f750d28c..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_14.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_15.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_15.png deleted file mode 100644 index 1126230cf..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_15.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_16.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_16.png deleted file mode 100644 index 7e13698a9..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_16.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_17.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_17.png deleted file mode 100644 index cc6af9240..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_17.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_18.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_18.png deleted file mode 100644 index beb08e694..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_18.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_19.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_19.png deleted file mode 100644 index 7d014bbbd..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_19.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_20.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_20.png deleted file mode 100644 index 9f54e4a23..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_20.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_21.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_21.png deleted file mode 100644 index 9129d556c..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_21.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_22.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_22.png deleted file mode 100644 index 8db493f6e..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_22.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_23.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_23.png deleted file mode 100644 index d7913629b..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_23.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_24.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_24.png deleted file mode 100644 index 150974548..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_24.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_25.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_25.png deleted file mode 100644 index fcab7b209..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_25.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_26.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_26.png deleted file mode 100644 index fa7ae1979..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_26.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_27.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_27.png deleted file mode 100644 index 0acb19e27..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_27.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_28.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_28.png deleted file mode 100644 index a9572fe68..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_28.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_29.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_29.png deleted file mode 100644 index d670934ae..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_29.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_30.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_30.png deleted file mode 100644 index 49c9ec98e..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_30.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_31.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_31.png deleted file mode 100644 index 499ac149e..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_31.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_32.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_32.png deleted file mode 100644 index f54e771a9..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_32.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_33.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_33.png deleted file mode 100644 index eb8939949..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_33.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_34.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_34.png deleted file mode 100644 index 87093e1cd..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_34.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_35.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_35.png deleted file mode 100644 index 91ba320f9..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_35.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_36.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_36.png deleted file mode 100644 index e6b070dc6..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_36.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_37.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_37.png deleted file mode 100644 index b85d111f8..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_37.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_38.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_38.png deleted file mode 100644 index 913bbecf4..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_38.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_39.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_39.png deleted file mode 100644 index 33ae73c08..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_39.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_40.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_40.png deleted file mode 100644 index 9ce1c7091..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_40.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_41.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_41.png deleted file mode 100644 index f4113adf4..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_41.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_42.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_42.png deleted file mode 100644 index 64ba1b49f..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_42.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_43.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_43.png deleted file mode 100644 index 34521c99f..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_43.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_44.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_44.png deleted file mode 100644 index 4fb756a47..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_44.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_45.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_45.png deleted file mode 100644 index 8ba8622b6..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_45.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_46.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_46.png deleted file mode 100644 index 9f865c02b..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_46.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_47.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_47.png deleted file mode 100644 index 0b84556a6..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_47.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_48.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_48.png deleted file mode 100644 index 33300e32e..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_48.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_49.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_49.png deleted file mode 100644 index 054f7a4dc..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_49.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_50.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_50.png deleted file mode 100644 index 5c33b2c4c..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_50.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_51.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_51.png deleted file mode 100644 index f2b767437..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_51.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_52.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_52.png deleted file mode 100644 index e68f3c965..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_52.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_53.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_53.png deleted file mode 100644 index f784e09cf..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_53.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_54.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_54.png deleted file mode 100644 index 189625828..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_54.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_55.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_55.png deleted file mode 100644 index b16c2a69a..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_55.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_56.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_56.png deleted file mode 100644 index f64120928..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_56.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_57.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_57.png deleted file mode 100644 index e2f85ddbb..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_57.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_58.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_58.png deleted file mode 100644 index 11d8f09a5..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_58.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_59.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_59.png deleted file mode 100644 index 739b12619..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_59.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_60.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_60.png deleted file mode 100644 index c44fca934..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_60.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_61.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_61.png deleted file mode 100644 index b607c06c6..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_61.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_62.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_62.png deleted file mode 100644 index f670354b9..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_62.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_63.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_63.png deleted file mode 100644 index 029c964e5..000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_63.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/README.txt b/mods/ITEMS/mcl_cocoas/README.txt deleted file mode 100644 index 2f00b68fe..000000000 --- a/mods/ITEMS/mcl_cocoas/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -This mod adds cocoas. -Cocoas grow at jungle trees in 3 stages and can be harvested for cocoa beans. -Cocoa beans can be used to plant new cocoas at jungle trees. - -Partially based on the cocoas from Farming Redo by TenPlus1. diff --git a/mods/ITEMS/mcl_cocoas/init.lua b/mods/ITEMS/mcl_cocoas/init.lua deleted file mode 100644 index 60ea9e573..000000000 --- a/mods/ITEMS/mcl_cocoas/init.lua +++ /dev/null @@ -1,200 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_cocoas = {} - --- Place cocoa -function mcl_cocoas.place(itemstack, placer, pt, plantname) - -- check if pointing at a node - if not pt or pt.type ~= "node" then - return - end - - local under = minetest.get_node(pt.under) - - -- return if any of the nodes are not registered - if not minetest.registered_nodes[under.name] then - return - end - - -- Am I right-clicking on something that has a custom on_rightclick set? - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[under.name] and minetest.registered_nodes[under.name].on_rightclick then - return minetest.registered_nodes[under.name].on_rightclick(pt.under, under, placer, itemstack) or itemstack - end - end - - -- Check if pointing at jungle tree - if under.name ~= "mcl_core:jungletree" - or minetest.get_node(pt.above).name ~= "air" then - return - end - - -- Determine cocoa direction - local clickdir = vector.subtract(pt.under, pt.above) - - -- Did user click on the SIDE of a jungle tree? - if clickdir.y ~= 0 then - return - end - - -- Add the node, set facedir and remove 1 item from the itemstack - minetest.set_node(pt.above, {name = plantname, param2 = minetest.dir_to_facedir(clickdir)}) - - minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}, true) - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - - return itemstack -end - --- Attempts to grow a cocoa at pos, returns true when grown, returns false if there's no cocoa --- or it is already at full size -function mcl_cocoas.grow(pos) - local node = minetest.get_node(pos) - if node.name == "mcl_cocoas:cocoa_1" then - minetest.set_node(pos, {name = "mcl_cocoas:cocoa_2", param2 = node.param2}) - elseif node.name == "mcl_cocoas:cocoa_2" then - minetest.set_node(pos, {name = "mcl_cocoas:cocoa_3", param2 = node.param2}) - return true - end - return false -end - --- Note: cocoa beans are implemented as mcl_dye:brown - --- Cocoa definition --- 1st stage - ---[[ TODO: Use a mesh for cocoas for perfect texture compability. ]] -local crop_def = { - description = S("Premature Cocoa Pod"), - _doc_items_create_entry = true, - _doc_items_longdesc = S("Cocoa pods grow on the side of jungle trees in 3 stages."), - drawtype = "nodebox", - tiles = { - "[combine:16x16:6,1=mcl_cocoas_cocoa_stage_0.png", "[combine:16x16:6,11=mcl_cocoas_cocoa_stage_0.png", - "mcl_cocoas_cocoa_stage_0.png", "mcl_cocoas_cocoa_stage_0.png^[transformFX", - "[combine:16x16:-5,0=mcl_cocoas_cocoa_stage_0.png", "[combine:16x16:-5,0=mcl_cocoas_cocoa_stage_0.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "facedir", - walkable = true, - drop = "mcl_dye:brown", - node_box = { - type = "fixed", - fixed = { - {-0.125, -0.0625, 0.1875, 0.125, 0.25, 0.4375}, -- Pod - -- FIXME: This has a thickness of 0. Is this OK in Minetest? - {0, 0.25, 0.25, 0, 0.5, 0.5}, -- Stem - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.125, -0.0625, 0.1875, 0.125, 0.25, 0.4375}, -- Pod - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.125, -0.0625, 0.1875, 0.125, 0.5, 0.5}, -- Pod - }, - }, - groups = { - handy=1,axey=1, cocoa=1, not_in_creative_inventory=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, attached_node_facedir=1, - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = false, - _mcl_blast_resistance = 3, - _mcl_hardness = 0.2, -} - --- 2nd stage -minetest.register_node("mcl_cocoas:cocoa_1", table.copy(crop_def)) - -crop_def.description = S("Medium Cocoa Pod") -crop_def._doc_items_create_entry = false -crop_def.groups.cocoa = 2 -crop_def.tiles = { - "[combine:16x16:5,1=mcl_cocoas_cocoa_stage_1.png", "[combine:16x16:5,9=mcl_cocoas_cocoa_stage_1.png", - "mcl_cocoas_cocoa_stage_1.png", "mcl_cocoas_cocoa_stage_1.png^[transformFX", - "[combine:16x16:-4,0=mcl_cocoas_cocoa_stage_1.png", "[combine:16x16:-4,0=mcl_cocoas_cocoa_stage_1.png", -} -crop_def.node_box = { - type = "fixed", - fixed = { - {-0.1875, -0.1875, 0.0625, 0.1875, 0.25, 0.4375}, -- Pod - {0, 0.25, 0.25, 0, 0.5, 0.5}, -- Stem - }, -} -crop_def.collision_box = { - type = "fixed", - fixed = { - {-0.1875, -0.1875, 0.0625, 0.1875, 0.25, 0.4375}, -- Pod - }, -} -crop_def.selection_box = { - type = "fixed", - fixed = { - {-0.1875, -0.1875, 0.0625, 0.1875, 0.5, 0.5}, - }, -} - -minetest.register_node("mcl_cocoas:cocoa_2", table.copy(crop_def)) - --- Final stage -crop_def.description = S("Mature Cocoa Pod") -crop_def._doc_items_longdesc = S("A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.") -crop_def._doc_items_create_entry = true -crop_def.groups.cocoa = 3 -crop_def.tiles = { - -- The following 2 textures were derived from the original because the size of the top/bottom is slightly different :-( - -- TODO: Find a way to *only* use the base texture - "mcl_cocoas_cocoa_top_stage_2.png", "mcl_cocoas_cocoa_top_stage_2.png^[transformFY", - "mcl_cocoas_cocoa_stage_2.png", "mcl_cocoas_cocoa_stage_2.png^[transformFX", - "[combine:16x16:-3,0=mcl_cocoas_cocoa_stage_2.png", "[combine:16x16:-3,0=mcl_cocoas_cocoa_stage_2.png", -} -crop_def.node_box = { - type = "fixed", - fixed = { - {-0.25, -0.3125, -0.0625, 0.25, 0.25, 0.4375}, -- Pod - {0, 0.25, 0.25, 0, 0.5, 0.5}, -- Stem - }, -} -crop_def.collision_box = { - type = "fixed", - fixed = { - {-0.25, -0.3125, -0.0625, 0.25, 0.25, 0.4375}, -- Pod - }, -} -crop_def.selection_box = { - type = "fixed", - fixed = { - {-0.25, -0.3125, -0.0625, 0.25, 0.5, 0.5}, - }, -} -crop_def.drop = "mcl_dye:brown 3" -minetest.register_node("mcl_cocoas:cocoa_3", table.copy(crop_def)) - - -minetest.register_abm({ - label = "Cocoa pod growth", - nodenames = {"mcl_cocoas:cocoa_1", "mcl_cocoas:cocoa_2"}, - -- Same as potatoes - -- TODO: Tweak/balance the growth speed - interval = 50, - chance = 20, - action = function(pos, node) - mcl_cocoas.grow(pos) - end -} ) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_cocoas:cocoa_1", "nodes", "mcl_cocoas:cocoa_2") -end - diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.de.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.de.tr deleted file mode 100644 index 479e3845e..000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.de.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Junge Kakaoschote -Cocoa pods grow on the side of jungle trees in 3 stages.=Kakaoschoten wachsen an der Seite von Dschungelbäumen in 3 Stufen. -Medium Cocoa Pod=Mittelgroße Kakaoschote -Mature Cocoa Pod=Ausgewachsene Kakaoschote -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Eine ausgewachsene Kakaoschote wuchs an einem Dschugelbaum zur vollen Größe heran. Sie ist erntereif und kann für Kakaobohnen geerntet werden. Sie wird nicht weiter wachsen. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.es.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.es.tr deleted file mode 100644 index e1477c79c..000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.es.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Vaina de cacao prematura -Cocoa pods grow on the side of jungle trees in 3 stages.=Las vainas de cacao crecen al lado de los árboles de jungla en 3 etapas. -Medium Cocoa Pod=Vaina de cacao mediana -Mature Cocoa Pod=Vaina de cacao madura -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Una vaina de cacao madura creció en un árbol de jungla a su tamaño completo y está lista para ser cosechada para los granos de cacao. No crecerá más. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.fr.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.fr.tr deleted file mode 100644 index bf5468953..000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.fr.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Gousse de cacao prématurée -Cocoa pods grow on the side of jungle trees in 3 stages.=Les cabosses de cacao poussent sur le côté des arbres d'Acajou en 3 étapes. -Medium Cocoa Pod=Gousse de cacao moyenne -Mature Cocoa Pod=Cabosse de cacao mature -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Une cabosse de cacao mature a poussé sur un arbre d'Acajou à sa pleine taille et elle est prête à être récoltée pour les fèves de cacao. Elle ne grandira plus. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr deleted file mode 100644 index bfd0d707e..000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Niedojrzała roślina kakao -Cocoa pods grow on the side of jungle trees in 3 stages.=Roślina kakao rośnie na bokach tropikalnych drzew w 3 etapach -Medium Cocoa Pod=Średnio-dojrzała roślina kakao -Mature Cocoa Pod=Dojrzała roślina kakao -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Dojrzała roślina kakao wyrosła na drzewie tropikalnym do swojego pełnego rozmiaru i jest gotowa by ją zebrać dla ziaren kakao. Nie urośnie już więcej. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.ru.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.ru.tr deleted file mode 100644 index 524c28bcc..000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.ru.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Молодой стручок какао -Cocoa pods grow on the side of jungle trees in 3 stages.=Стручки какао растут на деревьях джунглей в 3 этапа. -Medium Cocoa Pod=Средний стручок какао -Mature Cocoa Pod=Зрелый стручок какао -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Зрелый стручок какао вырос на дереве джунглей до своего полного размера и готов к сбору в качестве какао-бобов. Дальше ему расти некуда. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.zh_TW.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.zh_TW.tr deleted file mode 100644 index d71e2b11b..000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.zh_TW.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=成長中的可可豆莢(第1階段) -Cocoa pods grow on the side of jungle trees in 3 stages.=可可莢果分3個階段生長在叢林樹的側面。 -Medium Cocoa Pod=成長中的可可豆莢(第2階段) -Mature Cocoa Pod=成熟的可可豆莢 -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=一個成熟的可可豆莢在叢林樹上成熟,它已經準備好被收穫成可可豆了。它不會再長了。 diff --git a/mods/ITEMS/mcl_cocoas/locale/template.txt b/mods/ITEMS/mcl_cocoas/locale/template.txt deleted file mode 100644 index f68318cae..000000000 --- a/mods/ITEMS/mcl_cocoas/locale/template.txt +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod= -Cocoa pods grow on the side of jungle trees in 3 stages.= -Medium Cocoa Pod= -Mature Cocoa Pod= -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.= diff --git a/mods/ITEMS/mcl_cocoas/mod.conf b/mods/ITEMS/mcl_cocoas/mod.conf deleted file mode 100644 index 867636191..000000000 --- a/mods/ITEMS/mcl_cocoas/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_cocoas -description = Cocoa pods which grow at jungle trees. Does not include cocoa beans. -depends = mcl_sounds, mcl_core -optional_depends = doc \ No newline at end of file diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_0.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_0.png deleted file mode 100644 index de58245f4..000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_1.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_1.png deleted file mode 100644 index 4d45d3594..000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_2.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_2.png deleted file mode 100644 index 47bc159b7..000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_top_stage_2.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_top_stage_2.png deleted file mode 100644 index 4e12f623b..000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_top_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/init.lua b/mods/ITEMS/mcl_colorblocks/init.lua deleted file mode 100644 index 6eec8a9df..000000000 --- a/mods/ITEMS/mcl_colorblocks/init.lua +++ /dev/null @@ -1,227 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local doc_mod = minetest.get_modpath("doc") - -local block = {} - -block.dyes = { - {"white", S("White Terracotta"), S("White Glazed Terracotta"), S("White Concrete Powder"), S("White Concrete"), "white"}, - {"grey", S("Grey Terracotta"), S("Grey Glazed Terracotta"), S("Grey Concrete Powder"), S("Grey Concrete"), "dark_grey"}, - {"silver", S("Light Grey Terracotta"), S("Light Grey Glazed Terracotta"), S("Light Grey Concrete Powder"), S("Light Grey Concrete"), "grey"}, - {"black", S("Black Terracotta"), S("Black Glazed Terracotta"), S("Black Concrete Powder"), S("Black Concrete"), "black"}, - {"red", S("Red Terracotta"), S("Red Glazed Terracotta"), S("Red Concrete Powder"), S("Red Concrete"), "red"}, - {"yellow", S("Yellow Terracotta"), S("Yellow Glazed Terracotta"), S("Yellow Concrete Powder"), S("Yellow Concrete"), "yellow"}, - {"green", S("Green Terracotta"), S("Green Glazed Terracotta"), S("Green Concrete Powder"), S("Green Concrete"), "dark_green"}, - {"cyan", S("Cyan Terracotta"), S("Cyan Glazed Terracotta"), S("Cyan Concrete Powder"), S("Cyan Concrete"), "cyan"}, - {"blue", S("Blue Terracotta"), S("Blue Glazed Terracotta"), S("Blue Concrete Powder"), S("Blue Concrete"), "blue"}, - {"magenta", S("Magenta Terracotta"), S("Magenta Glazed Terracotta"), S("Magenta Concrete Powder"), S("Magenta Concrete"), "magenta"}, - {"orange", S("Orange Terracotta"), S("Orange Glazed Terracotta"), S("Orange Concrete Powder"), S("Orange Concrete"), "orange"}, - {"purple", S("Purple Terracotta"), S("Purple Glazed Terracotta"), S("Purple Concrete Powder"), S("Purple Concrete"), "violet"}, - {"brown", S("Brown Terracotta"), S("Brown Glazed Terracotta"), S("Brown Concrete Powder"), S("Brown Concrete"), "brown"}, - {"pink", S("Pink Terracotta"), S("Pink Glazed Terracotta"), S("Pink Concrete Powder"), S("Pink Concrete"), "pink"}, - {"lime", S("Lime Terracotta"), S("Lime Glazed Terracotta"), S("Lime Concrete Powder"), S("Lime Concrete"), "green"}, - {"light_blue", S("Light Blue Terracotta"), S("Light Blue Glazed Terracotta"), S("Light Blue Concrete Powder"), S("Light Blue Concrete"), "lightblue"}, -} -local canonical_color = "yellow" - -local hc_desc = S("Terracotta is a basic building material. It comes in many different colors.") -local gt_desc = S("Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.") -local cp_desc = S("Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.") -local c_desc = S("Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.") -local cp_tt = S("Turns into concrete on water contact") - -minetest.register_node("mcl_colorblocks:hardened_clay", { - description = S("Terracotta"), - _doc_items_longdesc = S("Terracotta is a basic building material which comes in many different colors. This particular block is uncolored."), - tiles = {"hardened_clay.png"}, - stack_max = 64, - groups = {pickaxey=1, hardened_clay=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 4.2, - _mcl_hardness = 1.25, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_colorblocks:hardened_clay", - recipe = "mcl_core:clay", - cooktime = 10, -}) - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple -end - -for _, row in ipairs(block.dyes) do - local name = row[1] - local is_canonical = name == canonical_color - local sdesc_hc = row[2] - local sdesc_gt = row[3] - local sdesc_cp = row[4] - local sdesc_c = row[5] - local ldesc_hc, ldesc_gt, ldesc_cp, ldesc_c - local create_entry - local ename_hc, ename_gt, ename_cp, ename_c - local ltt_cp = cp_tt - if is_canonical then - ldesc_hc = hc_desc - ldesc_gt = gt_desc - ldesc_cp = cp_desc - ldesc_c = c_desc - ename_hc = S("Colored Terracotta") - ename_gt = S("Glazed Terracotta") - ename_cp = S("Concrete Powder") - ename_c = S("Concrete") - else - create_entry = false - end - local craft_color_group = row[6] - -- Node Definition - minetest.register_node("mcl_colorblocks:hardened_clay_"..name, { - description = sdesc_hc, - _doc_items_longdesc = ldesc_hc, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = ename_hc, - tiles = {"hardened_clay_stained_"..name..".png"}, - groups = {pickaxey=1, hardened_clay=1,building_block=1, material_stone=1}, - stack_max = 64, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 4.2, - _mcl_hardness = 1.25, - }) - - minetest.register_node("mcl_colorblocks:concrete_powder_"..name, { - description = sdesc_cp, - _tt_help = ltt_cp, - _doc_items_longdesc = ldesc_cp, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = ename_cp, - tiles = {"mcl_colorblocks_concrete_powder_"..name..".png"}, - groups = {handy=1,shovely=1, concrete_powder=1,building_block=1,falling_node=1, material_sand=1, float=1}, - stack_max = 64, - is_ground_content = false, - sounds = mcl_sounds.node_sound_sand_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Call on_rightclick if the pointed node defines it - local unode = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[unode.name] and minetest.registered_nodes[unode.name].on_rightclick then - return minetest.registered_nodes[unode.name].on_rightclick(pointed_thing.under, unode, placer, itemstack) or itemstack - end - end - - -- If placed in water, immediately harden this node - local n = minetest.get_node(pointed_thing.above) - local oldname = itemstack:get_name() - if minetest.get_item_group(n.name, "water") ~= 0 then - itemstack:set_name(itemstack:get_definition()._mcl_colorblocks_harden_to) - end - itemstack = minetest.item_place_node(itemstack, placer, pointed_thing) - itemstack:set_name(oldname) - return itemstack - end, - - -- Specify the node to which this node will convert after getting in contact with water - _mcl_colorblocks_harden_to = "mcl_colorblocks:concrete_"..name, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - minetest.register_node("mcl_colorblocks:concrete_"..name, { - description = sdesc_c, - _doc_items_longdesc = ldesc_c, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = ename_c, - tiles = {"mcl_colorblocks_concrete_"..name..".png"}, - groups = {handy=1,pickaxey=1, concrete=1,building_block=1, material_stone=1}, - stack_max = 64, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 1.8, - _mcl_hardness = 1.8, - }) - - local tex = "mcl_colorblocks_glazed_terracotta_"..name..".png" - local texes = { tex, tex, tex.."^[transformR180", tex, tex.."^[transformR270", tex.."^[transformR90" } - minetest.register_node("mcl_colorblocks:glazed_terracotta_"..name, { - description = sdesc_gt, - _doc_items_longdesc = ldesc_gt, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = ename_gt, - tiles = texes, - groups = {handy=1,pickaxey=1, glazed_terracotta=1,building_block=1, material_stone=1}, - paramtype2 = "facedir", - stack_max = 64, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 4.2, - _mcl_hardness = 1.4, - on_rotate = on_rotate, - }) - - if not is_canonical and doc_mod then - doc.add_entry_alias("nodes", "mcl_colorblocks:hardened_clay_"..canonical_color, "nodes", "mcl_colorblocks:hardened_clay_"..name) - doc.add_entry_alias("nodes", "mcl_colorblocks:glazed_terracotta_"..canonical_color, "nodes", "mcl_colorblocks:glazed_terracotta_"..name) - doc.add_entry_alias("nodes", "mcl_colorblocks:concrete_"..canonical_color, "nodes", "mcl_colorblocks:concrete_"..name) - doc.add_entry_alias("nodes", "mcl_colorblocks:concrete_powder_"..canonical_color, "nodes", "mcl_colorblocks:concrete_powder_"..name) - end - - -- Crafting recipes - if craft_color_group then - minetest.register_craft({ - output = "mcl_colorblocks:hardened_clay_"..name.." 8", - recipe = { - {"mcl_colorblocks:hardened_clay", "mcl_colorblocks:hardened_clay", "mcl_colorblocks:hardened_clay"}, - {"mcl_colorblocks:hardened_clay", "mcl_dye:"..craft_color_group, "mcl_colorblocks:hardened_clay"}, - {"mcl_colorblocks:hardened_clay", "mcl_colorblocks:hardened_clay", "mcl_colorblocks:hardened_clay"}, - }, - }) - minetest.register_craft({ - type = "shapeless", - output = "mcl_colorblocks:concrete_powder_"..name.." 8", - recipe = { - "mcl_core:sand", "mcl_core:gravel", "mcl_core:sand", - "mcl_core:gravel", "mcl_dye:"..craft_color_group, "mcl_core:gravel", - "mcl_core:sand", "mcl_core:gravel", "mcl_core:sand", - } - }) - - minetest.register_craft({ - type = "cooking", - output = "mcl_colorblocks:glazed_terracotta_"..name, - recipe = "mcl_colorblocks:hardened_clay_"..name, - cooktime = 10, - }) - end -end - --- When water touches concrete powder, it turns into concrete of the same color -minetest.register_abm({ - label = "Concrete powder hardening", - interval = 1, - chance = 1, - nodenames = {"group:concrete_powder"}, - neighbors = {"group:water"}, - action = function(pos, node) - local harden_to = minetest.registered_nodes[node.name]._mcl_colorblocks_harden_to - -- It should be impossible for harden_to to be nil, but a Minetest bug might call - -- the ABM on the new concrete node, which isn't part of this ABM! - if harden_to then - node.name = harden_to - --Fix "float" group not lowering concrete into the water by 1. - local water_pos = { x = pos.x, y = pos.y-1, z = pos.z } - local water_node = minetest.get_node(water_pos) - if minetest.get_item_group(water_node.name, "water") == 0 then - minetest.set_node(pos, node) - else - minetest.set_node(water_pos,node) - minetest.set_node(pos, {name = "air"}) - minetest.check_for_falling(pos) -- Update C. Powder that stacked above so they fall down after setting air. - end - end - end, -}) diff --git a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.de.tr b/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.de.tr deleted file mode 100644 index 359a2f7cb..000000000 --- a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.de.tr +++ /dev/null @@ -1,76 +0,0 @@ -# textdomain: mcl_colorblocks -White Terracotta=Weiße Terrakotta -White Glazed Terracotta=Weiße glasierte Terrakotta -White Concrete Powder=Weißes Betonpulver -White Concrete=Weißer Beton -Grey Terracotta=Graue Terrakotta -Grey Glazed Terracotta=Graue glasierte Terrakotta -Grey Concrete Powder=Graues Betonpulver -Grey Concrete=Grauer Beton -Light Grey Terracotta=Hellgraue Terrakotta -Light Grey Glazed Terracotta=Hellgraue glasierte Terrakotta -Light Grey Concrete Powder=Hellgraues Betonpulver -Light Grey Concrete=Hellgrauer Beton -Black Terracotta=Schwarze Terrakotta -Black Glazed Terracotta=Schwarze glasierte Terrakotta -Black Concrete Powder=Schwarzes Betonpulver -Black Concrete=Schwarzer Beton -Red Terracotta=Rote Terrakotta -Red Glazed Terracotta=Rote glasierte Terrakotta -Red Concrete Powder=Rotes Betonpulver -Red Concrete=Roter Beton -Yellow Terracotta=Gelbe Terrakotta -Yellow Glazed Terracotta=Gelbe glasierte Terrakotta -Yellow Concrete Powder=Gelbes Betonpulver -Yellow Concrete=Gelber Beton -Green Terracotta=Grüne Terrakotta -Green Glazed Terracotta=Grüne glasierte Terrakotta -Green Concrete Powder=Grünes Betonpulver -Green Concrete=Grüner Beton -Cyan Terracotta=Türkise Terrakotta -Cyan Glazed Terracotta=Türkise glasierte Terrakotta -Cyan Concrete Powder=Türkises Betonpulver -Cyan Concrete=Türkiser Beton -Blue Terracotta=Blaue Terrakotta -Blue Glazed Terracotta=Blaue glasierte Terrakotta -Blue Concrete Powder=Blaues Betonpulver -Blue Concrete=Blauer Beton -Magenta Terracotta=Magenta Terrakotta -Magenta Glazed Terracotta=Magenta glasierte Terrakotta -Magenta Concrete Powder=Magenta Betonpulver -Magenta Concrete=Magenta Beton -Orange Terracotta=Orange Terrakotta -Orange Glazed Terracotta=Orange glasierte Terrakotta -Orange Concrete Powder=Orange Betonpulver -Orange Concrete=Orange Beton -Purple Terracotta=Violette Terrakotta -Purple Glazed Terracotta=Violette glasierte Terrakotta -Purple Concrete Powder=Violettes Betonpulver -Purple Concrete=Violetter Beton -Brown Terracotta=Braune Terrakotta -Brown Glazed Terracotta=Braune glasierte Terrakotta -Brown Concrete Powder=Braunes Betonpulver -Brown Concrete=Brauner Beton -Pink Terracotta=Rosa Terrakotta -Pink Glazed Terracotta=Rosa glasierte Terrakotta -Pink Concrete Powder=Rosa Betonpulver -Pink Concrete=Rosa Beton -Lime Terracotta=Lindgrüne Terrakotta -Lime Glazed Terracotta=Lindgrüne glasierte Terrakotta -Lime Concrete Powder=Lindgrünes Betonpulver -Lime Concrete=Lindgrüner Beton -Light Blue Terracotta=Hellbaue Terrakotta -Light Blue Glazed Terracotta=Hellblaue glasierte Terrakotta -Light Blue Concrete Powder=Hellblaues Betonpulver -Light Blue Concrete=Hellblauer Beton -Terracotta is a basic building material. It comes in many different colors.=Terrakotta ist ein Baumaterial. Es gibt es in vielen verschiedenen Farben. -Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.=Glasierte Terrakotta ist ein dekorativer Block mit einem komplexen Muster. Sie kann rotiert werden, indem man sie in verschiedene Richtungen platziert. -Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.=Betonpulver wird benutzt, um Beton herzustellen, aber es kann auch selbst als Dekoration benutzt werden. Es kommt in verschiedenen Farben daher. Betonpulver verwandelt sich in Beton der selben Farbe, wenn es mit Wasser in Berührung kommt. -Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.=Beton ist ein dekorativer Block, der in verschiedenen Farben daherkommt. Er hat eine besonders kräftige und klare Farbe. -Terracotta=Terrakotta -Terracotta is a basic building material which comes in many different colors. This particular block is uncolored.=Terrakotta ist ein Baumaterial, welches in vielen verschiedenen Farben vorkommt. Diese Variante ist ungefärbt. -Colored Terracotta=Gefärbte Terrakotta -Glazed Terracotta=Glasierte Terrakotta -Concrete Powder=Betonpulver -Concrete=Beton -Turns into concrete on water contact=Wird zu Beton bei Wasserkontakt diff --git a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.es.tr b/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.es.tr deleted file mode 100644 index cae96e62a..000000000 --- a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.es.tr +++ /dev/null @@ -1,75 +0,0 @@ -# textdomain: mcl_colorblocks -White Terracotta=Terracota blanca -White Glazed Terracotta=Terracota cristalizada blanca -White Concrete Powder=Cemento blanco -White Concrete=Hormigón blanco -Grey Terracotta=Terracota gris -Grey Glazed Terracotta=Terracota cristalizada gris -Grey Concrete Powder=Cemento gris -Grey Concrete=Hormigón gris -Light Grey Terracotta=Terracota gris claro -Light Grey Glazed Terracotta=Terracota cristalizada gris claro -Light Grey Concrete Powder=Cemento gris claro -Light Grey Concrete=Hormigón gris claro -Black Terracotta=Terracota negra -Black Glazed Terracotta=Terracota cristalizada negra -Black Concrete Powder=Cemento negro -Black Concrete=Hormigón negro -Red Terracotta=Terracota roja -Red Glazed Terracotta=Terracota cristalizada roja -Red Concrete Powder=Cemento rojo -Red Concrete=Hormigón rojo -Yellow Terracotta=Terracota amarilla -Yellow Glazed Terracotta=Terracota cristalizada amarilla -Yellow Concrete Powder=Cemento amarillo -Yellow Concrete=Hormigón amarillo -Green Terracotta=Terracota verde -Green Glazed Terracotta=Terracota cristalizada verde -Green Concrete Powder=Cemento verde -Green Concrete=Hormigón verde -Cyan Terracotta=Terracota cian -Cyan Glazed Terracotta=Terracota cristalizada cian -Cyan Concrete Powder=Cemento cian -Cyan Concrete=Hormigón cian -Blue Terracotta=Terracota azul -Blue Glazed Terracotta=Terracota cristalizada azul -Blue Concrete Powder=Cemento azul -Blue Concrete=Hormigón azul -Magenta Terracotta=Terracota magenta -Magenta Glazed Terracotta=Terracota cristalizada magenta -Magenta Concrete Powder=Cemento magenta -Magenta Concrete=Hormigón magenta -Orange Terracotta=Terracota naranja -Orange Glazed Terracotta=Terracota cristalizada naranja -Orange Concrete Powder=Cemento naranja -Orange Concrete=Hormigón naranja -Purple Terracotta=Terracota morada -Purple Glazed Terracotta=Terracota cristalizada morada -Purple Concrete Powder=Cemento morado -Purple Concrete=Hormigón morado -Brown Terracotta=Terracota marrón -Brown Glazed Terracotta=Terracota cristalizada marrón -Brown Concrete Powder=Cemento marrón -Brown Concrete=Hormigón marrón -Pink Terracotta=Terracota rosa -Pink Glazed Terracotta=Terracota cristalizada rosa -Pink Concrete Powder=Cemento rosa -Pink Concrete=Hormigón rosa -Lime Terracotta=Terracota verde lima -Lime Glazed Terracotta=Terracota cristalizada verde lima -Lime Concrete Powder=Cemento verde lima -Lime Concrete=Hormigón verde lima -Light Blue Terracotta=Terracota azul claro -Light Blue Glazed Terracotta=Terracota cristalizada azul claro -Light Blue Concrete Powder=Cemento azul claro -Light Blue Concrete=Hormigón azul claro -Terracotta is a basic building material. It comes in many different colors.=La terracota es un material de construcción básico. Viene en muchos colores diferentes. -Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.=La terracota cristalizada es un bloque decorativo con un patrón complejo. Se puede girar colocándolo en diferentes direcciones. -Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.=La Cemento se usa para crear Hormigón, pero también se puede usar como decoración en sí. Viene en diferentes colores. La Cemento se convierte en Hormigón del mismo color cuando entra en contacto con el agua. -Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.=El Hormigón es un bloque decorativo que viene en muchos colores diferentes. Es notable por tener un color muy fuerte y limpio. -Terracotta=Terracota -Terracotta is a basic building material which comes in many different colors. This particular block is uncolored.=La terracota es un material de construcción básico que viene en muchos colores diferentes. Este bloque en particular no tiene color. -Colored Terracotta=Terracota coloreada -Glazed Terracotta=Terracota vidriada -Concrete Powder=Cemento -Concrete=Hormigón diff --git a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.fr.tr b/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.fr.tr deleted file mode 100644 index d457364ef..000000000 --- a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.fr.tr +++ /dev/null @@ -1,76 +0,0 @@ -# textdomain: mcl_colorblocks -White Terracotta=Terre Cuite Blanche -White Glazed Terracotta=Terre Cuite Emaillée Blanche -White Concrete Powder=Béton en Poudre Blanc -White Concrete=Béton Blanc -Grey Terracotta=Terre Cuite Grise -Grey Glazed Terracotta=Terre Cuite Emaillée Grise -Grey Concrete Powder=Béton en Poudre Gris -Grey Concrete=Béton Gris -Light Grey Terracotta=Terre Cuite Gris Clair -Light Grey Glazed Terracotta=Terre Cuite Emaillée Gris Clair -Light Grey Concrete Powder=Béton en Poudre Gris Clair -Light Grey Concrete=Béton Gris Clair -Black Terracotta=Terre Cuite Noir -Black Glazed Terracotta=Terre Cuite Emaillée Noir -Black Concrete Powder=Béton en Poudre Noir -Black Concrete=Béton Noir -Red Terracotta=Terre Cuite Rouge -Red Glazed Terracotta=Terre Cuite Emaillée Rouge -Red Concrete Powder=Béton en Poudre Rouge -Red Concrete=Béton Rouge -Yellow Terracotta=Terre Cuite Jaune -Yellow Glazed Terracotta=Terre Cuite Emaillée Jaune -Yellow Concrete Powder=Béton en Poudre Jaune -Yellow Concrete=Béton Jaune -Green Terracotta=Terre Cuite Verte -Green Glazed Terracotta=Terre Cuite Emaillée Verte -Green Concrete Powder=Béton en Poudre Vert -Green Concrete=Béton Vert -Cyan Terracotta=Terre Cuite Cyan -Cyan Glazed Terracotta=Terre Cuite Emaillée Cyan -Cyan Concrete Powder=Béton en Poudre Cyan -Cyan Concrete=Béton Cyan -Blue Terracotta=Terre Cuite Bleue -Blue Glazed Terracotta=Terre Cuite Emaillée Bleue -Blue Concrete Powder=Béton en Poudre Bleu -Blue Concrete=Béton Bleu -Magenta Terracotta=Terre Cuite Magenta -Magenta Glazed Terracotta=Terre Cuite Emaillée Magenta -Magenta Concrete Powder=Béton en Poudre Magenta -Magenta Concrete=Béton Magenta -Orange Terracotta=Terre Cuite Orange -Orange Glazed Terracotta=Terre Cuite Emaillée Orange -Orange Concrete Powder=Béton en Poudre Orange -Orange Concrete=Béton Orange -Purple Terracotta=Terre Cuite Violette -Purple Glazed Terracotta=Terre Cuite Emaillée Violette -Purple Concrete Powder=Béton en Poudre Violet -Purple Concrete=Béton Violet -Brown Terracotta=Terre Cuite Marron -Brown Glazed Terracotta=Terre Cuite Emaillée Marron -Brown Concrete Powder=Béton en Poudre Marron -Brown Concrete=Béton Marron -Pink Terracotta=Terre Cuite Rose -Pink Glazed Terracotta=Terre Cuite Emaillée Rose -Pink Concrete Powder=Béton en Poudre Rose -Pink Concrete=Béton Rose -Lime Terracotta=Terre Cuite Verte Clair -Lime Glazed Terracotta=Terre Cuite Emaillée Verte Clair -Lime Concrete Powder=Béton en Poudre Vert Clair -Lime Concrete=Béton Vert Clair -Light Blue Terracotta=Terre Cuite Bleu Clair -Light Blue Glazed Terracotta=Terre Cuite Emaillée Bleu Clair -Light Blue Concrete Powder=Béton en Poudre Bleu Clair -Light Blue Concrete=Béton Bleu Clair -Terracotta is a basic building material. It comes in many different colors.=La terre cuite est un matériau de construction de base. Il est disponible dans de nombreuses couleurs différentes. -Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.=La terre cuite émaillée est un bloc décoratif au motif complexe. Il peut être tourné en le plaçant dans différentes directions. -Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.=La poudre de béton est utilisée pour créer du béton, mais elle peut également être utilisée comme décoration elle-même. Il est disponible en différentes couleurs. La poudre de béton se transforme en béton de la même couleur au contact de l'eau. -Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.=Le béton est un bloc décoratif qui se décline en de nombreuses couleurs différentes. Il est remarquable pour avoir une couleur très forte et propre. -Terracotta=Terre Cuite -Terracotta is a basic building material which comes in many different colors. This particular block is uncolored.=La terre cuite est un matériau de construction de base qui se décline en de nombreuses couleurs différentes. Ce bloc particulier n'est pas coloré. -Colored Terracotta=Terre Cuite Coloré -Glazed Terracotta=Terre Cuite Emaillée -Concrete Powder=Béton en Poudre -Concrete=Béton -Turns into concrete on water contact=Se transforme en béton au contact de l'eau diff --git a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.pl.tr b/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.pl.tr deleted file mode 100644 index 90a6f2431..000000000 --- a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.pl.tr +++ /dev/null @@ -1,76 +0,0 @@ -# textdomain: mcl_colorblocks -White Terracotta=Biała terakota -White Glazed Terracotta=Biała glazurowana terakota -White Concrete Powder=Biały cement -White Concrete=Biały beton -Grey Terracotta=Szara terakota -Grey Glazed Terracotta=Szara glazurowana terakota -Grey Concrete Powder=Szary cement -Grey Concrete=Szary beton -Light Grey Terracotta=Jasnoszara terakota -Light Grey Glazed Terracotta=Jasnoszara glazurowana terakota -Light Grey Concrete Powder=Jasnoszary cement -Light Grey Concrete=Jasnoszary beton -Black Terracotta=Czarna terakota -Black Glazed Terracotta=Czarna glazurowana terakota -Black Concrete Powder=Czarny cement -Black Concrete=Czarny beton -Red Terracotta=Czerwona terakota -Red Glazed Terracotta=Czerwona glazurowana terakota -Red Concrete Powder=Czerwony cement -Red Concrete=Czerwony beton -Yellow Terracotta=Żółta terakota -Yellow Glazed Terracotta=Żółta glazurowana terakota -Yellow Concrete Powder=Żółty cement -Yellow Concrete=Żółty beton -Green Terracotta=Zielona terakota -Green Glazed Terracotta=Zielona glazurowana terakota -Green Concrete Powder=Zielony cement -Green Concrete=Zielony beton -Cyan Terracotta=Błękitna terakota -Cyan Glazed Terracotta=Błękitna glazurowana terakota -Cyan Concrete Powder=Błękitny cement -Cyan Concrete=Błękitny beton -Blue Terracotta=Niebieska terakota -Blue Glazed Terracotta=Niebieska glazurowana terakota -Blue Concrete Powder=Niebieski cement -Blue Concrete=Niebieski beton -Magenta Terracotta=Karmazynowa terakota -Magenta Glazed Terracotta=Karmazynowa glazurowana terakota -Magenta Concrete Powder=Karmazynowy cement -Magenta Concrete=Karmazynowy beton -Orange Terracotta=Pomarańczowa terakota -Orange Glazed Terracotta=Pomarańczowa glazurowana terakota -Orange Concrete Powder=Pomarańczowy cement -Orange Concrete=Pomarańczowy beton -Purple Terracotta=Fioletowa terakota -Purple Glazed Terracotta=Fioletowa glazurowana terakota -Purple Concrete Powder=Fioletowy cement -Purple Concrete=Fioletowy beton -Brown Terracotta=Brązowa terakota -Brown Glazed Terracotta=Brązowa glazurowana terakota -Brown Concrete Powder=Brązowy cement -Brown Concrete=Brązowy beton -Pink Terracotta=Różowa terakota -Pink Glazed Terracotta=Różowa glazurowana terakota -Pink Concrete Powder=Różowy cement -Pink Concrete=Różowy beton -Lime Terracotta=Jasnozielona terakota -Lime Glazed Terracotta=Jasnozielona glazurowana terakota -Lime Concrete Powder=Jasnozielony cement -Lime Concrete=Jasnozielony beton -Light Blue Terracotta=Jasnoniebieska terakota -Light Blue Glazed Terracotta=Jasnoniebieska glazurowana terakota -Light Blue Concrete Powder=Jasnoniebieski cement -Light Blue Concrete=Jasnoniebieski beton -Terracotta is a basic building material. It comes in many different colors.=Terakota jest podstawowym blokiem budowlanym. Może mieć wiele różnych kolorów. -Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.=Glazurowana terakota jest dekoracyjnym blokiem ze złożonym wzorem. Może być obracana przez stawianie jej w różnych kierunkach. -Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.=Cement jest używany do stworzenia betonu, ale może być również sam użyty jako dekoracja. Może mieć wiele różnych kolorów. Cement zamienia się w beton tego samego koloru gdy wejdzie w kontakt z wodą. -Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.=Beton jest blokiem dekoracyjnym, który może mieć wiele różnych kolorów. Jest warty uwagi ze względu na swój czysty i wyrazisty kolor. -Terracotta=Terakota -Terracotta is a basic building material which comes in many different colors. This particular block is uncolored.=Terakota jest podstawowym blokiem budowlanym, który może mieć wiele różnych kolorów. Ten konkretny blok nie ma żadnego koloru. -Colored Terracotta=Barwiona terakota -Glazed Terracotta=Glazurowana terakota -Concrete Powder=Cement -Concrete=Beton -Turns into concrete on water contact=Zamienia się w beton w kontakcie z wodą diff --git a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.ru.tr b/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.ru.tr deleted file mode 100644 index e1d694457..000000000 --- a/mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.ru.tr +++ /dev/null @@ -1,76 +0,0 @@ -# textdomain: mcl_colorblocks -White Terracotta=Белая керамика -White Glazed Terracotta=Белая глазурованная керамика -White Concrete Powder=Белый цемент -White Concrete=Белый бетон -Grey Terracotta=Серая керамика -Grey Glazed Terracotta=Серая глазурованная керамика -Grey Concrete Powder=Серый цемент -Grey Concrete=Серый бетон -Light Grey Terracotta=Светло-серая керамика -Light Grey Glazed Terracotta=Светло-серая глазурованная керамика -Light Grey Concrete Powder=Светло-серый цемент -Light Grey Concrete=Светло-серый бетон -Black Terracotta=Чёрная керамика -Black Glazed Terracotta=Чёрная глазурованная керамика -Black Concrete Powder=Чёрный цемент -Black Concrete=Чёрный бетон -Red Terracotta=Красная керамика -Red Glazed Terracotta=Красная глазурованная керамика -Red Concrete Powder=Красный цемент -Red Concrete=Красный бетон -Yellow Terracotta=Жёлтая керамика -Yellow Glazed Terracotta=Жёлтая глазурованная керамика -Yellow Concrete Powder=Жёлтый цемент -Yellow Concrete=Жёлтый бетон -Green Terracotta=Зелёная керамика -Green Glazed Terracotta=Зелёная глазурованная керамика -Green Concrete Powder=Зелёный цемент -Green Concrete=Зелёный бетон -Cyan Terracotta=Голубая керамика -Cyan Glazed Terracotta=Голубая глазурованная керамика -Cyan Concrete Powder=Голубой цемент -Cyan Concrete=Голубой бетон -Blue Terracotta=Синяя керамика -Blue Glazed Terracotta=Синяя глазурованная керамика -Blue Concrete Powder=Синий цемент -Blue Concrete=Синий бетон -Magenta Terracotta=Фиолетовая керамика -Magenta Glazed Terracotta=Фиолетовая глазурованная керамика -Magenta Concrete Powder=Фиолетовый цемент -Magenta Concrete=Фиолетовый бетон -Orange Terracotta=Оранжевая керамика -Orange Glazed Terracotta=Оранжевая глазурованная керамика -Orange Concrete Powder=Оранжевый цемент -Orange Concrete=Оранжевый бетон -Purple Terracotta=Пурпурная керамика -Purple Glazed Terracotta=Пурпурная глазурованная керамика -Purple Concrete Powder=Пурпурный цемент -Purple Concrete=Пурпурный бетон -Brown Terracotta=Коричневая керамика -Brown Glazed Terracotta=Коричневая глазурованная керамика -Brown Concrete Powder=Коричневый цемент -Brown Concrete=Коричневый бетон -Pink Terracotta=Розовая керамика -Pink Glazed Terracotta=Розовая глазурованная керамика -Pink Concrete Powder=Розовый цемент -Pink Concrete=Розовый бетон -Lime Terracotta=Зелёная лаймовая керамика -Lime Glazed Terracotta=Зелёная лаймовая глазурованная керамика -Lime Concrete Powder=Зелёный лаймовый цемент -Lime Concrete=Зелёный лаймовый бетон -Light Blue Terracotta=Светло-голубая керамика -Light Blue Glazed Terracotta=Светло-голубая глазурованная керамика -Light Blue Concrete Powder=Светло-голубой цемент -Light Blue Concrete=Светло-голубой бетон -Terracotta is a basic building material. It comes in many different colors.=Керамика это основной строительный материал. Он бывает разных цветов. -Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.=Глазурованная керамика это декоративный блок со сложным орнаментом. -Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.=Цемент используется для создания бетона, хотя также может быть украшением сам по себе. Он бывает разных цветов. При контакте с водой цемент превращается в бетон, сохраняя свой цвет. -Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.=Бетон это декоративный блок, который бывает разных цветов. Бетон славится хорошим и чистым цветом. -Terracotta=Керамика -Terracotta is a basic building material which comes in many different colors. This particular block is uncolored.=Керамика - основной строительный материал, который может быть разных цветов. Обычный блок керамики не окрашен. -Colored Terracotta=Окрашенная керамика -Glazed Terracotta=Глазурованная керамика -Concrete Powder=Цемент -Concrete=Бетон -Turns into concrete on water contact=Превращается в бетон при контакте с водой diff --git a/mods/ITEMS/mcl_colorblocks/locale/template.txt b/mods/ITEMS/mcl_colorblocks/locale/template.txt deleted file mode 100644 index ca1c059a1..000000000 --- a/mods/ITEMS/mcl_colorblocks/locale/template.txt +++ /dev/null @@ -1,76 +0,0 @@ -# textdomain: mcl_colorblocks -White Terracotta= -White Glazed Terracotta= -White Concrete Powder= -White Concrete= -Grey Terracotta= -Grey Glazed Terracotta= -Grey Concrete Powder= -Grey Concrete= -Light Grey Terracotta= -Light Grey Glazed Terracotta= -Light Grey Concrete Powder= -Light Grey Concrete= -Black Terracotta= -Black Glazed Terracotta= -Black Concrete Powder= -Black Concrete= -Red Terracotta= -Red Glazed Terracotta= -Red Concrete Powder= -Red Concrete= -Yellow Terracotta= -Yellow Glazed Terracotta= -Yellow Concrete Powder= -Yellow Concrete= -Green Terracotta= -Green Glazed Terracotta= -Green Concrete Powder= -Green Concrete= -Cyan Terracotta= -Cyan Glazed Terracotta= -Cyan Concrete Powder= -Cyan Concrete= -Blue Terracotta= -Blue Glazed Terracotta= -Blue Concrete Powder= -Blue Concrete= -Magenta Terracotta= -Magenta Glazed Terracotta= -Magenta Concrete Powder= -Magenta Concrete= -Orange Terracotta= -Orange Glazed Terracotta= -Orange Concrete Powder= -Orange Concrete= -Purple Terracotta= -Purple Glazed Terracotta= -Purple Concrete Powder= -Purple Concrete= -Brown Terracotta= -Brown Glazed Terracotta= -Brown Concrete Powder= -Brown Concrete= -Pink Terracotta= -Pink Glazed Terracotta= -Pink Concrete Powder= -Pink Concrete= -Lime Terracotta= -Lime Glazed Terracotta= -Lime Concrete Powder= -Lime Concrete= -Light Blue Terracotta= -Light Blue Glazed Terracotta= -Light Blue Concrete Powder= -Light Blue Concrete= -Terracotta is a basic building material. It comes in many different colors.= -Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.= -Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.= -Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.= -Terracotta= -Terracotta is a basic building material which comes in many different colors. This particular block is uncolored.= -Colored Terracotta= -Glazed Terracotta= -Concrete Powder= -Concrete= -Turns into concrete on water contact= diff --git a/mods/ITEMS/mcl_colorblocks/mod.conf b/mods/ITEMS/mcl_colorblocks/mod.conf deleted file mode 100644 index dab0ce589..000000000 --- a/mods/ITEMS/mcl_colorblocks/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_colorblocks -description = Adds blocks which can be colored, namely hardened clay. -depends = mcl_core, mcl_sounds, mcl_dye -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay.png deleted file mode 100644 index b593db8f4..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_black.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_black.png deleted file mode 100644 index 223a5f8dc..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_blue.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_blue.png deleted file mode 100644 index 168484808..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_brown.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_brown.png deleted file mode 100644 index f742362d6..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_cyan.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_cyan.png deleted file mode 100644 index c8e406750..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_green.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_green.png deleted file mode 100644 index b01606528..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_grey.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_grey.png deleted file mode 100644 index f90378374..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_light_blue.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_light_blue.png deleted file mode 100644 index 80babe531..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_lime.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_lime.png deleted file mode 100644 index 46150314a..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_magenta.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_magenta.png deleted file mode 100644 index 600824b82..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_orange.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_orange.png deleted file mode 100644 index d03046b0a..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_pink.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_pink.png deleted file mode 100644 index 6a121cebf..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_purple.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_purple.png deleted file mode 100644 index 9c13af8c2..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_red.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_red.png deleted file mode 100644 index 5fb28150c..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_silver.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_silver.png deleted file mode 100644 index 41271e900..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_white.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_white.png deleted file mode 100644 index c21334307..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_yellow.png b/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_yellow.png deleted file mode 100644 index 9d21ed2ee..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/hardened_clay_stained_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_black.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_black.png deleted file mode 100644 index d0787ab94..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_blue.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_blue.png deleted file mode 100644 index 530be0509..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_brown.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_brown.png deleted file mode 100644 index 3344f0757..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_cyan.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_cyan.png deleted file mode 100644 index 64f5bfacf..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_green.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_green.png deleted file mode 100644 index 5d1e5366c..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_grey.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_grey.png deleted file mode 100644 index 885b62fc7..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_light_blue.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_light_blue.png deleted file mode 100644 index a6afea9d7..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_lime.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_lime.png deleted file mode 100644 index d7ac27946..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_magenta.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_magenta.png deleted file mode 100644 index 258efb786..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_orange.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_orange.png deleted file mode 100644 index 8d931086f..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_pink.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_pink.png deleted file mode 100644 index 75dfa29a1..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_black.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_black.png deleted file mode 100644 index f3447237b..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_blue.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_blue.png deleted file mode 100644 index 12c64fc6d..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_brown.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_brown.png deleted file mode 100644 index 9e355c8a4..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_cyan.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_cyan.png deleted file mode 100644 index c0a6e4f05..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_green.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_green.png deleted file mode 100644 index f4013845b..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_grey.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_grey.png deleted file mode 100644 index 23d957a8f..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_light_blue.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_light_blue.png deleted file mode 100644 index da4f461c4..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_lime.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_lime.png deleted file mode 100644 index 536e5edc3..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_magenta.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_magenta.png deleted file mode 100644 index 9357b6161..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_orange.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_orange.png deleted file mode 100644 index e589eaa49..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_pink.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_pink.png deleted file mode 100644 index 4a949719f..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_purple.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_purple.png deleted file mode 100644 index d204b036a..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_red.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_red.png deleted file mode 100644 index 32195ff46..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_silver.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_silver.png deleted file mode 100644 index 37edd79b9..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_white.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_white.png deleted file mode 100644 index 86f2a848d..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_yellow.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_yellow.png deleted file mode 100644 index 83d693e09..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_powder_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_purple.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_purple.png deleted file mode 100644 index 4d6953695..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_red.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_red.png deleted file mode 100644 index a02379ed3..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_silver.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_silver.png deleted file mode 100644 index 0eb56f1f9..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_white.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_white.png deleted file mode 100644 index 4561f6538..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_yellow.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_yellow.png deleted file mode 100644 index 990a5d2d9..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_concrete_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_black.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_black.png deleted file mode 100644 index 04eab4393..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_blue.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_blue.png deleted file mode 100644 index 1fd064eae..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_brown.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_brown.png deleted file mode 100644 index 4adcb671a..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_cyan.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_cyan.png deleted file mode 100644 index 6289015a6..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_green.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_green.png deleted file mode 100644 index 61b7440a5..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_grey.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_grey.png deleted file mode 100644 index 2f3813ada..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_light_blue.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_light_blue.png deleted file mode 100644 index f78fa94a1..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_lime.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_lime.png deleted file mode 100644 index 7e944f5f7..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_magenta.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_magenta.png deleted file mode 100644 index 0673eab67..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_orange.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_orange.png deleted file mode 100644 index 470d56943..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_pink.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_pink.png deleted file mode 100644 index 7e71e8c8b..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_purple.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_purple.png deleted file mode 100644 index f9d025bf9..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_red.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_red.png deleted file mode 100644 index 5f2fa718b..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_silver.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_silver.png deleted file mode 100644 index c634af477..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_white.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_white.png deleted file mode 100644 index 65757aabf..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_yellow.png b/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_yellow.png deleted file mode 100644 index 2f2bb4474..000000000 Binary files a/mods/ITEMS/mcl_colorblocks/textures/mcl_colorblocks_glazed_terracotta_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/API.md b/mods/ITEMS/mcl_compass/API.md deleted file mode 100644 index 8a8e7247e..000000000 --- a/mods/ITEMS/mcl_compass/API.md +++ /dev/null @@ -1,20 +0,0 @@ -# mcl_compass - -# Compass API - -##mcl_compass.stereotype = "mcl_compass:" .. stereotype_frame -Default compass craftitem. This is also the image that is shown in the inventory. - -##mcl_compass/init.lua:function mcl_compass.get_compass_itemname(pos, dir, itemstack) -Returns the itemname of a compass with needle direction matching the -current compass position. - - pos: position of the compass; - dir: rotational orientation of the compass; - itemstack: the compass including its optional lodestone metadata. - -##mcl_compass/init.lua:function mcl_compass.get_compass_image(pos, dir) --- Returns partial itemname of a compass with needle direction matching compass position. --- Legacy compatibility function for mods using older api. - - diff --git a/mods/ITEMS/mcl_compass/init.lua b/mods/ITEMS/mcl_compass/init.lua deleted file mode 100644 index 0bcc3f0af..000000000 --- a/mods/ITEMS/mcl_compass/init.lua +++ /dev/null @@ -1,290 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_compass = {} - -local compass_types = { - { - name = "compass", - desc = S("Compass"), - tt = S("Points to the world origin"), - longdesc = S("Compasses are tools which point to the world origin (X=0, Z=0) or the spawn point in the Overworld."), - usagehelp = S("A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly."), - }, - { - name = "compass_lodestone", - desc = S("Lodestone Compass"), - tt = S("Points to a lodestone"), - longdesc = S("Lodestone compasses resemble regular compasses, but they point to a specific lodestone."), - usagehelp = S("A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone."), - } -} - --- Number of dynamic compass images (and items registered.) -local compass_frames = 32 - --- The image/item that is craftable and shown in inventories. -local stereotype_frame = 18 - --- random compass spinning tick in seconds. --- Increase if there are performance problems. -local spin_timer_tick = 0.5 - --- Local aliases to globals for better lua performance -local m_deg = math.deg -local m_atan2 = math.atan2 -local m_floor = math.floor -local m_rnd = math.random -local vec_new = vector.new -local string_find = string.find -local string_to_pos = minetest.string_to_pos -local get_connected_players = minetest.get_connected_players -local get_item_group = minetest.get_item_group -local setting_get_pos = minetest.setting_get_pos -local compass_works = mcl_worlds.compass_works -local y_to_layer = mcl_worlds.y_to_layer - --- Initialize random compass frame for spinning compass. It is updated in --- the compass globalstep function. -local random_frame = m_rnd(0, compass_frames-1) - -local function get_far_node(pos, itemstack) --code from minetest dev wiki: https://dev.minetest.net/minetest.get_node, some edits have been made to add a cooldown for force loads - local node = minetest.get_node(pos) - if node.name == "ignore" then - local tstamp = tonumber(itemstack:get_meta():get_string("last_forceload")) - if tstamp == nil then --this is only relevant for new lodestone compasses, the ones that have never performes a forceload yet - itemstack:get_meta():set_string("last_forceload", tostring(os.time(os.date("!*t")))) - tstamp = tonumber(os.time(os.date("!*t"))) - end - if tonumber(os.time(os.date("!*t"))) - tstamp > 180 then --current time in secounds - old time in secounds, if it is over 180 (3 mins): forceload - itemstack:get_meta():set_string("last_forceload", tostring(os.time(os.date("!*t")))) - minetest.get_voxel_manip():read_from_map(pos, pos) - node = minetest.get_node(pos) - else - node = {name="mcl_compass:lodestone"} --cooldown not over yet, pretend like there is something... - end - end - return node -end - ---- Get compass needle angle. --- Returns the angle that the compass needle should point at expressed in --- 360 degrees divided by the number of possible compass image frames.. --- --- pos: position of the compass; --- target: position that the needle points towards; --- dir: rotational direction of the compass. --- -local function get_compass_angle(pos, target, dir) - local angle_north = m_deg(m_atan2(target.x - pos.x, target.z - pos.z)) - if angle_north < 0 then angle_north = angle_north + 360 end - local angle_dir = -m_deg(dir) - local angle_relative = (angle_north - angle_dir + 180) % 360 - return m_floor((angle_relative/11.25) + 0.5) % compass_frames -end - ---- Get compass image frame. --- Returns the compass image frame with the needle direction matching the --- compass' current position. --- --- pos: position of the compass; --- dir: rotational direction of the compass. --- itemstack: the compass including its optional lodestone metadata. --- -local function get_compass_frame(pos, dir, itemstack) - if not string_find(itemstack:get_name(), "_lodestone") then -- normal compass - -- Compasses only work in the overworld - if compass_works(pos) then - local spawn_pos = setting_get_pos("static_spawnpoint") - or vec_new(0, 0, 0) - return get_compass_angle(pos, spawn_pos, dir) - else - return random_frame - end - else -- lodestone compass - local lpos_str = itemstack:get_meta():get_string("pointsto") - local lpos = string_to_pos(lpos_str) - if not lpos then - minetest.log("warning", "mcl_compass: invalid lodestone position!") - return random_frame - end - local _, l_dim = y_to_layer(lpos.y) - local _, p_dim = y_to_layer(pos.y) - -- compass and lodestone must be in the same dimension - if l_dim == p_dim then - --check if lodestone still exists - if get_far_node(lpos, itemstack).name == "mcl_compass:lodestone" then - return get_compass_angle(pos, lpos, dir) - else -- lodestone got destroyed - return random_frame - end - else - return random_frame - end - end -end - --- Export stereotype item for other mods to use -mcl_compass.stereotype = "mcl_compass:" .. stereotype_frame - ---- Get partial compass itemname. --- Returns partial itemname of a compass with needle direction matching compass position. --- Legacy compatibility function for mods using older api. --- -function mcl_compass.get_compass_image(pos, dir) - minetest.log("warning", "mcl_compass: deprecated function " .. - "get_compass_image() called, use get_compass_itemname().") - local itemstack = ItemStack(mcl_compass.stereotype) - return get_compass_frame(pos, dir, itemstack) -end - ---- Get compass itemname. --- Returns the itemname of a compass with needle direction matching the --- current compass position. --- --- pos: position of the compass; --- dir: rotational orientation of the compass; --- itemstack: the compass including its optional lodestone metadata. --- -function mcl_compass.get_compass_itemname(pos, dir, itemstack) - if not itemstack then - minetest.log("warning", "mcl_compass.get_compass_image called without itemstack!") - return "mcl_compass:" .. stereotype_frame - end - local frame = get_compass_frame(pos, dir, itemstack) - if itemstack:get_meta():get_string("pointsto") ~= "" then - return "mcl_compass:" .. frame .. "_lodestone" - else - return "mcl_compass:" .. frame - end -end - --- Timer for randomly spinning compass. --- Gets updated and checked in the globalstep function. -local spin_timer = 0 - --- Compass globalstep function. --- * updates random spin counter and random frame of spinning compasses; --- * updates all compasses in player's inventories to match the correct --- needle orientations for their current positions. --- -minetest.register_globalstep(function(dtime) - spin_timer = spin_timer + dtime - if spin_timer >= spin_timer_tick then - random_frame = (random_frame + m_rnd(-1, 1)) % compass_frames - spin_timer = 0 - end - - local compass_nr, compass_frame - local pos, dir, inv - for _, player in pairs(get_connected_players()) do - pos = player:get_pos() - dir = player:get_look_horizontal() - inv = player:get_inventory() - for j, stack in pairs(inv:get_list("main")) do - compass_nr = get_item_group(stack:get_name(), "compass") - if compass_nr ~= 0 then - -- check if current compass image still matches true orientation - compass_frame = get_compass_frame(pos, dir, stack) - if compass_nr - 1 ~= compass_frame then - - if string_find(stack:get_name(), "_lodestone") then - stack:set_name("mcl_compass:" .. compass_frame .. "_lodestone") - else - stack:set_name("mcl_compass:" .. compass_frame) - end - inv:set_stack("main", j, stack) - end - end - end - end -end) - --- --- Node and craftitem definitions --- -local doc_mod = minetest.get_modpath("doc") - -for _, item in pairs(compass_types) do - local name_fmt, img_fmt - if item.name == "compass" then - name_fmt = "mcl_compass:%d" - img_fmt = "mcl_compass_compass_%02d.png" - elseif item.name == "compass_lodestone" then - name_fmt = "mcl_compass:%d_lodestone" - img_fmt = "mcl_compass_compass_%02d.png^[colorize:purple:50" - end - for i = 0, compass_frames - 1 do - local itemstring = string.format(name_fmt, i) - local def = { - description = item.desc, - _tt_help = item.tt, - inventory_image = string.format(img_fmt, i), - wield_image = string.format(img_fmt, i), - groups = {compass = i + 1, tool = 1, disable_repair = 1}, - } - if i == stereotype_frame then - def._doc_items_longdesc = item.longdesc - def._doc_items_usagehelp = item.usagehelp - if string.match(itemstring, "lodestone") then - def.groups.not_in_creative_inventory = 1 - end - else - def._doc_items_create_entry = false - def.groups.not_in_creative_inventory = 1 - end - minetest.register_craftitem(itemstring, table.copy(def)) - - -- Help aliases. Makes sure the lookup tool works correctly - if doc_mod and i ~= stereotype_frame then - doc.add_entry_alias("craftitems", "mcl_compass:"..(stereotype_frame), "craftitems", itemstring) - end - end -end - -minetest.register_craft({ - output = "mcl_compass:" .. stereotype_frame, - recipe = { - {"", "mcl_core:iron_ingot", ""}, - {"mcl_core:iron_ingot", "mesecons:redstone", "mcl_core:iron_ingot"}, - {"", "mcl_core:iron_ingot", ""} - } -}) - -minetest.register_alias("mcl_compass:compass", "mcl_compass:" .. stereotype_frame) - - -minetest.register_node("mcl_compass:lodestone",{ - description=S("Lodestone"), - on_rightclick = function(pos, node, player, itemstack) - local name = itemstack.get_name(itemstack) - if string_find(name,"mcl_compass:") then - if name ~= "mcl_compass:lodestone" then - itemstack:get_meta():set_string("pointsto", minetest.pos_to_string(pos)) - local dir = player:get_look_horizontal() - local frame = get_compass_frame(pos, dir, itemstack) - itemstack:set_name("mcl_compass:" .. frame .. "_lodestone") - end - end - end, - tiles = { - "lodestone_top.png", - "lodestone_bottom.png", - "lodestone_side1.png", - "lodestone_side2.png", - "lodestone_side3.png", - "lodestone_side4.png" - }, - groups = {pickaxey=1, material_stone=1}, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 6, - sounds = mcl_sounds.node_sound_stone_defaults() -}) - -minetest.register_craft({ - output = "mcl_compass:lodestone", - recipe = { - {"mcl_core:stonebrickcarved","mcl_core:stonebrickcarved","mcl_core:stonebrickcarved"}, - {"mcl_core:stonebrickcarved", "mcl_core:diamondblock", "mcl_core:stonebrickcarved"}, - {"mcl_core:stonebrickcarved", "mcl_core:stonebrickcarved", "mcl_core:stonebrickcarved"} - } -}) diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr deleted file mode 100644 index 9e0366508..000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Kompass -Points to the world origin=Zeigt zum Startpunkt der Welt -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Kompasse sind Werkzeuge, die zum Ursprungspunkt der Welt (X@=0, Z@=0) oder zum Einstiegspunkt der Welt zeigen. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.=Ein Kompass zeigt immer zum Weltspawn in der Oberwelt. In sämtlichen anderen Dimensionen dreht er sich zufällig. -Lodestone Compass=Leitstein Kompass -Points to a lodestone=Zeigt zu einem Leitstein -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.=Leitstein Kompasse ähneln normalen Kompassen, aber sie zeigen zu einen spezifischen Leitstein. -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.=Ein Leitstein Kompass kann mit einem normalen Kompass erstellt werden indem man ihn auf einem Leitstein benutzt. Nachdem er ein Leitstein Kompass geworden ist, wird er immer zu seinem Leitstein zeigen, sofern sie in der selben Dimension sind. Wenn sie nicht in der selben Dimension sind, dreht sich der Leitstein Kompass zufällig, wie ein normaler Kompass außerhalb der Oberwelt. Ein Leitstein Kompass kann mit einem anderem Leitstein verknüpft werden. diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.es.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.es.tr deleted file mode 100644 index 77b36cad9..000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.es.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Brújula -Points to the world origin= -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Las brújulas son herramientas que apuntan al origen del mundo (X @ = 0, Z @ = 0) o al punto de generación en el mundo. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.fr.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.fr.tr deleted file mode 100644 index c09b334a0..000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Boussole -Points to the world origin=Pointe vers l'origine mondiale -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Les boussoles sont des outils qui pointent vers l'origine du monde (X@=0,Z@=0) ou le point d'apparition dans l'Overworld. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr deleted file mode 100644 index 33ac4b204..000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Kompas -Points to the world origin=Wskazuje na początek świata -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Kompasy to narzędzia które wskazują na punkt początku świata (X@=0, Z@=0) lub na miejsce odrodzenia na Powierzchni. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.ru.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.ru.tr deleted file mode 100644 index 7fd98de87..000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Компас -Points to the world origin=Указывает на начало мира -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Компас - инструмент, показывающий на начало мира (X@=0, Z@=0) или на точку возрождения в Верхнем Мире. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.zh_TW.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.zh_TW.tr deleted file mode 100644 index 257487a55..000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.zh_TW.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=指南針 -Points to the world origin=指向世界原點 -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=指南針是指向世界原點(X@=0,Z@=0)或主世界的出生點的工具。 -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/template.txt b/mods/ITEMS/mcl_compass/locale/template.txt deleted file mode 100644 index 909e21a36..000000000 --- a/mods/ITEMS/mcl_compass/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass= -Points to the world origin= -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.= -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/mod.conf b/mods/ITEMS/mcl_compass/mod.conf deleted file mode 100644 index f63a6f307..000000000 --- a/mods/ITEMS/mcl_compass/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_compass -description = A compass item which points towards the world origin. -depends = mcl_core, mcl_worlds, mesecons, mcl_sounds -optional_depends = doc \ No newline at end of file diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_bottom.png b/mods/ITEMS/mcl_compass/textures/lodestone_bottom.png deleted file mode 100644 index 64ddb76ce..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side1.png b/mods/ITEMS/mcl_compass/textures/lodestone_side1.png deleted file mode 100644 index a4446b95e..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side2.png b/mods/ITEMS/mcl_compass/textures/lodestone_side2.png deleted file mode 100644 index fd9a1a2a5..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side3.png b/mods/ITEMS/mcl_compass/textures/lodestone_side3.png deleted file mode 100644 index 43224083d..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side4.png b/mods/ITEMS/mcl_compass/textures/lodestone_side4.png deleted file mode 100644 index 21dadc9f7..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_top.png b/mods/ITEMS/mcl_compass/textures/lodestone_top.png deleted file mode 100644 index 77c2064e1..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_00.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_00.png deleted file mode 100644 index 5ba59433d..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_00.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_01.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_01.png deleted file mode 100644 index 4688db60d..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_01.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_02.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_02.png deleted file mode 100644 index 2eea92a92..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_02.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_03.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_03.png deleted file mode 100644 index cfee32dbe..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_03.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_04.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_04.png deleted file mode 100644 index a003926e5..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_04.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_05.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_05.png deleted file mode 100644 index c00cdb581..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_05.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_06.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_06.png deleted file mode 100644 index dbf15cdf1..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_06.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_07.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_07.png deleted file mode 100644 index 24838ba62..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_07.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_08.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_08.png deleted file mode 100644 index 24838ba62..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_08.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_09.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_09.png deleted file mode 100644 index 24838ba62..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_09.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_10.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_10.png deleted file mode 100644 index 09f0f1bc4..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_10.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_11.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_11.png deleted file mode 100644 index a95c140b7..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_11.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_12.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_12.png deleted file mode 100644 index 1312d6804..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_12.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_13.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_13.png deleted file mode 100644 index 0e9d32f00..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_13.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_14.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_14.png deleted file mode 100644 index 99487e859..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_14.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_15.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_15.png deleted file mode 100644 index bae157bf9..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_15.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_16.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_16.png deleted file mode 100644 index 8ea7cd66d..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_16.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_17.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_17.png deleted file mode 100644 index 8886d2d2b..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_17.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_18.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_18.png deleted file mode 100644 index bba1dbe98..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_18.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_19.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_19.png deleted file mode 100644 index 061524019..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_19.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_20.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_20.png deleted file mode 100644 index 1e2fe0976..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_20.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_21.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_21.png deleted file mode 100644 index b221bd234..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_21.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_22.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_22.png deleted file mode 100644 index d2abb3280..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_22.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_23.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_23.png deleted file mode 100644 index 1f043f07a..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_23.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_24.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_24.png deleted file mode 100644 index 1f043f07a..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_24.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_25.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_25.png deleted file mode 100644 index 1f043f07a..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_25.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_26.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_26.png deleted file mode 100644 index e225882be..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_26.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_27.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_27.png deleted file mode 100644 index dae8fd874..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_27.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_28.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_28.png deleted file mode 100644 index 7ce2d4699..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_28.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_29.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_29.png deleted file mode 100644 index 0dd780646..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_29.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_30.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_30.png deleted file mode 100644 index 9b3e1e020..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_30.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_31.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_31.png deleted file mode 100644 index ecf1d17eb..000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_31.png and /dev/null differ diff --git a/mods/ITEMS/mcl_composters/init.lua b/mods/ITEMS/mcl_composters/init.lua deleted file mode 100644 index 56422d8b5..000000000 --- a/mods/ITEMS/mcl_composters/init.lua +++ /dev/null @@ -1,276 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- --- Composter mod, adds composters. --- --- Copyleft 2022 by kabou --- GNU General Public Licence 3.0 --- - -local composter_description = S( - "Composter" -) -local composter_longdesc = S( - "Composters can convert various organic items into bonemeal." -) -local composter_usagehelp = S( - "Use organic items on the composter to fill it with layers of compost. " .. - "Every time an item is put in the composter, there is a chance that the " .. - "composter adds another layer of compost. Some items have a bigger chance " .. - "of adding an extra layer than other items. After filling up with 7 layers " .. - "of compost, the composter is full. After a delay of approximately one " .. - "second the composter becomes ready and bone meal can be retrieved from it. " .. - "Right-clicking the composter takes out the bone meal empties the composter." -) - -minetest.register_craft({ - output = "mcl_composters:composter", - recipe = { - {"group:wood_slab", "", "group:wood_slab"}, - {"group:wood_slab", "", "group:wood_slab"}, - {"group:wood_slab", "group:wood_slab", "group:wood_slab"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_composters:composter", - burntime = 15, -}) - -local get_item_group = minetest.get_item_group -local is_creative_enabled = minetest.is_creative_enabled -local registered_nodes = minetest.registered_nodes -local swap_node = minetest.swap_node -local get_node_timer = minetest.get_node_timer -local add_item = minetest.add_item -local vector_offset = vector.offset -local is_protected = minetest.is_protected -local record_protection_violation = minetest.record_protection_violation - ---- Fill the composter when rightclicked. --- --- `on_rightclick` handler for composter blocks of all fill levels except --- for the "ready" composter (see: composter_harvest). --- If the item used on the composter block is compostable, there is a chance --- that the level of the composter may increase, depending on the value of --- compostability of the item. --- --- parameters are the standard parameters passed to `on_rightclick`. --- returns the remaining itemstack. --- -local function composter_add_item(pos, node, player, itemstack, pointed_thing) - if not player or (player:get_player_control() and player:get_player_control().sneak) then - return itemstack - end - local name = player:get_player_name() - if is_protected(pos, name) then - record_protection_violation(pos, name) - return itemstack - end - if not itemstack or itemstack:is_empty() then - return itemstack - end - local itemname = itemstack:get_name() - local chance = get_item_group(itemname, "compostability") - if chance > 0 then - if not is_creative_enabled(player:get_player_name()) then - itemstack:take_item() - end - -- calculate leveling up chance - local rand = math.random(0,100) - if chance >= rand then - -- get current compost level - local level = registered_nodes[node.name]["_mcl_compost_level"] - -- spawn green particles above new layer - mcl_dye.add_bone_meal_particle(vector_offset(pos, 0, level/8, 0)) - -- TODO: play some sounds - -- update composter block - if level < 7 then - level = level + 1 - else - level = "ready" - end - swap_node(pos, {name = "mcl_composters:composter_" .. level}) - -- a full composter becomes ready for harvest after one second - -- the block will get updated by the node timer callback set in node reg def - if level == 7 then - local timer = get_node_timer(pos) - timer:start(1) - end - end - end - return itemstack -end - ---- Update a full composter block to ready for harvesting. --- --- `on_timer` handler. The timer is set in function 'composter_add_item' --- when the composter level has reached 7. --- --- pos: position of the composter block. --- returns false, thereby cancelling further activity of the timer. --- -local function composter_ready(pos) - swap_node(pos, {name = "mcl_composters:composter_ready"}) - -- maybe spawn particles again? - -- TODO: play some sounds - return false -end - ---- Spawn bone meal item and reset composter block. --- --- `on_rightclick` handler for the "ready" composter block. Causes a --- bone meal item to be spawned from the composter and resets the --- composter block to an empty composter block. --- --- parameterss are the standard parameters passed to `on_rightclick`. --- returns itemstack (unchanged in this function). --- -local function composter_harvest(pos, node, player, itemstack, pointed_thing) - if not player or (player:get_player_control() and player:get_player_control().sneak) then - return itemstack - end - local name = player:get_player_name() - if is_protected(pos, name) then - record_protection_violation(pos, name) - return itemstack - end - -- reset ready type composter to empty type - swap_node(pos, {name="mcl_composters:composter"}) - -- spawn bone meal item (wtf dye?! is this how they make white cocoa) - add_item(pos, "mcl_dye:white") - -- TODO play some sounds - return itemstack -end - ---- Construct composter nodeboxes with varying levels of compost. --- --- level: compost level in the composter --- returns a nodebox definition table. --- -local function composter_get_nodeboxes(level) - local top_y_tbl = {[0]=-7, -5, -3, -1, 1, 3, 5, 7} - local top_y = top_y_tbl[level] / 16 - return { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, -0.375, 0.5, 0.5}, -- Left wall - { 0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Right wall - {-0.375, -0.5, 0.375, 0.375, 0.5, 0.5}, -- Back wall - {-0.375, -0.5, -0.5, 0.375, 0.5, -0.375}, -- Front wall - {-0.5, -0.5, -0.5, 0.5, top_y, 0.5}, -- Bottom level - } - } -end - ---- Register empty composter node. --- --- This is the craftable base model that can be placed in an inventory. --- -minetest.register_node("mcl_composters:composter", { - description = composter_description, - _tt_help = S("Converts organic items into bonemeal"), - _doc_items_longdesc = composter_longdesc, - _doc_items_usagehelp = composter_usagehelp, - paramtype = "light", - drawtype = "nodebox", - node_box = composter_get_nodeboxes(0), - selection_box = {type = "regular"}, - tiles = { - "mcl_composter_bottom.png^mcl_composter_top.png", - "mcl_composter_bottom.png", - "mcl_composter_side.png" - }, - is_ground_content = false, - groups = { - handy=1, material_wood=1, deco_block=1, dirtifier=1, - flammable=2, fire_encouragement=3, fire_flammability=4, - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_hardness = 0.6, - _mcl_blast_resistance = 0.6, - _mcl_compost_level = 0, - on_rightclick = composter_add_item -}) - ---- Template function for composters with compost. --- --- For each fill level a custom node is registered. --- -local function register_filled_composter(level) - local id = "mcl_composters:composter_"..level - minetest.register_node(id, { - description = S("Composter") .. " (" .. level .. "/7 " .. S("filled") .. ")", - _doc_items_create_entry = false, - paramtype = "light", - drawtype = "nodebox", - node_box = composter_get_nodeboxes(level), - selection_box = {type = "regular"}, - tiles = { - "mcl_composter_compost.png^mcl_composter_top.png", - "mcl_composter_bottom.png", - "mcl_composter_side.png" - }, - is_ground_content = false, - groups = { - handy=1, material_wood=1, deco_block=1, dirtifier=1, - not_in_creative_inventory=1, not_in_craft_guide=1, - flammable=2, fire_encouragement=3, fire_flammability=4, - comparator_signal=level - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = "mcl_composters:composter", - _mcl_hardness = 0.6, - _mcl_blast_resistance = 0.6, - _mcl_compost_level = level, - on_rightclick = composter_add_item, - on_timer = composter_ready - }) - - -- Add entry aliases for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_composters:composter", "nodes", id) - end -end - ---- Register filled composters (7 levels). --- -for level = 1, 7 do - register_filled_composter(level) -end - ---- Register composter that is ready to be harvested. --- -minetest.register_node("mcl_composters:composter_ready", { - description = S("Composter") .. "(" .. S("ready for harvest") .. ")", - _doc_items_create_entry = false, - paramtype = "light", - drawtype = "nodebox", - node_box = composter_get_nodeboxes(7), - selection_box = {type = "regular"}, - tiles = { - "mcl_composter_ready.png^mcl_composter_top.png", - "mcl_composter_bottom.png", - "mcl_composter_side.png" - }, - is_ground_content = false, - groups = { - handy=1, material_wood=1, deco_block=1, dirtifier=1, - not_in_creative_inventory=1, not_in_craft_guide=1, - flammable=2, fire_encouragement=3, fire_flammability=4, - comparator_signal=8 - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = "mcl_composters:composter", - _mcl_hardness = 0.6, - _mcl_blast_resistance = 0.6, - _mcl_compost_level = 7, - on_rightclick = composter_harvest -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_composters:composter", - "nodes", "mcl_composters:composter_ready" ) -end diff --git a/mods/ITEMS/mcl_composters/locale/template.txt b/mods/ITEMS/mcl_composters/locale/template.txt deleted file mode 100644 index c5f9bb858..000000000 --- a/mods/ITEMS/mcl_composters/locale/template.txt +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_composters -Composter= -Composters can convert various organic items into bonemeal.= -Use organic items on the composter to fill it with layers of compost. Every time an item is put in the composter, there is a chance that the composter adds another layer of compost. Some items have a bigger chance of adding an extra layer than other items. After filling up with 7 layers of compost, the composter is full. After a delay of approximately one second the composter becomes ready and bone meal can be retrieved from it. Right-clicking the composter takes out the bone meal empties the composter."= -filled= -ready for harvest= -Converts organic items into bonemeal= diff --git a/mods/ITEMS/mcl_composters/mod.conf b/mods/ITEMS/mcl_composters/mod.conf deleted file mode 100644 index 86d729887..000000000 --- a/mods/ITEMS/mcl_composters/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_composters -author = kabou -description = Composters can convert various organic items into bonemeal. -depends = mcl_core, mcl_sounds, mcl_dye -optional_depends = doc diff --git a/mods/ITEMS/mcl_composters/textures/mcl_composter_bottom.png b/mods/ITEMS/mcl_composters/textures/mcl_composter_bottom.png deleted file mode 100644 index cfed3a8a5..000000000 Binary files a/mods/ITEMS/mcl_composters/textures/mcl_composter_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_composters/textures/mcl_composter_compost.png b/mods/ITEMS/mcl_composters/textures/mcl_composter_compost.png deleted file mode 100644 index afda87c71..000000000 Binary files a/mods/ITEMS/mcl_composters/textures/mcl_composter_compost.png and /dev/null differ diff --git a/mods/ITEMS/mcl_composters/textures/mcl_composter_ready.png b/mods/ITEMS/mcl_composters/textures/mcl_composter_ready.png deleted file mode 100644 index 7caf79f96..000000000 Binary files a/mods/ITEMS/mcl_composters/textures/mcl_composter_ready.png and /dev/null differ diff --git a/mods/ITEMS/mcl_composters/textures/mcl_composter_side.png b/mods/ITEMS/mcl_composters/textures/mcl_composter_side.png deleted file mode 100644 index c9e5a6fe3..000000000 Binary files a/mods/ITEMS/mcl_composters/textures/mcl_composter_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_composters/textures/mcl_composter_top.png b/mods/ITEMS/mcl_composters/textures/mcl_composter_top.png deleted file mode 100644 index fc6e202d3..000000000 Binary files a/mods/ITEMS/mcl_composters/textures/mcl_composter_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/README.md b/mods/ITEMS/mcl_copper/README.md deleted file mode 100644 index 6a6f2d7d2..000000000 --- a/mods/ITEMS/mcl_copper/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# MineClone2 Copper - -### by NO11 - -Adds copper ore, blocks and items. - -![screenshot](./screenshot.png) diff --git a/mods/ITEMS/mcl_copper/crafting.lua b/mods/ITEMS/mcl_copper/crafting.lua deleted file mode 100644 index 7b1e183c7..000000000 --- a/mods/ITEMS/mcl_copper/crafting.lua +++ /dev/null @@ -1,76 +0,0 @@ -minetest.register_craft({ - output = "mcl_copper:block_raw", - recipe = { - { "mcl_copper:raw_copper", "mcl_copper:raw_copper", "mcl_copper:raw_copper" }, - { "mcl_copper:raw_copper", "mcl_copper:raw_copper", "mcl_copper:raw_copper" }, - { "mcl_copper:raw_copper", "mcl_copper:raw_copper", "mcl_copper:raw_copper" }, - }, -}) - -minetest.register_craft({ - output = "mcl_copper:block", - recipe = { - { "mcl_copper:copper_ingot", "mcl_copper:copper_ingot" }, - { "mcl_copper:copper_ingot", "mcl_copper:copper_ingot" }, - }, -}) - -minetest.register_craft({ - output = "mcl_copper:block_cut 4", - recipe = { - { "mcl_copper:block", "mcl_copper:block" }, - { "mcl_copper:block", "mcl_copper:block" }, - }, -}) - -minetest.register_craft({ - output = "mcl_copper:block_exposed_cut 4", - recipe = { - { "mcl_copper:block_exposed", "mcl_copper:block_exposed" }, - { "mcl_copper:block_exposed", "mcl_copper:block_exposed" }, - }, -}) - -minetest.register_craft({ - output = "mcl_copper:block_oxidized_cut 4", - recipe = { - { "mcl_copper:block_oxidized", "mcl_copper:block_oxidized" }, - { "mcl_copper:block_oxidized", "mcl_copper:block_oxidized" }, - }, -}) - -minetest.register_craft({ - output = "mcl_copper:mcl_copper:block_weathered_cut 4", - recipe = { - { "mcl_copper:block_weathered", "mcl_copper:block_weathered" }, - { "mcl_copper:block_weathered", "mcl_copper:block_weathered" }, - }, -}) - -minetest.register_craft({ - output = "mcl_copper:copper_ingot 4", - recipe = { - { "mcl_copper:block" }, - }, -}) - -minetest.register_craft({ - output = "mcl_copper:raw_copper 9", - recipe = { - { "mcl_copper:block_raw" }, - }, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_copper:copper_ingot", - recipe = "mcl_copper:raw_copper", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_copper:copper_ingot", - recipe = "mcl_copper:stone_with_copper", - cooktime = 10, -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_copper/functions.lua b/mods/ITEMS/mcl_copper/functions.lua deleted file mode 100644 index b6e0cb7e2..000000000 --- a/mods/ITEMS/mcl_copper/functions.lua +++ /dev/null @@ -1,181 +0,0 @@ ---local deepslate_mod = minetest.get_modpath("mcl_deepslate") - -local function register_oxidation_abm(abm_name, node_name, oxidized_variant) - minetest.register_abm({ - label = abm_name, - nodenames = {node_name}, - interval = 500, - chance = 3, - action = function(pos, node) - minetest.swap_node(pos, {name = oxidized_variant, param2 = node.param2}) - end, - }) -end - ---[[ -local stairs = { - {"stair", "exposed", "_inner", "cut_inner"}, - {"stair", "weathered", "_inner", "exposed_cut_inner"}, - {"stair", "exposed", "_outer", "cut_outer"}, - {"stair", "weathered", "_outer", "exposed_cut_outer"}, - {"stair", "oxidized", "_outer", "weathered_cut_outer"}, - {"stair", "oxidized", "_inner", "weathered_cut_inner"}, - {"slab", "exposed", "","cut"}, - {"slab", "oxidized", "","weathered_cut"}, - {"slab", "weathered", "","exposed_cut"}, - {"slab", "exposed", "_top","cut_top"}, - {"slab", "oxidized", "_top", "weathered_cut_top"}, - {"slab", "weathered", "_top","exposed_cut_top"}, - {"slab", "exposed", "_double","cut_double"}, - {"slab", "oxidized", "_double","weathered_cut_double"}, - {"slab", "weathered", "_double","exposed_cut_double"}, - {"stair", "exposed", "","cut"}, - {"stair", "oxidized", "", "weathered_cut"}, - {"stair", "weathered", "", "exposed_cut"}, -}]] - ---[[ -local function anti_oxidation_particles(pointed_thing) - local pos = pointed_thing.under - minetest.add_particlespawner({ - amount = 8, - time = 1, - minpos = {x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, - maxpos = {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, - minvel = {x = 0, y = 0, z = 0}, - maxvel = {x = 0, y = 0, z = 0}, - minacc = {x = 0, y = 0, z = 0}, - maxacc = {x = 0, y = 0, z = 0}, - minexptime = 0.5, - maxexptime = 1, - minsize = 1, - maxsize = 2.5, - collisiondetection = false, - vertical = false, - texture = "mcl_copper_anti_oxidation_particle.png", - glow = 5, - }) -end - -local function add_wear(placer, itemstack) - if not minetest.is_creative_enabled(placer:get_player_name()) then - local tool = itemstack:get_name() - local wear = mcl_autogroup.get_wear(tool, "axey") - itemstack:add_wear(wear) - end -end - -local function anti_oxidation(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then return end - - local node = minetest.get_node(pointed_thing.under) - local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] - - if not placer:get_player_control().sneak and noddef.on_rightclick then - return minetest.item_place(itemstack, placer, pointed_thing) - end - - if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then - minetest.record_protection_violation(pointed_thing.under, placer:get_player_name()) - return itemstack - end - - if noddef._mcl_stripped_variant == nil then - for _, c in pairs(stairs) do - if noddef.name == "mcl_stairs:"..c[1].."_copper_"..c[2].."_cut"..c[3] then - minetest.swap_node(pointed_thing.under, {name="mcl_stairs:"..c[1].."_copper_"..c[4], param2=node.param2}) - anti_oxidation_particles(pointed_thing) - add_wear(placer, itemstack) - end - end - if noddef._mcl_anti_oxidation_variant ~= nil then - minetest.swap_node(pointed_thing.under, {name=noddef._mcl_anti_oxidation_variant, param2=node.param2}) - anti_oxidation_particles(pointed_thing) - add_wear(placer, itemstack) - end - elseif noddef._mcl_stripped_variant ~= nil then - minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2}) - add_wear(placer, itemstack) - else - return itemstack - end - return itemstack -end - -local function register_axe_override(axe_name) - minetest.override_item("mcl_tools:axe_"..axe_name, { - on_place = anti_oxidation, - }) -end]] - ---[[ Commented out for now because there the discussion how to handle this is ongoing -local stonelike = {"mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite"} -if not deepslate_mod then - if minetest.settings:get_bool("mcl_generate_ores", true) then - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_copper:stone_with_copper", - wherein = stonelike, - clust_scarcity = 830, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(39), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_copper:stone_with_copper", - wherein = stonelike, - clust_scarcity = 1660, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(40), - y_max = mcl_worlds.layer_to_y(63), - }) - end -end ---]] -local block_oxidation = { - {"", "_exposed"}, - {"_cut", "_exposed_cut"}, - {"_exposed", "_weathered"}, - {"_exposed_cut", "_weathered_cut"}, - {"_weathered", "_oxidized"}, - {"_weathered_cut", "_oxidized_cut"} -} - -local stair_oxidation = { - {"slab", "cut", "exposed_cut"}, - {"slab", "exposed_cut", "weathered_cut"}, - {"slab", "weathered_cut", "oxidized_cut"}, - {"slab", "cut_top", "exposed_cut_top"}, - {"slab", "exposed_cut_top", "weathered_cut_top"}, - {"slab", "weathered_cut_top", "oxidized_cut_double"}, - {"slab", "cut_double", "exposed_cut_double"}, - {"slab", "exposed_cut_double", "weathered_cut_double"}, - {"slab", "weathered_cut_double", "oxidized_cut_double"}, - {"stair", "cut", "exposed_cut"}, - {"stair", "exposed_cut", "weathered_cut"}, - {"stair", "weathered_cut", "oxidized_cut"}, - {"stair", "cut_inner", "exposed_cut_inner"}, - {"stair", "exposed_cut_inner", "weathered_cut_inner"}, - {"stair", "weathered_cut_inner", "oxidized_cut_inner"}, - {"stair", "cut_outer", "exposed_cut_outer"}, - {"stair", "exposed_cut_outer", "weathered_cut_outer"}, - {"stair", "weathered_cut_outer", "oxidized_cut_outer"} -} - -for _, b in pairs(block_oxidation) do - register_oxidation_abm("Copper oxidation", "mcl_copper:block"..b[1], "mcl_copper:block"..b[2]) -end - -for _, s in pairs(stair_oxidation) do - register_oxidation_abm("Copper oxidation", "mcl_stairs:"..s[1].."_copper_"..s[2], "mcl_stairs:"..s[1].."_copper_"..s[3]) -end - ---local axes = {"wood", "stone", "iron", "gold", "diamond"} ---[[ -for _, axe in pairs(axes) do - register_axe_override(axe) -end -]] diff --git a/mods/ITEMS/mcl_copper/init.lua b/mods/ITEMS/mcl_copper/init.lua deleted file mode 100644 index ea15e5827..000000000 --- a/mods/ITEMS/mcl_copper/init.lua +++ /dev/null @@ -1,6 +0,0 @@ -local path = minetest.get_modpath("mcl_copper") - -dofile(path .. "/nodes.lua") -dofile(path .. "/items.lua") -dofile(path .. "/crafting.lua") -dofile(path .. "/functions.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_copper/items.lua b/mods/ITEMS/mcl_copper/items.lua deleted file mode 100644 index 450ec8cb3..000000000 --- a/mods/ITEMS/mcl_copper/items.lua +++ /dev/null @@ -1,15 +0,0 @@ -local S = minetest.get_translator("mcl_copper") - -minetest.register_craftitem("mcl_copper:copper_ingot", { - description = S("Copper Ingot"), - _doc_items_longdesc = S("Molten Raw Copper. It is used to craft blocks."), - inventory_image = "mcl_copper_ingot.png", - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_copper:raw_copper", { - description = S("Raw Copper"), - _doc_items_longdesc = S("Raw Copper. Mine a Copper Ore to get it."), - inventory_image = "mcl_copper_raw.png", - groups = { craftitem = 1 }, -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_copper/locale/mcl_copper.de.tr b/mods/ITEMS/mcl_copper/locale/mcl_copper.de.tr deleted file mode 100644 index cc2290e1e..000000000 --- a/mods/ITEMS/mcl_copper/locale/mcl_copper.de.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_copper -A block of copper is mostly a decorative block.=Ein Kupferblock wird meistens als dekorativer Block verwendet. -A block used for compact raw copper storage.=Ein Block für die kompakte Lagerung von Rohkupfer. -Block of Copper=Kupferblock -Block of Raw Copper=Rohkupferblock -Copper Ingot=Kupfer Barren -Copper Ore=Kupfererz -Cut copper is a decorative block.=Ein Geschnittener Kupferblock ist ein dekorativer Block. -Cut Copper=Geschnittener Kupferblock -Double Slab of Cut Copper=Doppelte Geschnittene Kupferstufe -Double Slab of Exposed Cut Copper=Doppelte Angelaufene Geschnittene Kupferstufe -Double Slab of Oxidized Cut Copper=Doppelte Oxidierte Geschnittene Kupferstufe -Double Slab of Weathered Cut Copper=Doppelte Verwitterte Geschnittene Kupferstufe -Exposed copper is a decorative block.=Ein Angelaufener Kupferblock ist ein dekorativer Block. -Exposed Copper=Angelaufener Kupferblock -Exposed cut copper is a decorative block.=Ein Angelaufener geschnittener Kupferblock ist ein dekorativer Block. -Exposed Cut Copper=Angelaufener geschnittener Kupferblock -Molten Raw Copper. It is used to craft blocks.=Geschmolzenes Rohkupfer. Es wird verwendet, um Blöcke herzustellen. -Oxidized copper is a decorative block.=Ein Oxidierter Kupferblockist ist ein dekorativer Block. -Oxidized Copper=Oxidierter Kupferblock -Oxidized cut copper is a decorative block.=Ein Oxidierter geschnittener Kupferblock ist ein dekorativer Block. -Oxidized Cut Copper=Oxidierter geschnittener Kupferblock -Raw Copper. Mine a Copper Ore to get it.=Bauen sie ein Kupfererz ab, um es zu erhalten. -Raw Copper=Rohkupfer -Slab of Cut Copper=Geschnittene Kupferstufe -Slab of Exposed Cut Copper=Angelaufene Geschnittene Kupferstufe -Slab of Oxidized Cut Copper=Oxidierte Geschnittene Kupferstufe -Slab of Weathered Cut Copper=Verwitterte Geschnittene Kupferstufe -Some copper contained in stone, it is pretty common and can be found below sea level.=Stein, in dem etwas Kupfer enthalten ist. Es ist ziemlich häufig und kann unter dem Meeresspiegel gefunden werden. -Stairs of Cut Copper=Geschnittene Kupfertreppe -Stairs of Exposed Cut Copper=Angelaufene Geschnittene Kupfertreppe -Stairs of Oxidized Cut Copper=Oxidierte Geschnittene Kupfertreppe -Stairs of Weathered Cut Copper=Verwitterte Geschnittene Kupfertreppe -Weathered copper is a decorative block.=Ein Verwitterter Kupferblock ist ein dekorativer Block. -Weathered Copper=Verwitterter Kupferblock -Weathered cut copper is a decorative block.=Ein Verwitterter geschnittener Kupferblock ist ein dekorativer Block. -Weathered Cut Copper=Verwitterter geschnittener Kupferblock diff --git a/mods/ITEMS/mcl_copper/locale/template.txt b/mods/ITEMS/mcl_copper/locale/template.txt deleted file mode 100644 index 050c099ee..000000000 --- a/mods/ITEMS/mcl_copper/locale/template.txt +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_copper -A block of copper is mostly a decorative block.= -A block used for compact raw copper storage.= -Block of Copper= -Block of Raw Copper= -Copper Ingot= -Copper Ore= -Cut copper is a decorative block.= -Cut Copper= -Double Slab of Cut Copper= -Double Slab of Exposed Cut Copper= -Double Slab of Oxidized Cut Copper= -Double Slab of Weathered Cut Copper= -Exposed copper is a decorative block.= -Exposed Copper= -Exposed cut copper is a decorative block.= -Exposed Cut Copper= -Molten Raw Copper. It is used to craft blocks.= -Oxidized copper is a decorative block.= -Oxidized Copper= -Oxidized cut copper is a decorative block.= -Oxidized Cut Copper= -Raw Copper. Mine a Copper Ore to get it.= -Raw Copper= -Slab of Cut Copper= -Slab of Exposed Cut Copper= -Slab of Oxidized Cut Copper= -Slab of Weathered Cut Copper= -Some copper contained in stone, it is pretty common and can be found below sea level.= -Stairs of Cut Copper= -Stairs of Exposed Cut Copper= -Stairs of Oxidized Cut Copper= -Stairs of Weathered Cut Copper= -Weathered copper is a decorative block.= -Weathered Copper= -Weathered cut copper is a decorative block.= -Weathered Cut Copper= diff --git a/mods/ITEMS/mcl_copper/mod.conf b/mods/ITEMS/mcl_copper/mod.conf deleted file mode 100644 index dde96263a..000000000 --- a/mods/ITEMS/mcl_copper/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_copper -author = NO11 -depends = mcl_core, mcl_sounds, mcl_stairs -description = Adds Copper Ore, blocks and items. diff --git a/mods/ITEMS/mcl_copper/nodes.lua b/mods/ITEMS/mcl_copper/nodes.lua deleted file mode 100644 index 38fbb6c3d..000000000 --- a/mods/ITEMS/mcl_copper/nodes.lua +++ /dev/null @@ -1,177 +0,0 @@ -local S = minetest.get_translator("mcl_copper") - -minetest.register_node("mcl_copper:stone_with_copper", { - description = S("Copper Ore"), - _doc_items_longdesc = S("Some copper contained in stone, it is pretty common and can be found below sea level."), - tiles = {"default_stone.png^mcl_copper_ore.png"}, - is_ground_content = true, - groups = {pickaxey = 3, building_block = 1, material_stone = 1, blast_furnace_smeltable=1}, - drop = "mcl_copper:raw_copper", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, - -}) - -minetest.register_node("mcl_copper:block_raw", { - description = S("Block of Raw Copper"), - _doc_items_longdesc = S("A block used for compact raw copper storage."), - tiles = {"mcl_copper_block_raw.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_copper:block", { - description = S("Block of Copper"), - _doc_items_longdesc = S("A block of copper is mostly a decorative block."), - tiles = {"mcl_copper_block.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_copper:block_exposed", { - description = S("Exposed Copper"), - _doc_items_longdesc = S("Exposed copper is a decorative block."), - tiles = {"mcl_copper_exposed.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - _mcl_anti_oxidation_varient = "mcl_copper:block", -}) - -minetest.register_node("mcl_copper:block_oxidized", { - description = S("Oxidized Copper"), - _doc_items_longdesc = S("Oxidized copper is a decorative block."), - tiles = {"mcl_copper_oxidized.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - _mcl_anti_oxidation_varient = "mcl_copper:block_weathered", -}) - -minetest.register_node("mcl_copper:block_weathered", { - description = S("Weathered Copper"), - _doc_items_longdesc = S("Weathered copper is a decorative block."), - tiles = {"mcl_copper_weathered.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - _mcl_anti_oxidation_varient = "mcl_copper:block_exposed", -}) - -minetest.register_node("mcl_copper:block_cut", { - description = S("Cut Copper"), - _doc_items_longdesc = S("Cut copper is a decorative block."), - tiles = {"mcl_copper_block_cut.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_copper:block_exposed_cut", { - description = S("Exposed Cut Copper"), - _doc_items_longdesc = S("Exposed cut copper is a decorative block."), - tiles = {"mcl_copper_exposed_cut.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - _mcl_anti_oxidation_varient = "mcl_copper:block_cut", -}) - -minetest.register_node("mcl_copper:block_oxidized_cut", { - description = S("Oxidized Cut Copper"), - _doc_items_longdesc = S("Oxidized cut copper is a decorative block."), - tiles = {"mcl_copper_oxidized_cut.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - _mcl_anti_oxidation_varient = "mcl_copper:block_weathered_cut", -}) - -minetest.register_node("mcl_copper:block_weathered_cut", { - description = S("Weathered Cut Copper"), - _doc_items_longdesc = S("Weathered cut copper is a decorative block."), - tiles = {"mcl_copper_weathered_cut.png"}, - is_ground_content = false, - groups = {pickaxey = 2, building_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - _mcl_anti_oxidation_varient = "mcl_copper:block_exposed_cut", -}) - -mcl_stairs.register_slab("copper_cut", "mcl_copper:block_cut", - {pickaxey = 2}, - {"mcl_copper_block_cut.png", "mcl_copper_block_cut.png", "mcl_copper_block_cut.png"}, - S("Slab of Cut Copper"), - nil, nil, nil, - S("Double Slab of Cut Copper")) - -mcl_stairs.register_slab("copper_exposed_cut", "mcl_copper:block_exposed_cut", - {pickaxey = 2}, - {"mcl_copper_exposed_cut.png", "mcl_copper_exposed_cut.png", "mcl_copper_exposed_cut.png"}, - S("Slab of Exposed Cut Copper"), - nil, nil, nil, - S("Double Slab of Exposed Cut Copper")) - -mcl_stairs.register_slab("copper_oxidized_cut", "mcl_copper:block_oxidized_cut", - {pickaxey = 2}, - {"mcl_copper_oxidized_cut.png", "mcl_copper_oxidized_cut.png", "mcl_copper_oxidized_cut.png"}, - S("Slab of Oxidized Cut Copper"), - nil, nil, nil, - S("Double Slab of Oxidized Cut Copper")) - -mcl_stairs.register_slab("copper_weathered_cut", "mcl_copper:block_weathered_cut", - {pickaxey = 2}, - {"mcl_copper_weathered_cut.png", "mcl_copper_weathered_cut.png", "mcl_copper_weathered_cut.png"}, - S("Slab of Weathered Cut Copper"), - nil, nil, nil, - S("Double Slab of Weathered Cut Copper")) - -mcl_stairs.register_stair("copper_cut", "mcl_copper:block_cut", - {pickaxey = 2}, - {"mcl_copper_block_cut.png", "mcl_copper_block_cut.png", "mcl_copper_block_cut.png", "mcl_copper_block_cut.png", "mcl_copper_block_cut.png", "mcl_copper_block_cut.png"}, - S("Stairs of Cut Copper"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_stair("copper_exposed_cut", "mcl_copper:block_exposed_cut", - {pickaxey = 2}, - {"mcl_copper_exposed_cut.png", "mcl_copper_exposed_cut.png", "mcl_copper_exposed_cut.png", "mcl_copper_exposed_cut.png", "mcl_copper_exposed_cut.png", "mcl_copper_exposed_cut.png"}, - S("Stairs of Exposed Cut Copper"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_stair("copper_oxidized_cut", "mcl_copper:block_oxidized_cut", - {pickaxey = 2}, - {"mcl_copper_oxidized_cut.png", "mcl_copper_oxidized_cut.png", "mcl_copper_oxidized_cut.png", "mcl_copper_oxidized_cut.png", "mcl_copper_oxidized_cut.png", "mcl_copper_oxidized_cut.png"}, - S("Stairs of Oxidized Cut Copper"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_stair("copper_weathered_cut", "mcl_copper:block_weathered_cut", - {pickaxey = 2}, - {"mcl_copper_weathered_cut.png", "mcl_copper_weathered_cut.png", "mcl_copper_weathered_cut.png", "mcl_copper_weathered_cut.png", "mcl_copper_weathered_cut.png", "mcl_copper_weathered_cut.png"}, - S("Stairs of Weathered Cut Copper"), - nil, 6, nil, - "woodlike") \ No newline at end of file diff --git a/mods/ITEMS/mcl_copper/screenshot.png b/mods/ITEMS/mcl_copper/screenshot.png deleted file mode 100644 index 032d45fb1..000000000 Binary files a/mods/ITEMS/mcl_copper/screenshot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_anti_oxidation_particle.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_anti_oxidation_particle.png deleted file mode 100644 index c7192df0e..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_anti_oxidation_particle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_block.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_block.png deleted file mode 100644 index 31e0853ab..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_block_cut.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_block_cut.png deleted file mode 100644 index 5f92b4693..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_block_cut.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_block_raw.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_block_raw.png deleted file mode 100644 index 88404601e..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_block_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_exposed.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_exposed.png deleted file mode 100644 index 0dc2a6d87..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_exposed.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_exposed_cut.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_exposed_cut.png deleted file mode 100644 index 6c4a5e7dd..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_exposed_cut.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_ingot.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_ingot.png deleted file mode 100644 index b75e9b9c9..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_ingot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_ore.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_ore.png deleted file mode 100644 index 3ad14fb99..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_oxidized.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_oxidized.png deleted file mode 100644 index 5bea2569e..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_oxidized.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_oxidized_cut.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_oxidized_cut.png deleted file mode 100644 index f28af71c3..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_oxidized_cut.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_raw.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_raw.png deleted file mode 100644 index fda0f886d..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_weathered.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_weathered.png deleted file mode 100644 index 75b352133..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_weathered.png and /dev/null differ diff --git a/mods/ITEMS/mcl_copper/textures/mcl_copper_weathered_cut.png b/mods/ITEMS/mcl_copper/textures/mcl_copper_weathered_cut.png deleted file mode 100644 index 306329eb7..000000000 Binary files a/mods/ITEMS/mcl_copper/textures/mcl_copper_weathered_cut.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/README.txt b/mods/ITEMS/mcl_core/README.txt deleted file mode 100644 index 6c48d74fd..000000000 --- a/mods/ITEMS/mcl_core/README.txt +++ /dev/null @@ -1,36 +0,0 @@ -MineClone 2 core mod -==================== -Originally forked from Minetest Game's default mod in the distant past. - -License information -=================== - -License of source code: ------------------------ -Copyright (C) 2011-2012 celeron55, Perttu Ahola - -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. - -License of all textures and sounds ----------------------------------- -MIT License. - -The textures are taken from the Minecraft resource pack “Faithful 1.11” by Vattic and -xMrVizzy and contributers. - -Sounds -====== -All sounds included in this mod are under the MIT License. -The other sounds used in this mod can be found in CORE/mcl_sounds. - -http://www.gnu.org/licenses/lgpl-2.1.html - -License of everything not listed here -------------------------------------- -celeron55, Perttu Ahola -CC BY-SA 3.0 - - diff --git a/mods/ITEMS/mcl_core/crafting.lua b/mods/ITEMS/mcl_core/crafting.lua deleted file mode 100644 index df456cbdc..000000000 --- a/mods/ITEMS/mcl_core/crafting.lua +++ /dev/null @@ -1,560 +0,0 @@ --- mods/default/crafting.lua - --- --- Crafting definition --- - -local function craft_planks(output, input) - minetest.register_craft({ - output = "mcl_core:"..output.."wood 4", - recipe = { - {"mcl_core:"..input}, - } - }) -end - -local planks = { - {"", "oak"}, - {"dark", "dark_oak"}, - {"jungle", "jungle"}, - {"acacia", "acacia"}, - {"spruce", "spruce"}, - {"birch", "birch"} -} - -for _, p in pairs(planks) do - craft_planks(p[1], p[1].."tree") - craft_planks(p[1], p[1].."tree_bark") - craft_planks(p[1], "stripped_"..p[2]) - craft_planks(p[1], "stripped_"..p[2].."_bark") -end - -minetest.register_craft({ - type = "shapeless", - output = "mcl_core:mossycobble", - recipe = { "mcl_core:cobble", "mcl_core:vine" }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_core:stonebrickmossy", - recipe = { "mcl_core:stonebrick", "mcl_core:vine" }, -}) - -minetest.register_craft({ - output = "mcl_core:coarse_dirt 4", - recipe = { - {"mcl_core:dirt", "mcl_core:gravel"}, - {"mcl_core:gravel", "mcl_core:dirt"}, - } -}) -minetest.register_craft({ - output = "mcl_core:coarse_dirt 4", - recipe = { - {"mcl_core:gravel", "mcl_core:dirt"}, - {"mcl_core:dirt", "mcl_core:gravel"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:sandstonesmooth 4", - recipe = { - {"mcl_core:sandstone","mcl_core:sandstone"}, - {"mcl_core:sandstone","mcl_core:sandstone"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:redsandstonesmooth 4", - recipe = { - {"mcl_core:redsandstone","mcl_core:redsandstone"}, - {"mcl_core:redsandstone","mcl_core:redsandstone"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:granite_smooth 4", - recipe = { - {"mcl_core:granite", "mcl_core:granite"}, - {"mcl_core:granite", "mcl_core:granite"} - }, -}) - -minetest.register_craft({ - output = "mcl_core:andesite_smooth 4", - recipe = { - {"mcl_core:andesite", "mcl_core:andesite"}, - {"mcl_core:andesite", "mcl_core:andesite"} - }, -}) - -minetest.register_craft({ - output = "mcl_core:diorite_smooth 4", - recipe = { - {"mcl_core:diorite", "mcl_core:diorite"}, - {"mcl_core:diorite", "mcl_core:diorite"} - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_core:granite", - recipe = {"mcl_core:diorite", "mcl_nether:quartz"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_core:andesite 2", - recipe = {"mcl_core:diorite", "mcl_core:cobble"}, -}) - -minetest.register_craft({ - output = "mcl_core:diorite 2", - recipe = { - {"mcl_core:cobble", "mcl_nether:quartz"}, - {"mcl_nether:quartz", "mcl_core:cobble"}, - } -}) -minetest.register_craft({ - output = "mcl_core:diorite 2", - recipe = { - {"mcl_nether:quartz", "mcl_core:cobble"}, - {"mcl_core:cobble", "mcl_nether:quartz"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:bone_block", - recipe = { - { "mcl_dye:white", "mcl_dye:white", "mcl_dye:white" }, - { "mcl_dye:white", "mcl_dye:white", "mcl_dye:white" }, - { "mcl_dye:white", "mcl_dye:white", "mcl_dye:white" }, - }, -}) - -minetest.register_craft({ - output = "mcl_dye:white 9", - recipe = { - { "mcl_core:bone_block" }, - }, -}) - -minetest.register_craft({ - output = "mcl_core:stick 4", - recipe = { - {"group:wood"}, - {"group:wood"}, - } -}) - - - -minetest.register_craft({ - output = "mcl_core:coalblock", - recipe = { - {"mcl_core:coal_lump", "mcl_core:coal_lump", "mcl_core:coal_lump"}, - {"mcl_core:coal_lump", "mcl_core:coal_lump", "mcl_core:coal_lump"}, - {"mcl_core:coal_lump", "mcl_core:coal_lump", "mcl_core:coal_lump"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:coal_lump 9", - recipe = { - {"mcl_core:coalblock"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:ironblock", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:iron_ingot 9", - recipe = { - {"mcl_core:ironblock"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:goldblock", - recipe = { - {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:gold_ingot 9", - recipe = { - {"mcl_core:goldblock"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:gold_nugget 9", - recipe = {{"mcl_core:gold_ingot"}}, -}) - -minetest.register_craft({ - output = "mcl_core:iron_nugget 9", - recipe = {{"mcl_core:iron_ingot"}}, -}) - -minetest.register_craft({ - output = "mcl_core:gold_ingot", - recipe = { - {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, - {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, - {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:iron_ingot", - recipe = { - {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, - } -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:iron_nugget", - recipe = "mcl_mobitems:iron_horse_armor", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_nugget", - recipe = "mcl_mobitems:gold_horse_armor", - cooktime = 10, -}) - -minetest.register_craft({ - output = "mcl_core:sandstone", - recipe = { - {"mcl_core:sand", "mcl_core:sand"}, - {"mcl_core:sand", "mcl_core:sand"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:redsandstone", - recipe = { - {"mcl_core:redsand", "mcl_core:redsand"}, - {"mcl_core:redsand", "mcl_core:redsand"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:clay", - recipe = { - {"mcl_core:clay_lump", "mcl_core:clay_lump"}, - {"mcl_core:clay_lump", "mcl_core:clay_lump"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:brick_block", - recipe = { - {"mcl_core:brick", "mcl_core:brick"}, - {"mcl_core:brick", "mcl_core:brick"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:paper 3", - recipe = { - {"mcl_core:reeds", "mcl_core:reeds", "mcl_core:reeds"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:ladder 3", - recipe = { - {"mcl_core:stick", "", "mcl_core:stick"}, - {"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}, - {"mcl_core:stick", "", "mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:stonebrick 4", - recipe = { - {"mcl_core:stone", "mcl_core:stone"}, - {"mcl_core:stone", "mcl_core:stone"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:lapisblock", - recipe = { - {"mcl_dye:blue", "mcl_dye:blue", "mcl_dye:blue"}, - {"mcl_dye:blue", "mcl_dye:blue", "mcl_dye:blue"}, - {"mcl_dye:blue", "mcl_dye:blue", "mcl_dye:blue"}, - } -}) - -minetest.register_craft({ - output = "mcl_dye:blue 9", - recipe = { - {"mcl_core:lapisblock"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:emeraldblock", - recipe = { - {"mcl_core:emerald", "mcl_core:emerald", "mcl_core:emerald"}, - {"mcl_core:emerald", "mcl_core:emerald", "mcl_core:emerald"}, - {"mcl_core:emerald", "mcl_core:emerald", "mcl_core:emerald"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:emerald 9", - recipe = { - {"mcl_core:emeraldblock"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:diamondblock", - recipe = { - {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, - {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, - {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:diamond 9", - recipe = { - {"mcl_core:diamondblock"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:apple_gold", - recipe = { - {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mcl_core:apple", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:sugar", - recipe = { - {"mcl_core:reeds"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:bowl 4", - recipe = { - {"group:wood", "", "group:wood"}, - {"", "group:wood", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_core:snowblock", - recipe = { - {"mcl_throwing:snowball", "mcl_throwing:snowball"}, - {"mcl_throwing:snowball", "mcl_throwing:snowball"}, - } -}) - -minetest.register_craft({ - output = "mcl_core:snow 6", - recipe = { - {"mcl_core:snowblock", "mcl_core:snowblock", "mcl_core:snowblock"}, - } -}) - -minetest.register_craft({ - output = 'mcl_core:packed_ice 1', - recipe = { - {'mcl_core:ice', 'mcl_core:ice', 'mcl_core:ice'}, - {'mcl_core:ice', 'mcl_core:ice', 'mcl_core:ice'}, - {'mcl_core:ice', 'mcl_core:ice', 'mcl_core:ice'}, - } -}) - --- --- Crafting (tool repair) --- -minetest.register_craft({ - type = "toolrepair", - additional_wear = -mcl_core.repair, -}) - --- --- Cooking recipes --- - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:glass", - recipe = "group:sand", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:stone", - recipe = "mcl_core:cobble", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:stone_smooth", - recipe = "mcl_core:stone", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:stonebrickcracked", - recipe = "mcl_core:stonebrick", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:iron_ingot", - recipe = "mcl_core:stone_with_iron", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_ingot", - recipe = "mcl_core:stone_with_gold", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:brick", - recipe = "mcl_core:clay_lump", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:charcoal_lump", - recipe = "group:tree", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:coal_lump", - recipe = "mcl_core:stone_with_coal", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:diamond", - recipe = "mcl_core:stone_with_diamond", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:emerald", - recipe = "mcl_core:stone_with_emerald", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_dye:blue", - recipe = "mcl_core:stone_with_lapis", - cooktime = 10, -}) - --- --- Fuels --- - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_core:coalblock", - burntime = 800, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_core:coal_lump", - burntime = 80, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_core:charcoal_lump", - burntime = 80, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:tree", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:bark", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_core:ladder", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:wood", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:sapling", - burntime = 5, -}) - - - -minetest.register_craft({ - type = "fuel", - recipe = "group:sapling", - burntime = 5, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_core:bowl", - burntime = 5, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_core:stick", - burntime = 5, -}) diff --git a/mods/ITEMS/mcl_core/craftitems.lua b/mods/ITEMS/mcl_core/craftitems.lua deleted file mode 100644 index fc84c50f5..000000000 --- a/mods/ITEMS/mcl_core/craftitems.lua +++ /dev/null @@ -1,194 +0,0 @@ --- mods/default/craftitems.lua - -local S = minetest.get_translator(minetest.get_current_modname()) - --- --- Crafting items --- - -minetest.register_craftitem("mcl_core:stick", { - description = S("Stick"), - _doc_items_longdesc = S("Sticks are a very versatile crafting material; used in countless crafting recipes."), - _doc_items_hidden = false, - inventory_image = "default_stick.png", - stack_max = 64, - groups = { craftitem=1, stick=1 }, - _mcl_toollike_wield = true, -}) - -minetest.register_craftitem("mcl_core:paper", { - description = S("Paper"), - _doc_items_longdesc = S("Paper is used to craft books and maps."), - inventory_image = "default_paper.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:coal_lump", { - description = S("Coal"), - _doc_items_longdesc = S("“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things."), - _doc_items_hidden = false, - inventory_image = "default_coal_lump.png", - stack_max = 64, - groups = { craftitem=1, coal=1 }, -}) - -minetest.register_craftitem("mcl_core:charcoal_lump", { - description = S("Charcoal"), - _doc_items_longdesc = S("Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks."), - _doc_items_hidden = false, - inventory_image = "mcl_core_charcoal.png", - stack_max = 64, - groups = { craftitem=1, coal=1 }, -}) - -minetest.register_craftitem("mcl_core:iron_nugget", { - description = S("Iron Nugget"), - _doc_items_longdesc = S("Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots."), - inventory_image = "mcl_core_iron_nugget.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:gold_nugget", { - description = S("Gold Nugget"), - _doc_items_longdesc = S("Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots."), - inventory_image = "mcl_core_gold_nugget.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:diamond", { - description = S("Diamond"), - _doc_items_longdesc = S("Diamonds are precious minerals and useful to create the highest tier of armor and tools."), - inventory_image = "default_diamond.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:clay_lump", { - description = S("Clay Ball"), - _doc_items_longdesc = S("Clay balls are a raw material, mainly used to create bricks in the furnace."), - _doc_items_hidden = false, - inventory_image = "default_clay_lump.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:iron_ingot", { - description = S("Iron Ingot"), - _doc_items_longdesc = S("Molten iron. It is used to craft armor, tools, and whatnot."), - inventory_image = "default_steel_ingot.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:gold_ingot", { - description = S("Gold Ingot"), - _doc_items_longdesc = S("Molten gold. It is used to craft armor, tools, and whatnot."), - inventory_image = "default_gold_ingot.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:emerald", { - description = S("Emerald"), - _doc_items_longdesc = S("Emeralds are used in villager trades as currency."), - inventory_image = "mcl_core_emerald.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:brick", { - description = S("Brick"), - _doc_items_longdesc = S("Bricks are used to craft brick blocks."), - inventory_image = "default_clay_brick.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:flint", { - description = S("Flint"), - _doc_items_longdesc = S("Flint is a raw material."), - inventory_image = "default_flint.png", - stack_max = 64, - groups = { craftitem=1 }, -}) - -minetest.register_craftitem("mcl_core:sugar", { - description = S("Sugar"), - _doc_items_longdesc = S("Sugar comes from sugar canes and is used to make sweet foods."), - inventory_image = "mcl_core_sugar.png", - stack_max = 64, - groups = { craftitem = 1, brewitem=1 }, -}) - -minetest.register_craftitem("mcl_core:bowl",{ - description = S("Bowl"), - _doc_items_longdesc = S("Bowls are mainly used to hold tasty soups."), - inventory_image = "mcl_core_bowl.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_core:apple", { - description = S("Apple"), - _doc_items_longdesc = S("Apples are food items which can be eaten."), - wield_image = "default_apple.png", - inventory_image = "default_apple.png", - stack_max = 64, - on_place = minetest.item_eat(4), - on_secondary_use = minetest.item_eat(4), - groups = { food = 2, eatable = 4, compostability = 65 }, - _mcl_saturation = 2.4, -}) - -local gapple_hunger_restore = minetest.item_eat(4) - -local function eat_gapple(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - elseif pointed_thing.type == "object" then - return itemstack - end - - local regen_duration, absorbtion_factor = 5, 1 - if itemstack:get_name() == "mcl_core:apple_gold_enchanted" then - regen_duration, absorbtion_factor = 20, 4 - mcl_potions.fire_resistance_func(placer, 1, 300) - mcl_potions.leaping_func(placer, 1, 300) - end - mcl_potions.swiftness_func(placer, absorbtion_factor, 120) -- TODO: Absorbtion - mcl_potions.regeneration_func(placer, 2, regen_duration) - return gapple_hunger_restore(itemstack, placer, pointed_thing) -end - -minetest.register_craftitem("mcl_core:apple_gold", { - -- TODO: Add special highlight color - description = S("Golden Apple"), - _doc_items_longdesc = S("Golden apples are precious food items which can be eaten."), - wield_image = "mcl_core_apple_golden.png", - inventory_image = "mcl_core_apple_golden.png", - stack_max = 64, - on_place = eat_gapple, - on_secondary_use = eat_gapple, - groups = { food = 2, eatable = 4, can_eat_when_full = 1 }, - _mcl_saturation = 9.6, -}) - -minetest.register_craftitem("mcl_core:apple_gold_enchanted", { - description = S("Enchanted Golden Apple"), - _doc_items_longdesc = S("Golden apples are precious food items which can be eaten."), - wield_image = "mcl_core_apple_golden.png" .. mcl_enchanting.overlay, - inventory_image = "mcl_core_apple_golden.png" .. mcl_enchanting.overlay, - stack_max = 64, - on_place = eat_gapple, - on_secondary_use = eat_gapple, - groups = { food = 2, eatable = 4, can_eat_when_full = 1 }, - _mcl_saturation = 9.6, -}) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua deleted file mode 100644 index fc08a0957..000000000 --- a/mods/ITEMS/mcl_core/functions.lua +++ /dev/null @@ -1,1700 +0,0 @@ --- --- Lava vs water interactions --- - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -local mg_name = minetest.get_mapgen_setting("mg_name") - -local math = math -local vector = vector - -local OAK_TREE_ID = 1 -local DARK_OAK_TREE_ID = 2 -local SPRUCE_TREE_ID = 3 -local ACACIA_TREE_ID = 4 -local JUNGLE_TREE_ID = 5 -local BIRCH_TREE_ID = 6 - -minetest.register_abm({ - label = "Lava cooling", - nodenames = {"group:lava"}, - neighbors = {"group:water"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local water = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, "group:water") - - local lavatype = minetest.registered_nodes[node.name].liquidtype - - for w=1, #water do - --local waternode = minetest.get_node(water[w]) - --local watertype = minetest.registered_nodes[waternode.name].liquidtype - -- Lava on top of water: Water turns into stone - if water[w].y < pos.y and water[w].x == pos.x and water[w].z == pos.z then - minetest.set_node(water[w], {name="mcl_core:stone"}) - minetest.sound_play("fire_extinguish_flame", {pos = water[w], gain = 0.25, max_hear_distance = 16}, true) - -- Flowing lava vs water on same level: Lava turns into cobblestone - elseif lavatype == "flowing" and water[w].y == pos.y and (water[w].x == pos.x or water[w].z == pos.z) then - minetest.set_node(pos, {name="mcl_core:cobble"}) - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - -- Lava source vs flowing water above or horizontally neighbored: Lava turns into obsidian - elseif lavatype == "source" and - ((water[w].y > pos.y and water[w].x == pos.x and water[w].z == pos.z) or - (water[w].y == pos.y and (water[w].x == pos.x or water[w].z == pos.z))) then - minetest.set_node(pos, {name="mcl_core:obsidian"}) - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - -- water above flowing lava: Lava turns into cobblestone - elseif lavatype == "flowing" and water[w].y > pos.y and water[w].x == pos.x and water[w].z == pos.z then - minetest.set_node(pos, {name="mcl_core:cobble"}) - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - end - end - end, -}) - --- --- Papyrus and cactus growing --- - --- Functions -function mcl_core.grow_cactus(pos, node) - pos.y = pos.y-1 - local name = minetest.get_node(pos).name - if minetest.get_item_group(name, "sand") ~= 0 then - pos.y = pos.y+1 - local height = 0 - while minetest.get_node(pos).name == "mcl_core:cactus" and height < 4 do - height = height+1 - pos.y = pos.y+1 - end - if height < 3 then - if minetest.get_node(pos).name == "air" then - minetest.set_node(pos, {name="mcl_core:cactus"}) - end - end - end -end - -function mcl_core.grow_reeds(pos, node) - pos.y = pos.y-1 - local name = minetest.get_node(pos).name - if minetest.get_item_group(name, "soil_sugarcane") ~= 0 then - if minetest.find_node_near(pos, 1, {"group:water"}) == nil and minetest.find_node_near(pos, 1, {"group:frosted_ice"}) == nil then - return - end - pos.y = pos.y+1 - local height = 0 - while minetest.get_node(pos).name == "mcl_core:reeds" and height < 3 do - height = height+1 - pos.y = pos.y+1 - end - if height < 3 then - if minetest.get_node(pos).name == "air" then - minetest.set_node(pos, {name="mcl_core:reeds"}) - end - end - end -end - --- ABMs - - -local function drop_attached_node(p) - local nn = minetest.get_node(p).name - if nn == "air" or nn == "ignore" then - return - end - minetest.remove_node(p) - for _, item in pairs(minetest.get_node_drops(nn, "")) do - local pos = { - x = p.x + math.random()/2 - 0.25, - y = p.y + math.random()/2 - 0.25, - z = p.z + math.random()/2 - 0.25, - } - if item ~= "" then - minetest.add_item(pos, item) - end - end -end - --- Helper function for node actions for liquid flow -local function liquid_flow_action(pos, group, action) - local function check_detach(pos, xp, yp, zp) - local p = {x=pos.x+xp, y=pos.y+yp, z=pos.z+zp} - local n = minetest.get_node_or_nil(p) - if not n then - return false - end - local d = minetest.registered_nodes[n.name] - if not d then - return false - end - --[[ Check if we want to perform the liquid action. - * 1: Item must be in liquid group - * 2a: If target node is below liquid, always succeed - * 2b: If target node is horizontal to liquid: succeed if source, otherwise check param2 for horizontal flow direction ]] - local range = d.liquid_range or 8 - if (minetest.get_item_group(n.name, group) ~= 0) and - ((yp > 0) or - (yp == 0 and ((d.liquidtype == "source") or (n.param2 > (8-range) and n.param2 < 9)))) then - action(pos) - end - end - local posses = { - { x=-1, y=0, z=0 }, - { x=1, y=0, z=0 }, - { x=0, y=0, z=-1 }, - { x=0, y=0, z=1 }, - { x=0, y=1, z=0 }, - } - for p=1,#posses do - check_detach(pos, posses[p].x, posses[p].y, posses[p].z) - end -end - --- Drop some nodes next to flowing water, if it would flow into the node -minetest.register_abm({ - label = "Wash away dig_by_water nodes by water flow", - nodenames = {"group:dig_by_water"}, - neighbors = {"group:water"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - liquid_flow_action(pos, "water", function(pos) - drop_attached_node(pos) - minetest.dig_node(pos) - end) - end, -}) - --- Destroy some nodes next to flowing lava, if it would flow into the node -minetest.register_abm({ - label = "Destroy destroy_by_lava_flow nodes by lava flow", - nodenames = {"group:destroy_by_lava_flow"}, - neighbors = {"group:lava"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - liquid_flow_action(pos, "lava", function(pos) - minetest.remove_node(pos) - minetest.sound_play("builtin_item_lava", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - minetest.check_for_falling(pos) - end) - end, -}) - --- Cactus mechanisms -minetest.register_abm({ - label = "Cactus growth", - nodenames = {"mcl_core:cactus"}, - neighbors = {"group:sand"}, - interval = 25, - chance = 10, - action = function(pos) - mcl_core.grow_cactus(pos) - end, -}) - -minetest.register_abm({ - label = "Cactus mechanisms", - nodenames = {"mcl_core:cactus"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - for _, object in pairs(minetest.get_objects_inside_radius(pos, 0.9)) do - local entity = object:get_luaentity() - if entity and entity.name == "__builtin:item" then - object:remove() - end - end - local posses = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } } - for _, p in pairs(posses) do - local ndef = minetest.registered_nodes[minetest.get_node(vector.new(pos.x + p[1], pos.y, pos.z + p[2])).name] - if ndef and ndef.walkable then - local posy = pos.y - while minetest.get_node(vector.new(pos.x, posy, pos.z)).name == "mcl_core:cactus" do - local pos = vector.new(pos.x, posy, pos.z) - minetest.remove_node(pos) - minetest.add_item(vector.offset(pos, math.random(-0.5, 0.5), 0, math.random(-0.5, 0.5)), "mcl_core:cactus") - posy = posy + 1 - end - break - end - end - end, -}) - - -minetest.register_abm({ - label = "Sugar canes growth", - nodenames = {"mcl_core:reeds"}, - neighbors = {"group:soil_sugarcane"}, - interval = 25, - chance = 10, - action = function(pos) - mcl_core.grow_reeds(pos) - end, -}) - --- --- Sugar canes drop --- - -local timber_nodenames={"mcl_core:reeds"} - -minetest.register_on_dignode(function(pos, node) - local i=1 - while timber_nodenames[i]~=nil do - local np={x=pos.x, y=pos.y+1, z=pos.z} - while minetest.get_node(np).name==timber_nodenames[i] do - minetest.remove_node(np) - minetest.add_item(np, timber_nodenames[i]) - np={x=np.x, y=np.y+1, z=np.z} - end - i=i+1 - end -end) - -local function air_leaf(leaftype) - if math.random(0, 50) == 3 then - return {name = "air"} - else - return {name = leaftype} - end -end - --- Check if a node stops a tree from growing. Torches, plants, wood, tree, --- leaves and dirt does not affect tree growth. -local function node_stops_growth(node) - if node.name == "air" then - return false - end - - local def = minetest.registered_nodes[node.name] - if not def then - return true - end - - local groups = def.groups - if not groups then - return true - end - if groups.plant or groups.torch or groups.dirt or groups.tree - or groups.bark or groups.leaves or groups.wood then - return false - end - - return true -end - --- Check if a tree can grow at position. The width is the width to check --- around the tree. A width of 3 and height of 5 will check a 3x3 area, 5 --- nodes above the sapling. If any walkable node other than dirt, wood or --- leaves occurs in those blocks the tree cannot grow. -local function check_growth_width(pos, width, height) - -- Huge tree (with even width to check) will check one more node in - -- positive x and y directions. - local neg_space = math.min((width - 1) / 2) - local pos_space = math.max((width - 1) / 2) - for x = -neg_space, pos_space do - for z = -neg_space, pos_space do - for y = 1, height do - local np = vector.new( - pos.x + x, - pos.y + y, - pos.z + z) - if node_stops_growth(minetest.get_node(np)) then - return false - end - end - end - end - return true -end - --- Check if a tree with id can grow at a position. Options is a table of flags --- for varieties of trees. The 'two_by_two' option is used to check if there is --- room to generate huge trees for spruce and jungle. The 'balloon' option is --- used to check if there is room to generate a balloon tree for oak. -local function check_tree_growth(pos, tree_id, options) - local two_by_two = options and options.two_by_two - local balloon = options and options.balloon - - if tree_id == OAK_TREE_ID then - if balloon then - return check_growth_width(pos, 7, 11) - else - return check_growth_width(pos, 3, 5) - end - elseif tree_id == BIRCH_TREE_ID then - return check_growth_width(pos, 3, 6) - elseif tree_id == SPRUCE_TREE_ID then - if two_by_two then - return check_growth_width(pos, 6, 20) - else - return check_growth_width(pos, 5, 11) - end - elseif tree_id == JUNGLE_TREE_ID then - if two_by_two then - return check_growth_width(pos, 8, 23) - else - return check_growth_width(pos, 3, 8) - end - elseif tree_id == ACACIA_TREE_ID then - return check_growth_width(pos, 7, 8) - elseif tree_id == DARK_OAK_TREE_ID and two_by_two then - return check_growth_width(pos, 4, 7) - end - - return false -end - --- Generates a tree with a type. Options is a table of flags for varieties of --- trees. The 'two_by_two' option is used by jungle and spruce trees to --- generate huge trees. The 'balloon' option is used by oak to generate a balloon --- oak tree. -function mcl_core.generate_tree(pos, tree_type, options) - pos.y = pos.y-1 - --local nodename = minetest.get_node(pos).name - - pos.y = pos.y+1 - if not minetest.get_node_light(pos) then - return - end - - local two_by_two = options and options.two_by_two - local balloon = options and options.balloon - - if tree_type == nil or tree_type == OAK_TREE_ID then - if mg_name == "v6" then - mcl_core.generate_v6_oak_tree(pos) - else - if balloon then - mcl_core.generate_balloon_oak_tree(pos) - else - mcl_core.generate_oak_tree(pos) - end - end - elseif tree_type == DARK_OAK_TREE_ID then - mcl_core.generate_dark_oak_tree(pos) - elseif tree_type == SPRUCE_TREE_ID then - if two_by_two then - mcl_core.generate_huge_spruce_tree(pos) - else - if mg_name == "v6" then - mcl_core.generate_v6_spruce_tree(pos) - else - mcl_core.generate_spruce_tree(pos) - end - end - elseif tree_type == ACACIA_TREE_ID then - mcl_core.generate_acacia_tree(pos) - elseif tree_type == JUNGLE_TREE_ID then - if two_by_two then - mcl_core.generate_huge_jungle_tree(pos) - else - if mg_name == "v6" then - mcl_core.generate_v6_jungle_tree(pos) - else - mcl_core.generate_jungle_tree(pos) - end - end - elseif tree_type == BIRCH_TREE_ID then - mcl_core.generate_birch_tree(pos) - end -end - --- Classic oak in v6 style -function mcl_core.generate_v6_oak_tree(pos) - local trunk = "mcl_core:tree" - local leaves = "mcl_core:leaves" - local node - for dy=1,4 do - pos.y = pos.y+dy - if minetest.get_node(pos).name ~= "air" then - return - end - pos.y = pos.y-dy - end - node = {name = trunk} - for dy=0,4 do - pos.y = pos.y+dy - if minetest.get_node(pos).name == "air" then - minetest.add_node(pos, node) - end - pos.y = pos.y-dy - end - - node = {name = leaves} - pos.y = pos.y+3 - --[[local rarity = 0 - if math.random(0, 10) == 3 then - rarity = 1 - end]] - for dx=-2,2 do - for dz=-2,2 do - for dy=0,3 do - pos.x = pos.x+dx - pos.y = pos.y+dy - pos.z = pos.z+dz - - if dx == 0 and dz == 0 and dy==3 then - if minetest.get_node(pos).name == "air" and math.random(1, 5) <= 4 then - minetest.add_node(pos, node) - minetest.add_node(pos, air_leaf(leaves)) - end - elseif dx == 0 and dz == 0 and dy==4 then - if minetest.get_node(pos).name == "air" and math.random(1, 5) <= 4 then - minetest.add_node(pos, node) - minetest.add_node(pos, air_leaf(leaves)) - end - elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then - if minetest.get_node(pos).name == "air" then - minetest.add_node(pos, node) - minetest.add_node(pos, air_leaf(leaves)) - end - else - if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then - if minetest.get_node(pos).name == "air" and math.random(1, 5) <= 4 then - minetest.add_node(pos, node) - minetest.add_node(pos, air_leaf(leaves)) - end - end - end - pos.x = pos.x-dx - pos.y = pos.y-dy - pos.z = pos.z-dz - end - end - end -end - --- Ballon Oak -function mcl_core.generate_balloon_oak_tree(pos) - local path - local offset - local s = math.random(1, 12) - if s == 1 then - -- Small balloon oak - path = modpath .. "/schematics/mcl_core_oak_balloon.mts" - offset = { x = -2, y = -1, z = -2 } - else - -- Large balloon oak - local t = math.random(1, 4) - path = modpath .. "/schematics/mcl_core_oak_large_"..t..".mts" - if t == 1 or t == 3 then - offset = { x = -3, y = -1, z = -3 } - elseif t == 2 or t == 4 then - offset = { x = -4, y = -1, z = -4 } - end - end - minetest.place_schematic(vector.add(pos, offset), path, "random", nil, false) -end - --- Oak -local path_oak_tree = modpath.."/schematics/mcl_core_oak_classic.mts" - -function mcl_core.generate_oak_tree(pos) - local offset = { x = -2, y = -1, z = -2 } - minetest.place_schematic(vector.add(pos, offset), path_oak_tree, "random", nil, false) -end - --- Birch -function mcl_core.generate_birch_tree(pos) - local path = modpath .. - "/schematics/mcl_core_birch.mts" - minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, path, "random", nil, false) -end - --- BEGIN of spruce tree generation functions -- --- Copied from Minetest Game 0.4.15 from the pine tree (default.generate_pine_tree) - --- Pine tree (=spruce tree in MCL2) from mg mapgen mod, design by sfan5, pointy top added by paramat -local function add_spruce_leaves(data, vi, c_air, c_ignore, c_snow, c_spruce_leaves) - local node_id = data[vi] - if node_id == c_air or node_id == c_ignore or node_id == c_snow then - data[vi] = c_spruce_leaves - end -end - -function mcl_core.generate_v6_spruce_tree(pos) - local x, y, z = pos.x, pos.y, pos.z - local maxy = y + math.random(9, 13) -- Trunk top - - local c_air = minetest.get_content_id("air") - local c_ignore = minetest.get_content_id("ignore") - local c_spruce_tree = minetest.get_content_id("mcl_core:sprucetree") - local c_spruce_leaves = minetest.get_content_id("mcl_core:spruceleaves") - local c_snow = minetest.get_content_id("mcl_core:snow") - - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = x - 3, y = y, z = z - 3}, - {x = x + 3, y = maxy + 3, z = z + 3} - ) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - - -- Upper branches layer - local dev = 3 - for yy = maxy - 1, maxy + 1 do - for zz = z - dev, z + dev do - local vi = a:index(x - dev, yy, zz) - local via = a:index(x - dev, yy + 1, zz) - for xx = x - dev, x + dev do - if math.random() < 0.95 - dev * 0.05 then - add_spruce_leaves(data, vi, c_air, c_ignore, c_snow, - c_spruce_leaves) - end - vi = vi + 1 - via = via + 1 - end - end - dev = dev - 1 - end - - -- Centre top nodes - add_spruce_leaves(data, a:index(x, maxy + 1, z), c_air, c_ignore, c_snow, - c_spruce_leaves) - add_spruce_leaves(data, a:index(x, maxy + 2, z), c_air, c_ignore, c_snow, - c_spruce_leaves) -- Paramat added a pointy top node - - -- Lower branches layer - local my = 0 - for i = 1, 20 do -- Random 2x2 squares of leaves - local xi = x + math.random(-3, 2) - local yy = maxy + math.random(-6, -5) - local zi = z + math.random(-3, 2) - if yy > my then - my = yy - end - for zz = zi, zi+1 do - local vi = a:index(xi, yy, zz) - local via = a:index(xi, yy + 1, zz) - for xx = xi, xi + 1 do - add_spruce_leaves(data, vi, c_air, c_ignore, c_snow, - c_spruce_leaves) - vi = vi + 1 - via = via + 1 - end - end - end - - dev = 2 - for yy = my + 1, my + 2 do - for zz = z - dev, z + dev do - local vi = a:index(x - dev, yy, zz) - local via = a:index(x - dev, yy + 1, zz) - for xx = x - dev, x + dev do - if math.random() < 0.95 - dev * 0.05 then - add_spruce_leaves(data, vi, c_air, c_ignore, c_snow, - c_spruce_leaves) - end - vi = vi + 1 - via = via + 1 - end - end - dev = dev - 1 - end - - -- Trunk - -- Force-place lowest trunk node to replace sapling - data[a:index(x, y, z)] = c_spruce_tree - for yy = y + 1, maxy do - local vi = a:index(x, yy, z) - local node_id = data[vi] - if node_id == c_air or node_id == c_ignore or - node_id == c_spruce_leaves or node_id == c_snow then - data[vi] = c_spruce_tree - end - end - - vm:set_data(data) - vm:write_to_map() -end - -function mcl_core.generate_spruce_tree(pos) - local r = math.random(1, 3) - local path = modpath .. "/schematics/mcl_core_spruce_"..r..".mts" - minetest.place_schematic({ x = pos.x - 3, y = pos.y - 1, z = pos.z - 3 }, path, "0", nil, false) -end - -local function find_necorner(p) - local n=minetest.get_node_or_nil(vector.offset(p,0,1,1)) - local e=minetest.get_node_or_nil(vector.offset(p,1,1,0)) - if n and n.name == "mcl_core:sprucetree" then - p=vector.offset(p,0,0,1) - end - if e and e.name == "mcl_core:sprucetree" then - p=vector.offset(p,1,0,0) - end - return p -end - -local function generate_spruce_podzol(ps) - local pos=find_necorner(ps) - local pos1=vector.offset(pos,-6,-6,-6) - local pos2=vector.offset(pos,6,6,6) - local nn=minetest.find_nodes_in_area_under_air(pos1, pos2, {"group:dirt"}) - for k,v in pairs(nn) do - if math.random(vector.distance(pos,v)) < 4 and not (math.abs(pos.x-v.x) == 6 and math.abs(pos.z-v.z) == 6) then --leave out the corners - minetest.set_node(v,{name="mcl_core:podzol"}) - end - end -end - -function mcl_core.generate_huge_spruce_tree(pos) - local r1 = math.random(1, 2) - local r2 = math.random(1, 4) - local path - local offset = { x = -4, y = -1, z = -5 } - if r1 <= 2 then - -- Mega Spruce Taiga (full canopy) - path = modpath.."/schematics/mcl_core_spruce_huge_"..r2..".mts" - else - -- Mega Taiga (leaves only at top) - if r2 == 1 or r2 == 3 then - offset = { x = -3, y = -1, z = -4} - end - path = modpath.."/schematics/mcl_core_spruce_huge_up_"..r2..".mts" - end - minetest.place_schematic(vector.add(pos, offset), path, "0", nil, false) - generate_spruce_podzol(pos) -end - --- END of spruce tree functions -- - --- Acacia tree (multiple variants) -function mcl_core.generate_acacia_tree(pos) - local r = math.random(1, 7) - local offset = vector.new() - if r == 2 or r == 3 then - offset = { x = -4, y = -1, z = -4 } - elseif r == 4 or r == 6 or r == 7 then - offset = { x = -3, y = -1, z = -3 } - elseif r == 1 or r == 5 then - offset = { x = -5, y = -1, z = -5 } - end - local path = modpath.."/schematics/mcl_core_acacia_"..r..".mts" - minetest.place_schematic(vector.add(pos, offset), path, "random", nil, false) -end - --- Generate dark oak tree with 2×2 trunk. --- With pos being the lower X and the higher Z value of the trunk -function mcl_core.generate_dark_oak_tree(pos) - local path = modpath.."/schematics/mcl_core_dark_oak.mts" - minetest.place_schematic({x = pos.x - 3, y = pos.y - 1, z = pos.z - 4}, path, "random", nil, false) -end - --- Helper function for jungle tree, form Minetest Game 0.4.15 -local function add_trunk_and_leaves(data, a, pos, tree_cid, leaves_cid, - height, size, iters) - local x, y, z = pos.x, pos.y, pos.z - local c_air = minetest.CONTENT_AIR - local c_ignore = minetest.CONTENT_IGNORE - - -- Trunk - data[a:index(x, y, z)] = tree_cid -- Force-place lowest trunk node to replace sapling - for yy = y + 1, y + height - 1 do - local vi = a:index(x, yy, z) - local node_id = data[vi] - if node_id == c_air or node_id == c_ignore or node_id == leaves_cid then - data[vi] = tree_cid - end - end - - -- Force leaves near the trunk - for z_dist = -1, 1 do - for y_dist = -size, 1 do - local vi = a:index(x - 1, y + height + y_dist, z + z_dist) - for x_dist = -1, 1 do - if data[vi] == c_air or data[vi] == c_ignore then - data[vi] = leaves_cid - end - vi = vi + 1 - end - end - end - - -- Randomly add leaves in 2x2x2 clusters. - for i = 1, iters do - local clust_x = x + math.random(-size, size - 1) - local clust_y = y + height + math.random(-size, 0) - local clust_z = z + math.random(-size, size - 1) - - for xi = 0, 1 do - for yi = 0, 1 do - for zi = 0, 1 do - local vi = a:index(clust_x + xi, clust_y + yi, clust_z + zi) - if data[vi] == c_air or data[vi] == c_ignore then - data[vi] = leaves_cid - end - end - end - end - end -end - --- Old jungle tree grow function from Minetest Game 0.4.15, imitating v6 jungle trees -function mcl_core.generate_v6_jungle_tree(pos) - --[[ - NOTE: Jungletree-placing code is currently duplicated in the engine - and in games that have saplings; both are deprecated but not - replaced yet - --]] - - local x, y, z = pos.x, pos.y, pos.z - local height = math.random(8, 12) - local c_air = minetest.get_content_id("air") - local c_ignore = minetest.get_content_id("ignore") - local c_jungletree = minetest.get_content_id("mcl_core:jungletree") - local c_jungleleaves = minetest.get_content_id("mcl_core:jungleleaves") - - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = x - 3, y = y - 1, z = z - 3}, - {x = x + 3, y = y + height + 1, z = z + 3} - ) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - - add_trunk_and_leaves(data, a, pos, c_jungletree, c_jungleleaves, height, 3, 30) - - -- Roots - for z_dist = -1, 1 do - local vi_1 = a:index(x - 1, y - 1, z + z_dist) - local vi_2 = a:index(x - 1, y, z + z_dist) - for x_dist = -1, 1 do - if math.random(1, 3) >= 2 then - if data[vi_1] == c_air or data[vi_1] == c_ignore then - data[vi_1] = c_jungletree - elseif data[vi_2] == c_air or data[vi_2] == c_ignore then - data[vi_2] = c_jungletree - end - end - vi_1 = vi_1 + 1 - vi_2 = vi_2 + 1 - end - end - - vm:set_data(data) - vm:write_to_map() -end - -function mcl_core.generate_jungle_tree(pos) - local path = modpath.."/schematics/mcl_core_jungle_tree.mts" - minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, path, "random", nil, false) -end - --- Generate huge jungle tree with 2×2 trunk. --- With pos being the lower X and the higher Z value of the trunk. -function mcl_core.generate_huge_jungle_tree(pos) - -- 2 variants - local r = math.random(1, 2) - local path = modpath.."/schematics/mcl_core_jungle_tree_huge_"..r..".mts" - minetest.place_schematic({x = pos.x - 6, y = pos.y - 1, z = pos.z - 7}, path, "random", nil, false) -end - - -local grass_spread_randomizer = PseudoRandom(minetest.get_mapgen_setting("seed")) - -function mcl_core.get_grass_palette_index(pos) - local biome_data = minetest.get_biome_data(pos) - local index = 0 - if biome_data then - local biome = biome_data.biome - local biome_name = minetest.get_biome_name(biome) - local reg_biome = minetest.registered_biomes[biome_name] - if reg_biome then - index = reg_biome._mcl_palette_index - end - end - return index -end - --- Return appropriate grass block node for pos -function mcl_core.get_grass_block_type(pos) - return {name = "mcl_core:dirt_with_grass", param2 = mcl_core.get_grass_palette_index(pos)} -end - ------------------------------- --- Spread grass blocks and mycelium on neighbor dirt ------------------------------- -minetest.register_abm({ - label = "Grass Block and Mycelium spread", - nodenames = {"mcl_core:dirt"}, - neighbors = {"air", "group:grass_block_no_snow", "mcl_core:mycelium"}, - interval = 30, - chance = 20, - catch_up = false, - action = function(pos) - if pos == nil then - return - end - local above = {x=pos.x, y=pos.y+1, z=pos.z} - local abovenode = minetest.get_node(above) - if minetest.get_item_group(abovenode.name, "liquid") ~= 0 or minetest.get_item_group(abovenode.name, "opaque") == 1 then - -- Never grow directly below liquids or opaque blocks - return - end - local light_self = minetest.get_node_light(above) - if not light_self then return end - --[[ Try to find a spreading dirt-type block (e.g. grass block or mycelium) - within a 3×5×3 area, with the source block being on the 2nd-topmost layer. ]] - local nodes = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+3, z=pos.z+1}, "group:spreading_dirt_type") - local p2 - -- Nothing found ? Bail out! - if #nodes <= 0 then - return - else - p2 = nodes[grass_spread_randomizer:next(1, #nodes)] - end - - -- Found it! Now check light levels! - local source_above = {x=p2.x, y=p2.y+1, z=p2.z} - local light_source = minetest.get_node_light(source_above) - if not light_source then return end - - if light_self >= 4 and light_source >= 9 then - -- All checks passed! Let's spread the grass/mycelium! - local n2 = minetest.get_node(p2) - if minetest.get_item_group(n2.name, "grass_block") ~= 0 then - n2 = mcl_core.get_grass_block_type(pos) - end - minetest.set_node(pos, {name=n2.name}) - - -- If this was mycelium, uproot plant above - if n2.name == "mcl_core:mycelium" then - local tad = minetest.registered_nodes[minetest.get_node(above).name] - if tad and tad.groups and tad.groups.non_mycelium_plant then - minetest.dig_node(above) - end - end - end - end -}) - --- Grass/mycelium death in darkness -minetest.register_abm({ - label = "Grass Block / Mycelium in darkness", - nodenames = {"group:spreading_dirt_type"}, - interval = 8, - chance = 50, - catch_up = false, - action = function(pos, node) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - local name = minetest.get_node(above).name - -- Kill grass/mycelium when below opaque block or liquid - if name ~= "ignore" and (minetest.get_item_group(name, "opaque") == 1 or minetest.get_item_group(name, "liquid") ~= 0) then - minetest.set_node(pos, {name = "mcl_core:dirt"}) - end - end -}) - --- Turn Grass Path and similar nodes to Dirt if a solid node is placed above it -minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing) - if minetest.get_item_group(newnode.name, "solid") ~= 0 or - minetest.get_item_group(newnode.name, "dirtifier") ~= 0 then - local below = {x=pos.x, y=pos.y-1, z=pos.z} - local belownode = minetest.get_node(below) - if minetest.get_item_group(belownode.name, "dirtifies_below_solid") == 1 then - minetest.set_node(below, {name="mcl_core:dirt"}) - end - end -end) - -minetest.register_abm({ - label = "Turn Grass Path below solid block into Dirt", - nodenames = {"mcl_core:grass_path"}, - neighbors = {"group:solid"}, - interval = 8, - chance = 50, - action = function(pos, node) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - local name = minetest.get_node(above).name - local nodedef = minetest.registered_nodes[name] - if name ~= "ignore" and nodedef and (nodedef.groups and nodedef.groups.solid) then - minetest.set_node(pos, {name = "mcl_core:dirt"}) - end - end, -}) - -local SAVANNA_INDEX = 1 -minetest.register_lbm({ - label = "Replace legacy dry grass", - name = "mcl_core:replace_legacy_dry_grass_0_65_0", - nodenames = {"mcl_core:dirt_with_dry_grass", "mcl_core:dirt_with_dry_grass_snow"}, - action = function(pos, node) - local biome_data = minetest.get_biome_data(pos) - if biome_data then - local biome = biome_data.biome - local biome_name = minetest.get_biome_name(biome) - local reg_biome = minetest.registered_biomes[biome_name] - if reg_biome then - if node.name == "mcl_core:dirt_with_dry_grass_snow" then - node.name = "mcl_core:dirt_with_grass_snow" - else - node.name = "mcl_core:dirt_with_grass" - end - node.param2 = reg_biome._mcl_palette_index - -- Fall back to savanna palette index - if not node.param2 then - node.param2 = SAVANNA_INDEX - end - minetest.set_node(pos, node) - return - end - end - node.param2 = SAVANNA_INDEX - minetest.set_node(pos, node) - return - end, -}) - --------------------------- --- Try generate tree --- --------------------------- -local treelight = 9 - -local function sapling_grow_action(tree_id, soil_needed, one_by_one, two_by_two, sapling) - return function(pos) - local meta = minetest.get_meta(pos) - if meta:get("grown") then return end - -- Checks if the sapling at pos has enough light and the correct soil - local light = minetest.get_node_light(pos) - if not light then return end - local low_light = (light < treelight) - - local delta = 1 - local current_game_time = minetest.get_day_count() + minetest.get_timeofday() - - local last_game_time = tonumber(meta:get_string("last_gametime")) - meta:set_string("last_gametime", tostring(current_game_time)) - - if last_game_time then - delta = current_game_time - last_game_time - elseif low_light then - return - end - - if low_light then - if delta < 1.2 then return end - if minetest.get_node_light(pos, 0.5) < treelight then return end - end - - -- TODO: delta is [days] missed in inactive area. Currently we just add it to stage, which is far from a perfect calculation... - - local soilnode = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) - local soiltype = minetest.get_item_group(soilnode.name, "soil_sapling") - if soiltype < soil_needed then return end - - -- Increase and check growth stage - local meta = minetest.get_meta(pos) - local stage = meta:get_int("stage") - if stage == nil then stage = 0 end - stage = stage + math.max(1, math.floor(delta)) - if stage >= 3 then - meta:set_string("grown", "true") - -- This sapling grows in a special way when there are 4 saplings in a 2×2 pattern - if two_by_two then - -- Check 8 surrounding saplings and try to find a 2×2 pattern - local function is_sapling(pos, sapling) - return minetest.get_node(pos).name == sapling - end - local p2 = {x=pos.x+1, y=pos.y, z=pos.z} - local p3 = {x=pos.x, y=pos.y, z=pos.z-1} - local p4 = {x=pos.x+1, y=pos.y, z=pos.z-1} - local p5 = {x=pos.x-1, y=pos.y, z=pos.z-1} - local p6 = {x=pos.x-1, y=pos.y, z=pos.z} - local p7 = {x=pos.x-1, y=pos.y, z=pos.z+1} - local p8 = {x=pos.x, y=pos.y, z=pos.z+1} - local p9 = {x=pos.x+1, y=pos.y, z=pos.z+1} - local s2 = is_sapling(p2, sapling) - local s3 = is_sapling(p3, sapling) - local s4 = is_sapling(p4, sapling) - local s5 = is_sapling(p5, sapling) - local s6 = is_sapling(p6, sapling) - local s7 = is_sapling(p7, sapling) - local s8 = is_sapling(p8, sapling) - local s9 = is_sapling(p9, sapling) - -- In a 9×9 field there are 4 possible 2×2 squares. We check them all. - if s2 and s3 and s4 and check_tree_growth(pos, tree_id, { two_by_two = true }) then - -- Success: Remove saplings and place tree - minetest.remove_node(pos) - minetest.remove_node(p2) - minetest.remove_node(p3) - minetest.remove_node(p4) - mcl_core.generate_tree(pos, tree_id, { two_by_two = true }) - return - elseif s3 and s5 and s6 and check_tree_growth(p6, tree_id, { two_by_two = true }) then - minetest.remove_node(pos) - minetest.remove_node(p3) - minetest.remove_node(p5) - minetest.remove_node(p6) - mcl_core.generate_tree(p6, tree_id, { two_by_two = true }) - return - elseif s6 and s7 and s8 and check_tree_growth(p7, tree_id, { two_by_two = true }) then - minetest.remove_node(pos) - minetest.remove_node(p6) - minetest.remove_node(p7) - minetest.remove_node(p8) - mcl_core.generate_tree(p7, tree_id, { two_by_two = true }) - return - elseif s2 and s8 and s9 and check_tree_growth(p8, tree_id, { two_by_two = true }) then - minetest.remove_node(pos) - minetest.remove_node(p2) - minetest.remove_node(p8) - minetest.remove_node(p9) - mcl_core.generate_tree(p8, tree_id, { two_by_two = true }) - return - end - end - if one_by_one and tree_id == OAK_TREE_ID then - -- There is a chance that this tree wants to grow as a balloon oak - if math.random(1, 12) == 1 then - -- Check if there is room for that - if check_tree_growth(pos, tree_id, { balloon = true }) then - minetest.set_node(pos, {name="air"}) - mcl_core.generate_tree(pos, tree_id, { balloon = true }) - return - end - end - end - -- If this sapling can grow alone - if one_by_one and check_tree_growth(pos, tree_id) then - -- Single sapling - minetest.set_node(pos, {name="air"}) - --local r = math.random(1, 12) - mcl_core.generate_tree(pos, tree_id) - return - end - else - meta:set_int("stage", stage) - end - end -end - -local grow_oak = sapling_grow_action(OAK_TREE_ID, 1, true, false) -local grow_dark_oak = sapling_grow_action(DARK_OAK_TREE_ID, 2, false, true, "mcl_core:darksapling") -local grow_jungle_tree = sapling_grow_action(JUNGLE_TREE_ID, 1, true, true, "mcl_core:junglesapling") -local grow_acacia = sapling_grow_action(ACACIA_TREE_ID, 2, true, false) -local grow_spruce = sapling_grow_action(SPRUCE_TREE_ID, 1, true, true, "mcl_core:sprucesapling") -local grow_birch = sapling_grow_action(BIRCH_TREE_ID, 1, true, false) - --- Attempts to grow the sapling at the specified position --- pos: Position --- node: Node table of the node at this position, from minetest.get_node --- Returns true on success and false on failure -function mcl_core.grow_sapling(pos, node) - local grow - if node.name == "mcl_core:sapling" then - grow = grow_oak - elseif node.name == "mcl_core:darksapling" then - grow = grow_dark_oak - elseif node.name == "mcl_core:junglesapling" then - grow = grow_jungle_tree - elseif node.name == "mcl_core:acaciasapling" then - grow = grow_acacia - elseif node.name == "mcl_core:sprucesapling" then - grow = grow_spruce - elseif node.name == "mcl_core:birchsapling" then - grow = grow_birch - end - if grow then - grow(pos) - return true - else - return false - end -end - --- TODO: Use better tree models for everything --- TODO: Support 2×2 saplings - --- Oak tree -minetest.register_abm({ - label = "Oak tree growth", - nodenames = {"mcl_core:sapling"}, - neighbors = {"group:soil_sapling"}, - interval = 25, - chance = 2, - action = grow_oak -}) -minetest.register_lbm({ - label = "Add growth for unloaded oak tree", - name = "mcl_core:lbm_oak", - nodenames = {"mcl_core:sapling"}, - run_at_every_load = true, - action = grow_oak -}) - --- Dark oak tree -minetest.register_abm({ - label = "Dark oak tree growth", - nodenames = {"mcl_core:darksapling"}, - neighbors = {"group:soil_sapling"}, - interval = 25, - chance = 2, - action = grow_dark_oak -}) -minetest.register_lbm({ - label = "Add growth for unloaded dark oak tree", - name = "mcl_core:lbm_dark_oak", - nodenames = {"mcl_core:darksapling"}, - run_at_every_load = true, - action = grow_dark_oak -}) - --- Jungle Tree -minetest.register_abm({ - label = "Jungle tree growth", - nodenames = {"mcl_core:junglesapling"}, - neighbors = {"group:soil_sapling"}, - interval = 25, - chance = 2, - action = grow_jungle_tree -}) -minetest.register_lbm({ - label = "Add growth for unloaded jungle tree", - name = "mcl_core:lbm_jungle_tree", - nodenames = {"mcl_core:junglesapling"}, - run_at_every_load = true, - action = grow_jungle_tree -}) - --- Spruce tree -minetest.register_abm({ - label = "Spruce tree growth", - nodenames = {"mcl_core:sprucesapling"}, - neighbors = {"group:soil_sapling"}, - interval = 25, - chance = 2, - action = grow_spruce -}) -minetest.register_lbm({ - label = "Add growth for unloaded spruce tree", - name = "mcl_core:lbm_spruce", - nodenames = {"mcl_core:sprucesapling"}, - run_at_every_load = true, - action = grow_spruce -}) - --- Birch tree -minetest.register_abm({ - label = "Birch tree growth", - nodenames = {"mcl_core:birchsapling"}, - neighbors = {"group:soil_sapling"}, - interval = 25, - chance = 2, - action = grow_birch -}) -minetest.register_lbm({ - label = "Add growth for unloaded birch tree", - name = "mcl_core:lbm_birch", - nodenames = {"mcl_core:birchsapling"}, - run_at_every_load = true, - action = grow_birch -}) - --- Acacia tree -minetest.register_abm({ - label = "Acacia tree growth", - nodenames = {"mcl_core:acaciasapling"}, - neighbors = {"group:soil_sapling"}, - interval = 20, - chance = 2, - action = grow_acacia -}) -minetest.register_lbm({ - label = "Add growth for unloaded acacia tree", - name = "mcl_core:lbm_acacia", - nodenames = {"mcl_core:acaciasapling"}, - run_at_every_load = true, - action = grow_acacia -}) - -local function leafdecay_particles(pos, node) - minetest.add_particlespawner({ - amount = math.random(10, 20), - time = 0.1, - minpos = vector.add(pos, {x=-0.4, y=-0.4, z=-0.4}), - maxpos = vector.add(pos, {x=0.4, y=0.4, z=0.4}), - minvel = {x=-0.2, y=-0.2, z=-0.2}, - maxvel = {x=0.2, y=0.1, z=0.2}, - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 0.1, - maxexptime = 0.5, - minsize = 0.5, - maxsize = 1.5, - collisiondetection = true, - vertical = false, - node = node, - }) -end - -local function vinedecay_particles(pos, node) - local dir = minetest.wallmounted_to_dir(node.param2) - local relpos1, relpos2 - if dir.x < 0 then - relpos1 = { x = -0.45, y = -0.4, z = -0.5 } - relpos2 = { x = -0.4, y = 0.4, z = 0.5 } - elseif dir.x > 0 then - relpos1 = { x = 0.4, y = -0.4, z = -0.5 } - relpos2 = { x = 0.45, y = 0.4, z = 0.5 } - elseif dir.z < 0 then - relpos1 = { x = -0.5, y = -0.4, z = -0.45 } - relpos2 = { x = 0.5, y = 0.4, z = -0.4 } - elseif dir.z > 0 then - relpos1 = { x = -0.5, y = -0.4, z = 0.4 } - relpos2 = { x = 0.5, y = 0.4, z = 0.45 } - else - return - end - - minetest.add_particlespawner({ - amount = math.random(8, 16), - time = 0.1, - minpos = vector.add(pos, relpos1), - maxpos = vector.add(pos, relpos2), - minvel = {x=-0.2, y=-0.2, z=-0.2}, - maxvel = {x=0.2, y=0.1, z=0.2}, - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 0.1, - maxexptime = 0.5, - minsize = 0.5, - maxsize = 1.0, - collisiondetection = true, - vertical = false, - node = node, - }) -end - ---------------------- --- Vine generating -- ---------------------- -minetest.register_abm({ - label = "Vines growth", - nodenames = {"mcl_core:vine"}, - interval = 47, - chance = 4, - action = function(pos, node, active_object_count, active_object_count_wider) - - -- First of all, check if we are even supported, otherwise, let's die! - if not mcl_core.check_vines_supported(pos, node) then - minetest.remove_node(pos) - vinedecay_particles(pos, node) - minetest.check_for_falling(pos) - return - end - - -- Add vines below pos (if empty) - local function spread_down(origin, target, dir, node) - if math.random(1, 2) == 1 then - if minetest.get_node(target).name == "air" then - minetest.add_node(target, {name = "mcl_core:vine", param2 = node.param2}) - end - end - end - - -- Add vines above pos if it is backed up - local function spread_up(origin, target, dir, node) - local vines_in_area = minetest.find_nodes_in_area({x=origin.x-4, y=origin.y-1, z=origin.z-4}, {x=origin.x+4, y=origin.y+1, z=origin.z+4}, "mcl_core:vine") - -- Less then 4 vines blocks around the ticked vines block (remember the ticked block is counted by above function as well) - if #vines_in_area < 5 then - if math.random(1, 2) == 1 then - if minetest.get_node(target).name == "air" then - local backup_dir = minetest.wallmounted_to_dir(node.param2) - local backup = vector.subtract(target, backup_dir) - local backupnodename = minetest.get_node(backup).name - - -- Check if the block above is supported - if mcl_core.supports_vines(backupnodename) then - minetest.add_node(target, {name = "mcl_core:vine", param2 = node.param2}) - end - end - end - end - end - - local function spread_horizontal(origin, target, dir, node) - local vines_in_area = minetest.find_nodes_in_area({x=origin.x-4, y=origin.y-1, z=origin.z-4}, {x=origin.x+4, y=origin.y+1, z=origin.z+4}, "mcl_core:vine") - -- Less then 4 vines blocks around the ticked vines block (remember the ticked block is counted by above function as well) - if #vines_in_area < 5 then - -- Spread horizontally - local backup_dir = minetest.wallmounted_to_dir(node.param2) - if not vector.equals(backup_dir, dir) then - local target_node = minetest.get_node(target) - if target_node.name == "air" then - local backup = vector.add(target, backup_dir) - local backupnodename = minetest.get_node(backup).name - if mcl_core.supports_vines(backupnodename) then - minetest.add_node(target, {name = "mcl_core:vine", param2 = node.param2}) - end - end - end - end - end - - local directions = { - { { x= 1, y= 0, z= 0 }, spread_horizontal }, - { { x=-1, y= 0, z= 0 }, spread_horizontal }, - { { x= 0, y= 1, z= 0 }, spread_up }, - { { x= 0, y=-1, z= 0 }, spread_down }, - { { x= 0, y= 0, z= 1 }, spread_horizontal }, - { { x= 0, y= 0, z=-1 }, spread_horizontal }, - } - - local d = math.random(1, #directions) - local dir = directions[d][1] - local spread = directions[d][2] - - spread(pos, vector.add(pos, dir), dir, node) - end -}) - --- Returns true of the node supports vines -function mcl_core.supports_vines(nodename) - local def = minetest.registered_nodes[nodename] - -- Rules: 1) walkable 2) full cube - return def and def.walkable and - (def.node_box == nil or def.node_box.type == "regular") and - (def.collision_box == nil or def.collision_box.type == "regular") -end - --- Leaf Decay - --- To enable leaf decay for a node, add it to the "leafdecay" group. --- --- The rating of the group determines how far from a node in the group "tree" --- the node can be without decaying. --- --- If param2 of the node is ~= 0, the node will always be preserved. Thus, if --- the player places a node of that kind, you will want to set param2=1 or so. --- - -mcl_core.leafdecay_trunk_cache = {} -mcl_core.leafdecay_enable_cache = true --- Spread the load of finding trunks -mcl_core.leafdecay_trunk_find_allow_accumulator = 0 - -minetest.register_globalstep(function(dtime) - --local finds_per_second = 5000 - mcl_core.leafdecay_trunk_find_allow_accumulator = math.floor(dtime * 5000) -end) - -minetest.register_abm({ - label = "Leaf decay", - nodenames = {"group:leafdecay"}, - neighbors = {"air", "group:liquid"}, - -- A low interval and a high inverse chance spreads the load - interval = 2, - chance = 5, - - action = function(p0, node, _, _) - local do_preserve = false - local d = minetest.registered_nodes[node.name].groups.leafdecay - if not d or d == 0 then - return - end - local n0 = minetest.get_node(p0) - if n0.param2 ~= 0 then - -- Prevent leafdecay for player-placed leaves. - -- param2 is set to 1 after it was placed by the player - return - end - local p0_hash = nil - if mcl_core.leafdecay_enable_cache then - p0_hash = minetest.hash_node_position(p0) - local trunkp = mcl_core.leafdecay_trunk_cache[p0_hash] - if trunkp then - local n = minetest.get_node(trunkp) - local reg = minetest.registered_nodes[n.name] - -- Assume ignore is a trunk, to make the thing work at the border of the active area - if n.name == "ignore" or (reg and reg.groups.tree and reg.groups.tree ~= 0) then - return - end - -- Cache is invalid - table.remove(mcl_core.leafdecay_trunk_cache, p0_hash) - end - end - if mcl_core.leafdecay_trunk_find_allow_accumulator <= 0 then - return - end - mcl_core.leafdecay_trunk_find_allow_accumulator = - mcl_core.leafdecay_trunk_find_allow_accumulator - 1 - -- Assume ignore is a trunk, to make the thing work at the border of the active area - local p1 = minetest.find_node_near(p0, d, {"ignore", "group:tree"}) - if p1 then - do_preserve = true - if mcl_core.leafdecay_enable_cache then - -- Cache the trunk - mcl_core.leafdecay_trunk_cache[p0_hash] = p1 - end - end - if not do_preserve then - -- Drop stuff other than the node itself - local itemstacks = minetest.get_node_drops(n0.name) - for _, itemname in pairs(itemstacks) do - local p_drop = { - x = p0.x - 0.5 + math.random(), - y = p0.y - 0.5 + math.random(), - z = p0.z - 0.5 + math.random(), - } - minetest.add_item(p_drop, itemname) - end - -- Remove node - minetest.remove_node(p0) - leafdecay_particles(p0, n0) - minetest.check_for_falling(p0) - - -- Kill depending vines immediately to skip the vines decay delay - local surround = { - { x = 0, y = 0, z = -1 }, - { x = 0, y = 0, z = 1 }, - { x = -1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = -1, z = -1 }, - } - for s=1, #surround do - local spos = vector.add(p0, surround[s]) - local maybe_vine = minetest.get_node(spos) - --local surround_inverse = vector.multiply(surround[s], -1) - if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then - minetest.remove_node(spos) - vinedecay_particles(spos, maybe_vine) - minetest.check_for_falling(spos) - end - end - end - end -}) - --- Remove vines which are not supported by anything, similar to leaf decay. ---[[ TODO: Vines are supposed to die immediately when they supporting block is destroyed. -But doing this in Minetest would be too complicated / hacky. This vines decay is a simple -way to make sure that all floating vines are destroyed eventually. ]] -minetest.register_abm({ - label = "Vines decay", - nodenames = {"mcl_core:vine"}, - neighbors = {"air"}, - -- A low interval and a high inverse chance spreads the load - interval = 4, - chance = 8, - action = function(p0, node, _, _) - if not mcl_core.check_vines_supported(p0, node) then - -- Vines must die! - minetest.remove_node(p0) - vinedecay_particles(p0, node) - -- Just in case a falling node happens to float above vines - minetest.check_for_falling(p0) - end - end -}) - --- Melt snow -minetest.register_abm({ - label = "Top snow and ice melting", - nodenames = {"mcl_core:snow", "mcl_core:ice"}, - interval = 16, - chance = 8, - action = function(pos, node) - if minetest.get_node_light(pos, 0) >= 12 then - if node.name == "mcl_core:ice" then - mcl_core.melt_ice(pos) - else - minetest.remove_node(pos) - end - end - end -}) - ---[[ Call this for vines nodes only. -Given the pos and node of a vines node, this returns true if the vines are supported -and false if the vines are currently floating. -Vines are considered “supported” if they face a walkable+solid block or “hang” from a vines node above. ]] -function mcl_core.check_vines_supported(pos, node) - local supported = false - local dir = minetest.wallmounted_to_dir(node.param2) - local pos1 = vector.add(pos, dir) - local node_neighbor = minetest.get_node(pos1) - -- Check if vines are attached to a solid block. - -- If ignore, we assume its solid. - if node_neighbor.name == "ignore" or mcl_core.supports_vines(node_neighbor.name) then - supported = true - elseif dir.y == 0 then - -- Vines are not attached, now we check if the vines are “hanging” below another vines block - -- of equal orientation. - local pos2 = vector.add(pos, {x=0, y=1, z=0}) - local node2 = minetest.get_node(pos2) - -- Again, ignore means we assume its supported - if node2.name == "ignore" or (node2.name == "mcl_core:vine" and node2.param2 == node.param2) then - supported = true - end - end - return supported -end - --- Melt ice at pos. mcl_core:ice MUST be at pos if you call this! -function mcl_core.melt_ice(pos) - -- Create a water source if ice is destroyed and there was something below it - local below = {x=pos.x, y=pos.y-1, z=pos.z} - local belownode = minetest.get_node(below) - local dim = mcl_worlds.pos_to_dimension(below) - if dim ~= "nether" and belownode.name ~= "air" and belownode.name ~= "ignore" and belownode.name ~= "mcl_core:void" then - minetest.set_node(pos, {name="mcl_core:water_source"}) - else - minetest.remove_node(pos) - end - local neighbors = { - {x=-1, y=0, z=0}, - {x=1, y=0, z=0}, - {x=0, y=-1, z=0}, - {x=0, y=1, z=0}, - {x=0, y=0, z=-1}, - {x=0, y=0, z=1}, - } - for n=1, #neighbors do - minetest.check_single_for_falling(vector.add(pos, neighbors[n])) - end -end - ----- FUNCTIONS FOR SNOWED NODES ---- --- These are nodes which change their appearence when they are below a snow cover --- and turn back into “normal” when the snow cover is removed. - --- Registers a snowed variant of a node (e.g. grass block, podzol, mycelium). --- * itemstring_snowed: Itemstring of the snowed node to add --- * itemstring_clear: Itemstring of the original “clear” node without snow --- * tiles: Optional custom tiles --- * sounds: Optional custom sounds --- * clear_colorization: Optional. If true, will clear all paramtype2="color" related node def. fields --- * desc: Item description --- --- The snowable nodes also MUST have _mcl_snowed defined to contain the name --- of the snowed node. -function mcl_core.register_snowed_node(itemstring_snowed, itemstring_clear, tiles, sounds, clear_colorization, desc) - local def = table.copy(minetest.registered_nodes[itemstring_clear]) - local create_doc_alias - if def.description then - create_doc_alias = true - else - create_doc_alias = false - end - -- Just some group clearing - def.description = desc - def._doc_items_longdesc = nil - def._doc_items_usagehelp = nil - def._doc_items_create_entry = false - def.groups.not_in_creative_inventory = 1 - if def.groups.grass_block == 1 then - def.groups.grass_block_no_snow = nil - def.groups.grass_block_snow = 1 - end - - -- Enderman must never take this because this block is supposed to be always buried below snow. - def.groups.enderman_takable = nil - - -- Snowed blocks never spread - def.groups.spreading_dirt_type = nil - - -- Add the clear node to the item definition for easy lookup - def._mcl_snowless = itemstring_clear - - -- Note: _mcl_snowed must be added to the clear node manually! - - if not tiles then - def.tiles = {"default_snow.png", "default_dirt.png", {name="mcl_core_grass_side_snowed.png", tileable_vertical=false}} - else - def.tiles = tiles - end - if clear_colorization then - def.paramtype2 = nil - def.palette = nil - def.palette_index = nil - def.color = nil - def.overlay_tiles = nil - end - if not sounds then - def.sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = { name = "pedology_snow_soft_footstep", gain = 0.5 } - }) - else - def.sounds = sounds - end - - def._mcl_silk_touch_drop = {itemstring_clear} - - -- Register stuff - minetest.register_node(itemstring_snowed, def) - - if create_doc_alias and minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", itemstring_clear, "nodes", itemstring_snowed) - end -end - --- Reverts a snowed dirtlike node at pos to its original snow-less form. --- This function assumes there is no snow cover node above. This function --- MUST NOT be called if there is a snow cover node above pos. -function mcl_core.clear_snow_dirt(pos, node) - local def = minetest.registered_nodes[node.name] - if def._mcl_snowless then - minetest.swap_node(pos, {name = def._mcl_snowless, param2=node.param2}) - end -end - ----- [[[[[ Functions for snowable nodes (nodes that can become snowed). ]]]]] ---- --- Always add these for snowable nodes. - --- on_construct --- Makes constructed snowable node snowed if placed below a snow cover node. -function mcl_core.on_snowable_construct(pos) - -- Myself - local node = minetest.get_node(pos) - - -- Above - local apos = {x=pos.x, y=pos.y+1, z=pos.z} - local anode = minetest.get_node(apos) - - -- Make snowed if needed - if minetest.get_item_group(anode.name, "snow_cover") == 1 then - local def = minetest.registered_nodes[node.name] - if def._mcl_snowed then - minetest.swap_node(pos, {name = def._mcl_snowed, param2=node.param2}) - end - end -end - - ----- [[[[[ Functions for snow cover nodes. ]]]]] ---- - --- A snow cover node is a node which turns a snowed dirtlike -- --- node into its snowed form while it is placed above. --- MCL2's snow cover nodes are Top Snow (mcl_core:snow) and Snow (mcl_core:snowblock). - --- Always add the following functions to snow cover nodes: - --- on_construct --- Makes snowable node below snowed. -function mcl_core.on_snow_construct(pos) - local npos = {x=pos.x, y=pos.y-1, z=pos.z} - local node = minetest.get_node(npos) - local def = minetest.registered_nodes[node.name] - if def._mcl_snowed then - minetest.swap_node(npos, {name = def._mcl_snowed, param2=node.param2}) - end -end --- after_destruct --- Clears snowed dirtlike node below. -function mcl_core.after_snow_destruct(pos) - local nn = minetest.get_node(pos).name - -- No-op if snow was replaced with snow - if minetest.get_item_group(nn, "snow_cover") == 1 then - return - end - local npos = {x=pos.x, y=pos.y-1, z=pos.z} - local node = minetest.get_node(npos) - mcl_core.clear_snow_dirt(npos, node) -end diff --git a/mods/ITEMS/mcl_core/init.lua b/mods/ITEMS/mcl_core/init.lua deleted file mode 100644 index c345d057b..000000000 --- a/mods/ITEMS/mcl_core/init.lua +++ /dev/null @@ -1,30 +0,0 @@ -mcl_core = {} - --- Repair percentage for toolrepair -mcl_core.repair = 0.05 - -mcl_autogroup.register_diggroup("handy") -mcl_autogroup.register_diggroup("pickaxey", { - levels = { "wood", "gold", "stone", "iron", "diamond" } -}) -mcl_autogroup.register_diggroup("axey") -mcl_autogroup.register_diggroup("shovely") -mcl_autogroup.register_diggroup("shearsy") -mcl_autogroup.register_diggroup("shearsy_wool") -mcl_autogroup.register_diggroup("shearsy_cobweb") -mcl_autogroup.register_diggroup("swordy") -mcl_autogroup.register_diggroup("swordy_cobweb") -mcl_autogroup.register_diggroup("hoey") - --- Load files -local modpath = minetest.get_modpath(minetest.get_current_modname()) -dofile(modpath.."/functions.lua") -dofile(modpath.."/nodes_base.lua") -- Simple solid cubic nodes with simple definitions -dofile(modpath.."/nodes_liquid.lua") -- Liquids -dofile(modpath.."/nodes_cactuscane.lua") -- Cactus and sugar canes -dofile(modpath.."/nodes_trees.lua") -- Tree nodes: Wood, Planks, Sapling, Leaves -dofile(modpath.."/nodes_glass.lua") -- Glass -dofile(modpath.."/nodes_climb.lua") -- Climbable nodes -dofile(modpath.."/nodes_misc.lua") -- Other and special nodes -dofile(modpath.."/craftitems.lua") -dofile(modpath.."/crafting.lua") diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.de.tr b/mods/ITEMS/mcl_core/locale/mcl_core.de.tr deleted file mode 100644 index b064cebbe..000000000 --- a/mods/ITEMS/mcl_core/locale/mcl_core.de.tr +++ /dev/null @@ -1,283 +0,0 @@ -# textdomain: mcl_core -@1 could not survive in lava.=@1 konnte nicht in Lava überleben. -@1 died in lava.=@1 starb in Lava. -@1 melted in lava.=@1 schmolz in der Lava. -@1 took a bath in a hot lava tub.=@1 nahm ein Bad in einer heißen Lavawanne. -A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=Ein Diamantblock ist hauptsächlich ein schicker Dekorationsblock, aber er ist auch nützlich zur kompakten Aufbewahrung von Diamanten. -A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=Ein Smaragdblock ist hauptsächlich ein schicker Dekorationsblock, aber er ist auch nützlich zur kompakten Aufbewahrung von Smaragden. -A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=Ein Goldblock ist hauptsächlich ein glänzender Dekorationsblock, aber er ist auch nützlich zur kompakten Aufbewahrung von Goldbarren. -A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=Ein Eisenblock ist hauptsächlich ein Dekorationsblock, aber er ist auch nützlich zur kompakten Aufbewahrung von Eisenbarren. -A cactus can only be placed on top of another cactus or any sand.=Ein Kaktus kann nur auf einem anderen Kaktus oder auf beliebigem Sand platziert werden. -A decorative and mostly transparent block.=Ein Dekoblock, der größtenteils transparent ist. -A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=Ein Grasblock ist Erde mit einer Grasschicht. Grasblöcke sind vielseitige Blöcke, die das Wachstum aller möglichen Pflanzen fördern. Mit einer Hacke kann man das Land bestellen und einen Ackerboden machen. Mit einer Schaufel verwandelt man ihn in einen Graspfad. Im Licht wird das Gras sich langsam auf benachbarte Erde ausbreiten. Unter einem lichtundurchlässigen Block kann sich dieser Block wieder zurück zu Erde verwandeln. -A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=Ein Lapislazuliblock ist hauptsächlich ein Deko-Block aber er ist auch nützlich zur kompakten Aufbewahrung von Lapislazuli. -A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=Eine Lavaquelle zündet einige Luftblöcke über ihr an, wenn sie sich neben einem entzündlichen Block befinden. -A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=Ein Leiterstück, mit dem Sie vertikal klettern können. Leitern können nur an der Seite fester Blöcke und nicht an Glas, Blättern, Eis, Platten, Leuchtsteinen oder Ozeanlaternen platziert werden. -Acacia Bark=Akazienrinde -Acacia Leaves=Akazienblätter -Acacia Sapling=Akaziensetzling -Acacia Wood=Akazienholz -Acacia Wood Planks=Akazienholzplanken -Acacia leaves are grown from acacia trees.=Akazienblätter wachsen an Akazienbäumen. -Andesite=Andesit -Andesite is an igneous rock.=Andesit ist ein magmatisches Gestein. -Apple=Apfel -Apples are food items which can be eaten.=Äpfel sind essbare Gegenstände. -Barrier=Barriere -Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=Barrieren sind unsichtbare feste Blöcke. Sie sind nützlich, um Grenzen für Abenteuerkarten und ähnliches zu bauen. Monster und Tiere werden auf Barrieren nicht auftauchen, und Zäune verbinden sich nicht mit Barrieren. Andere Blöcke können an Barrieren gebaut werden, wie bei allen anderen Blöcken. -Bedrock=Grundgestein -Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=Grundgestein ist ein sehr harter Gesteinstyp. Er kann unter normalen Umständen nicht abgebaut, zerstört, aufgesammelt oder verschoben werden, außer im Kreativmodus. -Birch Bark=Birkenrinde -Birch Leaves=Birkenblätter -Birch Sapling=Birkensetzling -Birch Wood=Birkenholz -Birch Wood Planks=Birkenholzplanken -Birch leaves are grown from birch trees.=Birkenblätter wachsen an Birken. -Black Stained Glass=Schwarzes Buntglas -Block of Coal=Kohleblock -Block of Diamond=Diamantblock -Block of Emerald=Smaragdblock -Block of Gold=Goldblock -Block of Iron=Eisenblock -Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=Kohleblöcke sind für eine kompakte Aufbewahrung von Kohle nützlich und sehr nützlich als Ofenbrennstoff. Ein Kohleblock ist so effizient wie 10 mal Kohle. -Blue Stained Glass=Blaues Buntglas -Bone Block=Knochenblock -Bone blocks are decorative blocks and a compact storage of bone meal.=Knochenblöcke sind Deko-Blöcke und geeignet zur kompakten Aufbewahrung von Knochenmehl. -Bowl=Schale -Bowls are mainly used to hold tasty soups.=Schalen werden hauptsächlich für leckere Suppen gebraucht. -Brick=Ziegel -Brick Block=Ziegelblock -Brick blocks are a good building material for building solid houses and can take quite a punch.=Ziegelblöcke sind ein gutes Baumaterial für den Bau stabiler Gebäude und halten einiges aus. -Bricks are used to craft brick blocks.=Ziegel werden zur Herstellung von Ziegelblöcken benötigt. -Brown Stained Glass=Braunes Buntglas -Cactus=Kaktus -Charcoal=Holzkohle -Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=Holzkohle ist ein alternativer Brennstoff. Er entsteht, wenn Holz im Ofen verkohlt wird. Er brennt genau so lange wie Kohle und hat fast identische Herstellungsrezepte, aber es können keine Kohleblöcke damit gemacht werden. -Chiseled Stone Bricks=Gemeißelte Steinziegel -Chiseled Red Sandstone=Gemeißelter roter Sandstein -Chiseled Sandstone=Gemeißelter Sandstein -Chiseled red sandstone is a decorative building block.=Gemeißelter roter Sandstein ist ein dekorativer Block zum Bauen. -Chiseled sandstone is a decorative building block.=Gemeißelter Sandstein ist ein dekorativer Block zum Bauen. -Clay=Ton -Clay Ball=Tonklumpen -Clay balls are a raw material, mainly used to create bricks in the furnace.=Tonklumpen sind ein Rohstoff, sie werden hauptsächlich zur Ziegelherstellung im Ofen benutzt. -Clay is a versatile kind of earth commonly found at beaches underwater.=Ton ist eine vielseitige Art Erde, die oft an Stränden unter dem Wasser gefunden werden kann. -Coal=Kohle -Coal Ore=Kohleerz -Coarse Dirt=Grobe Erde -Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=Grobe Erde ist für einige Pflanzen ein Erdboden und ähnlich wie Erde, aber auf ihr wird nie eine Grasschicht oder ähnliches wachsen. -Cobblestone=Kopfsteinpflaster -Cobweb=Spinnennetz -Cobwebs can be walked through, but significantly slow you down.=Spinnennetze können passiert werden, aber sie verlangsamen Sie beträchtlich. -Cracked Stone Bricks=Rissige Steinziegel -Cut Red Sandstone=Geschliffener roter Sandstein -Cut Sandstone=Geschliffener Sandstein -Cut red sandstone is a decorative building block.=Geschliffener roter Sandstein ist ein dekorativer Block zum Bauen. -Cut sandstone is a decorative building block.=Geschliffener Sandstein ist ein dekorativer Block zum Bauen. -Cyan Stained Glass=Türkises Buntglas -Dark Oak Bark=Schwarzeichenrinde -Dark Oak Leaves=Schwarzeichenblätter -Dark Oak Sapling=Schwarzeichensetzling -Dark Oak Wood=Schwarzeichenholz -Dark Oak Wood Planks=Schwarzeichenholzplanken -Dark oak leaves are grown from dark oak trees.=Schwarzeichenblätter wachsen an Schwarzeichen. -Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=Schwarzeichensetzlinge können zu Schwarzeichen heranwachsen, aber nur in Gruppen. Ein einsamer Schwarzeichensetzling wird nicht wachsen. Eine Gruppe aus vier Schwarzeichensetzlingen werden nach etwas Zeit zu einer Schwarzeiche heranwachen, wenn sie auf einem Erdboden (wie Erde) in einem 2×2-Quadrat platziert wurden und genügend Licht ausgesetzt sind. -Dead Bush=Toter Busch -Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=Tote Büsche sind uninteressante Pflanzen, die oft in trockenen Gebieten vorkommen. -Diamond=Diamant -Diamond Ore=Diamanterz -Diamond ore is rare and can be found in clusters near the bottom of the world.=Diamanterz ist selten und kann in kleinen Ansammlungen in der Nähe des Weltbodens gefunden werden. -Diamonds are precious minerals and useful to create the highest tier of armor and tools.=Diamanten sind kostbare Mineralien, die für die hochwertigsten Rüstungen und Werkzeuge gebraucht werden. -Diorite=Diorit -Diorite is an igneous rock.=Diorit ist ein vulkanisches Gestein. -Dirt=Erde -Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=Erde dient als Nährboden für einige Pflanzen. Im Licht könnte auf diesem Block eine Gras- oder Myzelschicht wachsen, wenn solche Blöcke in der Nähe sind. -Emerald=Smaragd -Emerald Ore=Smaragderz -Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Smaragderz ist das Erz von Smaragden. Es ist sehr selten und kann nur einzeln gefunden werden, nicht in Ansammlungen. -Emeralds are used in villager trades as currency.= -Flint=Feuerstein -Flint is a raw material.=Feuerstein ist ein Rohstoff. -Flowing Lava=Fließende Lava -Flowing Water=Fließendes Wasser -Frosted Ice=Brüchiges Eis -Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=Brüchiges Eis ist ein kurzlebiger durchscheinender Block. Er wird sich in einigen Sekunden zu einer Wasserquelle verwandeln. -Glass=Glas -Gold Ingot=Goldbarren -Gold Nugget=Goldklumpen -Gold Ore=Golderz -Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Goldklumpen sind sehr kleine Stücke geschmolzenes Gold; ihr Hauptzweck besteht darin, Goldbarren herzustellen. -Golden Apple=Goldener Apfel -Golden apples are precious food items which can be eaten.=Goldene Äpfel sind kostbare Lebensmittel. -Granite=Granit -Grass Block=Grasblock -Grass Path=Graspfad -Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Graspfade sind eine dekorative Variante von Grasblöcken. Ihre Oberseite hat eine andere Farbe und sie sind etwas niedriger als Grasblöcke, wodurch sie nützlich sind, um Fußwege zu errichten. Graspfade werden mit einer Schaufel errichtet. Ein Graspfad verwandelt sich in Erde, wenn er sich unter einem festen Block befindet. -Gravel=Kies -Green Stained Glass=Grünes Buntglas -Grey Stained Glass=Graues Buntglas -Ice=Eis -Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=Eis ist ein durchscheinender fester Block, der oft in kalten Gebieten gefunden werden kann. Er schmilzt in der Nähe von Block-Lichtquellen bei einer Helligkeit von 12 oder höher. Wenn es schmilzt oder abgebaut wird, und darunter ein anderer Block war, wird er sich in eine Wasserquelle verwandeln. -In the End dimension, starting a fire on this block will create an eternal fire.=In der Ende-Dimension wird Feuer auf diesem Block ewig brennen. -Iron Ingot=Eisenbarren -Iron Nugget=Eisenklumpen -Iron Ore=Eisenerz -Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=Eisenklumpen sind sehr kleine Brocken aus geschmolzenem Eisen; ihr Hauptzweck besteht darin, Eisenbarren herzustellen. -Jungle Bark=Dschungelrinde -Jungle Leaves=Dschungelblätter -Jungle Sapling=Dschungelsetzling -Jungle Wood=Dschungelholz -Jungle Wood Planks=Dschungelholzplanken -Jungle leaves are grown from jungle trees.=Dschungelblätter wachsen an Dschungelbäumen. -Ladder=Leiter -Lapis Lazuli Block=Lapislazuliblock -Lapis Lazuli Ore=Lapislazulierz -Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=Lapislazulierz ist das Erz von Lapislazuli. Es kann relativ selten in Ansammlungen in der Nähe des Weltbodens gefunden werden. -Lava Source=Lavaquelle -Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=Lava ist heiß und ziemlich gefährlich. Berühren Sie sie nicht, es wird Sie verletzen und es ist schwierig, ihr zu entkommen. -Light Blue Stained Glass=Hellblaues Buntglas -Light Grey Stained Glass=Hellgraues Buntglas -Lime Stained Glass=Lindgrünes Buntglas -Lit Redstone Ore=Leuchtendes Redstoneerz -Magenta Stained Glass=Magenta Buntglas -Molten gold. It is used to craft armor, tools, and whatnot.=Geschmolzenes Gold. Es wird benutzt, um Rüstungen, Werkzeuge, und anderes herzustellen. -Molten iron. It is used to craft armor, tools, and whatnot.=Geschmolzenes Eisen. Es wird benutzt, um Rüstungen, Werkzeuge, und vieles mehr herzustellen. -Mossy Cobblestone=Moosiges Kopfsteinpflaster -Mossy Stone Bricks=Moosige Steinziegel -Mycelium=Myzel -Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=Myzel ist eine Art Erde und der perfekte Nährboden für Pilze. Anders als bei anderen erdähnlichen Blöcken kann es mit einer Hacke nicht zu Ackerboden verwandelt werden. Im Licht wird sich Myzel langsam auf benachbarte Erde ausbreiten. Unter einem lichtundurchlässigen Block oder einer Flüssigkeit wird es sich früher oder später zurück zu Erde verwandeln. -Oak Bark=Eichenrinde -Oak Leaves=Eichenblätter -Oak Sapling=Eichensetzling -Oak Wood=Eichenholz -Oak Wood Planks=Eichenholzplanken -Oak leaves are grown from oak trees.=Eichenblätter wachsen von Eichen. -Obsidian=Obsidian -Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=Obsidian ist ein extrem hartes Mineral mit einem enormen Sprengwiderstand. -One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=Eines der häufigsten Blöcke der Welt, fast der ganze Untergrund besteht aus Stein. Er enthält manchmal Erze. Stein kann entstehen, wenn Wasser auf Lava trifft. -Orange Stained Glass=Orange Buntglas -Packed Ice=Packeis -Packed ice is a compressed form of ice. It is opaque and solid.=Packeis ist eine kompakte Eisform. Es ist undurchsichtig und fest. -Paper=Papier -Paper is used to craft books and maps.=Papier wird benutzt, um Bücher und Karten herzustellen. -Pink Stained Glass=Rosa Buntglas -Podzol=Podsol -Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Podsol ist eine Art Erde, die man in Taigawäldern finden kann. Nur wenige Pflanzen können hierauf wachsen. -Polished Andesite=Polierter Andesit -Polished Diorite=Polierter Diorit -Polished Granite=Polierter Granit -Polished Stone=Polierter Stein -Polished andesite is a decorative building block made from andesite.=Polierter Andesit ist ein dekorativer Block zum Bauen, der aus Andesit gemacht wurde. -Polished diorite is a decorative building block made from diorite.=Polierter Diorit ist ein dekorativer Block zum Bauen, der aus Diorit gemacht wurde. -Polished granite is a decorative building block made from granite.=Polierter Granit ist ein dekorativer Block zum Bauen, der aus Granit gemacht wurde. -Purple Stained Glass=Violettes Buntglas -Realm Barrier=Reichsbarriere -Red Sand=Roter Sand -Red Sandstone=Roter Sandstein -Red Stained Glass=Rotes Buntglas -Red sand is found in large quantities in mesa biomes.=Roter Sand kommt in großen Mengen bei Tafelbergbiomen vor. -Red sandstone is compressed red sand and is a rather soft kind of stone.=Roter Sandstein ist komprimierter roter Sand und ein relativ weiches Gestein. -Redstone Ore=Redstone-Erz -Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=Redstone-Erz kommt oft in der Nähe des Weltbodens vor. Er leuchtet, wenn er berührt wird. -Sand=Sand -Sand is found in large quantities at beaches and deserts.=Sand kommt in großen Mengen an Stränden und in Wüsten vor. -Sandstone=Sandstein -Sandstone is compressed sand and is a rather soft kind of stone.=Sandstein ist komprimierter Sand und ein relativ weiches Gestein. -Slime Block=Schleimblock -Slime blocks are very bouncy and prevent fall damage.=Schleimblöcke sind sehr sprunghaft und verhindern Fallschaden. -Smooth Red Sandstone=Glatter roter Sandstein -Smooth Sandstone=Glatter Sandstein -Smooth red sandstone is a decorative building block.=Glatter roter Sandstein ist ein decorativer Block zum Bauen. -Smooth sandstone is compressed sand and is a rather soft kind of stone.=Glatter Sandstein ist komprimierter Sand und ein relativ weiches Gestein. -Snow=Schnee -Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=Etwas Kohle im Stein, es kommt sehr häufig vor und kann in mittelgroßen bis großen Ansammlungen im Stein bei fast jeder Höhe gefunden werden. -Some iron contained in stone, it is prety common and can be found below sea level.=Etwas Eisen umschlossen von Stein, es ist recht verbreitet und kann unter dem Meeresspiegel gefunden werden. -Spruce Bark=Fichtenrinde -Spruce Leaves=Fichtenblätter -Spruce Sapling=Fichtensetzling -Spruce Wood=Fichtenholz -Spruce Wood Planks=Fichtenholzplanken -Spruce leaves are grown from spruce trees.=Fichtenblätter wachsen an Fichten. -Stained glass is a decorative and mostly transparent block which comes in various different colors.=Buntglas ist ein dekorativer und größtenteils durchsichtiger Block, der in verschiedenen Farben daherkommt. -Stick=Stock -Sticks are a very versatile crafting material; used in countless crafting recipes.=Stöcke sind ein vielseitiges Material, sie werden in zahllosen Fertigungsrezepten gebraucht. -Stone=Stein -Stripped Acacia Log=Entrindeter Akazienstamm -Stripped Acacia Wood=Entrindetes Akazienholz -Stripped Birch Log=Entrindeter Birkenstamm -Stripped Birch Wood=Entrindetes Birkenholz -Stripped Dark Oak Log=Entrindeter Schwarzeichenstamm -Stripped Dark Oak Wood=Entrindetes Schwarzeichenholz -Stripped Jungle Log=Entrindeter Dschungelbaumstamm -Stripped Jungle Wood=Entrindetes Dschungelholz -Stripped Oak Log=Entrindeter Eichenstamm -Stripped Oak Wood=Entrindetes Eichenholz -Stripped Spruce Log=Entrindeter Fichtenstamm -Stripped Spruce Wood=Entrindetes Fichtenholz -Stone Bricks=Steinziegel -Sugar=Zucker -Sugar Canes=Zuckerrohr -Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Zuckerrohr ist eine Pflanze, die in der Herstellung gebraucht wird. Zuckerrohr wird in der Nähe von Wasser bis zu 3 zusätzliche Blöcke wachsen lassen, wenn sie sich neben Wasser befinden und auf einem Grasblock, auf Erde, Sand, roten Sand, Podsol oder grobe Erde platziert wurden. Wird ein Zuckerrohr abgebrochen, werden alle verbundenen Zuckerrohrblöcke ebenfalls abbrechen. -Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Zuckerrohr kann nur auf Zuckerrohr platziert werden und auf Blöcken, auf denen Zuckerrohr wachsen würde. -Sugar comes from sugar canes and is used to make sweet foods.=Zucker kommt von Zuckerrohr und wird benutzt, um süße Lebensmittel zu machen. -The stripped trunk of an acacia tree.=Der entrindete Stamm einer Akazie. -The stripped trunk of a birch tree.=Der entrindete Stamm einer Birke. -The stripped trunk of a dark oak tree.=Der entrindete Stamm einer Schwarzeiche. -The stripped trunk of a jungle tree.=Der entrindete Stamm eines Dschungelbaums. -The stripped trunk of an oak tree.=Der entrindete Stamm einer Eiche. -The stripped trunk of a spruce tree.=Der entrindete Stamm einer Fichte. -The trunk of a birch tree.=Der Baumstamm einer Birke. -The trunk of a dark oak tree.=Der Baumstamm einer Schwarzeiche. -The trunk of a jungle tree.=Der Baumstamm eines Dschungelbaums. -The trunk of a spruce tree.=Der Baumstamm einer Fichte. -The trunk of an acacia.=Der Baumstamm einer Akazie. -The trunk of an oak tree.=Der Baumstamm einer Eiche. -The stripped wood of an acacia tree.=Das entrindete Holz einer Akazie. -The stripped wood of a birch tree.=Das entrindete Holz einer Birke. -The stripped wood of a dark oak tree.=Das entrindete Holz einer Schwarzeiche. -The stripped wood of a jungle tree.=Das entrindete Holz eines Dschungelbaums. -The stripped wood of an oak tree.=Das entrindete Holz einer Eiche. -The stripped wood of a spruce tree.=Das entrindete Holz einer Fichte. -This block consists of a couple of loose stones and can't support itself.=Dieser Block besteht aus ein paar losen Steinchen und kann sich nicht selbst tragen. -This is a decorative block surrounded by the bark of a tree trunk.=Dies ist ein dekorativer Block, der von der Rinde eines Baumstamms umgeben ist. -This is a decorative block.=Dies ist ein dekorativer Block. -This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=Ein ganzer Block aus Schnee. Schnee von dieser Dicke wird üblicherweise in Gebieten extremer Kälte gefunden. -This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=Dies ist ein Teil eines Kaktus, der für gewöhnlich in trockenen Gebieten wächst, vorallem Wüsten. Im Laufe der Zeit werden Kakteen auf bis zu 3 Blöcke hoch auf Sand oder rotem Sand wachsen. Ein Kaktus verletzt Lebewesen, die ihn berühren, er richtet jede halbe Sekunden 1 Schaden an. Wenn ein Kaktusblock bricht, werden alle Kaktusblöcke darüber auch abbrechen. -This stone contains pure gold, a rare metal.=Dieser Stein enthält pures Gold, ein seltenes Metall. -Top Snow=Schneeschicht -Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=Eine Schneeschicht. Sie schmilzt in der Näche von Lichtquellen außer der Sonne bei einer Helligkeit von 12 oder höher. -Vines=Lianen -Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=Lianen sind erkletterbare Blöcke, die an den Seiten von festen ganzen Blöcken platziert werden können. Lianen wachsen langsam und breiten sich aus. -Void=Leere -Water=Wasser -Water Source=Wasserquelle -Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=Wasser gibt es reichlich in Ozeanen und es kommt im Untergrund auch in einigen Quellen vor. Sie können im Wasser mit Leichtigkeit schwimmen, aber Sie müssen gelegentlich Luft holen. -When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=Wird er auf einem Nährboden (wie Erde) platziert und ist er dem Licht ausgesetzt, wird ein Birkensetzling langsam zu einer Birke nach etwas Zeit heranwachsen. -When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=Wird er auf einem Nährboden (wie Erde) platziert und ist er dem Licht ausgesetzt, wird ein Dschungelsetzling langsam zu einem Dschungelbaum nach etwas Zeit heranwachsen. Gibt es 4 Dschungelsetzlinge in einem 2×2-Quadrat, werden sie zu einem riesigen Dschungelbaum heranwachsen. -When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=Wird er auf einem Nährboden (wie Erde) platziert und ist er dem Licht ausgesetzt, wird ein Fichtensetzling langsam zu einer Fichte nach etwas Zeit heranwachsen. Gibt es 4 Fichtensetzlinge in einem 2×2-Quadrat, werden sie zu einer Riesenfichte heranwachsen. -When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=Wird er auf einem Nährboden (wie Erde) platziert und ist er dem Licht ausgesetzt, wird ein Akaziensetzling langsam zu einer Akazie nach etwas Zeit heranwachsen. -When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=Wird er auf einem Nährboden (wie Erde) platziert und ist er dem Licht ausgesetzt, wird ein Eichensetzling langsam zu einer Eiche nach etwas Zeit heranwachsen. -When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=Wenn Sie eine Barriere in der Hand halten, legen Sie alle Barrieren in Ihrer Nähe offen. -White Stained Glass=Weißes Buntglas -Yellow Stained Glass=Gelbes Buntglas -“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.=„Kohle“ meint Kohleklumpen, die herausfallen, wenn Kohleerz gegraben wird, was im Untergrund gefunden werden kann. Kohle ist der klassische Brennstoff für den Ofen, aber er kann auch benutzt werden, um Fackeln, Kohleblöcke und einige andere Dinge herzustellen. -Water interacts with lava in various ways:=Wasser reagiert mit Lava auf unterschiedliche Arten: -• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• Wenn sich Wasser direkt über oder horizontal neben einer Wasserquelle befindet, verwandelt sich die Lava zu Obsidian. -• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• Wenn fließendes Wasser fließende Lava von oben oder horizontal berührt, verwandelt sich die Lava zu Kopfsteinpflaster. -• When water is directly below lava, the water turns into stone.=• Wenn sich Wasser direkt unter Lava befindet, verwandelt sich das Wasser zu Stein. -Lava interacts with water various ways:=Lava reagiert mit Wasser auf verschiedene Arten: -• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• Wenn sich eine Lavaquelle direkt unter oder horizontal neben Wasser befindet, verwandelt sich die Lava zu Obsidian. -• When lava is directly above water, the water turns into stone.=• Wenn sich Lava direkt über Wasser befindet, verwandelt sich das Wasser zu Stein. -Stained Glass=Buntglas -Granite is an igneous rock.=Granit ist ein magmatisches Gestein. -Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=Eine Schneeschicht kann gestapelt werden und hat eine von 8 verschiedenen Höhestufen. Bei den Höhestufen 2-8 ist die Schneeschnicht kollidierbar. Schneeschichten werfen 2-9 Schneebälle ab, abhängig von ihrer Höhe. -This block can only be placed on full solid blocks and on another top snow (which increases its height).=Dieser Block kann nur auf ganzen festen Blöcken und auf anderen Schneeschichten (was die Höhe erhöht) platziert werden. -Needs soil and light to grow=Benötigt Boden und Licht zum Wachsen -Grows on sand=Wächst auf Sand -Contact damage: @1 per half second=Kontaktschaden: @1 jede halbe Sekunde -Slows down movement=Verlangsamt die Fortbewegung -2×2 saplings required=2×2 Setzlinge benötigt -2×2 saplings @= large tree=2×2 Setzlinge @= großer Baum -Grows on sand or dirt next to water=Wächst auf Sand oder Erde neben Wasser -Stackable=Stapelbar -Needs soil and water to grow=Braucht Nährboden und Wasser zum wachsen diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.es.tr b/mods/ITEMS/mcl_core/locale/mcl_core.es.tr deleted file mode 100644 index 1937babd3..000000000 --- a/mods/ITEMS/mcl_core/locale/mcl_core.es.tr +++ /dev/null @@ -1,249 +0,0 @@ -# textdomain: mcl_core -@1 could not survive in lava.=@1 no pudo sobrevivir en la lava. -@1 died in lava.=@1 murió en la lava. -@1 melted in lava.=@1 fue derretido en la lava. -@1 took a bath in a hot lava tub.=@1 se bañó en lava caliente. -A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=Un bloque de diamantes es principalmente un bloque decorativo brillante, pero también es útil como un almacenamiento compacto de diamantes. -A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=Un bloque de esmeraldas es principalmente un bloque decorativo brillante pero también es útil como un almacenamiento compacto de esmeraldas. -A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=Un bloque de oro es principalmente un bloque decorativo brillante, pero también es útil como almacenamiento compacto de lingotes de oro. -A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=Un bloque de hierro es principalmente un bloque decorativo, pero también es útil como almacenamiento compacto de lingotes de hierro. -A cactus can only be placed on top of another cactus or any sand.=Un cactus solo se puede colocar encima de otro cactus o arena. -A decorative and mostly transparent block.=Un bloque decorativo y mayormente transparente. -A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=Un bloque de hierba es tierra con una cubierta de hierba. Los bloques de hierba son bloques ingeniosos que permiten el crecimiento de todo tipo de plantas. Pueden convertirse en tierras de cultivo con una azada y convertirse en caminos de hierba con una pala. A la luz, la hierba se extiende lentamente sobre la tierra cercana. Debajo de un bloque opaco o un líquido, un bloque de hierba puede ensuciarse. -A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=Un bloque de lapislázuli es principalmente un bloque decorativo, pero también es útil como un almacenamiento compacto de lapislázuli. -A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=Una fuente de lava prende fuego a un par de bloques de aire arriba cuando están al lado de un bloque inflamable. -A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=Un pedazo de escalera que te permite subir verticalmente. Las escaleras solo se pueden colocar al lado de bloques sólidos y no en vidrio, hojas, hielo, losas, piedra luminosa ni linternas marinas. -Acacia Bark=Madera de acacia sin corteza -Acacia Leaves=Hojas de acacia -Acacia Sapling=Brote de acacia -Acacia Wood=Tronco de acacia -Acacia Wood Planks=Madera de acacia -Acacia leaves are grown from acacia trees.=Las hojas de acacia se cultivan a partir de acacias. -Andesite=Andesita -Andesite is an igneous rock.=La andesita es una roca ígnea. -Apple=Manzana -Apples are food items which can be eaten.=Las manzanas son alimentos que se pueden comer. -Barrier=Barrera -Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=Las barreras son bloques transitables invisibles. Se utilizan para crear límites de mapas de aventura y similares. Los monstruos y los animales no aparecerán en las barreras, y las cercas no se conectan a las barreras. Otros bloques pueden construirse sobre barreras como en cualquier otro bloque. -Bedrock=Lecho de roca -Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=El lecho de roca es un tipo de roca muy duro. No se puede romper, destruir, recoger o mover por medios normales, a menos que esté en modo creativo. -Birch Bark=Madera de abedul sin corteza -Birch Leaves=Hojas de abedul -Birch Sapling=Brote de abedul -Birch Wood=Tronco de abedul -Birch Wood Planks=Madera de abedul -Birch leaves are grown from birch trees.=Las hojas de abedul se cultivan a partir de abedules. -Black Stained Glass=Cristal negro -Block of Coal=Bloque de carbón -Block of Diamond=Bloque de diamante -Block of Emerald=Bloque de esmeralda -Block of Gold=Bloque de oro -Block of Iron=Bloque de hierro -Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=Los bloques de carbón son útiles como almacenamiento compacto de carbón y son muy útiles como combustible de horno. Un bloque de carbón es tan eficiente como 10 de carbón. -Blue Stained Glass=Cristal azul -Bone Block=Bloque de hueso -Bone blocks are decorative blocks and a compact storage of bone meal.=Los bloques óseos son bloques decorativos y un almacenamiento compacto de harina de huesos. -Bowl=Cuenco -Bowls are mainly used to hold tasty soups.=Los cuencos se usan principalmente para contener sabrosas sopas. -Brick=Ladrillo -Brick Block=Bloque de ladrillo -Brick blocks are a good building material for building solid houses and can take quite a punch.=Los bloques de ladrillo son un buen material de construcción para construir casas sólidas y pueden recibir un gran golpe. -Bricks are used to craft brick blocks.=Los ladrillos se utilizan para fabricar bloques de ladrillos. -Brown Stained Glass=Cristal marrón -Cactus=Cactus -Charcoal=Carbón vegetal -Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=El carbón vegetal es un combustible alternativo para hornos creado al cocinar leña en un horno. Tiene el mismo tiempo de combustión que el carbón y también comparte muchas de sus recetas de elaboración, pero no se puede usar para crear bloques de carbón. -Chiseled Stone Bricks=Ladrillo de piedra cincelado -Chiseled Red Sandstone=Arenisca Roja Cincelada -Chiseled Sandstone=Arenisca cincelada -Chiseled red sandstone is a decorative building block.=La piedra arenisca roja cincelada es un elemento decorativo. -Chiseled sandstone is a decorative building block.=La piedra arenisca cincelada es un bloque de construcción decorativo. -Clay=Arcilla -Clay Ball=Bola de arcilla -Clay balls are a raw material, mainly used to create bricks in the furnace.=Las bolas de arcilla son una materia prima, utilizada principalmente para crear ladrillos en el horno. -Clay is a versatile kind of earth commonly found at beaches underwater.=La arcilla es un tipo de tierra versátil que se encuentra comúnmente en las playas bajo el agua. -Coal=Carbón -Coal Ore=Mena de Carbón -Coarse Dirt=Tierra estéril -Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=La tierra gruesa actúa como un suelo para algunas plantas y es similar a la tierra, pero nunca crecerá una cubierta. -Cobblestone=Roca -Cobweb=Telaraña -Cobwebs can be walked through, but significantly slow you down.=Las telarañas se pueden atravesar, pero disminuyen significativamente la velocidad. -Cracked Stone Bricks=Ladrillo de piedra agrietado -Cut Red Sandstone=Arenisca roja cortada -Cut Sandstone=Arenisca cortada -Cut red sandstone is a decorative building block.=La arenisca roja cortada es un elemento decorativo. -Cut sandstone is a decorative building block.=La arenisca cortada es un elemento decorativo. -Cyan Stained Glass=Cristal cian -Dark Oak Bark=Madera de roble oscuro sin corteza -Dark Oak Leaves=Hojas de roble oscuro -Dark Oak Sapling=Brote de roble oscuro -Dark Oak Wood=Tronco de roble oscuro -Dark Oak Wood Planks=Madera de roble oscuro -Dark oak leaves are grown from dark oak trees.=Las hojas de roble oscuro se cultivan a partir de robles oscuros. -Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=Los brotes de roble oscuro pueden convertirse en robles oscuros, pero solo en grupos. Un árbol solitario de roble oscuro no crecerá. Un grupo de cuatro árboles jóvenes de roble oscuro se convierte en un roble oscuro después de un tiempo cuando se colocan en el suelo (como la tierra) en un cuadrado de 2 × 2 y se exponen a la luz. -Dead Bush=Arbusto muerto -Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=Los arbustos muertos son plantas poco comunes que a menudo se encuentran en áreas secas. Se pueden cosechar para obtener palos. -Diamond=Diamante -Diamond Ore=Mena de diamante -Diamond ore is rare and can be found in clusters near the bottom of the world.=El mineral de diamante es raro y se puede encontrar en grupos cerca del fondo del mundo. -Diamonds are precious minerals and useful to create the highest tier of armor and tools.=Los diamantes son minerales preciosos y útiles para crear el nivel más alto de armadura y herramientas. -Diorite=Diorita -Diorite is an igneous rock.=La diorita es una roca ígnea. -Dirt=Tierra -Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=La tierra actúa como un suelo para algunas plantas. Cuando está a la luz, este bloque puede crecer una cubierta de hierba o micelio si tales bloques están cerca. -Emerald=Esmeralda -Emerald Ore=Mena de esmeralda -Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=El mineral esmeralda es el mineral de las esmeraldas. Es muy raro y se puede encontrar solo, no en grupos. -Emeralds are used in villager trades as currency.= -Flint=Pedernal -Flint is a raw material.=El pedernal es una materia prima. -Flowing Lava=Lava que fluye -Flowing Water=Agua que fluye -Frosted Ice=Hielo helado -Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=El hielo helado es un bloque sólido de corta duración. Se derrite en una fuente de agua en unos pocos segundos. -Glass=Cristal -Gold Ingot=Lingote de oro -Gold Nugget=Pepita de oro -Gold Ore=Mena de oro -Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Las pepitas de oro son piezas muy pequeñas de oro fundido; El objetivo principal es crear lingotes de oro. -Golden Apple=Manzana dorada -Golden apples are precious food items which can be eaten.=Las manzanas doradas son alimentos preciosos que se pueden comer. -Granite=Granito -Grass Block=Bloque de césped -Grass Path=Camino de hierba -Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Los caminos de hierba son una variante decorativa de bloques de hierba. Su parte superior tiene un color diferente y son un poco más bajos que los bloques de hierba, lo que los hace útiles para construir senderos. Los caminos de hierba se pueden crear con una pala. Un camino de hierba se convierte en tierra cuando está debajo de un bloque sólido. -Gravel=Grava -Green Stained Glass=Cristal verde -Grey Stained Glass=Cristal gris -Ice=Hielo -Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=El hielo es un bloque sólido que generalmente se encuentra en áreas frías. Se funde cerca de bloques de luz, a un nivel de luz de 12 o más. Cuando se derrite o se rompe mientras posa sobre otro bloque, se convertirá en una fuente de agua. -In the End dimension, starting a fire on this block will create an eternal fire.=En la dimensión final, iniciar un incendio en este bloque creará un fuego eterno. -Iron Ingot=Lingote de hierro -Iron Nugget=Pepita de hierro -Iron Ore=Mena de hierro -Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=Las pepitas de hierro son piezas muy pequeñas de hierro fundido; El objetivo principal es crear lingotes de hierro. -Jungle Bark=Madera de jungla sin corteza -Jungle Leaves=Hojas de jungla -Jungle Sapling=Brote de jungla -Jungle Wood=Tronco de jungla -Jungle Wood Planks=Madera de jungla -Jungle leaves are grown from jungle trees.=Las hojas de jungla se cultivan de los árboles de jungla. -Ladder=Escalera -Lapis Lazuli Block=Bloque de lapislázuli -Lapis Lazuli Ore=Mena de lapislázuli -Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=El mineral de lapislázuli es el mineral de lapislázuli. Rara vez se puede encontrar en grupos, se encuentra cerca del fondo del mundo. -Lava Source=Fuente de lava -Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=La lava es caliente y bastante peligrosa. No lo toques, te dolerá mucho y es difícil salir. -Light Blue Stained Glass=Cristal azul claro -Light Grey Stained Glass=Cristal gris claro -Lime Stained Glass=Cristal amarillo verdoso -Lit Redstone Ore=Mena de redstone encendida -Magenta Stained Glass=Cristal magenta -Molten gold. It is used to craft armor, tools, and whatnot.=Oro fundido Se utiliza para fabricar armaduras, herramientas y otras cosas. -Molten iron. It is used to craft armor, tools, and whatnot.=Hierro fundido. Se utiliza para fabricar armaduras, herramientas y otras cosas. -Mossy Cobblestone=Roca musgosa -Mossy Stone Bricks=Ladrillo de piedra musgoso -Mycelium=Micelio -Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=El micelio es un tipo de tierra y el suelo ideal para los hongos. A diferencia de otros bloques de tipo de tierra, no se puede convertir en tierras de cultivo con una azada. A la luz, el micelio se extiende lentamente sobre la tierra cercana. Debajo de un bloque opaco o un líquido, eventualmente se convierte nuevamente en tierra. -Oak Bark=Madera de roble sin corteza -Oak Leaves=Hojas de roble -Oak Sapling=Brote de roble -Oak Wood=Tronco de roble -Oak Wood Planks=Madera de roble -Oak leaves are grown from oak trees.=Las hojas de roble se cultivan a partir de robles. -Obsidian=Obsidiana -Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=La obsidiana es un mineral extremadamente duro con una enorme resistencia a la explosión. La obsidiana se forma cuando el agua se encuentra con la lava. -One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=Uno de los bloques más comunes en el mundo, casi todo el subsuelo consiste en piedra. A veces contiene minerales. Se puede crear piedra cuando el agua se encuentra con la lava. -Orange Stained Glass=Cristal Naranja -Packed Ice=Hielo envasado -Packed ice is a compressed form of ice. It is opaque and solid.=El hielo empaquetado es una forma comprimida de hielo. Es opaco y sólido. -Paper=Papel -Paper is used to craft books and maps.=El papel se usa para crear libros y mapas. -Pink Stained Glass=Cristal rosa -Podzol=Podzol -Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=El podzol es un tipo de tierra que se encuentra en los bosques de taiga. Solo unas pocas plantas pueden sobrevivir en él. -Polished Andesite=Andesita pulida -Polished Diorite=Diorita pulida -Polished Granite=Granito pulido -Polished Stone=Piedra pulida -Polished andesite is a decorative building block made from andesite.=La andesita pulida es un bloque de construcción decorativo hecho de andesita. -Polished diorite is a decorative building block made from diorite.=La diorita pulida es un bloque de construcción decorativo hecho de diorita. -Polished granite is a decorative building block made from granite.=El granito pulido es un bloque decorativo hecho de granito. -Purple Stained Glass=Cristal morado -Realm Barrier=Barrera del reino -Red Sand=Arena roja -Red Sandstone=Arenisca roja -Red Stained Glass=Cristal rojo -Red sand is found in large quantities in mesa biomes.=La arena roja se encuentra en grandes cantidades en los desiertos. -Red sandstone is compressed red sand and is a rather soft kind of stone.=La arenisca roja es arena roja comprimida y es un tipo de piedra bastante suave. -Redstone Ore=Mena de redstone -Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=El mineral redstone se encuentra comúnmente cerca del fondo del mundo. Brilla cuando es golpeado o pisado. -Sand=Arena -Sand is found in large quantities at beaches and deserts.=La arena se encuentra en grandes cantidades en playas y desiertos. -Sandstone=Arenisca -Sandstone is compressed sand and is a rather soft kind of stone.=La arenisca es arena comprimida y es un tipo de piedra bastante suave. -Slime Block=Bloque de Slime -Slime blocks are very bouncy and prevent fall damage.=Los bloques de limo son muy hinchables y evitan el daño por caída. -Smooth Red Sandstone=Arenisca roja lisa -Smooth Sandstone=Arenisca lisa -Smooth red sandstone is a decorative building block.=La piedra arenisca roja lisa es un elemento decorativo. -Smooth sandstone is compressed sand and is a rather soft kind of stone.=La arenisca lisa es arena comprimida y es un tipo de piedra bastante blanda. -Snow=Bloque de Nieve -Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=Algo de carbón contenido en la piedra, es muy común y se puede encontrar dentro de la piedra en grupos medianos a grandes en casi todas las alturas. -Some iron contained in stone, it is prety common and can be found below sea level.=Algo de hierro contenido en piedra, es bastante común y se puede encontrar debajo del nivel del mar. -Spruce Bark=Madera de abeto sin corteza -Spruce Leaves=Hojas de abeto -Spruce Sapling=Brote de abeto -Spruce Wood=Tronco de abeto -Spruce Wood Planks=Madera de abeto -Spruce leaves are grown from spruce trees.=Las hojas de abeto se cultivan a partir de abetos. -Stained glass is a decorative and mostly transparent block which comes in various different colors.=El vitral es un bloque decorativo y en su mayoría transparente que viene en varios colores diferentes. -Stick=Palo -Sticks are a very versatile crafting material; used in countless crafting recipes.=Los palos son un material de elaboración muy versátil; utilizado en innumerables recetas de elaboración. -Stone=Piedra -Stone Bricks=Ladrillos de piedra -Sugar=Azúcar -Sugar Canes=Caña de azúcar -Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Las cañas de azúcar son una planta que tiene algunos usos en la elaboración. Las cañas de azúcar crecerán lentamente hasta 3 bloques cuando estén cerca del agua y se colocan en un bloque de césped, tierra, arena, arena roja, podzol o tierra gruesa. Cuando se rompe una caña de azúcar, todas las cañas de azúcar conectadas arriba también se romperán. -Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Las cañas de azúcar solo se pueden colocar encima de otras cañas de azúcar y encima de los bloques en los que crecerían. -Sugar comes from sugar canes and is used to make sweet foods.=El azúcar proviene de las cañas de azúcar y se usa para hacer alimentos dulces. -The trunk of a birch tree.=El tronco de un abedul. -The trunk of a dark oak tree.=El tronco de un roble oscuro. -The trunk of a jungle tree.=El tronco de un árbol de jungla. -The trunk of a spruce tree.=El tronco de un árbol de abeto. -The trunk of an acacia.=El tronco de una acacia. -The trunk of an oak tree.=El tronco de un roble. -This block consists of a couple of loose stones and can't support itself.=Este bloque consta de un par de piedras sueltas y no puede sostenerse. -This is a decorative block surrounded by the bark of a tree trunk.=Este es un bloque decorativo rodeado por la corteza del tronco de un árbol. -This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=Este es un bloque lleno de nieve. La nieve de este espesor generalmente se encuentra en áreas de frío extremo. -This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=Este es un pedazo de cactus que se encuentra comúnmente en áreas secas, especialmente en los desiertos. Con el tiempo, los cactus crecerán hasta 3 bloques de altura en arena o arena roja. Un cactus lastima a los seres vivos al tocarlo con un daño de 1 HP cada medio segundo. Cuando un bloque de cactus se rompe, todos los bloques de cactus conectados encima también se romperán. -This stone contains pure gold, a rare metal.=Esta piedra contiene oro puro, un metal raro. -Top Snow=Nieve -Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=La nieve es una capa de nieve. Se derrite cerca de fuentes de luz distintas al sol con un nivel 12 de luz o más. -Vines=Enredadera -Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=Las enredaderas son bloques escalables que se pueden colocar a los lados de bloques sólidos de cubo completo. Las enredaderas crecen y se extienden lentamente -Void=Vacío -Water=Agua -Water Source=Fuente de agua -Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=El agua es abundante en los océanos y también aparece en algunas fuentes en el suelo. Puede nadar fácilmente en el agua, pero necesita recuperar el aliento de vez en cuando. -When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=Cuando se coloca en el suelo (como tierra) y se expone a la luz, un brote de abedul se convertirá en abedul después de un tiempo. -When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=Cuando se coloca en el suelo (como la tierra) y se expone a la luz, un brote de jungla se convertirá en un árbol de jungla después de un tiempo. Cuando hay 4 árboles jóvenes de jungla en un cuadrado de 2×2, crecerán hasta convertirse en un enorme árbol de jungla. -When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=Cuando se coloca en el suelo (como tierra) y se expone a la luz, un brote de abeto se convertirá en un abeto después de un tiempo. Cuando hay 4 brotes de abeto en un cuadrado de 2×2, crecerán hasta convertirse en un abeto enorme. -When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=Cuando se coloca en el suelo (como tierra) y se expone a la luz, un brote de acacia se convertirá en una acacia después de un tiempo. -When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=Cuando se coloca en el suelo (como tierra) y se expone a la luz, un brote de roble se convertirá en un roble después de un tiempo. -When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=Cuando sostienes una barrera en la mano, revelas todas las barreras colocadas a corta distancia a tu alrededor. -White Stained Glass=Cristal blanco -Yellow Stained Glass=Cristal amarillo -“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.="Carbón" se refiere a trozos de carbón obtenidos al excavar mineral de carbón que se puede encontrar bajo tierra. El carbón es el combustible estándar de su horno, pero también se puede usar para hacer antorchas, bloques de carbón y algunas otras cosas. -Water interacts with lava in various ways:=El agua interactúa con la lava de varias maneras: -• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• Cuando el agua está directamente arriba u horizontalmente al lado de una fuente de lava, la lava se convierte en obsidiana. -• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• Cuando el agua que fluye toca la lava que fluye desde arriba u horizontalmente, la lava se convierte en roca. -• When water is directly below lava, the water turns into stone.=• Cuando el agua está directamente debajo de la lava, el agua se convierte en piedra. -Lava interacts with water various ways:=La lava interactúa con el agua de varias maneras: -• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• Cuando una fuente de lava está directamente debajo u horizontalmente al lado del agua, la lava se convierte en obsidiana. -• When lava is directly above water, the water turns into stone.=• Cuando la lava está directamente sobre el agua, el agua se convierte en piedra. -Stained Glass=Vitral -Granite is an igneous rock.=El granito es una roca ígnea. -Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=La nieve se puede apilar y tiene unos 8 niveles de altura diferentes. En los niveles 2-8, la nieve es colisionable. La nieve cae de 2 a 9 bolas de nieve, dependiendo de su altura. -This block can only be placed on full solid blocks and on another top snow (which increases its height).=Este bloque solo se puede colocar en bloques sólidos completos y en otra nieve (lo que aumenta su altura). diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.fr.tr b/mods/ITEMS/mcl_core/locale/mcl_core.fr.tr deleted file mode 100644 index 64aadd6db..000000000 --- a/mods/ITEMS/mcl_core/locale/mcl_core.fr.tr +++ /dev/null @@ -1,258 +0,0 @@ -# textdomain: mcl_core -@1 could not survive in lava.=@1 n'a pas pu survivre dans la lave. -@1 died in lava.=@1 est mort dans la lave. -@1 melted in lava.=@1 a fondu dans la lave. -@1 took a bath in a hot lava tub.=@1 a pris un bain dans une cuve de lave chaude. -A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=Un bloc de diamant est principalement un bloc décoratif brillant mais également utile comme stockage compact de diamants. -A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=Un bloc d'émeraude est principalement un bloc décoratif brillant mais également utile comme stockage compact d'émeraudes. -A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=Un bloc d'or est principalement un bloc décoratif brillant mais également utile comme stockage compact de lingots d'or. -A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=Un bloc de fer est principalement un bloc décoratif mais également utile comme stockage compact de lingots de fer. -A cactus can only be placed on top of another cactus or any sand.=Un cactus ne peut être placé que sur un autre cactus ou du sable. -A decorative and mostly transparent block.=Un bloc décoratif et surtout transparent. -A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=Un bloc d'herbe est de la terre avec une couverture d'herbe. Les blocs d'herbe sont des blocs ingénieux qui permettent la croissance de toutes sortes de plantes. Ils peuvent être transformés en terres agricoles avec une houe et transformés en chemins d'herbe avec une pelle. À la lumière, l'herbe se propage lentement sur la terre à proximité. Sous un bloc opaque ou un liquide, un bloc d'herbe peut redevenir terre. -A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=Un bloc de lapis-lazuli est principalement un bloc décoratif mais également utile comme stockage compact de lapis-lazuli. -A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=Une source de lave met le feu à quelques blocs d'air au-dessus lorsqu'ils sont à côté d'un bloc inflammable. -A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=Un morceau d'échelle qui vous permet de grimper verticalement. Les échelles ne peuvent être placées que sur le côté de blocs solides et non sur du verre, des feuilles, de la glace, des dalles, des pierres incandescentes ou des lanternes marines. -Acacia Bark=Écorce d'Acacia -Acacia Leaves=Feuilles d'Acacia -Acacia Sapling=Pousse d'Acacia -Acacia Wood=Bois d'Acacia -Acacia Wood Planks=Planches d'Acacia -Acacia leaves are grown from acacia trees.=Les feuilles d'acacia sont cultivées à partir d'acacias. -Andesite=Andésite -Andesite is an igneous rock.=L'andésite est une roche ignée. -Apple=Pomme -Apples are food items which can be eaten.=Les pommes sont des aliments qui peuvent être consommés. -Barrier=Barrière invisible -Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=Les barrières sont des blocs accessibles à pied. Ils sont utilisés pour créer des limites de cartes d'aventure et similaires. Les monstres et les animaux n'apparaissent pas sur les barrières, et les clôtures ne se connectent pas aux barrières. D'autres blocs peuvent être construits sur des barrières comme sur n'importe quel autre bloc. -Bedrock=Bedrock -Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=Le bedrock est un type de roche très dur. Il ne peut pas être brisé, détruit, collecté ou déplacé par des moyens normaux, sauf en mode créatif. -Birch Bark=Écorce de Bouleau -Birch Leaves=Feuilles de Bouleau -Birch Sapling=Pousse de Bouleau -Birch Wood=Bois de Bouleau -Birch Wood Planks=Planches de Bouleau -Birch leaves are grown from birch trees.=Les feuilles de bouleau sont cultivées à partir de bouleaux. -Black Stained Glass=Verre Noir -Block of Coal=Bloc de Charbon -Block of Diamond=Bloc de Diamant -Block of Emerald=Bloc d'Emeraude -Block of Gold=Bloc d'Or -Block of Iron=Bloc de Fer -Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=Les blocs de charbon sont utiles comme stockage compact de charbon et très utiles comme combustible de four. Un bloc de charbon est aussi efficace que 10 charbon. -Blue Stained Glass=Verre Bleu -Bone Block=Bloc d'Os -Bone blocks are decorative blocks and a compact storage of bone meal.=Les blocs d'os sont des blocs décoratifs et un stockage compact de poudre d'os. -Bowl=Bol -Bowls are mainly used to hold tasty soups.=Les bols sont principalement utilisés pour contenir de délicieuses soupes. -Brick=Brique -Brick Block=Bloc de Brique -Brick blocks are a good building material for building solid houses and can take quite a punch.=Les blocs de briques sont un bon matériau de construction pour la construction de maisons solides et peuvent resite au coup. -Bricks are used to craft brick blocks.=Les briques sont utilisées pour fabriquer des blocs de briques. -Brown Stained Glass=Verre Marron -Cactus=Cactus -Charcoal=Charbon de Bois -Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=Le charbon de bois est un combustible de four alternatif créé par la cuisson du bois dans un four. Il a le même temps de combustion que le charbon et partage également bon nombre de ses recettes d'artisanat, mais il ne peut pas être utilisé pour créer des blocs de charbon. -Chiseled Stone Bricks=Pierre Sculptée -Chiseled Red Sandstone=Grès Rouge Sculptée -Chiseled Sandstone=Grès Sculptée -Chiseled red sandstone is a decorative building block.=Le grès rouge ciselé est un bloc de construction décoratif. -Chiseled sandstone is a decorative building block.=Le grès ciselé est un bloc de construction décoratif. -Clay=Argile -Clay Ball=Boule d'Argile -Clay balls are a raw material, mainly used to create bricks in the furnace.=Les boules d'argile sont une matière première, principalement utilisée pour créer des briques dans le four. -Clay is a versatile kind of earth commonly found at beaches underwater.=L'argile est une terre polyvalente que l'on trouve couramment sur les plages sous-marines. -Coal=Charbon -Coal Ore=Minerai de Charbon -Coarse Dirt=Terre Stérile -Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=La terre stérile agit comme un sol pour certaines plantes et est similaire à la terre, mais elle ne fera jamais pousser grand chose. -Cobblestone=Pierre -Cobweb=Toile d'Araignée -Cobwebs can be walked through, but significantly slow you down.=Les toiles d'araignée peuvent être parcourues, mais vous ralentissent considérablement. -Cracked Stone Bricks=Pierre Taillée Craquelée -Cut Red Sandstone=Grès Rouge Taillé -Cut Sandstone=Grès Taillé -Cut red sandstone is a decorative building block.=Le grès rouge taillé est un bloc de construction décoratif. -Cut sandstone is a decorative building block.=Le grès taillé est un bloc de construction décoratif. -Cyan Stained Glass=Vitre Cyan -Dark Oak Bark=Écorce de Chêne Noir -Dark Oak Leaves=Feuilles de Chêne Noir -Dark Oak Sapling=Pousse de Chêne Noir -Dark Oak Wood=Bois de Chêne Noir -Dark Oak Wood Planks=Planche de Chêne Noir -Dark oak leaves are grown from dark oak trees.=Les feuilles de chêne noir sont issues de chênes noirs. -Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=Les pousses de chêne noir peuvent devenir des chênes noirs, mais seulement en groupes. Une pousse de chêne noir solitaire ne poussera pas. Un groupe de quatre pousses de chêne noir se transforme en chêne noir après un certain temps lorsqu'ils sont placés sur le sol (comme la terre) dans un carré 2×2 et exposés à la lumière. -Dead Bush=Arbuste mort -Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=Les buissons morts sont des plantes inhabituelles que l'on trouve souvent dans les zones sèches. Ils peuvent être récoltés avec des bâtons. -Diamond=Diamant -Diamond Ore=Minerai de Diamant -Diamond ore is rare and can be found in clusters near the bottom of the world.=Le minerai de diamant est rare et peut être trouvé en filons près du fond du monde. -Diamonds are precious minerals and useful to create the highest tier of armor and tools.=Les diamants sont des minéraux précieux et utiles pour créer le plus haut niveau d'armure et d'outils. -Diorite=Diorite -Diorite is an igneous rock.=La diorite est une roche ignée. -Dirt=Terre -Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=La terre agit comme un sol pour quelques plantes. Lorsqu'il est à la lumière, ce bloc peut faire pousser une couverture d'herbe ou de mycélium si ces blocs sont à proximité. -Emerald=Emeraude -Emerald Ore=Minerai d'Emeraude -Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Le minerai d'émeraude produit des émeraudes. Il est très rare et peut être trouvé seul, pas en filons. -Emeralds are used in villager trades as currency.=Les émeraudes sont utilisées pour faire des échanges avec les villageois. -Flint=Silex -Flint is a raw material.=Le silex est une matière première. -Flowing Lava=Lave qui coule -Flowing Water=Eau qui coule -Frosted Ice=Glace Givrée -Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=La glace givrée est un bloc solide de courte durée. Il fond dans une source d'eau en quelques secondes. -Glass=Verre -Gold Ingot=Lingot d'Or -Gold Nugget=Pépite d'Or -Gold Ore=Minerai d'Or -Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Les pépites d'or sont de très petites pièces d'or en fusion; le but principal est de créer des lingots d'or. -Golden Apple=Pomme Dorée -Golden apples are precious food items which can be eaten.=Les pommes dorrées sont des aliments précieux qui peuvent être consommés. -Granite=Granit -Grass Block=Bloc d'Herbe -Grass Path=Chemin d'Herbe -Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Les chemins d'herbe sont une variante décorative des blocs d'herbe. Leur sommet a une couleur différente et ils sont un peu plus bas que les blocs d'herbe, ce qui les rend utiles pour construire des sentiers. Les chemins d'herbe peuvent être créés avec une pelle. Un chemin d'herbe se transforme en terre quand il est en dessous d'un bloc solide. -Gravel=Gravier -Green Stained Glass=Verre Vert -Grey Stained Glass=Verre Gris -Ice=Glace -Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=La glace est un bloc solide que l'on trouve généralement dans les régions froides. Il fond près des sources de lumière de bloc à un niveau de lumière de 12 ou plus. Lorsqu'il fond ou se casse en se reposant sur un autre bloc, il se transforme en source d'eau. -In the End dimension, starting a fire on this block will create an eternal fire.=Dans la dimension End, démarrer un feu sur ce bloc créera un feu éternel. -Iron Ingot=Lingot de Fer -Iron Nugget=Pépite de Fer -Iron Ore=Minerai de Fer -Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=Les pépites de fer sont de très petits morceaux de fer fondu; le but principal est de créer des lingots de fer. -Jungle Bark=Écorce d'Acajou -Jungle Leaves=Feuilles d'Acajou -Jungle Sapling=Pousse d'Acajou -Jungle Wood=Bois d'Acajou -Jungle Wood Planks=Planches d'Acajou -Jungle leaves are grown from jungle trees.=Les feuilles d'Acajou sont cultivées à partir d'arbres d'Acajou. -Ladder=Échelle -Lapis Lazuli Block=Bloc de Lapis-Lazuli -Lapis Lazuli Ore=Minerai de Lapis-Lazuli -Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=Le minerai de lapis-lazuli produit du lapis-lazuli. Il peut être rarement trouvé dans des filons près du fond du monde. -Lava Source=Source de Lave -Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=La lave est chaude et plutôt dangereuse. Ne le touchez pas, cela vous fera beaucoup de mal et il est difficile d'en sortir. -Light Blue Stained Glass=Verre Bleu Clair -Light Grey Stained Glass=Verre Gris Clair -Lime Stained Glass=Verre Vert Clair -Lit Redstone Ore=Minerai de Redstone -Magenta Stained Glass=Verre Magenta -Molten gold. It is used to craft armor, tools, and whatnot.=L'Or. Il est utilisé pour fabriquer des armures, des outils et ainsi de suite. -Molten iron. It is used to craft armor, tools, and whatnot.=Le Fer. Il est utilisé pour fabriquer des armures, des outils et ainsi de suite. -Mossy Cobblestone=Pierre Moussue -Mossy Stone Bricks=Pierre Taillée Moussue -Mycelium=Mycélium -Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=Le mycélium est un type de terre et le sol idéal pour les champignons. Contrairement à d'autres blocs de terre, il ne peut pas être transformé en terres agricoles avec une houe. À la lumière, le mycélium se répand lentement sur la terre voisine. Sous un bloc opaque ou un liquide, il finit par redevenir de la terre. -Oak Bark=Écorce de Chêne -Oak Leaves=Feuilles de Chêne -Oak Sapling=Pousse de Chêne -Oak Wood=Bois de Chêne -Oak Wood Planks=Planches de Chêne -Oak leaves are grown from oak trees.=Les feuilles de chêne sont cultivées à partir de chênes. -Obsidian=Obsidienne -Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=L'obsidienne est un minéral extrêmement dur avec une énorme résistance à l'explosion. L'obsidienne se forme lorsque l'eau rencontre la lave. -One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=L'un des blocs les plus courants au monde, presque tout le sous-sol est en pierre. Il contient parfois des minerais. La pierre peut être créée lorsque l'eau rencontre la lave. -Orange Stained Glass=Verre Orange -Packed Ice=Glace Compactée -Packed ice is a compressed form of ice. It is opaque and solid.=La glace compactée est une forme de glace comprimée. Elle est opaque et solide. -Paper=Papier -Paper is used to craft books and maps.=Le papier est utilisé pour créer des livres et des cartes. -Pink Stained Glass=Verre Rose -Podzol=Podzol -Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Le podzol est un type de terre trouvé dans les forêts de la taïga. Seules quelques plantes peuvent y survivre. -Polished Andesite=Andrésite Polie -Polished Diorite=Diorite Polie -Polished Granite=Granit Poli -Polished Stone=Roche Polie -Polished andesite is a decorative building block made from andesite.=L'andésite polie est un bloc de construction décoratif en andésite. -Polished diorite is a decorative building block made from diorite.=La diorite polie est un bloc de construction décoratif en diorite. -Polished granite is a decorative building block made from granite.=Le granit poli est un bloc de construction décoratif en granit. -Purple Stained Glass=Verre Violet -Realm Barrier=Barrière du royaume -Red Sand=Sable Rouge -Red Sandstone=Grès Rouge -Red Stained Glass=Verre Rouge -Red sand is found in large quantities in mesa biomes.=Le sable rouge se trouve en grande quantité dans les biomes mesa. -Red sandstone is compressed red sand and is a rather soft kind of stone.=Le grès rouge est du sable rouge comprimé et est une pierre plutôt tendre. -Redstone Ore=Minerai de Redstone -Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=Le minerai de Redstone se trouve généralement près du bas du monde. Il brille lorsqu'il est frappé ou piétiné. -Sand=Sable -Sand is found in large quantities at beaches and deserts.=Le sable se trouve en grande quantité sur les plages et les déserts. -Sandstone=Grès -Sandstone is compressed sand and is a rather soft kind of stone.=Le grès est du sable comprimé et est un type de pierre plutôt tendre. -Slime Block=Bloc de Slime -Slime blocks are very bouncy and prevent fall damage.=Les blocs de slime sont gonflables et empêchent les dommages de chute. -Smooth Red Sandstone=Grès Rouge Lisse -Smooth Sandstone=Grès Lisse -Smooth red sandstone is a decorative building block.=Le grès rouge lisse est un bloc de construction décoratif. -Smooth sandstone is compressed sand and is a rather soft kind of stone.=Le grès lisse est du sable comprimé et est un type de pierre plutôt tendre. -Snow=Neige -Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=Du charbon contenu dans la pierre, il est très commun et peut être trouvé à l'intérieur de la pierre en grappes moyennes à grandes à presque toutes les hauteurs. -Some iron contained in stone, it is prety common and can be found below sea level.=Du fer contenu dans la pierre, il est assez courant et se trouve sous le niveau de la mer. -Spruce Bark=Écorce de Sapin -Spruce Leaves=Feuilles de Sapin -Spruce Sapling=Pousse de Sapin -Spruce Wood=Bois de Sapin -Spruce Wood Planks=Planches de Sapin -Spruce leaves are grown from spruce trees.=Les feuilles de sapin sont cultivées à partir de sapin. -Stained glass is a decorative and mostly transparent block which comes in various different colors.=Le verre est un bloc décoratif et principalement transparent qui se décline en différentes couleurs. -Stick=Bâton -Sticks are a very versatile crafting material; used in countless crafting recipes.=Les bâtons sont un matériau d'artisanat très polyvalent; utilisé dans d'innombrables recettes d'artisanat. -Stone=Roche -Stone Bricks=Pierre Taillée -Sugar=Sucre -Sugar Canes=Canne à Sucre -Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Les cannes à sucre sont une plante qui a certaines utilisations dans l'artisanat. Les cannes à sucre poussent lentement jusqu'à 3 blocs lorsqu'elles sont à côté de l'eau et sont placées sur un bloc d'herbe, de saleté, de sable, de sable rouge, de podzol ou de saleté grossière. Lorsqu'une canne à sucre est cassée, toutes les cannes à sucre connectées ci-dessus se brisent également. -Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Les cannes à sucre ne peuvent être placées que sur d'autres cannes à sucre et sur des blocs sur lesquels elles poussent. -Sugar comes from sugar canes and is used to make sweet foods.=Le sucre provient des cannes à sucre et est utilisé pour fabriquer des aliments sucrés. -The trunk of a birch tree.=Le tronc d'un bouleau. -The trunk of a dark oak tree.=Le tronc d'un chêne noir. -The trunk of a jungle tree.=Le tronc d'un acajou. -The trunk of a spruce tree.=Le tronc d'un sapin. -The trunk of an acacia.=Le tronc d'un acacia -The trunk of an oak tree.=Le tronc d'un chêne. -This block consists of a couple of loose stones and can't support itself.=Ce bloc se compose de quelques pierres lâches et ne peut pas se soutenir. -This is a decorative block surrounded by the bark of a tree trunk.=Il s'agit d'un bloc décoratif entouré par l'écorce d'un tronc d'arbre. -This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=Ceci est un bloc de neige complet. La neige de cette épaisseur se trouve généralement dans les zones de froid extrême. -This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=Il s'agit d'un morceau de cactus que l'on trouve couramment dans les zones sèches, en particulier dans les déserts. Au fil du temps, les cactus pousseront jusqu'à 3 blocs de haut sur le sable ou le sable rouge. Un cactus blesse les êtres vivants qui le touchent avec des dégâts de 1 HP toutes les demi-secondes. Lorsqu'un bloc de cactus est brisé, tous les blocs de cactus connectés au-dessus se brisent également. -This stone contains pure gold, a rare metal.=Cette pierre contient de l'or pur, un métal rare. -Top Snow=neige -Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=La neige est une couche de neige. Il fond près de sources lumineuses autres que le soleil avec un niveau de lumière de 12 ou plus. -Vines=Lianes -Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=Les lianes sont des blocs grimpants qui peuvent être placés sur les côtés de blocs pleins. Les lianes poussent et s'étendent lentement. -Void=Néant -Water=Eau -Water Source=Source d'Eau -Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=L'eau est abondante dans les océans et apparaît également dans quelques sources dans le sol. Vous pouvez nager facilement dans l'eau, mais vous devez de temps en temps reprendre votre souffle. -When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=Lorsqu'il est placé sur le sol (comme la terre) et exposé à la lumière, un jeune arbre de bouleau se transforme en bouleau après un certain temps. -When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=Lorsqu'il est placé sur le sol (comme la terre) et exposé à la lumière, une pousse d'Acajou se transforme en arbre d'Acajou après un certain temps. Quand il y a 4 pousses d'Acajou dans un carré 2×2, ils deviendront un énorme arbre d'Acajou. -When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=Lorsqu'il est placé sur le sol (comme la terre) et exposé à la lumière, un pousse de sapin se transforme en sapin après un certain temps. Lorsqu'il y a 4 pousses de sapin dans un carré 2×2, elles deviendront un énorme sapin. -When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=Lorsqu'il est placé sur le sol (comme la terre) et exposé à la lumière, un pousse d'acacia se développera en un acacia après un certain temps. -When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=Lorsqu'il est placé sur le sol (comme la terre) et exposé à la lumière, une pousse de chêne se transforme en chêne après un certain temps. -When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=Lorsque vous tenez une barrière en main, vous révélez toutes les barrières placées à une courte distance autour de vous. -White Stained Glass=Verre Blanc -Yellow Stained Glass=Verre Jaune -“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.=Le "charbon" fait référence aux morceaux de charbon obtenus en creusant du minerai de charbon qui peut être trouvé sous terre. Le charbon est votre combustible de four standard, mais il peut également être utilisé pour fabriquer des torches, des blocs de charbon et quelques autres choses. -Water interacts with lava in various ways:=L'eau interagit avec la lave de différentes manières: -• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• Lorsque l'eau est directement au-dessus ou horizontalement à côté d'une source de lave, la lave se transforme en obsidienne. -• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• Lorsque l'eau qui coule touche la lave qui coule par le haut ou horizontalement, la lave se transforme en pierre. -• When water is directly below lava, the water turns into stone.=• Lorsque l'eau est directement sous la lave, l'eau se transforme en pierre. -Lava interacts with water various ways:=La lave interagit avec l'eau de différentes manières: -• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• Lorsqu'une source de lave se trouve directement sous ou horizontalement à côté de l'eau, la lave se transforme en obsidienne. -• When lava is directly above water, the water turns into stone.=• Lorsque la lave est directement au-dessus de l'eau, l'eau se transforme en pierre. -Stained Glass=Verre teinté -Granite is an igneous rock.=Le granit est une roche ignée. -Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=La neige peut être empilée et a l'un des 8 niveaux de hauteur différents. Aux niveaux 2 à 8, la neige provoque des collisions. La neige laisse tomber 2-9 boules de neige, selon sa hauteur. -This block can only be placed on full solid blocks and on another top snow (which increases its height).=Ce bloc ne peut être placé que sur des blocs pleins et sur une autre neige (ce qui augmente sa hauteur). -Needs soil and water to grow=A besoin de terre et d'eau pour se développer -Needs soil and light to grow=A besoin de terre et de lumière pour se développer -Grows on sand=Pousse sur le sable -Contact damage: @1 per half second=Dommages de contact: @1 par demi-seconde -Slows down movement=Ralentit le mouvement -2×2 saplings required=2×2 pousses requis -2×2 saplings @= large tree=2×2 pousses @= grand arbre -Grows on sand or dirt next to water=Pousse sur le sable ou la terre près de l'eau -Stackable=Empilable diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.pl.tr b/mods/ITEMS/mcl_core/locale/mcl_core.pl.tr deleted file mode 100644 index 68dfbd3d0..000000000 --- a/mods/ITEMS/mcl_core/locale/mcl_core.pl.tr +++ /dev/null @@ -1,277 +0,0 @@ -# textdomain: mcl_core -@1 could not survive in lava.=@1 nie przeżyła w lawie. -@1 died in lava.=@1 umarła w lawie. -@1 melted in lava.=@1 stopiła się w lawie. -@1 took a bath in a hot lava tub.=@1 wzięła gorącą kąpiel w wannie z lawą. -A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=Blok diamentu jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania diamentów. -A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=Blok szmaragdu jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania szmaragdów. -A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=Blok złota jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania sztabek złota. -A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=Blok żelaza jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania sztabek żelaza. -A cactus can only be placed on top of another cactus or any sand.=Kaktus może być postawiony tylko na innym kaktusie lub piasku. -A decorative and mostly transparent block.=Dekoracyjny i głównie przeźroczysty blok. -A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=Blok trawy to blok ziemi z pokryciem z trawy. Bloki trawy są użytecznymi blokami pozwalającymi na wyrośnięcie różnych rodzajów roślin. Mogą zostać zamienione w pole uprawne motyką, lub w ścieżkę z trawy łopatą. Oświetlona trawa rozprzestrzenia się na pobliskie bloki. Pod nieprzezroczystym blokiem lub płynem blok trawy może zamienić się z powrotem w blok ziemi. -A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=Blok lazurytu jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania lazurytu. -A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=Źródło lawy podpala bloki powietrza nad nią gdy są obok łatwopalnego bloku. -A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=Kawałek drabiny, który pozwala ci wspinać się pionowo. Drabina może być postawiona na boku stałego bloku, lecz nie na szkle, liściach, lodzie, półbloku, jasnogłazie ani na latarni morskiej. -Acacia Bark=Akacjowa kora -Acacia Leaves=Akacjowe liście -Acacia Sapling=Akacjowa sadzonka -Acacia Wood=Akacjowe drewno -Acacia Wood Planks=Akacjowe deski -Acacia leaves are grown from acacia trees.=Akacjowe liście rosną na akacjach. -Andesite=Andezyt -Andesite is an igneous rock.=Andezyt jest skałą pochodzenia wulkanicznego. -Apple=Jabłko -Apples are food items which can be eaten.=Jabłka to przedmioty które można zjeść. -Barrier=Bariera -Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=Bariery to niewidzialne bloki po których można chodzić. Są użyteczne do tworzenia ograniczeń na mapach przygodowych i im podobnych. Potwory i zwierzęta nie pojawiają się na barierach, a płoty się z nimi nie łączą. Inne bloki mogą być na nich budowane podobnie jak na innych blokach. -Bedrock=Skała macierzysta -Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=Skała macierzysta jest rodzajem bardzo twardej skały. Nie może być ona zniszczona, zebrana lub przesunięta normalnymi metodami, jeśli nie jesteś w trybie kreatywnym. -Birch Bark=Brzozowa kora -Birch Leaves=Brzozowe liście -Birch Sapling=Brzozowa sadzonka -Birch Wood=Brzozowe drewno -Birch Wood Planks=Brzozowe deski -Birch leaves are grown from birch trees.=Brzozowe liście rosną na brzozach. -Black Stained Glass=Czarne szkło -Block of Coal=Blok węgla -Block of Diamond=Blok diamentu -Block of Emerald=Blok szmaragdu -Block of Gold=Blok złota -Block of Iron=Blok żelaza -Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=Bloki węgla są użyteczne do kompaktowego przechowywania diamentów i bardzo użyteczne jako paliwo do pieca. -Blue Stained Glass=Niebieskie szkło -Bone Block=Blok kości -Bone blocks are decorative blocks and a compact storage of bone meal.=Bloki kości są blokami dekoracyjnymi i są użyteczne do kompaktowego przechowywania mączki kostnej. -Bowl=Miska -Bowls are mainly used to hold tasty soups.=Miski są użyteczne do przechowywania smacznych zup. -Brick=Cegła -Brick Block=Blok cegły -Brick blocks are a good building material for building solid houses and can take quite a punch.=Bloki cegły są dobrymi materiałami na budowanie solidnych domów i trzeba się namęczyć by je zniszczyć. -Bricks are used to craft brick blocks.=Cegły są wykorzystywane do wytwarzania bloków cegieł. -Brown Stained Glass=Brązowe szkło -Cactus=Kaktus -Charcoal=Węgiel drzewny -Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=Węgiel drzewny jest alternatywnym paliwem do pieca uzyskiwanym przez wypalanie drewna w piecu. Pali się tak samo długo jak węgiel oraz może być użyty jako zamiennik w wielu recepturach, jednak nie można z niego robić bloków węgla. -Chiseled Stone Bricks=Rzeźbione kamienne cegły -Chiseled Red Sandstone=Rzeźbiony czerwony piaskowiec -Chiseled Sandstone=Rzeźbiony piaskowiec -Chiseled red sandstone is a decorative building block.=Rzeźbiony czerwony piaskowiec jest dekoracyjnym blokiem budowlanym. -Chiseled sandstone is a decorative building block.=Rzeźbiony piaskowiec jest dekoracyjnym blokiem budowlanym. -Clay=Blok gliny -Clay Ball=Glina -Clay balls are a raw material, mainly used to create bricks in the furnace.=Glina jest surowym materiałem głównie wykorzystywanym do wypalania cegieł w piecu. -Clay is a versatile kind of earth commonly found at beaches underwater.=Bloki gliny są użytecznymi blokami ziemi często występującymi na plażach pod wodą. -Coal=Węgiel -Coal Ore=Ruda węgla -Coarse Dirt=Twarda ziemia -Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=Twarda ziemia jest podłożem dla niektórych roślin i jest podobna do ziemi, jednak nie rośnie na niej trawa. -Cobblestone=Brukowiec -Cobweb=Pajęczyna -Cobwebs can be walked through, but significantly slow you down.=Przez pajęczyny można przechodzić, jednak bardzo cię spowolnią. -Cracked Stone Bricks=Popękane kamienne cegły. -Cut Red Sandstone=Przycięty czerwony piaskowiec -Cut Sandstone=Przycięty piaskowiec -Cut red sandstone is a decorative building block.=Przycięty czerwony piaskowiec jest dekoracyjnym blokiem budowlanym. -Cut sandstone is a decorative building block.=Przycięty piaskowiec jest dekoracyjnym blokiem budowlanym. -Cyan Stained Glass=Błękitne szkło -Dark Oak Bark=Ciemno-dębowa kora -Dark Oak Leaves=Ciemno-dębowe liście -Dark Oak Sapling=Ciemno-dębowa sadzonka -Dark Oak Wood=Ciemno-dębowe drewno -Dark Oak Wood Planks=Ciemno-dębowe deski -Dark oak leaves are grown from dark oak trees.=Ciemno-dębowe liście rosną na ciemnych dębach. -Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=Ciemno-dębowe sadzonki mogą wyrosnąć w ciemny dąb, ale tylko w grupach. Samotna ciemno-dębowa sadzonka nie wyrośnie. Grupa czterech ciemno-dębowych sadzonek wyrośnie w ciemny dąb po jakimś czasie, gdy będą postawiona na glebie (np. ziemi) w kwadracie 2×2, która jest oświetlona. -Dead Bush=Uschnięty krzew -Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=Uschnięte krzewy to niewyróżniające się rośliny często występujące w suchych obszarach. Mogą z nich być zebrane patyki. -Diamond=Diament -Diamond Ore=Ruda diamentu -Diamond ore is rare and can be found in clusters near the bottom of the world.=Ruda diamentu jest rzadko występującym blokiem, który można znaleźć w grupach przy dnie świata. -Diamonds are precious minerals and useful to create the highest tier of armor and tools.=Diamenty to cenne minerały wykorzystywane do wytwarzania najwyższej jakości zbroi i narzędzi. -Diorite=Dioryt. -Diorite is an igneous rock.=Dioryt jest skałą pochodzenia wulkanicznego. -Dirt=Ziemia -Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=ziemia jest podłożem dla niektórych roślin. Gdy jest oświetlona może na niej wyrosnąć trawa bądź grzybnia, jeśli takie bloki są w pobliżu. -Emerald=Szmaragd -Emerald Ore=Ruda szmaragdu -Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Ruda szmaragdu jest bardzo rzadka i występuje samotnie, nie w grupach. -Emeralds are used in villager trades as currency.= -Flint=Krzemień -Flint is a raw material.=Krzemień jest surowym materiałem. -Flowing Lava=Płynąca lawa -Flowing Water=Płynąca woda -Frosted Ice=Oszroniony lód -Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=Oszroniony lód jest blokiem o krótkim życiu. Topi się w źródło wody w kilka sekund. -Glass=Szkło -Gold Ingot=Sztabka złota -Gold Nugget=Bryłka złota -Gold Ore=Ruda złota -Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Bryłki złota są bardzo małymi kawałkami stopionego złota. Ich głównym zastosowaniem jest tworzenie sztabek złota. -Golden Apple=Złote jabłko -Golden apples are precious food items which can be eaten.=Złote jabłka są cennym jedzeniem, które można zjeść. -Granite=Granit -Grass Block=Blok trawy -Grass Path=Ścieżka trawy -Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Ścieżki trawy są dekoracyjną wersją bloków trawy. Ich góra ma inny kolor i są nieco niższe niż bloki trawy, przez co są użyteczne do wyznaczania ścieżek. Ścieżki trawy mogą zostać stworzone łopatą. Ścieżka trawy zamienia się w ziemię gdy jest pod stałym blokiem. -Gravel=Żwir -Green Stained Glass=Zielone szkło -Grey Stained Glass=Szare szkło -Ice=Lód -Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=Lód jest stałym blokiem zwykle występującym w zimnych rejonach. Topi się w okolice źródeł światła przy poziomie oświetlenia 12 lub wyższym. Gdy się stopi bądź jest zniszczony na innym bloku zamienia się w źródło wody. -In the End dimension, starting a fire on this block will create an eternal fire.=W wymiarze Kresu rozpalenie ognia na tym bloku stworzy wieczny ogień. -Iron Ingot=Sztabka żelaza -Iron Nugget=Bryłka żelaza -Iron Ore=Ruda żelaza -Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=Bryłki żelaza są bardzo małymi kawałkami stopionego żelaza. Ich głównym zastosowaniem jest tworzenie sztabek żelaza. -Jungle Bark=Tropikalna kora -Jungle Leaves=Tropikalne liście -Jungle Sapling=Tropikalna sadzonka -Jungle Wood=Tropikalne drewno -Jungle Wood Planks=Tropikalne deski -Jungle leaves are grown from jungle trees.=Tropikalne liście rosną na tropikalnych drzewach. -Ladder=Drabina -Lapis Lazuli Block=Blok lazurytu -Lapis Lazuli Ore=Ruda lazurytu -Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=Ruda lazurytu jest rzadko występującym blokiem, który można znaleźć w grupach przy dnie świata. -Lava Source=Źródło lawy -Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=Lawa jest gorąca i bardzo niebezpieczna. Nie dotykaj jej, jeśli nie chcesz ucierpieć. Trudno się z niej wydostać. -Light Blue Stained Glass=Jasnoniebieskie szkło -Light Grey Stained Glass=Jasnoszare szkło -Lime Stained Glass=Jasnozielone szkło -Lit Redstone Ore=Świecąca ruda czerwienitu -Magenta Stained Glass=Karmazynowe szkło -Molten gold. It is used to craft armor, tools, and whatnot.=Stopione złoto. Wykorzystywane do wytwarzania zbroi, narzędzi i innych. -Molten iron. It is used to craft armor, tools, and whatnot.=Stopione żelazo. Wykorzystywane do wytwarzania zbroi, narzędzi i innych. -Mossy Cobblestone=Zamszony bruk -Mossy Stone Bricks=Zamszone kamienne cegły -Mycelium=Grzybnia -Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=Grzybnia jest rodzajem ziemi i idealnym podłożem dla grzybów. W przeciwieństwie do innych bloków ziemi nie może ona zostać zamieniona w pole uprawne motyką. Oświetlona grzybnia powoli rozprzestrzenia się na pobliską ziemię. Pod nieprzezroczystym blokiem bądź płynem po pewnym czasie zamieni się z powrotem w ziemię. -Oak Bark=Dębowa kora -Oak Leaves=Dębowe liście -Oak Sapling=Dębowe sadzonki -Oak Wood=Dębowe drewno -Oak Wood Planks=Dębowe deski -Oak leaves are grown from oak trees.=Dębowe liście rosną na dębach. -Obsidian=Obsydian -Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=Obsydian jest bardzo twardym minerałem o ogromnej odporności na wybuchy. Obsydian powstaje gdy woda styka się z lawą. -One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=Jeden z najpowszechniejszych bloków na świecie, prawie całe podziemia składają się z kamienia. Czasami zawiera rudy. Kamień może być utworzony czy woda styka się z lawą. -Orange Stained Glass=Pomarańczowe szkło -Packed Ice=Zbity lód -Packed ice is a compressed form of ice. It is opaque and solid.=Zbity lód jest skompresowaną formą lodu. Jest nieprzezroczysty i stały. -Paper=Papier -Paper is used to craft books and maps.=Papier jest wykorzystywany do wytwarzania książek i map. -Pink Stained Glass=Różowe szkło -Podzol=Bielica -Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Bielica jest typem ziemi w tajgach. Tylko niektóre rośliny są w stanie na niej przeżyć. -Polished Andesite=Wypolerowany andezyt -Polished Diorite=Wypolerowany dioryt -Polished Granite=Wypolerowany granit -Polished Stone=Wypolerowany kamień -Polished andesite is a decorative building block made from andesite.=Wypolerowany andezyt jest dekoracyjnym blokiem budowlanym tworzonym z andezytu. -Polished diorite is a decorative building block made from diorite.=Wypolerowany dioryt jest dekoracyjnym blokiem budowlanym tworzonym z diorytu. -Polished granite is a decorative building block made from granite.=Wypolerowany granit jest dekoracyjnym blokiem budowlanym tworzonym z granitu. -Purple Stained Glass=Fioletowe szkło -Realm Barrier=Bariera wymiarów -Red Sand=Czerwony piasek -Red Sandstone=Czerwony piaskowiec -Red Stained Glass=Czerwone szkło -Red sand is found in large quantities in mesa biomes.=Czerwony piasek występuje w dużych ilościach w Badlandach. -Red sandstone is compressed red sand and is a rather soft kind of stone.=Czerwony piaskowiec jest skompresowanym czerwonym piaskiem i jest miękkim rodzajem kamienia. -Redstone Ore=Ruda czerwienitu -Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=Ruda czerwienitu występuje często w okolicy dna świata. Świeci gdy się ją uderzy bądź gdy się po niej chodzi. -Sand=Piasek -Sand is found in large quantities at beaches and deserts.=Piasek występuje w dużych ilościach na plażach i pustyniach. -Sandstone=Piaskowiec -Sandstone is compressed sand and is a rather soft kind of stone.=Piaskowiec jest skompresowanym piaskiem i jest miękkim rodzajem kamienia. -Slime Block=Blok szlamu -Slime blocks are very bouncy and prevent fall damage.=Bloki szlamu są bardzo sprężyste i pomagają uniknąć obrażeń od upadku. -Smooth Red Sandstone=Gładki czerwony piaskowiec -Smooth Sandstone=Gładki piaskowiec -Smooth red sandstone is a decorative building block.=Gładki czerwony piaskowiec jest dekoracyjnym blokiem budowlanym. -Smooth sandstone is compressed sand and is a rather soft kind of stone.=Gładki piaskowiec skompresowanym piaskiem i jest miękkim rodzajem kamienia. -Snow=Śnieg -Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=Trochę węgla zawartego w kamieniu. Jest bardzo częste i można to znaleźć w kamieniu w średnich i dużych grupach na niemal każdej wysokości. -Some iron contained in stone, it is prety common and can be found below sea level.=Trochę żelaza zawartego w kamieniu. Jest bardzo częste i można to znaleźć w kamieniu poniżej poziomu morza. -Spruce Bark=Świerkowa kora -Spruce Leaves=Świerkowe liście -Spruce Sapling=Świerkowa sadzonka -Spruce Wood=Świerkowe drewno -Spruce Wood Planks=Świerkowe deski -Spruce leaves are grown from spruce trees.=Świerkowe liście rosną na świerkach. -Stained glass is a decorative and mostly transparent block which comes in various different colors.=Kolorowe szkło jest dekoracyjnym, przejrzystym blokiem. Istnieją różnokolorowe warianty tego bloku. -Stick=Patyk -Sticks are a very versatile crafting material; used in countless crafting recipes.=Patyk jest wszechstronnym materiałem do wytwarzania, wykorzystywanym w niezliczonej liczbie receptur. -Stone=Kamień -Stripped Acacia Log=Okorowany pień akacji -Stripped Acacia Wood=Okorowane drewno akacji -Stripped Birch Log=Okorowany pień brzozy -Stripped Birch Wood=Okorowane drewno brzozy -Stripped Dark Oak Log=Okorowany pień ciemnego dębu -Stripped Dark Oak Wood=Okorowane drewno ciemnego dębu -Stripped Jungle Log=Okorowany pień tropikalnego drzewa -Stripped Jungle Wood=Okorowane drewno tropikalnego drzewa -Stripped Oak Log=Okorowany pień dębu -Stripped Oak Wood=Okorowane drewno dębu -Stripped Spruce Log=Okorowany pień świerku -Stripped Spruce Wood=Okorowane drewno świerku -Stone Bricks=Kamienne cegły -Sugar=Cukier -Sugar Canes=Trzcina cukrowa -Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Trzciny cukrowe są rośliny użyteczne w wytwarzaniu. Będą one powoli rosły na wysokość 3 bloków, gdy są postawione obok wody i są postawione na bloku trawy, ziemi, piasku, czerwonego piasku, bielicy lub twardej ziemi. Gdy trzcina cukrowa jest zniszczona wszystkie połączone trzciny nad nią również się zniszczą. -Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Trzciny cukrowe mogą być posadzone tylko na innych trzcinach cukrowych i na blokach na których by wyrosły. -Sugar comes from sugar canes and is used to make sweet foods.=Cukier wytwarza się z trzciny cukrowej i wykorzystuje się go do robienia słodkich potraw. -The stripped trunk of an acacia tree.=Okorowany pień drzewa akacji. -The stripped trunk of an birch tree.=Okorowany pień drzewa brozy. -The stripped trunk of an dark oak tree.=Okorowany pień drzewa ciemnego dębu. -The stripped trunk of an jungle tree.=Okorowany pień drzewa tropikalnego. -The stripped trunk of an oak tree.=Okorowany pień drzewa dębu. -The stripped trunk of an spruce tree.=Okorowany pień drzewa świerkowego. -The trunk of a birch tree.=Pień brzozy. -The trunk of a dark oak tree.=Pień ciemnego dębu. -The trunk of a jungle tree.=Pień tropikalnego drzewa. -The trunk of a spruce tree.=Pień świerka. -The trunk of an acacia.=Pień akacji. -The trunk of an oak tree.=Pień dębu. -This block consists of a couple of loose stones and can't support itself.=Ten blok składa się z kilku luźnych kamieni i nie może się utrzymać. -This is a decorative block surrounded by the bark of a tree trunk.=Jest to dekoracyjny blok otoczony przez korę pnia. -This is a decorative block.=Jest to blok dekoracyjny. -This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=To jest pełny blok śniegu. Śnieg tej grubości występuje zwykle w ekstremalnie niskich obszarach. -This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=To jest kawałek kaktusa często występujący w suchych obszarach, zwłaszcza pustyniach. Po pewnym czasie kaktusy rosną na wysokość 3 bloków na piasku lub czerwonym piasku. Kaktus rani żywe istoty dotykające go zadając 1 HP obrażeń na pół sekundy. Gdy blok kaktusa jest zniszczony wszystkie bloki kaktusa nad nim również zostaną zniszczone. -This stone contains pure gold, a rare metal.=Ten kamień zawiera czyste złoto, rzadki metal. -Top Snow=Pokrywa śniegu -Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=Pokrywa śniegu jest warstwą śniegu. Topi się przy źródłach światła innych niż słońce o poziomie oświetlenia 12 lub wyższym. -Vines=Pnącza -Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=Pnącza są blokami po których można się wspinać i które można postawić na bokach stałych pełnych bloków. -Void=Otchłań -Water=Woda -Water Source=Źródło wody -Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=Wody jest dużo w oceanach i pojawia się też w strumykach na ziemi. Możesz łatwo pływać w wodzie, ale nie zapominaj od czasu do czasu złapać oddechu. -When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=Z położonej na glebie (np. ziemi) i oświetlonej brzozowej sadzonki po pewnym czasie wyrośnie brzoza. -When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=Z położonej na glebie (np. ziemi) i oświetlonej tropikalnej sadzonki po pewnym czasie wyrośnie drzewo tropikalne. Jeśli 4 tropikalne sadzonki są posadzone w kwadracie 2×2 wyrośnie z nich duże drzewo tropikalne. -When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=Z położonej na glebie (np. ziemi) i oświetlonej świerkowej sadzonki po pewnym czasie wyrośnie świerk. Jeśli 4 tropikalne sadzonki są posadzone w kwadracie 2×2 wyrośnie z nich duży świerk. -When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=Z położonej na glebie (np. ziemi) i oświetlonej akacjowej sadzonki po pewnym czasie wyrośnie akacja. -When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=Z położonej na glebie (np. ziemi) i oświetlonej dębowej sadzonki po pewnym czasie wyrośnie dąb. -When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=Gdy w ręce trzymasz barierę będziesz w stanie dostrzec wszystkie bariery w niewielkiej odległości. -White Stained Glass=Białe szkło -Yellow Stained Glass=Żółte szkło -“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.="Węgiel" odnosi się tutaj do kawałków węgla zdobytych przez wykopanie rudy węgla występującej pod ziemią. Węgiel jest standardowym paliwem do pieca, ale może być również wykorzystany do tworzenia pochodni, bloków węgla i kilku innych rzeczy. -Water interacts with lava in various ways:=Woda wchodzi w interakcję z lawą na kilka sposobów: -• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• Gdy woda jest bezpośrednio nad lub poziomo obok źródła lawy, lawa zamienia się w obsydian. -• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• Gdy płynąca woda zetknie się z lewą, z góry lub z boku, lawa zamienia się w brukowiec. -• When water is directly below lava, the water turns into stone.=Gdy woda jest bezpośrednio pod lawą, woda zamienia się w kamień. -Lava interacts with water various ways:=Lawa wchodzi w interakcję z wodą na różne sposoby: -• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• Gdy źródło lawy jest bezpośrednio pod lub poziomo obok wody, lawa zamienia się w obsydian. -• When lava is directly above water, the water turns into stone.=• Gdy lawa jest bezpośrednio nad wodą, woda zamienia się w kamień. -Stained Glass=Kolorowe szkło -Granite is an igneous rock.=Granit jest skałą pochodzenia wulkanicznego. -Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=Pokrywa śniegu może być układana w stos i ma 8 poziomów wysokości. Na poziomach 2-8 pokrywa jest przeszkodą. Z pokrywy śniegu wypada 2-9 kulek w zależności od jej wysokości. -This block can only be placed on full solid blocks and on another top snow (which increases its height).=Ten blok może być postawiony wyłącznie na pełnych stałych blokach i na innej pokrywie śniegu (co zwiększy jej wysokość). -Needs soil and water to grow=Potrzebuje gleby i wody by rosnąć -Needs soil and light to grow=Potrzebuje gleby i światła by rosnąć -Grows on sand=Rośnie na piasku -Contact damage: @1 per half second=Obrażenia dotykowe: @1 na pół sekundy -Slows down movement=Spowalnia poruszanie -2×2 saplings required=Wymagane . -2×2 saplings @= large tree=Sadzonki 2×2 @= duże drzewo. -Grows on sand or dirt next to water=Rośnie na piasku bądź ziemi obok wody. -Stackable=Możliwe grupowanie diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.ru.tr b/mods/ITEMS/mcl_core/locale/mcl_core.ru.tr deleted file mode 100644 index 2d5b5462c..000000000 --- a/mods/ITEMS/mcl_core/locale/mcl_core.ru.tr +++ /dev/null @@ -1,258 +0,0 @@ -# textdomain: mcl_core -@1 could not survive in lava.=@1 не смог(ла) выжить в лаве. -@1 died in lava.=@1 погиб(ла) в лаве. -@1 melted in lava.=@1 расплавился(лась) в лаве. -@1 took a bath in a hot lava tub.=@1 принял(а) ванну с горячей лавой. -A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=Алмазный блок это, прежде всего, декоративный блок, но он также удобен для компактного хранения алмазов. -A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=Изумрудный блок это, прежде всего, декоративный блок, но он также удобен для компактного хранения изумрудов. -A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=Золотой блок это, прежде всего, декоративный блок, но он также удобен для компактного хранения золотых слитков. -A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=Алмазный блок это, прежде всего, декоративный блок, но он также удобен для компактного хранения железных слитков. -A cactus can only be placed on top of another cactus or any sand.=Кактус можно поставить только на верхушку другого кактуса или на любой песок. -A decorative and mostly transparent block.=Декоративный и преимущественно прозрачный блок. -A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=Травяной блок это грязь, покрытая травой. Травяные блоки удобны тем, что позволяют выращивать любые сорта растений. Их можно превратить в грядки при помощи мотыги или в тропинки при помощи лопаты. При наличии света трава понемногу распространяется на грязь по соседству. Под непрозрачным блоком или жидкостью травяной блок может превратиться обратно в грязь. -A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=Ляпис-лазурный блок это, прежде всего, декоративный блок, но он также удобен для компактного хранения ляпис-лазури. -A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=Источник лавы поджигает пару воздушных блоков над ним, если они расположены рядом с легковоспламенимым блоком. -A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=Сегмент лестницы, позволяющий вам карабкаться вертикально. Лестницы можно устанавливать только на стороны твёрдых блоков. Их нельзя разместить на стекле, листьях, льду, светящемся камне и морских фонарях. -Acacia Bark=Кора акации -Acacia Leaves=Листва акации -Acacia Sapling=Саженец акации -Acacia Wood=Акация -Acacia Wood Planks=Доски акации -Acacia leaves are grown from acacia trees.=Листва акации произрастает на деревьях акации. -Andesite=Андезит -Andesite is an igneous rock.=Андезит это камень вулканической природы. -Apple=Яблоко -Apples are food items which can be eaten.=Яблоки относятся к продуктовым предметам, которые можно есть. -Barrier=Барьер -Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=Барьеры это невидимые блоки-препятствия. Они могут использоваться, например, для создания границ карты. Монстры и животные не будут появляться на барьерах. Заборы с барьерами визуально не связываются. Другие блоки могут строиться на барьерах, как на любых других блоках. -Bedrock=Бедрок -Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=Бедрок это очень твёрдый камень. Его невозможно сломать, выкопать или сдвинуть обычным способом, за исключением творческого режима. -Birch Bark=Кора берёзы -Birch Leaves=Листва берёзы -Birch Sapling=Саженец берёзы -Birch Wood=Берёза -Birch Wood Planks=Берёзовые доски -Birch leaves are grown from birch trees.=Листва берёзы произрастает на берёзах. -Black Stained Glass=Чёрное витражное стекло -Block of Coal=Угольный блок -Block of Diamond=Алмазный блок -Block of Emerald=Изумрудный блок -Block of Gold=Золотой блок -Block of Iron=Железный блок -Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=Угольный блок удобен для компактного хранения угля, а также как топливо для печи. -Blue Stained Glass=Синее витражное стекло -Bone Block=Костный блок -Bone blocks are decorative blocks and a compact storage of bone meal.=Костные блоки это декоративные блоки, а также способ компактного хранения костной муки. -Bowl=Чаша -Bowls are mainly used to hold tasty soups.=Чаши чаще всего используются для хранения вкусных супов. -Brick=Кирпич -Brick Block=Кирпичный блок -Brick blocks are a good building material for building solid houses and can take quite a punch.=Кирпичные блоки это отличный строительный материал для создания прочных домов, они выдерживают довольно сильные удары. -Bricks are used to craft brick blocks.=Кирпичи используются для создания кирпичных блоков. -Brown Stained Glass=Коричневое витражное стекло -Cactus=Кактус -Charcoal=Древесный уголь -Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=Древесный уголь это альтернативное печное топливо, получаемое путём сжигания дерева в качестве ингредиента в печи. Оно имеет такую же длительность горения, как и каменный уголь, но из него нельзя сделать угольные блоки. -Chiseled Stone Bricks=Точёный каменный блок -Chiseled Red Sandstone=Точёный красный камень -Chiseled Sandstone=Точёный песчаник -Chiseled red sandstone is a decorative building block.=Точёный красный камень это декоративный строительный блок. -Chiseled sandstone is a decorative building block.=Точёный песчаник это декоративный строительный блок. -Clay=Глина -Clay Ball=Глиняный шарик -Clay balls are a raw material, mainly used to create bricks in the furnace.=Глиняные шарики это необработанный материал, в основном используемый для создания кирпичей при помощи печи. -Clay is a versatile kind of earth commonly found at beaches underwater.=Глина это универсальный тип почвы, часто встречающийся под водой возле отмелей. -Coal=Уголь -Coal Ore=Угольная руда -Coarse Dirt=Твёрдая грязь -Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=Твёрдая грязь равносильна почве для некоторых растений и похожа на обычную грязь, но на ней не растёт трава. -Cobblestone=Булыжник -Cobweb=Паутина -Cobwebs can be walked through, but significantly slow you down.=Паутину можно пройти насквозь, но она ощутимо снижает вашу скорость. -Cracked Stone Bricks=Треснутые каменные блоки -Cut Red Sandstone=Резной красный камень -Cut Sandstone=Резной песчаник -Cut red sandstone is a decorative building block.=Резной красный камень это декоративный строительный блок. -Cut sandstone is a decorative building block.=Резной песчаник это декоративный строительный блок. -Cyan Stained Glass=Голубое витражное стекло -Dark Oak Bark=Кора тёмного дуба -Dark Oak Leaves=Листва тёмного дуба -Dark Oak Sapling=Саженец тёмного дуба -Dark Oak Wood=Тёмный дуб -Dark Oak Wood Planks=Доски из тёмного дуба -Dark oak leaves are grown from dark oak trees.=Листва тёмного дуба произрастает на деревьях тёмного дуба. -Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=Из саженцев тёмного дуба могут вырастать деревья, но для этого надо высаживать их группами. Одинокие саженцы не будут расти. Группа из четырёх саженцев станет деревом через некоторое время после высадки на освещённый участок почвы (или грязи) в виде квадрата 2*2. -Dead Bush=Мёртвый куст -Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=Мёртвые кусты это непримечательные растения, часто встречающиеся в засушливых областях. Их можно собирать, чтобы сделать из них палки. -Diamond=Алмаз -Diamond Ore=Алмазная руда -Diamond ore is rare and can be found in clusters near the bottom of the world.=Алмазная руда встречается редко, в виде скоплений около дна мира. -Diamonds are precious minerals and useful to create the highest tier of armor and tools.=Алмазы это драгоценные камни, используемые для создания брони и инструментов высшего качества. -Diorite=Диорит -Diorite is an igneous rock.=Диорит это камень вулканической природы. -Dirt=Грязь -Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=Грязь то же самое, что почва для некоторых растений. Под освещением на этом блоке может прорасти трава или мицелий, если такие блоки уже есть поблизости. -Emerald=Изумруд -Emerald Ore=Изумрудная руда -Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Изумрудная руда встречается очень редко и всегда по одному блоку. -Emeralds are used in villager trades as currency.= -Flint=Кремень -Flint is a raw material.=Кремень это необработанный материал. -Flowing Lava=Текущая лава -Flowing Water=Текущая вода -Frosted Ice=Намёрзший лёд -Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=Намёрзший лёд это быстро исчезающий твёрдый блок. Он за несколько секунд тает, превращаясь в источник воды. -Glass=Стекло -Gold Ingot=Золотой слиток -Gold Nugget=Золотой самородок -Gold Ore=Золотая руда -Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Золотые самородки это мелкие частички чистого золота, которые можно объединять в золотые слитки. -Golden Apple=Золотое яблоко -Golden apples are precious food items which can be eaten.=Золотые яблоки это изысканные продуктовые предметы, которые можно есть. -Granite=Гранит -Grass Block=Травяной блок -Grass Path=Тропинка -Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Тропинки это декоративная разновидность травяных блоков. Их верхняя часть окрашена другим цветом, а они сами чуть ниже, чтобы это смотрелось как притоптанная трава. Такие блоки можно создать при помощи лопаты. При помещении под твёрдый блок данные блоки превращаются в грязь. -Gravel=Гравий -Green Stained Glass=Зелёное витражное стекло -Grey Stained Glass=Серое витражное стекло -Ice=Лёд -Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=Лёд это твёрдый блок, обычно встречающийся в холодных областях. Он плавится, когда рядом имеется источник света уровня 12 и выше. Если он плавится или ломается, будучи расположенным на другом блоке, то превращается в источник воды. -In the End dimension, starting a fire on this block will create an eternal fire.=В измерении Предела разжигание огня на этом блоке создаст вечный огонь. -Iron Ingot=Железный слиток -Iron Nugget=Железный самородок -Iron Ore=Железная руда -Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=Железные самородки это маленькие частички чистого железа, которые можно объединять в железные слитки. -Jungle Bark=Кора дерева джунглей -Jungle Leaves=Листва дерева джунглей -Jungle Sapling=Саженец дерева джунглей -Jungle Wood=Дерево джунглей -Jungle Wood Planks=Доски из дерева джунглей -Jungle leaves are grown from jungle trees.=Листва дерева джунглей произрастает на деревьях джунглей. -Ladder=Лестница -Lapis Lazuli Block=Ляпис-лазурный блок -Lapis Lazuli Ore=Ляпис-лазурная руда -Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=Ляпис-лазурная руда это руда ляпис-лазури. Она изредка встречается в виде скоплений вблизи дна мира. -Lava Source=Источник лавы -Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=Лава горячая и довольно опасная. Не прикасайтесь к ней, это причинит сильную боль, и выбраться из неё сложно. -Light Blue Stained Glass=Светло-голубое витражное стекло -Light Grey Stained Glass=Светло-серое витражное стекло -Lime Stained Glass=Зелёное лаймовое витражное стекло -Lit Redstone Ore=Светящаяся руда красного камня -Magenta Stained Glass=Фиолетовое витражное стекло -Molten gold. It is used to craft armor, tools, and whatnot.=Чистое золото. Используется для создания брони, инструментов и чего угодно. -Molten iron. It is used to craft armor, tools, and whatnot.=Чистое железо. Используется для создания брони, инструментов и чего угодно. -Mossy Cobblestone=Мшистый булыжник -Mossy Stone Bricks=Мшистый каменный блок -Mycelium=Мицелий -Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=Мицелий это тип грязи, идеально подходящий для грибов. В отличие от других грязевых блоков, он не может быть превращён в грядку при помощи мотыги. При наличии освещения мицелий медленно распространяется по соседствующей с ним грязи. Под непрозрачным блоком или жидкостью со временем превращается обратно в грязь. -Oak Bark=Кора дуба -Oak Leaves=Листва дуба -Oak Sapling=Саженец дуба -Oak Wood=Дуб -Oak Wood Planks=Дубовые доски -Oak leaves are grown from oak trees.=Листва дуба произрастает на дубовых деревьях. -Obsidian=Обсидиан -Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=Обсидиан это чрезвычайно твёрдый минерал с высочайшей взрывоустойчивостью. -One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=Один из самых обычных блоков мира, почти вся подземная часть состоит из камня. Иногда он содержит руду. Камень может создаться при встрече воды с лавой. -Orange Stained Glass=Оранжевое витражное стекло -Packed Ice=Упакованный лёд -Packed ice is a compressed form of ice. It is opaque and solid.=Упакованный лёд это сжатая форма льда. Он непрозрачный и твёрдый. -Paper=Бумага -Paper is used to craft books and maps.=Бумага используется для создания книг и карт. -Pink Stained Glass=Розовое витражное стекло -Podzol=Подзол -Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Подзол это тип грязи, встречающийся в таёжных лесах. Только несколько растений имеют способность выжить на нём. -Polished Andesite=Гладкий андезит -Polished Diorite=Гладкий диорит -Polished Granite=Гладкий гранит -Polished Stone=Гладкий камень -Polished andesite is a decorative building block made from andesite.=Гладкий андезит это декоративный строительный блок, сделанный из андезита. -Polished diorite is a decorative building block made from diorite.=Гладкий диорит это декоративный строительный блок, сделанный из диорита. -Polished granite is a decorative building block made from granite.=Гладкий гранит это декоративный строительный блок, сделанный из гранита. -Purple Stained Glass=Пурпурное витражное стекло -Realm Barrier=Барьер области -Red Sand=Красный песок -Red Sandstone=Красный песчаник -Red Stained Glass=Красное витражное стекло -Red sand is found in large quantities in mesa biomes.=Красный песок в больших количествах встречается в биомах столовых гор. -Red sandstone is compressed red sand and is a rather soft kind of stone.=Красный песчаник это сжатый красный песок, мягкая разновидность камня. -Redstone Ore=Краснокаменная руда -Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=Краснокаменная руда обычно содержится вблизи дна мира. -Sand=Песок -Sand is found in large quantities at beaches and deserts.=Песок в больших количествах встречается на пляжах и в пустынях. -Sandstone=Песчаник -Sandstone is compressed sand and is a rather soft kind of stone.=Песчаник это сжатый песок, мягкая разновидность камня. -Slime Block=Блок слизи -Slime blocks are very bouncy and prevent fall damage.=Блок слизи очень упруг и спасает от повреждений при падении. -Smooth Red Sandstone=Гладкий красный камень -Smooth Sandstone=Гладкий песчаник -Smooth red sandstone is a decorative building block.=Гладкий красный камень это декоративный строительный блок. -Smooth sandstone is compressed sand and is a rather soft kind of stone.=Гладкий песчаник это сжатый песок, мягкая разновидность камня. -Snow=Снег -Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=Немного угля содержится в камне, это обычное явление, скопления таких блоков встречаются около возвышенностей. -Some iron contained in stone, it is prety common and can be found below sea level.=Немного железа содержится в камне, это довольно обычное явление, такие блоки встречаются ниже уровня моря. -Spruce Bark=Кора ели -Spruce Leaves=Хвоя -Spruce Sapling=Саженец ели -Spruce Wood=Ель -Spruce Wood Planks=Еловые доски -Spruce leaves are grown from spruce trees.=Хвоя растёт на еловых деревьях. -Stained glass is a decorative and mostly transparent block which comes in various different colors.=Витражное стекло это декоративный и в основном прозрачный блок, встречающийся в различных расцветках. -Stick=Палка -Sticks are a very versatile crafting material; used in countless crafting recipes.=Палки это универсальный материал, используемый для создания различных вещей, присутствует во многих рецептах. -Stone=Камень -Stone Bricks=Каменные блоки -Sugar=Сахар -Sugar Canes=Сахарный тростник -Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Сахарный тростник это растение, имеющее некоторое применение в крафтинге. Если тростник находится по соседству с водой на травяном блоке, грязи, красном песке, подзоле или грубой грязи, он будет медленно расти вверх до 3 блоков. Если сломать тростник, все верхние части также сломаются. -Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Сахарный тростник может быть помещён только на верхушку другого сахарного тростника, либо на верхнюю часть другого блока, на котором он может расти. -Sugar comes from sugar canes and is used to make sweet foods.=Сахар добывают из сахарного тростника и используют для приготовления сладких продуктов. -The trunk of a birch tree.=Берёзовый ствол -The trunk of a dark oak tree.=Ствол тёмного дуба -The trunk of a jungle tree.=Ствол дерева джунглей -The trunk of a spruce tree.=Еловый ствол -The trunk of an acacia.=Ствол акации -The trunk of an oak tree.=Дубовый ствол -This block consists of a couple of loose stones and can't support itself.=Этот блок состоит из пары рыхлых камней и не может удержать себя. -This is a decorative block surrounded by the bark of a tree trunk.=Это декоративный блок, окружённый древесной корой. -This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=Это целый блок снега. Снег такой толщины обычно встречается в экстремально холодных зонах. -This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=Это часть кактуса, обычно встречающегося в засушливых областях, особенно в пустынях. Со временем кактусы растут до 3 блоков вверх на песке или красном песке. Кактус колет живых существ, трогающих его, причиняя урон в 1 HP каждые полсекунды. Если сломать кактус, все вышестоящие блоки сломаются также. -This stone contains pure gold, a rare metal.=Этот камень содержит чистое золото, редкий металл. -Top Snow=Наст -Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=Наст это верхний слой снега. Он тает вблизи не солнечных источников света с яркостью уровня 12 и выше. -Vines=Лоза -Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=Лоза это блок, по которому можно карабкаться, он может быть помещён по сторонам твёрдого кубического блока. -Void=Пустота -Water=Вода -Water Source=Источник воды -Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=Вода изобилует в океанах и также встречается в виде ключей под землёй. -When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=После высадки на почву (например, грязь) при наличии света саженец берёзы вырастет в берёзу через некоторое время. -When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=После высадки на почву (например, грязь) при наличии света саженец дерева джунглей вырастет в дерево джунглей через некоторое время. Если высадить 4 саженца по схеме 2*2, вырастет огромное дерево джунглей. -When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=После высадки на почву (например, грязь) при наличии света саженец ели вырастет в ель через некоторое время. Если высадить 4 саженца по схеме 2*2, вырастет огромная ель. -When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=После высадки на почву (например, грязь) при наличии света саженец акации вырастет в акацию через некоторое время. -When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=После высадки на почву (например, грязь) при наличии света саженец дуба вырастет в дуб через некоторое время. -When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=Когда вы держите барьер в руке, вы видите все барьеры, размещённые вокруг вас вблизи. -White Stained Glass=Белое витражное стекло -Yellow Stained Glass=Жёлтое витражное стекло -“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.=“Уголь” относится к угольным кускам, добываемым из угольной руды, которую можно встретить под землёй. Уголь это стандартное печное топливо для вас, но он также нужен, чтобы сделать факелы, угольные блоки и несколько других вещей. -Water interacts with lava in various ways:=Вода взаимодействует с лавой по-разному: -• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• Если вода прямо над источником лавы или соседствует с ним в горизонтальном направлении, лава превращается в обсидиан. -• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• Если текущая вода прикасается к текущей лаве сверху или сбоку, лава превращается в булыжник. -• When water is directly below lava, the water turns into stone.=• Если вода попадает прямо под лаву, эта вода превращается в камень. -Lava interacts with water various ways:=Лава взаимодействует с водой по-разному: -• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• Когда источник лавы прямо под водой, либо вода сбоку от него, лава превращается в обсидиан. -• When lava is directly above water, the water turns into stone.=• Когда лава прямо над водой, вода превращается в камень. -Stained Glass=Витражное стекло -Granite is an igneous rock.=Гранит это камень вулканической природы. -Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=Наст может стыковаться и иметь один из 8 разных уровней высоты. При уровнях 2-8 в снег нельзя провалиться. Верхний снег превращается в 2-9 снежков, в зависимости от его высоты. -This block can only be placed on full solid blocks and on another top snow (which increases its height).=Этот блок можно поместить только на целый твёрдый блок либо на другой наст (что увеличит его высоту). -Needs soil and water to grow=Нуждается в почве и воде, чтобы расти -Needs soil and light to grow=Нуждается в почве и свете, чтобы расти -Grows on sand=Растёт на песке -Contact damage: @1 per half second=Повреждение при контакте: @1 за полсекунды -Slows down movement=Замедляет перемещение -2×2 saplings required=Высаживается по схеме 2*2 -2×2 saplings @= large tree=2*2 саженца @= большое дерево -Grows on sand or dirt next to water=Растёт на песке или грязи рядом с водой -Stackable=Можно состыковать diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.zh_TW.tr b/mods/ITEMS/mcl_core/locale/mcl_core.zh_TW.tr deleted file mode 100644 index 177341846..000000000 --- a/mods/ITEMS/mcl_core/locale/mcl_core.zh_TW.tr +++ /dev/null @@ -1,257 +0,0 @@ -# textdomain: mcl_core -@1 could not survive in lava.=@1試圖在熔岩中游泳 -@1 died in lava.=@1試圖在熔岩中游泳 -@1 melted in lava.=@1試圖在熔岩中游泳 -@1 took a bath in a hot lava tub.=@1試圖在熔岩中游泳 -A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=鑽石磚主要是一種閃亮的裝飾方塊,但也可以作為鑽石的省位存儲方式。 -A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=綠寶石磚主要是一種閃亮的裝飾方塊,但也可以作為綠寶石的省位存儲方式。 -A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=金磚主要是一種閃亮的裝飾方塊,但也可以作為黃金的省位存儲方式。 -A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=鐵磚主要是一種裝飾方塊,但也可以作為鐵的省位存儲方式。 -A cactus can only be placed on top of another cactus or any sand.=仙人掌只可以拜擺放在其他仙人掌或沙上。 -A decorative and mostly transparent block.=一種用於裝飾並且基本上是透明的方塊。 -A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=草方塊是有草覆蓋的泥土。草方塊是重要的方塊,是各種植物生長的基礎。它們可以用鋤頭變成農田,用鐵鍬變成草徑。在光照下,草會慢慢蔓延到附近的泥土上。在不透明的方塊或液體下,草方塊可能會變回泥土。 -A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=青金石磚主要是一種裝飾方塊,但也可以作為青金石的省位存儲方式。 -A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=當熔岩源與易燃方塊相鄰時,會將附近點燃。 -A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=一塊可以讓你垂直攀爬的梯子。梯子只能放在不透明方塊的側面,不能放在玻璃、樹葉、冰塊、石板、螢石、海燈龍等透明方塊上。 -Acacia Leaves=相思木葉 -Acacia Sapling=相思木樹苗 -Acacia Wood=相思木原木 -Acacia Wood Planks=相思木木材 -Acacia leaves are grown from acacia trees.=相思木葉是由相思木樹生長出來的。 -Andesite=安山岩 -Andesite is an igneous rock.=安山岩是一種火成岩。 -Apple=蘋果 -Apples are food items which can be eaten.=蘋果是一種可以被食用的食物 -Barrier=屏障 -Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=屏障是看不見但可行走的方塊。它們通常被用來創建冒險地圖的邊界。怪物和動物不會出現在屏障上,柵欄也不會連接到屏障上。其他方塊可以像在其他方塊上一樣被放置在屏障上。 -Bedrock=基岩 -Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=基岩是一種堅實無比的石頭。除了創造模式的玩家,沒有人可以以正常方式破壞、銷毀、收集或移動它。 -Birch Bark=白樺樹皮 -Birch Leaves=白樺樹葉 -Birch Sapling=白樺樹樹苗 -Birch Wood=白樺樹原木 -Birch Wood Planks=白樺樹木材 -Birch leaves are grown from birch trees.=白樺樹葉是由白樺樹樹生長出來的。 -Black Stained Glass=黑色玻璃 -Block of Coal=煤炭磚 -Block of Diamond=鑽石磚 -Block of Emerald=綠寶石磚 -Block of Gold=金磚 -Block of Iron=鐵磚 -Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=煤炭磚作為煤炭的省位存儲方式,作為熔爐燃料非常有用。一個煤炭磚的燃燒時間相當於10塊煤炭。 -Blue Stained Glass=藍色玻璃 -Bone Block=骨塊 -Bone blocks are decorative blocks and a compact storage of bone meal.=骨粉塊是一個裝飾方塊,也是骨粉的省位存儲方式。 -Bowl=碗 -Bowls are mainly used to hold tasty soups.=碗主要用來盛湯。 -Brick=紅磚頭 -Brick Block=紅磚 -Brick blocks are a good building material for building solid houses and can take quite a punch.=紅磚是一種很好的建築材料,可以用來建造堅固的房屋,並可以承受相當大的壓力。 -Bricks are used to craft brick blocks.=紅磚頭是用來合成紅磚的原料。 -Brown Stained Glass=棕色玻璃 -Cactus=仙人掌 -Charcoal=木炭 -Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=木炭可作爲煤炭的替代,通過在熔爐中烹飪原木而產生的。它的燃燒時間與煤炭相同,也也可用來合成許多煤炭可合成的東西,但它不能用來製作煤炭磚。 -Chiseled Stone Bricks=鏨制石磚 -Chiseled Red Sandstone=鏨制紅砂岩 -Chiseled Sandstone=鏨制砂岩 -Chiseled red sandstone is a decorative building block.=鏨制紅砂岩是一個裝飾方塊。 -Chiseled sandstone is a decorative building block.=鏨制砂岩是一個裝飾方塊。 -Clay=黏土 -Clay Ball=黏土球 -Clay balls are a raw material, mainly used to create bricks in the furnace.=黏土球是一種原料,主要用於製磚。 -Clay is a versatile kind of earth commonly found at beaches underwater.=黏土是一種多功能的土,常見於岸邊。 -Coal=煤炭 -Coal Ore=煤礦 -Coarse Dirt=粗泥 -Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=粗粗泥作為一些植物的土壤,與泥土相似,但它永遠不會長草。 -Cobblestone=鵝卵石 -Cobweb=蜘蛛網 -Cobwebs can be walked through, but significantly slow you down.=蜘蛛網可以穿過,但它會大大降低你的速度。 -Cracked Stone Bricks=裂紋石磚 -Cut Red Sandstone=切製紅砂岩 -Cut Sandstone=切製砂岩 -Cut red sandstone is a decorative building block.=切製紅砂岩是裝飾性的方塊。 -Cut sandstone is a decorative building block.=切製砂岩是裝飾性的方塊。 -Cyan Stained Glass=青色玻璃 -Dark Oak Bark=黑橡木樹皮 -Dark Oak Leaves=黑橡木樹葉 -Dark Oak Sapling=黑橡木樹苗 -Dark Oak Wood=黑橡木原木 -Dark Oak Wood Planks=黑橡木木材 -Dark oak leaves are grown from dark oak trees.=黑橡木樹葉是由黑橡樹生長出來的。 -Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=黑橡木樹苗可以長成黑橡樹,但只能成群生長。單獨的黑橡木樹苗是長不出來的。四棵黑橡木樹苗以2×2的形態放在土壤(如泥土)上,並暴露在光照下,一段時間後就會長成一棵黑橡樹。 -Dead Bush=枯灌木 -Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=枯灌木是一種不起眼的植物,經常在乾旱地區發現。它們可以被收割成木棒。 -Diamond=鑽石 -Diamond Ore=鑽石礦 -Diamond ore is rare and can be found in clusters near the bottom of the world.=鑽石礦非常稀少,可以在接近世界底部的地方找到它們。 -Diamonds are precious minerals and useful to create the highest tier of armor and tools.=鑽石是珍貴的礦物,可用於製造最高等級的裝甲和工具 -Diorite=閃長岩 -Diorite is an igneous rock.=閃長岩是一種火成岩。 -Dirt=泥土 -Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=泥土可以作为一些植物的土壤。在光照下,如果附近有草方塊或菌絲土,草或菌絲可呢會蔓延到這裏。 -Emerald=綠寶石 -Emerald Ore=綠寶石礦 -Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=綠寶石礦是綠寶石的礦石。它非常稀少,只可以單獨出現,不會成堆出現。 -Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting.=綠寶石本身用途不太多,但可以通過合成來得到金錠。 -Flint=燧石 -Flint is a raw material.=燧石是原材料。 -Flowing Lava=流動的熔岩 -Flowing Water=流動的水 -Frosted Ice=霜冰 -Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=霜冰是一種壽命很短的固體方塊。它在幾秒鐘內就會融化,成爲水源。 -Glass=草 -Gold Ingot=金錠 -Gold Nugget=金粒 -Gold Ore=金礦 -Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=金粒是非常小塊的金,主要用來合成金錠。 -Golden Apple=進蘋果 -Golden apples are precious food items which can be eaten.=金蘋果是可以吃的珍貴食品。 -Granite=花崗岩 -Grass Block=草方塊 -Grass Path=草徑 -Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=草徑是草方塊的一種裝飾變種。它們的頂部顏色和草方塊不同,而且它們比草方塊低一些,因此它們對建造人行道很有用。草徑可以用鏟子來創造。當草徑位於不透明方塊下時,它就會變成泥土。 -Gravel=礫石 -Green Stained Glass=綠色玻璃 -Grey Stained Glass=灰色玻璃 -Ice=冰 -Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=冰是一種通常在寒冷地區發現的不透明方塊。它在光照度為12或更高的方塊光源附近會融化。當它融化或被打破時,如果它當時在另一個方塊的頂部,它將變成一個水源。 -In the End dimension, starting a fire on this block will create an eternal fire.=在終界,在此方塊上點火將產生永恆之火。 -Iron Ingot=鐵錠 -Iron Nugget=鐵粒 -Iron Ore=鐵礦 -Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=鐵粒是非常小塊的鐵,主要用來合成鐵錠。 -Jungle Bark=叢林樹皮 -Jungle Leaves=叢林輸葉 -Jungle Sapling=叢林樹苗 -Jungle Wood=叢林原木 -Jungle Wood Planks=叢林木材 -Jungle leaves are grown from jungle trees.=叢林樹葉是由叢林樹生長出來的。 -Ladder=梯子 -Lapis Lazuli Block=青金石磚 -Lapis Lazuli Ore=青金石礦 -Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=青金石礦是青金石的礦石。在世界底部附近能發現成群的和稀有的青金石礦。 -Lava Source=熔岩源 -Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=熔岩很熱並相當危險。不要碰它,它會對你造成很大的傷害,而且很難脫身。 -Light Blue Stained Glass=淺藍色玻璃 -Light Grey Stained Glass=淺灰色玻璃 -Lime Stained Glass=淺綠色玻璃 -Lit Redstone Ore=被點亮的紅石礦 -Magenta Stained Glass=洋紅色玻璃 -Molten gold. It is used to craft armor, tools, and whatnot.=融化的金。用來製作盔甲、工具等等。 -Molten iron. It is used to craft armor, tools, and whatnot.=融化的鐵。用來製作盔甲、工具等等。 -Mossy Cobblestone=青苔鵝卵石 -Mossy Stone Bricks=青苔石磚 -Mycelium=菌絲土 -Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=菌絲是泥土的一種,也是蘑菇的理想土壤。與其他泥土類方塊不同,它不能用鋤頭把它變成農田。在光照之下,菌絲會在附近的泥土上慢慢蔓延。在不透明方塊或液體下,它最終會變回泥土。 -Oak Bark=橡樹皮 -Oak Leaves=橡樹葉 -Oak Sapling=橡樹樹苗 -Oak Wood=橡樹原木 -Oak Wood Planks=橡樹木材 -Oak leaves are grown from oak trees.=橡樹樹葉是由橡樹生長出來的。 -Obsidian=黑曜石 -Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=黑曜石是一種極其堅硬的礦物,具有極強的抗爆性。黑曜石是由水與熔岩源相遇而形成的。 -One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=世界上最常見的方塊之一,幾乎整個地下都由石頭組成。它有時也包含礦石。當水與流動的熔岩相遇時,可能會產生石頭。 -Orange Stained Glass=橙色玻璃 -Packed Ice=冰磚 -Packed ice is a compressed form of ice. It is opaque and solid.=冰塊是冰的壓縮形式。它是不透明的固體方塊。 -Paper=紙 -Paper is used to craft books and maps.=紙是用來合成書和地圖的物品。 -Pink Stained Glass=粉紅色玻璃 -Podzol=灰壤 -Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=灰壤是一種在針葉林中發現的泥土。只有少數植物能在上面生存。 -Polished Andesite=拋光安山岩 -Polished Diorite=拋光閃長岩 -Polished Granite=拋光花崗岩 -Polished Stone=拋光石頭 -Polished andesite is a decorative building block made from andesite.=拋光閃長岩是由閃長岩製成的裝飾性方塊。 -Polished diorite is a decorative building block made from diorite.=拋光安山岩是由安山岩製成的裝飾性方塊。 -Polished granite is a decorative building block made from granite.=拋光花崗岩是由花崗岩製成的裝飾性方塊。 -Purple Stained Glass=紫色玻璃 -Realm Barrier=維度分割屏障 -Red Sand=紅沙 -Red Sandstone=紅砂岩 -Red Stained Glass=紅色玻璃 -Red sand is found in large quantities in mesa biomes.=红沙在山地生態域中大量存在。 -Red sandstone is compressed red sand and is a rather soft kind of stone.=紅砂岩是壓縮的紅砂,是一種比較軟的石頭。 -Redstone Ore=紅石礦 -Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=紅石礦可以在距離世界底部比較近的地方生成。它會在受到壓力或被擊打時發光。 -Sand=沙 -Sand is found in large quantities at beaches and deserts.=沙大量存在於海灘和沙漠中。 -Sandstone=砂岩 -Sandstone is compressed sand and is a rather soft kind of stone.=砂岩是壓縮的沙,是一種比較軟的石頭。 -Slime Block=史萊姆方塊 -Slime blocks are very bouncy and prevent fall damage.=史萊姆方塊擁有驚人的彈性,正因如此,它可以防止掉落傷害。 -Smooth Red Sandstone=平滑紅砂岩 -Smooth Sandstone=平滑砂岩 -Smooth red sandstone is a decorative building block.=平滑紅砂岩是一種裝飾性建築材料。 -Smooth sandstone is compressed sand and is a rather soft kind of stone.=平滑砂岩是一種裝飾性建築材料。 -Snow=雪 -Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=煤礦在石頭中非常常見,幾乎在任何高度的石頭中也可以找到中小形的煤礦。 -Some iron contained in stone, it is prety common and can be found below sea level.=鐵礦的稀有度比煤礦小一點,可以在海平面下找到。 -Spruce Bark=杉木樹皮 -Spruce Leaves=杉木樹葉 -Spruce Sapling=杉木樹苗 -Spruce Wood=杉木原木 -Spruce Wood Planks=杉木木材 -Spruce leaves are grown from spruce trees.=杉木樹葉是由杉樹生長出來的。 -Stained glass is a decorative and mostly transparent block which comes in various different colors.=染色玻璃是一種大多是透明的裝飾性方塊,有各種不同的顏色。 -Stick=木棒 -Sticks are a very versatile crafting material; used in countless crafting recipes.=木棒是一種非常通用的製作材料;使用它的合成配方不計其數。 -Stone=石頭 -Stone Bricks=石磚 -Sugar=糖 -Sugar Canes=甘蔗 -Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=甘蔗是一種植物,在合成上有一定的用途。當甘蔗在水旁邊而且放在草塊、泥土、沙子、紅沙、豆莢或粗土上的時候,會慢慢長到3格高。當一根甘蔗被折斷時,上面連接的所有甘蔗也會折斷。 -Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=甘蔗只能放在其他甘蔗或會讓它生長的方塊的上面。 -Sugar comes from sugar canes and is used to make sweet foods.=糖來自甘蔗,用於製作甜食。 -The trunk of a birch tree.=白樺樹的樹幹。 -The trunk of a dark oak tree.=黑橡樹的樹幹。 -The trunk of a jungle tree.=叢林木的樹幹。 -The trunk of a spruce tree.=杉木的樹幹。 -The trunk of an acacia.=相思木的樹幹。 -The trunk of an oak tree.=黑橡木的樹幹。 -This block consists of a couple of loose stones and can't support itself.=這塊石頭由一些鬆散的石頭組成,無法支撐自己。 -This is a decorative block surrounded by the bark of a tree trunk.=這是一個由樹皮包圍的裝飾方塊。 -This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=這是一整塊的雪。這種厚度的雪通常出現在極寒地區。 -This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=這是一片常見於乾燥地區(尤其是沙漠)的仙人掌。隨著時間的推移,仙人掌會在沙子或紅沙上長到3塊高。當有生物接觸它時,該生物會每半秒受到1HP的傷害。當一個仙​​人掌塊被打破時,它上面連接的所有仙人掌塊也會被打破。 -This stone contains pure gold, a rare metal.=這塊石頭含有一種稀有金屬——純金。 -Top Snow=雪 -Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=頂雪是一層雪。它會在光照度為12或更高的非太陽光源附近融化。 -Vines=藤蔓 -Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=藤蔓是可以攀爬的方塊,可以放在不透明方塊的側面。藤蔓會慢慢生長和蔓延。 -Void=虛空 -Water=水 -Water Source=水源 -Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=水是海洋的主要構成部分,也出現在地下水中。在水中可以輕鬆地游泳,但需要時常透氣。 -When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=將白樺樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成白樺樹。 -When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=將叢林樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成叢林樹。當2×2的正方形裡有4棵叢林樹苗時,它們會長成一棵巨大的叢林樹。 -When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=將杉木樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成杉木樹。當2×2的正方形裡有4棵杉木樹苗時,它們會長成一棵巨大的杉木樹。 -When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=將相思木樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成相思木樹。 -When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=將黑橡木樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成黑橡樹。 -When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=當你手握一個屏障時,你會看到附近所有放置的屏障。 -White Stained Glass=白色玻璃 -Yellow Stained Glass=黃色玻璃 -“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.=「煤」指的是通過挖掘地下可以找到的煤礦而得到的煤塊。煤是標準的燃料,但也可以用來製作火把、煤塊和其他一些東西。 -Water interacts with lava in various ways:=水與熔岩的相互作用如下: -• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• 當水在熔岩源的正上方或水平旁邊時,熔岩就會變成黑曜石。 -• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• 當流水從上方或水平方向接觸到流動的熔岩時,熔岩就會變成鵝卵石。 -• When water is directly below lava, the water turns into stone.=• 當水位於熔岩下時,水就會變成石頭。 -Lava interacts with water various ways:=熔岩與水的相互作用如下: -• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• 當水在熔岩源的正上方或水平旁邊時,熔岩就會變成黑曜石。 -• When lava is directly above water, the water turns into stone.=• 當熔岩位於水上時,水就會變成石頭。 -Stained Glass=染色玻璃 -Granite is an igneous rock.=花崗岩是火成岩。 -Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=雪可以疊加,並有8個不同的高度等級。在2-8級時,頂雪是不可穿過的。雪會根據其高度掉落2-9個雪球。 -This block can only be placed on full solid blocks and on another top snow (which increases its height).=此方塊只能放在完整的不透明方塊上或另一個雪上。如果它被放置在另一個雪上,會增加其高度。 -Needs soil and water to grow=需要泥土和水來生長 -Needs soil and light to grow=需要泥土和光照來生長 -Grows on sand=在沙上生長 -Contact damage: @1 per half second=接触伤害:每半秒@1次 -Slows down movement=減低行走速度 -2×2 saplings required=必須以2×2的形態擺放樹苗 -2×2 saplings @= large tree=以2×2的形態可長成大形樹木 -Grows on sand or dirt next to water=在靠近水的沙或泥土上生長 -Stackable=可堆疊 diff --git a/mods/ITEMS/mcl_core/locale/template.txt b/mods/ITEMS/mcl_core/locale/template.txt deleted file mode 100644 index 19d156711..000000000 --- a/mods/ITEMS/mcl_core/locale/template.txt +++ /dev/null @@ -1,283 +0,0 @@ -# textdomain: mcl_core -@1 could not survive in lava.= -@1 died in lava.= -@1 melted in lava.= -@1 took a bath in a hot lava tub.= -A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.= -A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.= -A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.= -A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.= -A cactus can only be placed on top of another cactus or any sand.= -A decorative and mostly transparent block.= -A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.= -A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.= -A lava source sets fire to a couple of air blocks above when they're next to a flammable block.= -A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.= -Acacia Bark= -Acacia Leaves= -Acacia Sapling= -Acacia Wood= -Acacia Wood Planks= -Acacia leaves are grown from acacia trees.= -Andesite= -Andesite is an igneous rock.= -Apple= -Apples are food items which can be eaten.= -Barrier= -Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.= -Bedrock= -Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.= -Birch Bark= -Birch Leaves= -Birch Sapling= -Birch Wood= -Birch Wood Planks= -Birch leaves are grown from birch trees.= -Black Stained Glass= -Block of Coal= -Block of Diamond= -Block of Emerald= -Block of Gold= -Block of Iron= -Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.= -Blue Stained Glass= -Bone Block= -Bone blocks are decorative blocks and a compact storage of bone meal.= -Bowl= -Bowls are mainly used to hold tasty soups.= -Brick= -Brick Block= -Brick blocks are a good building material for building solid houses and can take quite a punch.= -Bricks are used to craft brick blocks.= -Brown Stained Glass= -Cactus= -Charcoal= -Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.= -Chiseled Stone Bricks= -Chiseled Red Sandstone= -Chiseled Sandstone= -Chiseled red sandstone is a decorative building block.= -Chiseled sandstone is a decorative building block.= -Clay= -Clay Ball= -Clay balls are a raw material, mainly used to create bricks in the furnace.= -Clay is a versatile kind of earth commonly found at beaches underwater.= -Coal= -Coal Ore= -Coarse Dirt= -Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.= -Cobblestone= -Cobweb= -Cobwebs can be walked through, but significantly slow you down.= -Cracked Stone Bricks= -Cut Red Sandstone= -Cut Sandstone= -Cut red sandstone is a decorative building block.= -Cut sandstone is a decorative building block.= -Cyan Stained Glass= -Dark Oak Bark= -Dark Oak Leaves= -Dark Oak Sapling= -Dark Oak Wood= -Dark Oak Wood Planks= -Dark oak leaves are grown from dark oak trees.= -Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.= -Dead Bush= -Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.= -Diamond= -Diamond Ore= -Diamond ore is rare and can be found in clusters near the bottom of the world.= -Diamonds are precious minerals and useful to create the highest tier of armor and tools.= -Diorite= -Diorite is an igneous rock.= -Dirt= -Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.= -Emerald= -Emerald Ore= -Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.= -Emeralds are used in villager trades as currency.= -Flint= -Flint is a raw material.= -Flowing Lava= -Flowing Water= -Frosted Ice= -Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.= -Glass= -Gold Ingot= -Gold Nugget= -Gold Ore= -Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.= -Golden Apple= -Golden apples are precious food items which can be eaten.= -Granite= -Grass Block= -Grass Path= -Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.= -Gravel= -Green Stained Glass= -Grey Stained Glass= -Ice= -Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.= -In the End dimension, starting a fire on this block will create an eternal fire.= -Iron Ingot= -Iron Nugget= -Iron Ore= -Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.= -Jungle Bark= -Jungle Leaves= -Jungle Sapling= -Jungle Wood= -Jungle Wood Planks= -Jungle leaves are grown from jungle trees.= -Ladder= -Lapis Lazuli Block= -Lapis Lazuli Ore= -Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.= -Lava Source= -Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.= -Light Blue Stained Glass= -Light Grey Stained Glass= -Lime Stained Glass= -Lit Redstone Ore= -Magenta Stained Glass= -Molten gold. It is used to craft armor, tools, and whatnot.= -Molten iron. It is used to craft armor, tools, and whatnot.= -Mossy Cobblestone= -Mossy Stone Bricks= -Mycelium= -Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.= -Oak Bark= -Oak Leaves= -Oak Sapling= -Oak Wood= -Oak Wood Planks= -Oak leaves are grown from oak trees.= -Obsidian= -Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.= -One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.= -Orange Stained Glass= -Packed Ice= -Packed ice is a compressed form of ice. It is opaque and solid.= -Paper= -Paper is used to craft books and maps.= -Pink Stained Glass= -Podzol= -Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.= -Polished Andesite= -Polished Diorite= -Polished Granite= -Polished Stone= -Polished andesite is a decorative building block made from andesite.= -Polished diorite is a decorative building block made from diorite.= -Polished granite is a decorative building block made from granite.= -Purple Stained Glass= -Realm Barrier= -Red Sand= -Red Sandstone= -Red Stained Glass= -Red sand is found in large quantities in mesa biomes.= -Red sandstone is compressed red sand and is a rather soft kind of stone.= -Redstone Ore= -Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.= -Sand= -Sand is found in large quantities at beaches and deserts.= -Sandstone= -Sandstone is compressed sand and is a rather soft kind of stone.= -Slime Block= -Slime blocks are very bouncy and prevent fall damage.= -Smooth Red Sandstone= -Smooth Sandstone= -Smooth red sandstone is a decorative building block.= -Smooth sandstone is compressed sand and is a rather soft kind of stone.= -Snow= -Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.= -Some iron contained in stone, it is prety common and can be found below sea level.= -Spruce Bark= -Spruce Leaves= -Spruce Sapling= -Spruce Wood= -Spruce Wood Planks= -Spruce leaves are grown from spruce trees.= -Stained glass is a decorative and mostly transparent block which comes in various different colors.= -Stick= -Sticks are a very versatile crafting material; used in countless crafting recipes.= -Stone= -Stripped Acacia Log= -Stripped Acacia Wood= -Stripped Birch Log= -Stripped Birch Wood= -Stripped Dark Oak Log= -Stripped Dark Oak Wood= -Stripped Jungle Log= -Stripped Jungle Wood= -Stripped Oak Log= -Stripped Oak Wood= -Stripped Spruce Log= -Stripped Spruce Wood= -Stone Bricks= -Sugar= -Sugar Canes= -Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.= -Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.= -Sugar comes from sugar canes and is used to make sweet foods.= -The stripped trunk of an acacia tree.= -The stripped trunk of a birch tree.= -The stripped trunk of a dark oak tree.= -The stripped trunk of a jungle tree.= -The stripped trunk of an oak tree.= -The stripped trunk of a spruce tree.= -The trunk of a birch tree.= -The trunk of a dark oak tree.= -The trunk of a jungle tree.= -The trunk of a spruce tree.= -The trunk of an acacia.= -The trunk of an oak tree.= -The stripped wood of an acacia tree.= -The stripped wood of a birch tree.= -The stripped wood of a dark oak tree.= -The stripped wood of a jungle tree.= -The stripped wood of an oak tree.= -The stripped wood of a spruce tree.= -This block consists of a couple of loose stones and can't support itself.= -This is a decorative block surrounded by the bark of a tree trunk.= -This is a decorative block.= -This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.= -This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.= -This stone contains pure gold, a rare metal.= -Top Snow= -Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.= -Vines= -Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.= -Void= -Water= -Water Source= -Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.= -When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.= -When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.= -When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.= -When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.= -When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.= -When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.= -White Stained Glass= -Yellow Stained Glass= -“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.= -Water interacts with lava in various ways:= -• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.= -• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.= -• When water is directly below lava, the water turns into stone.= -Lava interacts with water various ways:= -• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.= -• When lava is directly above water, the water turns into stone.= -Stained Glass= -Granite is an igneous rock.= -Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.= -This block can only be placed on full solid blocks and on another top snow (which increases its height).= -Needs soil and water to grow= -Needs soil and light to grow= -Grows on sand= -Contact damage: @1 per half second= -Slows down movement= -2×2 saplings required= -2×2 saplings @= large tree= -Grows on sand or dirt next to water= -Stackable= diff --git a/mods/ITEMS/mcl_core/mod.conf b/mods/ITEMS/mcl_core/mod.conf deleted file mode 100644 index 45018df75..000000000 --- a/mods/ITEMS/mcl_core/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_core -description = Core items of MineClone 2: Basic biome blocks (dirt, sand, stones, etc.), derived items, glass, sugar cane, cactus, barrier, mining tools, hand, craftitems, and misc. items which don't really fit anywhere else. -depends = mcl_autogroup, mcl_init, mcl_sounds, mcl_particles, mcl_util, mcl_worlds, doc_items, mcl_enchanting, mcl_colors -optional_depends = doc diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua deleted file mode 100644 index 0e9b53d04..000000000 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ /dev/null @@ -1,1075 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Simple solid cubic nodes, most of them are the ground materials and simple building blocks - -local translucent_ice = minetest.settings:get_bool("mcl_translucent_ice", false) -local ice_drawtype, ice_texture_alpha -if translucent_ice then - ice_drawtype = "glasslike" - ice_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true -else - ice_drawtype = "normal" - ice_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false -end - -mcl_core.fortune_drop_ore = { - discrete_uniform_distribution = true, - min_count = 2, - max_count = 1, - get_chance = function(fortune_level) return 1 - 2 / (fortune_level + 2) end, - multiply = true, -} - -minetest.register_node("mcl_core:stone", { - description = S("Stone"), - _doc_items_longdesc = S("One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava."), - _doc_items_hidden = false, - tiles = {"default_stone.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - drop = "mcl_core:cobble", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, - _mcl_silk_touch_drop = true, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - if awards and awards.unlock and digger and digger:is_player() then - awards.unlock(digger:get_player_name(), "mcl:stoneAge") - end - end, -}) - -minetest.register_node("mcl_core:stone_with_coal", { - description = S("Coal Ore"), - _doc_items_longdesc = S("Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height."), - _doc_items_hidden = false, - tiles = {"mcl_core_coal_ore.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1, xp=1, blast_furnace_smeltable=1}, - drop = "mcl_core:coal_lump", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, -}) - -minetest.register_node("mcl_core:stone_with_iron", { - description = S("Iron Ore"), - _doc_items_longdesc = S("Some iron contained in stone, it is prety common and can be found below sea level."), - tiles = {"mcl_core_iron_ore.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=3, building_block=1, material_stone=1, blast_furnace_smeltable=1}, - drop = "mcl_core:stone_with_iron", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, -}) - - -minetest.register_node("mcl_core:stone_with_gold", { - description = S("Gold Ore"), - _doc_items_longdesc = S("This stone contains pure gold, a rare metal."), - tiles = {"mcl_core_gold_ore.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=4, building_block=1, material_stone=1, blast_furnace_smeltable=1}, - drop = "mcl_core:stone_with_gold", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, -}) - -local redstone_timer = 68.28 -local function redstone_ore_activate(pos) - minetest.swap_node(pos, {name="mcl_core:stone_with_redstone_lit"}) - local t = minetest.get_node_timer(pos) - t:start(redstone_timer) -end -minetest.register_node("mcl_core:stone_with_redstone", { - description = S("Redstone Ore"), - _doc_items_longdesc = S("Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon."), - tiles = {"mcl_core_redstone_ore.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=4, building_block=1, material_stone=1, xp=7, blast_furnace_smeltable=1}, - drop = { - items = { - max_items = 1, - { - items = {"mesecons:redstone 4"}, - rarity = 2, - }, - { - items = {"mesecons:redstone 5"}, - }, - } - }, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_punch = redstone_ore_activate, - on_walk_over = redstone_ore_activate, -- Uses walkover mod - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mesecons:redstone"}, - min_count = 4, - max_count = 5, - } -}) - -local function redstone_ore_reactivate(pos) - local t = minetest.get_node_timer(pos) - t:start(redstone_timer) -end --- Light the redstone ore up when it has been touched -minetest.register_node("mcl_core:stone_with_redstone_lit", { - description = S("Lit Redstone Ore"), - _doc_items_create_entry = false, - tiles = {"mcl_core_redstone_ore.png"}, - paramtype = "light", - light_source = 9, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=4, not_in_creative_inventory=1, material_stone=1, xp=7, blast_furnace_smeltable=1}, - drop = { - items = { - max_items = 1, - { - items = {"mesecons:redstone 4"}, - rarity = 2, - }, - { - items = {"mesecons:redstone 5"}, - }, - } - }, - sounds = mcl_sounds.node_sound_stone_defaults(), - -- Reset timer after re-punching or stepping on - on_punch = redstone_ore_reactivate, - on_walk_over = redstone_ore_reactivate, -- Uses walkover mod - -- Turn back to normal node after some time has passed - on_timer = function(pos, elapsed) - minetest.swap_node(pos, {name="mcl_core:stone_with_redstone"}) - end, - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = {"mcl_core:stone_with_redstone"}, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mesecons:redstone"}, - min_count = 4, - max_count = 5, - } -}) - -minetest.register_node("mcl_core:stone_with_lapis", { - description = S("Lapis Lazuli Ore"), - _doc_items_longdesc = S("Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world."), - tiles = {"mcl_core_lapis_ore.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=3, building_block=1, material_stone=1, xp=6, blast_furnace_smeltable=1}, - drop = { - max_items = 1, - items = { - {items = {"mcl_dye:blue 8"},rarity = 5}, - {items = {"mcl_dye:blue 7"},rarity = 5}, - {items = {"mcl_dye:blue 6"},rarity = 5}, - {items = {"mcl_dye:blue 5"},rarity = 5}, - {items = {"mcl_dye:blue 4"}}, - } - }, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, -}) - -minetest.register_node("mcl_core:stone_with_emerald", { - description = S("Emerald Ore"), - _doc_items_longdesc = S("Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters."), - tiles = {"mcl_core_emerald_ore.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=4, building_block=1, material_stone=1, xp=6, blast_furnace_smeltable=1}, - drop = "mcl_core:emerald", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, -}) - -minetest.register_node("mcl_core:stone_with_diamond", { - description = S("Diamond Ore"), - _doc_items_longdesc = S("Diamond ore is rare and can be found in clusters near the bottom of the world."), - tiles = {"mcl_core_diamond_ore.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=4, building_block=1, material_stone=1, xp=4, blast_furnace_smeltable=1}, - drop = "mcl_core:diamond", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, -}) - -minetest.register_node("mcl_core:stonebrick", { - description = S("Stone Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"default_stone_brick.png"}, - stack_max = 64, - groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:stonebrickcarved", { - description = S("Chiseled Stone Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_core_stonebrick_carved.png"}, - stack_max = 64, - groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:stonebrickcracked", { - description = S("Cracked Stone Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_core_stonebrick_cracked.png"}, - stack_max = 64, - groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:stonebrickmossy", { - description = S("Mossy Stone Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_core_stonebrick_mossy.png"}, - stack_max = 64, - groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:stone_smooth", { - description = S("Polished Stone"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_stairs_stone_slab_top.png"}, - stack_max = 64, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:granite", { - description = S("Granite"), - _doc_items_longdesc = S("Granite is an igneous rock."), - tiles = {"mcl_core_granite.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:granite_smooth", { - description = S("Polished Granite"), - _doc_items_longdesc = S("Polished granite is a decorative building block made from granite."), - tiles = {"mcl_core_granite_smooth.png"}, - stack_max = 64, - is_ground_content = false, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:andesite", { - description = S("Andesite"), - _doc_items_longdesc = S("Andesite is an igneous rock."), - tiles = {"mcl_core_andesite.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:andesite_smooth", { - description = S("Polished Andesite"), - _doc_items_longdesc = S("Polished andesite is a decorative building block made from andesite."), - tiles = {"mcl_core_andesite_smooth.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:diorite", { - description = S("Diorite"), - _doc_items_longdesc = S("Diorite is an igneous rock."), - tiles = {"mcl_core_diorite.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_core:diorite_smooth", { - description = S("Polished Diorite"), - _doc_items_longdesc = S("Polished diorite is a decorative building block made from diorite."), - tiles = {"mcl_core_diorite_smooth.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - --- Grass Block -minetest.register_node("mcl_core:dirt_with_grass", { - description = S("Grass Block"), - _doc_items_longdesc = S("A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt."), - _doc_items_hidden = false, - paramtype2 = "color", - tiles = {"mcl_core_grass_block_top.png", { name="default_dirt.png", color="white" }}, - overlay_tiles = {"mcl_core_grass_block_top.png", "", {name="mcl_core_grass_block_side_overlay.png", tileable_vertical=false}}, - palette = "mcl_core_palette_grass.png", - palette_index = 0, - color = "#8EB971", - is_ground_content = true, - stack_max = 64, - groups = { - handy = 1, shovely = 1, dirt = 2, grass_block = 1, grass_block_no_snow = 1, - soil = 1, soil_sapling = 2, soil_sugarcane = 1, cultivatable = 2, - spreading_dirt_type = 1, enderman_takable = 1, building_block = 1, - compostability = 30, path_creation_possible=1 - }, - drop = "mcl_core:dirt", - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.1}, - }), - on_construct = function(pos) - local node = minetest.get_node(pos) - if node.param2 == 0 then - local new_node = mcl_core.get_grass_block_type(pos) - if new_node.param2 ~= 0 or new_node.name ~= "mcl_core:dirt_with_grass" then - minetest.set_node(pos, new_node) - end - end - return mcl_core.on_snowable_construct(pos) - end, - _mcl_snowed = "mcl_core:dirt_with_grass_snow", - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.6, - _mcl_silk_touch_drop = true, -}) -mcl_core.register_snowed_node("mcl_core:dirt_with_grass_snow", "mcl_core:dirt_with_grass", nil, nil, true, S("Dirt with Snow")) - -minetest.register_node("mcl_core:grass_path", { - tiles = {"mcl_core_grass_path_top.png", "default_dirt.png", "mcl_core_grass_path_side.png"}, - description = S("Grass Path"), - _doc_items_longdesc = S("Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block."), - drop = "mcl_core:dirt", - is_ground_content = true, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - drawtype = "nodebox", - paramtype = "light", - node_box = { - type = "fixed", - fixed = { - -- 15/16 of the normal height - {-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5}, - } - }, - groups = {handy=1,shovely=1, cultivatable=2, dirtifies_below_solid=1, dirtifier=1, deco_block=1 }, - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.1}, - }), - _mcl_blast_resistance = 0.65, - _mcl_hardness = 0.6, -}) - --- TODO: Add particles -minetest.register_node("mcl_core:mycelium", { - description = S("Mycelium"), - _doc_items_longdesc = S("Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt."), - tiles = {"mcl_core_mycelium_top.png", "default_dirt.png", {name="mcl_core_mycelium_side.png", tileable_vertical=false}}, - is_ground_content = true, - stack_max = 64, - groups = { handy = 1, shovely = 1, dirt = 2, spreading_dirt_type = 1, enderman_takable = 1, building_block = 1, soil_sapling = 2, path_creation_possible=1}, - drop = "mcl_core:dirt", - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.1}, - }), - - on_construct = mcl_core.on_snowable_construct, - _mcl_snowed = "mcl_core:mycelium_snow", - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.6, - _mcl_silk_touch_drop = true, -}) -mcl_core.register_snowed_node("mcl_core:mycelium_snow", "mcl_core:mycelium", nil, nil, false, S("Mycelium with Snow")) - -minetest.register_node("mcl_core:podzol", { - description = S("Podzol"), - _doc_items_longdesc = S("Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it."), - tiles = {"mcl_core_dirt_podzol_top.png", "default_dirt.png", {name="mcl_core_dirt_podzol_side.png", tileable_vertical=false}}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,shovely=3, dirt=2,soil=1, soil_sapling=2, soil_sugarcane=1, enderman_takable=1, building_block=1,path_creation_possible=1}, - drop = "mcl_core:dirt", - sounds = mcl_sounds.node_sound_dirt_defaults(), - on_construct = mcl_core.on_snowable_construct, - _mcl_snowed = "mcl_core:podzol_snow", - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.6, - _mcl_silk_touch_drop = true, -}) -mcl_core.register_snowed_node("mcl_core:podzol_snow", "mcl_core:podzol", nil, nil, false, S("Podzol with Snow")) - -minetest.register_node("mcl_core:dirt", { - description = S("Dirt"), - _doc_items_longdesc = S("Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby."), - _doc_items_hidden = false, - tiles = {"default_dirt.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,shovely=1, dirt=1,soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, enderman_takable=1, building_block=1, path_creation_possible=1}, - sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_node("mcl_core:coarse_dirt", { - description = S("Coarse Dirt"), - _doc_items_longdesc = S("Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover."), - tiles = {"mcl_core_coarse_dirt.png"}, - is_ground_content = true, - stack_max = 64, - groups = { handy = 1,shovely = 1, dirt = 3, soil = 1, soil_sugarcane = 1, cultivatable = 1, enderman_takable = 1, building_block = 1, soil_sapling = 2, path_creation_possible=1}, - sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_node("mcl_core:gravel", { - description = S("Gravel"), - _doc_items_longdesc = S("This block consists of a couple of loose stones and can't support itself."), - tiles = {"default_gravel.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,shovely=1, falling_node=1, enderman_takable=1, building_block=1, material_sand=1}, - drop = { - max_items = 1, - items = { - {items = {"mcl_core:flint"},rarity = 10}, - {items = {"mcl_core:gravel"}} - } - }, - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_gravel_footstep", gain=0.45}, - }), - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { - [1] = { - max_items = 1, - items = { - {items = {"mcl_core:flint"},rarity = 7}, - {items = {"mcl_core:gravel"}} - } - }, - [2] = { - max_items = 1, - items = { - {items = {"mcl_core:flint"},rarity = 4}, - {items = {"mcl_core:gravel"}} - } - }, - [3] = "mcl_core:flint", - }, -}) - --- sandstone -- -minetest.register_node("mcl_core:sand", { - description = S("Sand"), - _doc_items_longdesc = S("Sand is found in large quantities at beaches and deserts."), - _doc_items_hidden = false, - tiles = {"default_sand.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,shovely=1, falling_node=1, sand=1, soil_sugarcane=1, enderman_takable=1, building_block=1, material_sand=1}, - sounds = mcl_sounds.node_sound_sand_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_node("mcl_core:sandstone", { - description = S("Sandstone"), - _doc_items_hidden = false, - _doc_items_longdesc = S("Sandstone is compressed sand and is a rather soft kind of stone."), - tiles = {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_normal.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_core:sandstonesmooth", { - description = S("Cut Sandstone"), - _doc_items_longdesc = S("Cut sandstone is a decorative building block."), - tiles = {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_smooth.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_core:sandstonecarved", { - description = S("Chiseled Sandstone"), - _doc_items_longdesc = S("Chiseled sandstone is a decorative building block."), - tiles = {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_carved.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_core:sandstonesmooth2", { - description = S("Smooth Sandstone"), - _doc_items_hidden = false, - _doc_items_longdesc = S("Smooth sandstone is compressed sand and is a rather soft kind of stone."), - tiles = {"mcl_core_sandstone_top.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - --- red sandstone -- - -minetest.register_node("mcl_core:redsand", { - description = S("Red Sand"), - _doc_items_longdesc = S("Red sand is found in large quantities in mesa biomes."), - tiles = {"mcl_core_red_sand.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,shovely=1, falling_node=1, sand=1, soil_sugarcane=1, enderman_takable=1, building_block=1, material_sand=1}, - sounds = mcl_sounds.node_sound_sand_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_node("mcl_core:redsandstone", { - description = S("Red Sandstone"), - _doc_items_longdesc = S("Red sandstone is compressed red sand and is a rather soft kind of stone."), - tiles = {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_normal.png"}, - is_ground_content = true, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_core:redsandstonesmooth", { - description = S("Cut Red Sandstone"), - _doc_items_longdesc = S("Cut red sandstone is a decorative building block."), - tiles = {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_smooth.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_core:redsandstonecarved", { - description = S("Chiseled Red Sandstone"), - _doc_items_longdesc = S("Chiseled red sandstone is a decorative building block."), - tiles = {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_carved.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_core:redsandstonesmooth2", { - description = S("Smooth Red Sandstone"), - _doc_items_longdesc = S("Smooth red sandstone is a decorative building block."), - tiles = {"mcl_core_red_sandstone_top.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - ---- - -minetest.register_node("mcl_core:clay", { - description = S("Clay"), - _doc_items_longdesc = S("Clay is a versatile kind of earth commonly found at beaches underwater."), - _doc_items_hidden = false, - tiles = {"default_clay.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, - drop = "mcl_core:clay_lump 4", - sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, - _mcl_silk_touch_drop = true, -}) - -minetest.register_node("mcl_core:brick_block", { - -- Original name: “Bricks” - description = S("Brick Block"), - _doc_items_longdesc = S("Brick blocks are a good building material for building solid houses and can take quite a punch."), - tiles = {"default_brick.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - - -minetest.register_node("mcl_core:bedrock", { - description = S("Bedrock"), - _doc_items_longdesc = S("Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.").."\n".. - S("In the End dimension, starting a fire on this block will create an eternal fire."), - tiles = {"mcl_core_bedrock.png"}, - stack_max = 64, - groups = {creative_breakable=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - on_blast = function() end, - drop = "", - _mcl_blast_resistance = 3600000, - _mcl_hardness = -1, - - -- Eternal fire on top of bedrock, if in the End dimension - after_destruct = function(pos) - pos.y = pos.y + 1 - if minetest.get_node(pos).name == "mcl_fire:eternal_fire" then - minetest.remove_node(pos) - end - end, - _on_ignite = function(player, pointed_thing) - local pos = pointed_thing.under - local dim = mcl_worlds.pos_to_dimension(pos) - local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} - local fn = minetest.get_node(flame_pos) - local pname = player:get_player_name() - if minetest.is_protected(flame_pos, pname) then - return minetest.record_protection_violation(flame_pos, pname) - end - if dim == "end" and fn.name == "air" and pointed_thing.under.y < pointed_thing.above.y then - minetest.set_node(flame_pos, {name = "mcl_fire:eternal_fire"}) - return true - else - return false - end - end, -}) - -minetest.register_node("mcl_core:cobble", { - description = S("Cobblestone"), - _doc_items_longdesc = doc.sub.items.temp.build, - _doc_items_hidden = false, - tiles = {"default_cobble.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1, cobble=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - -minetest.register_node("mcl_core:mossycobble", { - description = S("Mossy Cobblestone"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"default_mossycobble.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - -minetest.register_node("mcl_core:coalblock", { - description = S("Block of Coal"), - _doc_items_longdesc = S("Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal."), - tiles = {"default_coal_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, flammable=1, building_block=1, material_stone=1, fire_encouragement=5, fire_flammability=5}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_core:ironblock", { - description = S("Block of Iron"), - _doc_items_longdesc = S("A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots."), - tiles = {"default_steel_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=2, building_block=1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_core:goldblock", { - description = S("Block of Gold"), - _doc_items_longdesc = S("A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots."), - tiles = {"default_gold_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=4, building_block=1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_core:diamondblock", { - description = S("Block of Diamond"), - _doc_items_longdesc = S("A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds."), - tiles = {"default_diamond_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=4, building_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_core:lapisblock", { - description = S("Lapis Lazuli Block"), - _doc_items_longdesc = S("A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli."), - tiles = {"mcl_core_lapis_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=3, building_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, -}) - -minetest.register_node("mcl_core:emeraldblock", { - description = S("Block of Emerald"), - _doc_items_longdesc = S("A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds."), - tiles = {"mcl_core_emerald_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=4, building_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_node("mcl_core:obsidian", { - description = S("Obsidian"), - _doc_items_longdesc = S("Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava."), - tiles = {"default_obsidian.png"}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - stack_max = 64, - groups = {pickaxey=5, building_block=1, material_stone=1}, - _mcl_blast_resistance = 1200, - _mcl_hardness = 50, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - if awards and awards.unlock and digger and digger:is_player() then - awards.unlock(digger:get_player_name(), "mcl:obsidian") - end - end, -}) - -minetest.register_node("mcl_core:ice", { - description = S("Ice"), - _doc_items_longdesc = S("Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source."), - drawtype = ice_drawtype, - tiles = {"default_ice.png"}, - is_ground_content = true, - paramtype = "light", - use_texture_alpha = ice_texture_alpha, - stack_max = 64, - groups = {handy=1,pickaxey=1, slippery=3, building_block=1, ice=1}, - drop = "", - sounds = mcl_sounds.node_sound_glass_defaults(), - node_dig_prediction = "mcl_core:water_source", - after_dig_node = function(pos, oldnode) - mcl_core.melt_ice(pos) - end, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - _mcl_silk_touch_drop = true, -}) - -minetest.register_node("mcl_core:packed_ice", { - description = S("Packed Ice"), - _doc_items_longdesc = S("Packed ice is a compressed form of ice. It is opaque and solid."), - tiles = {"mcl_core_ice_packed.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,pickaxey=1, slippery=3, building_block=1, ice=1}, - drop = "", - sounds = mcl_sounds.node_sound_glass_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - _mcl_silk_touch_drop = true, -}) - --- Frosted Ice (4 nodes) -for i=0,3 do - local ice = {} - function ice.increase_age(pos, ice_near, first_melt) - -- Increase age of frosted age or turn to water source if too old - local nn = minetest.get_node(pos).name - local age = tonumber(string.sub(nn, -1)) - local dim = mcl_worlds.pos_to_dimension(pos) - if age == nil then return end - if age < 3 then - minetest.swap_node(pos, { name = "mcl_core:frosted_ice_"..(age+1) }) - else - if dim ~= "nether" then - minetest.set_node(pos, { name = "mcl_core:water_source" }) - else - minetest.remove_node(pos) - end - end - -- Spread aging to neighbor blocks, but not recursively - if first_melt and i == 3 then - for j=1, #ice_near do - ice.increase_age(ice_near[j], false) - end - end - end - local use_doc = i == 0 - local longdesc - if use_doc then - longdesc = S("Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.") - end - minetest.register_node("mcl_core:frosted_ice_"..i, { - description = S("Frosted Ice"), - _doc_items_create_entry = use_doc, - _doc_items_longdesc = longdesc, - drawtype = ice_drawtype, - tiles = {"mcl_core_frosted_ice_"..i..".png"}, - is_ground_content = false, - paramtype = "light", - use_texture_alpha = ice_texture_alpha, - stack_max = 64, - groups = {handy=1, frosted_ice=1, slippery=3, not_in_creative_inventory=1, ice=1}, - drop = "", - sounds = mcl_sounds.node_sound_glass_defaults(), - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(1.5) - end, - on_timer = function(pos, elapsed) - local ice_near = minetest.find_nodes_in_area( - { x = pos.x - 1, y = pos.y - 1, z = pos.z - 1 }, - { x = pos.x + 1, y = pos.y + 1, z = pos.z + 1 }, - { "group:frosted_ice" } - ) - -- Check condition to increase age - if (#ice_near < 4 and minetest.get_node_light(pos) > (11 - i)) or math.random(1, 3) == 1 then - ice.increase_age(pos, ice_near, true) - end - local timer = minetest.get_node_timer(pos) - timer:start(1.5) - end, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - -- Add entry aliases for the Help - if minetest.get_modpath("doc") and i > 0 then - doc.add_entry_alias("nodes", "mcl_core:frosted_ice_0", "nodes", "mcl_core:frosted_ice_"..i) - end -end - -for i=1,8 do - local id, desc, longdesc, usagehelp, tt_help, help, walkable, drawtype, node_box - if i == 1 then - id = "mcl_core:snow" - desc = S("Top Snow") - tt_help = S("Stackable") - longdesc = S("Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.").."\n"..S("Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.") - usagehelp = S("This block can only be placed on full solid blocks and on another top snow (which increases its height).") - walkable = false - else - id = "mcl_core:snow_"..i - help = false - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_core:snow", "nodes", id) - end - walkable = true - end - if i ~= 8 then - drawtype = "nodebox" - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.5 + (2*i)/16, 0.5 }, - } - end - local function on_place(itemstack, placer, pointed_thing) - -- Placement is only allowed on top of solid blocks - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - local def = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] - local above = pointed_thing.above - local under = pointed_thing.under - local unode = minetest.get_node(under) - - -- Check special rightclick action of pointed node - if def and def.on_rightclick then - if not placer:get_player_control().sneak then - return def.on_rightclick(under, unode, placer, itemstack, - pointed_thing) or itemstack, false - end - end - - -- Get position where snow would be placed - local target - if minetest.registered_nodes[unode.name].buildable_to then - target = under - else - target = above - end - local tnode = minetest.get_node(target) - - -- Stack snow - local g = minetest.get_item_group(tnode.name, "top_snow") - if g > 0 then - local itemstring = itemstack:get_name() - local itemcount = itemstack:get_count() - local fakestack = ItemStack(itemstring.." "..itemcount) - fakestack:set_name("mcl_core:snow_"..math.min(8, (i+g))) - itemstack = minetest.item_place(fakestack, placer, pointed_thing) - minetest.sound_play(mcl_sounds.node_sound_snow_defaults().place, {pos = pointed_thing.under}, true) - itemstack:set_name(itemstring) - return itemstack - end - - -- Place snow normally - local below = {x=target.x, y=target.y-1, z=target.z} - local bnode = minetest.get_node(below) - - if minetest.get_item_group(bnode.name, "solid") == 1 then - minetest.sound_play(mcl_sounds.node_sound_snow_defaults().place, {pos = below}, true) - return minetest.item_place_node(itemstack, placer, pointed_thing) - else - return itemstack - end - end - - minetest.register_node(id, { - description = desc, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _doc_items_create_entry = help, - _doc_items_hidden = false, - tiles = {"default_snow.png"}, - wield_image = "default_snow.png", - wield_scale = { x=1, y=1, z=i }, - is_ground_content = true, - paramtype = "light", - sunlight_propagates = true, - buildable_to = true, - node_placement_prediction = "", -- to prevent client flickering when stacking snow - drawtype = drawtype, - stack_max = 64, - walkable = walkable, - floodable = true, - on_flood = function(pos, oldnode, newnode) - local npos = {x=pos.x, y=pos.y-1, z=pos.z} - local node = minetest.get_node(npos) - mcl_core.clear_snow_dirt(npos, node) - end, - node_box = node_box, - groups = {shovely=1, attached_node=1,deco_block=1, dig_by_piston=1, snow_cover=1, top_snow=i}, - sounds = mcl_sounds.node_sound_snow_defaults(), - on_construct = mcl_core.on_snow_construct, - on_place = on_place, - after_destruct = mcl_core.after_snow_destruct, - drop = "mcl_throwing:snowball "..(i+1), - _mcl_blast_resistance = 0.1, - _mcl_hardness = 0.1, - _mcl_silk_touch_drop = {"mcl_core:snow " .. i}, - }) -end - -minetest.register_node("mcl_core:snowblock", { - description = S("Snow"), - _doc_items_longdesc = S("This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold."), - _doc_items_hidden = false, - tiles = {"default_snow.png"}, - is_ground_content = true, - stack_max = 64, - groups = {shovely=1, building_block=1, snow_cover=1}, - sounds = mcl_sounds.node_sound_snow_defaults(), - on_construct = mcl_core.on_snow_construct, - after_destruct = mcl_core.after_snow_destruct, - drop = "mcl_throwing:snowball 4", - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, - _mcl_silk_touch_drop = true, -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_core:stone_with_redstone", "nodes", "mcl_core:stone_with_redstone_lit") - doc.add_entry_alias("nodes", "mcl_core:water_source", "nodes", "mcl_core:water_flowing") - doc.add_entry_alias("nodes", "mcl_core:lava_source", "nodes", "mcl_core:lava_flowing") -end diff --git a/mods/ITEMS/mcl_core/nodes_cactuscane.lua b/mods/ITEMS/mcl_core/nodes_cactuscane.lua deleted file mode 100644 index 62d5cc2b5..000000000 --- a/mods/ITEMS/mcl_core/nodes_cactuscane.lua +++ /dev/null @@ -1,138 +0,0 @@ --- Cactus and Sugar Cane - -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_node("mcl_core:cactus", { - description = S("Cactus"), - _tt_help = S("Grows on sand").."\n"..minetest.colorize(mcl_colors.YELLOW, S("Contact damage: @1 per half second", 1)), - _doc_items_longdesc = S("This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well."), - _doc_items_usagehelp = S("A cactus can only be placed on top of another cactus or any sand."), - drawtype = "nodebox", - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - tiles = {"mcl_core_cactus_top.png", "mcl_core_cactus_bottom.png", "mcl_core_cactus_side.png"}, - is_ground_content = true, - stack_max = 64, - groups = { - handy = 1, attached_node = 1, deco_block = 1, dig_by_piston = 1, - plant = 1, enderman_takable = 1, compostability = 50 - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - paramtype = "light", - sunlight_propagates = true, - node_placement_prediction = "", - node_box = { - type = "fixed", - fixed = { - {-7/16, -8/16, -7/16, 7/16, 8/16, 7/16}, -- Main body - {-8/16, -8/16, -7/16, 8/16, 8/16, -7/16}, -- Spikes - {-8/16, -8/16, 7/16, 8/16, 8/16, 7/16}, -- Spikes - {-7/16, -8/16, -8/16, -7/16, 8/16, 8/16}, -- Spikes - {7/16, -8/16, 8/16, 7/16, 8/16, -8/16}, -- Spikes - }, - }, - collision_box = { - type = "fixed", - fixed = {-7/16, -8/16, -7/16, 7/16, 7/16, 7/16}, -- Main body. slightly lower than node box - }, - selection_box = { - type = "fixed", - fixed = { - {-7/16, -8/16, -7/16, 7/16, 8/16, 7/16}, - }, - }, - -- Only allow to place cactus on sand or cactus - on_place = mcl_util.generate_on_place_plant_function(function(pos, node) - local node_below = minetest.get_node_or_nil({x=pos.x,y=pos.y-1,z=pos.z}) - if not node_below then return false end - return (node_below.name == "mcl_core:cactus" or minetest.get_item_group(node_below.name, "sand") == 1) - end), - _mcl_blast_resistance = 0.4, - _mcl_hardness = 0.4, -}) - -minetest.register_node("mcl_core:reeds", { - description = S("Sugar Canes"), - _tt_help = S("Grows on sand or dirt next to water"), - _doc_items_longdesc = S("Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well."), - _doc_items_usagehelp = S("Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow."), - drawtype = "plantlike", - paramtype2 = "color", - tiles = {"mcl_core_papyrus.png"}, - palette = "mcl_core_palette_grass.png", - palette_index = 0, - inventory_image = "mcl_core_reeds.png", - wield_image = "mcl_core_reeds.png", - paramtype = "light", - walkable = false, - is_ground_content = true, - node_box = { - type = "fixed", - fixed = { - {-7/16, -8/16, -7/16, 7/16, 8/16, 7/16}, -- Main Body - {-8/16, -8/16, -7/16, 8/16, 8/16, -7/16}, -- Spikes - {-8/16, -8/16, 7/16, 8/16, 8/16, 7/16}, -- Spikes - {-7/16, -8/16, -8/16, -7/16, 8/16, 8/16}, -- Spikes - {7/16, -8/16, 8/16, 7/16, 8/16, -8/16}, -- Spikes - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - }, - stack_max = 64, - groups = { - dig_immediate = 3, craftitem = 1, deco_block = 1, dig_by_piston = 1, - plant = 1, non_mycelium_plant = 1, compostability = 50 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - node_placement_prediction = "", - drop = "mcl_core:reeds", -- to prevent color inheritation - on_place = mcl_util.generate_on_place_plant_function(function(place_pos, place_node) - local soil_pos = {x=place_pos.x, y=place_pos.y-1, z=place_pos.z} - local soil_node = minetest.get_node_or_nil(soil_pos) - if not soil_node then return false end - local snn = soil_node.name -- soil node name - - -- Placement rules: - -- * On top of group:soil_sugarcane AND next to water or frosted ice. OR - -- * On top of sugar canes - -- * Not inside liquid - if snn == "mcl_core:reeds" then - return true - elseif minetest.get_item_group(snn, "soil_sugarcane") == 0 then - return false - end - local place_node = minetest.get_node(place_pos) - local pdef = minetest.registered_nodes[place_node.name] - if pdef and pdef.liquidtype ~= "none" then - return false - end - - -- Legal water position rules are the same as for decoration spawn_by rules. - -- This differs from MC, which does not allow diagonal neighbors - -- and neighbors 1 layer above. - local np1 = {x=soil_pos.x-1, y=soil_pos.y, z=soil_pos.z-1} - local np2 = {x=soil_pos.x+1, y=soil_pos.y+1, z=soil_pos.z+1} - if #minetest.find_nodes_in_area(np1, np2, {"group:water", "group:frosted_ice"}) > 0 then - -- Water found! Sugar canes are happy! :-) - return true - end - - -- No water found! Sugar canes are not amuzed and refuses to be placed. :-( - return false - - end), - on_construct = function(pos) - local node = minetest.get_node(pos) - if node.param2 == 0 then - node.param2 = mcl_core.get_grass_palette_index(pos) - if node.param2 ~= 0 then - minetest.set_node(pos, node) - end - end - end, - _mcl_blast_resistance = 0, - _mcl_hardness = 0, -}) diff --git a/mods/ITEMS/mcl_core/nodes_climb.lua b/mods/ITEMS/mcl_core/nodes_climb.lua deleted file mode 100644 index 1a6780618..000000000 --- a/mods/ITEMS/mcl_core/nodes_climb.lua +++ /dev/null @@ -1,173 +0,0 @@ --- Climbable nodes -local S = minetest.get_translator(minetest.get_current_modname()) - -local function rotate_climbable(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - local r = screwdriver.rotate.wallmounted(pos, node, mode) - node.param2 = r - minetest.swap_node(pos, node) - return true - end - return false -end - -minetest.register_node("mcl_core:ladder", { - description = S("Ladder"), - _doc_items_longdesc = S("A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns."), - drawtype = "signlike", - is_ground_content = false, - tiles = {"default_ladder.png"}, - inventory_image = "default_ladder.png", - wield_image = "default_ladder.png", - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "wallmounted", - walkable = true, - climbable = true, - node_box = { - type = "wallmounted", - wall_side = { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 }, - }, - selection_box = { - type = "wallmounted", - wall_side = { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 }, - }, - stack_max = 64, - groups = {handy=1,axey=1, attached_node=1, deco_block=1, dig_by_piston=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - node_placement_prediction = "", - -- Restrict placement of ladders - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then - return itemstack - end - local groups = def.groups - - -- Don't allow to place the ladder at particular nodes - if (groups and (groups.glass or groups.leaves or groups.slab)) or - node.name == "mcl_core:ladder" or node.name == "mcl_core:ice" or node.name == "mcl_nether:glowstone" or node.name == "mcl_ocean:sea_lantern" then - return itemstack - end - - -- Check special rightclick action of pointed node - if def and def.on_rightclick then - if not placer:get_player_control().sneak then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack, false - end - end - local above = pointed_thing.above - - -- Ladders may not be placed on ceiling or floor - if under.y ~= above.y then - return itemstack - end - local idef = itemstack:get_definition() - local success = minetest.item_place_node(itemstack, placer, pointed_thing) - - if success then - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true) - end - end - return itemstack - end, - - _mcl_blast_resistance = 0.4, - _mcl_hardness = 0.4, - on_rotate = rotate_climbable, -}) - - -minetest.register_node("mcl_core:vine", { - description = S("Vines"), - _doc_items_longdesc = S("Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread."), - drawtype = "signlike", - tiles = {"mcl_core_vine.png"}, - inventory_image = "mcl_core_vine.png", - wield_image = "mcl_core_vine.png", - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "wallmounted", - walkable = false, - climbable = true, - buildable_to = true, - selection_box = { - type = "wallmounted", - }, - stack_max = 64, - groups = { - handy = 1, axey = 1, shearsy = 1, swordy = 1, deco_block = 1, - dig_by_piston = 1, destroy_by_lava_flow = 1, compostability = 50, - flammable = 2, fire_encouragement = 15, fire_flammability = 100 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - drop = "", - _mcl_shears_drop = true, - node_placement_prediction = "", - -- Restrict placement of vines - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return itemstack end - - -- Check special rightclick action of pointed node - if def and def.on_rightclick then - if not placer:get_player_control().sneak then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack, false - end - end - - -- Only place on full cubes - if not mcl_core.supports_vines(node.name) then - return itemstack - end - - local above = pointed_thing.above - - -- Vines may not be placed on top or below another block - if under.y ~= above.y then - return itemstack - end - local idef = itemstack:get_definition() - local itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing) - - if success then - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true) - end - end - return itemstack - end, - - -- If dug, also dig a “dependant” vine below it. - -- A vine is dependant if it hangs from this node and has no supporting block. - on_dig = function(pos, node, digger) - local below = {x=pos.x, y=pos.y-1, z=pos.z} - local belownode = minetest.get_node(below) - minetest.node_dig(pos, node, digger) - if belownode.name == node.name and (not mcl_core.check_vines_supported(below, belownode)) then - minetest.registered_nodes[node.name].on_dig(below, node, digger) - end - end, - - - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, - on_rotate = false, -}) diff --git a/mods/ITEMS/mcl_core/nodes_glass.lua b/mods/ITEMS/mcl_core/nodes_glass.lua deleted file mode 100644 index 8b3aea689..000000000 --- a/mods/ITEMS/mcl_core/nodes_glass.lua +++ /dev/null @@ -1,91 +0,0 @@ --- Glass nodes -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - -minetest.register_node("mcl_core:glass", { - description = S("Glass"), - _doc_items_longdesc = S("A decorative and mostly transparent block."), - drawtype = "glasslike_framed_optional", - is_ground_content = false, - tiles = {"default_glass.png", "default_glass_detail.png"}, - paramtype = "light", - paramtype2 = "glasslikeliquidlevel", - sunlight_propagates = true, - stack_max = 64, - groups = {handy=1, glass=1, building_block=1, material_glass=1}, - sounds = mcl_sounds.node_sound_glass_defaults(), - drop = "", - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, - _mcl_silk_touch_drop = true, -}) - ------------------------- --- Create Color Glass -- ------------------------- -local canonical_color = "yellow" -function mcl_core.add_stained_glass(desc, recipeitem, colorgroup, color) - - local longdesc, create_entry, entry_name - if mod_doc then - if color == canonical_color then - longdesc = S("Stained glass is a decorative and mostly transparent block which comes in various different colors.") - entry_name = S("Stained Glass") - else - create_entry = false - end - end - minetest.register_node("mcl_core:glass_"..color, { - description = desc, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - drawtype = "glasslike_framed_optional", - is_ground_content = false, - tiles = {"mcl_core_glass_"..color..".png", "mcl_core_glass_"..color.."_detail.png"}, - paramtype = "light", - paramtype2 = "glasslikeliquidlevel", - sunlight_propagates = true, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - stack_max = 64, - -- TODO: Add color to groups - groups = {handy=1, glass=1, building_block=1, material_glass=1}, - sounds = mcl_sounds.node_sound_glass_defaults(), - drop = "", - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, - _mcl_silk_touch_drop = true, - }) - - minetest.register_craft({ - output = "mcl_core:glass_"..color.." 8", - recipe = { - {"mcl_core:glass","mcl_core:glass","mcl_core:glass"}, - {"mcl_core:glass",recipeitem,"mcl_core:glass"}, - {"mcl_core:glass","mcl_core:glass","mcl_core:glass"}, - } - }) - - if mod_doc and color ~= canonical_color then - doc.add_entry_alias("nodes", "mcl_core:glass_"..canonical_color, "nodes", "mcl_core:glass_"..color) - end - -end - ----- colored glass -mcl_core.add_stained_glass( S("Red Stained Glass"), "mcl_dye:red", "basecolor_red", "red") -mcl_core.add_stained_glass( S("Green Stained Glass"), "mcl_dye:dark_green", "unicolor_dark_green", "green") -mcl_core.add_stained_glass( S("Blue Stained Glass"), "mcl_dye:blue", "basecolor_blue", "blue") -mcl_core.add_stained_glass( S("Light Blue Stained Glass"), "mcl_dye:lightblue", "unicolor_light_blue", "light_blue") -mcl_core.add_stained_glass( S("Black Stained Glass"), "mcl_dye:black", "basecolor_black", "black") -mcl_core.add_stained_glass( S("White Stained Glass"), "mcl_dye:white", "basecolor_white", "white") -mcl_core.add_stained_glass( S("Yellow Stained Glass"), "mcl_dye:yellow", "basecolor_yellow", "yellow") -mcl_core.add_stained_glass( S("Brown Stained Glass"), "mcl_dye:brown", "unicolor_dark_orange", "brown") -mcl_core.add_stained_glass( S("Orange Stained Glass"), "mcl_dye:orange", "excolor_orange", "orange") -mcl_core.add_stained_glass( S("Pink Stained Glass"), "mcl_dye:pink", "unicolor_light_red", "pink") -mcl_core.add_stained_glass( S("Grey Stained Glass"), "mcl_dye:dark_grey", "unicolor_darkgrey", "gray") -mcl_core.add_stained_glass( S("Lime Stained Glass"), "mcl_dye:green", "basecolor_green", "lime") -mcl_core.add_stained_glass( S("Light Grey Stained Glass"), "mcl_dye:grey", "basecolor_grey", "silver") -mcl_core.add_stained_glass( S("Magenta Stained Glass"), "mcl_dye:magenta", "basecolor_magenta", "magenta") -mcl_core.add_stained_glass( S("Purple Stained Glass"), "mcl_dye:violet", "excolor_violet", "purple") -mcl_core.add_stained_glass( S("Cyan Stained Glass"), "mcl_dye:cyan", "basecolor_cyan", "cyan") diff --git a/mods/ITEMS/mcl_core/nodes_liquid.lua b/mods/ITEMS/mcl_core/nodes_liquid.lua deleted file mode 100644 index 0e0f71a11..000000000 --- a/mods/ITEMS/mcl_core/nodes_liquid.lua +++ /dev/null @@ -1,245 +0,0 @@ --- Liquids: Water and lava - -local S = minetest.get_translator(minetest.get_current_modname()) - -local vector = vector -local math = math - ---local WATER_ALPHA = 179 -local WATER_VISC = 1 -local LAVA_VISC = 7 -local LIGHT_LAVA = minetest.LIGHT_MAX -local USE_TEXTURE_ALPHA = true - -if minetest.features.use_texture_alpha_string_modes then - USE_TEXTURE_ALPHA = "blend" -end - -minetest.register_node("mcl_core:water_flowing", { - description = S("Flowing Water"), - _doc_items_create_entry = false, - wield_image = "default_water_flowing_animated.png^[verticalframe:64:0", - drawtype = "flowingliquid", - tiles = {"default_water_flowing_animated.png^[verticalframe:64:0"}, - special_tiles = { - { - image="default_water_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0} - }, - { - image="default_water_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0} - }, - }, - sounds = mcl_sounds.node_sound_water_defaults(), - is_ground_content = false, - use_texture_alpha = USE_TEXTURE_ALPHA, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 4, - liquidtype = "flowing", - liquid_alternative_flowing = "mcl_core:water_flowing", - liquid_alternative_source = "mcl_core:water_source", - liquid_viscosity = WATER_VISC, - liquid_range = 7, - post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C}, - groups = { water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, freezes=1, melt_around=1, dig_by_piston=1}, - _mcl_blast_resistance = 100, - -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode - _mcl_hardness = -1, -}) - -minetest.register_node("mcl_core:water_source", { - description = S("Water Source"), - _doc_items_entry_name = S("Water"), - _doc_items_longdesc = -S("Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.").."\n\n".. -S("Water interacts with lava in various ways:").."\n".. -S("• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.").."\n".. -S("• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.").."\n".. -S("• When water is directly below lava, the water turns into stone."), - _doc_items_hidden = false, - drawtype = "liquid", - tiles = { - {name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}} - }, - special_tiles = { - -- New-style water source material (mostly unused) - { - name="default_water_source_animated.png", - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}, - backface_culling = false, - } - }, - sounds = mcl_sounds.node_sound_water_defaults(), - is_ground_content = false, - use_texture_alpha = USE_TEXTURE_ALPHA, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 4, - liquidtype = "source", - liquid_alternative_flowing = "mcl_core:water_flowing", - liquid_alternative_source = "mcl_core:water_source", - liquid_viscosity = WATER_VISC, - liquid_range = 7, - post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C}, - stack_max = 64, - groups = { water=3, liquid=3, puts_out_fire=1, freezes=1, not_in_creative_inventory=1, dig_by_piston=1}, - _mcl_blast_resistance = 100, - -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode - _mcl_hardness = -1, -}) - -minetest.register_node("mcl_core:lava_flowing", { - description = S("Flowing Lava"), - _doc_items_create_entry = false, - wield_image = "default_lava_flowing_animated.png^[verticalframe:64:0", - drawtype = "flowingliquid", - tiles = {"default_lava_flowing_animated.png^[verticalframe:64:0"}, - special_tiles = { - { - image="default_lava_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=6.6} - }, - { - image="default_lava_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=6.6} - }, - }, - paramtype = "light", - paramtype2 = "flowingliquid", - light_source = LIGHT_LAVA, - is_ground_content = false, - sounds = mcl_sounds.node_sound_lava_defaults(), - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - --[[ Drowning in Minecraft deals 2 damage per second. - In Minetest, drowning damage is dealt every 2 seconds so this - translates to 4 drowning damage ]] - drowning = 4, - liquidtype = "flowing", - liquid_alternative_flowing = "mcl_core:lava_flowing", - liquid_alternative_source = "mcl_core:lava_source", - liquid_viscosity = LAVA_VISC, - liquid_renewable = false, - liquid_range = 3, - damage_per_second = 4*2, - post_effect_color = {a=245, r=208, g=73, b=10}, - groups = { lava=3, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1, set_on_fire=15}, - _mcl_blast_resistance = 100, - -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode - _mcl_hardness = -1, -}) - -local fire_text -local fire_enabled = minetest.settings:get_bool("enable_fire", true) -if fire_enabled then - fire_text = S("A lava source sets fire to a couple of air blocks above when they're next to a flammable block.") -else - fire_text = "" -end - -minetest.register_node("mcl_core:lava_source", { - description = S("Lava Source"), - _doc_items_entry_name = "Lava", - _doc_items_longdesc = -S("Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.").."\n".. -fire_text.."\n\n".. -S("Lava interacts with water various ways:").."\n".. -S("• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.").."\n".. -S("• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.").."\n".. -S("• When lava is directly above water, the water turns into stone."), - drawtype = "liquid", - tiles = { - {name="default_lava_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}} - }, - special_tiles = { - -- New-style lava source material (mostly unused) - { - name="default_lava_source_animated.png", - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}, - backface_culling = false, - } - }, - paramtype = "light", - light_source = LIGHT_LAVA, - is_ground_content = false, - sounds = mcl_sounds.node_sound_lava_defaults(), - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 4, - liquidtype = "source", - liquid_alternative_flowing = "mcl_core:lava_flowing", - liquid_alternative_source = "mcl_core:lava_source", - liquid_viscosity = LAVA_VISC, - liquid_renewable = false, - liquid_range = 3, - damage_per_second = 4*2, - post_effect_color = {a=245, r=208, g=73, b=10}, - stack_max = 64, - groups = { lava=3, lava_source=1, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1, set_on_fire=15, fire_damage=1}, - _mcl_blast_resistance = 100, - -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode - _mcl_hardness = -1, -}) - -local function emit_lava_particle(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "lava_source") == 0 then - return - end - local ppos = vector.add(pos, { x = math.random(-7, 7)/16, y = 0.45, z = math.random(-7, 7)/16}) - --local spos = vector.add(ppos, { x = 0, y = -0.2, z = 0 }) - local vel = { x = math.random(-3, 3)/10, y = math.random(4, 7), z = math.random(-3, 3)/10 } - local acc = { x = 0, y = -9.81, z = 0 } - -- Lava droplet - minetest.add_particle({ - pos = ppos, - velocity = vel, - acceleration = acc, - expirationtime = 2.5, - collisiondetection = true, - collision_removal = true, - size = math.random(20, 30)/10, - texture = "mcl_particles_lava.png", - glow = LIGHT_LAVA, - }) -end - -if minetest.settings:get("mcl_node_particles") == "full" then - minetest.register_abm({ - label = "Lava particles", - nodenames = {"group:lava_source"}, - interval = 8.0, - chance = 20, - action = function(pos, node) - local apos = {x=pos.x, y=pos.y+1, z=pos.z} - local anode = minetest.get_node(apos) - -- Only emit partiles when directly below lava - if anode.name ~= "air" then - return - end - - minetest.after(math.random(0, 800)*0.01, emit_lava_particle, pos) - end, - }) -end diff --git a/mods/ITEMS/mcl_core/nodes_misc.lua b/mods/ITEMS/mcl_core/nodes_misc.lua deleted file mode 100644 index 5f5b005e2..000000000 --- a/mods/ITEMS/mcl_core/nodes_misc.lua +++ /dev/null @@ -1,277 +0,0 @@ --- Other nodes -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_screwdriver = minetest.get_modpath("screwdriver") - -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - -local alldirs = {{x=0,y=0,z=1}, {x=1,y=0,z=0}, {x=0,y=0,z=-1}, {x=-1,y=0,z=0}, {x=0,y=-1,z=0}, {x=0,y=1,z=0}} - -minetest.register_node("mcl_core:bone_block", { - description = S("Bone Block"), - _doc_items_longdesc = S("Bone blocks are decorative blocks and a compact storage of bone meal."), - tiles = {"mcl_core_bone_block_top.png", "mcl_core_bone_block_top.png", "mcl_core_bone_block_side.png"}, - is_ground_content = false, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, -}) - -minetest.register_node("mcl_core:slimeblock", { - description = S("Slime Block"), - _doc_items_longdesc = S("Slime blocks are very bouncy and prevent fall damage."), - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = { - {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, - {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, - } - }, - selection_box = { - type = "regular", - }, - tiles = {"mcl_core_slime.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - stack_max = 64, - -- According to Minecraft Wiki, bouncing off a slime block from a height off 255 blocks should result in a bounce height of 50 blocks - -- bouncy=44 makes the player bounce up to 49.6. This value was chosen by experiment. - -- bouncy=80 was chosen because it is higher than 66 (bounciness of bed) - groups = {dig_immediate=3, bouncy=80,fall_damage_add_percent=-100,deco_block=1}, - sounds = { - dug = {name="slimenodes_dug", gain=0.6}, - place = {name="slimenodes_place", gain=0.6}, - footstep = {name="slimenodes_step", gain=0.3}, - }, - _mcl_blast_resistance = 0, - _mcl_hardness = 0, - mvps_sticky = function(pos, node, piston_pos) - local connected = {} - for n, v in ipairs(alldirs) do - local neighbor_pos = vector.add(pos, v) - local neighbor_node = minetest.get_node(neighbor_pos) - if neighbor_node then - if neighbor_node.name == "ignore" then - minetest.get_voxel_manip():read_from_map(neighbor_pos, neighbor_pos) - neighbor_node = minetest.get_node(neighbor_pos) - end - local name = neighbor_node.name - if name ~= "air" and name ~= "ignore" and not mesecon.mvps_unsticky[name] then - local piston, piston_side, piston_up, piston_down = false, false, false, false - if name == "mesecons_pistons:piston_sticky_off" or name == "mesecons_pistons:piston_normal_off" then - piston, piston_side = true, true - elseif name == "mesecons_pistons:piston_up_sticky_off" or name == "mesecons_pistons:piston_up_normal_off" then - piston, piston_up = true, true - elseif name == "mesecons_pistons:piston_down_sticky_off" or name == "mesecons_pistons:piston_down_normal_off" then - piston, piston_down = true, true - end - if not( (piston_side and (n-1==neighbor_node.param2)) or (piston_up and (n==5)) or (piston_down and (n==6)) ) then - if piston and piston_pos then - if piston_pos.x == neighbor_pos.x and piston_pos.y == neighbor_pos.y and piston_pos.z == neighbor_pos.z then - -- Loopback to the same piston! Preventing unwanted behavior: - return {}, true - end - end - table.insert(connected, neighbor_pos) - end - end - end - end - return connected, false - end, - -}) - -minetest.register_node("mcl_core:cobweb", { - description = S("Cobweb"), - _tt_help = S("Slows down movement"), - _doc_items_longdesc = S("Cobwebs can be walked through, but significantly slow you down."), - drawtype = "plantlike", - paramtype2 = "degrotate", - visual_scale = 1.1, - stack_max = 64, - tiles = {"mcl_core_web.png"}, - inventory_image = "mcl_core_web.png", - paramtype = "light", - liquid_viscosity = 14, - liquidtype = "source", - liquid_alternative_flowing = "mcl_core:cobweb", - liquid_alternative_source = "mcl_core:cobweb", - liquid_renewable = false, - liquid_range = 0, - walkable = false, - groups = {swordy_cobweb=1, shearsy_cobweb=1, fake_liquid=1, disable_jump=1, deco_block=1, dig_by_piston=1, dig_by_water=1,destroy_by_lava_flow=1,}, - drop = "mcl_mobitems:string", - _mcl_shears_drop = true, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 4, - _mcl_hardness = 4, -}) - - -minetest.register_node("mcl_core:deadbush", { - description = S("Dead Bush"), - _doc_items_longdesc = S("Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks."), - _doc_items_hidden = false, - drawtype = "plantlike", - waving = 1, - visual_scale = 1.0, - tiles = {"default_dry_shrub.png"}, - inventory_image = "default_dry_shrub.png", - wield_image = "default_dry_shrub.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - stack_max = 64, - buildable_to = true, - groups = {handy=1,shearsy=1, flammable=3,attached_node=1,plant=1,non_mycelium_plant=1,dig_by_water=1,destroy_by_lava_flow=1,deco_block=1, fire_encouragement=60, fire_flammability=100}, - drop = { - max_items = 1, - items = { - { - items = {"mcl_core:stick 2"}, - rarity = 2, - }, - { - items = {"mcl_core:stick 1"}, - rarity = 2, - }, - } - }, - _mcl_shears_drop = true, - sounds = mcl_sounds.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 1/16, 5/16}, - }, - _mcl_blast_resistance = 0, - _mcl_hardness = 0, -}) - -minetest.register_node("mcl_core:barrier", { - description = S("Barrier"), - _doc_items_longdesc = S("Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block."), - _doc_items_usagehelp = S("When you hold a barrier in hand, you reveal all placed barriers in a short distance around you."), - drawtype = "airlike", - paramtype = "light", - inventory_image = "mcl_core_barrier.png", - wield_image = "mcl_core_barrier.png", - tiles = { "blank.png" }, - stack_max = 64, - sunlight_propagates = true, - is_ground_content = false, - groups = {creative_breakable=1, not_in_creative_inventory = 1, not_solid = 1 }, - on_blast = function() end, - drop = "", - _mcl_blast_resistance = 36000008, - _mcl_hardness = -1, - after_place_node = function(pos, placer, itemstack, pointed_thing) - if placer == nil then - return - end - minetest.add_particle({ - pos = pos, - expirationtime = 1, - size = 8, - texture = "mcl_core_barrier.png", - glow = 14, - playername = placer:get_player_name() - }) - end, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local name = placer:get_player_name() - local privs = minetest.get_player_privs(name) - if not privs.maphack then - minetest.chat_send_player(name, "Placement denied. You need the “maphack” privilege to place barriers.") - return itemstack - end - local new_itemstack = minetest.item_place(itemstack, placer, pointed_thing) - return new_itemstack - end, -}) - --- Same as barrier, but non-pointable. This node is only to be used internally to separate realms. --- It must NOT be used for anything else. --- This node only exists because Minetest does not have support for “dimensions” yet and needs to --- be removed when support for this is implemented. -minetest.register_node("mcl_core:realm_barrier", { - description = S("Realm Barrier"), - _doc_items_create_entry = false, - drawtype = "airlike", - paramtype = "light", - inventory_image = "mcl_core_barrier.png^[colorize:#FF00FF:127^[transformFX", - wield_image = "mcl_core_barrier.png^[colorize:#FF00FF:127^[transformFX", - tiles = { "blank.png" }, - stack_max = 64, - -- To avoid players getting stuck forever between realms - damage_per_second = 8, - sunlight_propagates = true, - is_ground_content = false, - pointable = false, - groups = {not_in_creative_inventory = 1, not_solid = 1 }, - on_blast = function() end, - drop = "", - _mcl_blast_resistance = 36000008, - _mcl_hardness = -1, - -- Prevent placement to protect player from screwing up the world, because the node is not pointable and hard to get rid of. - node_placement_prediction = "", - on_place = function(pos, placer, itemstack, pointed_thing) - minetest.chat_send_player(placer:get_player_name(), minetest.colorize(mcl_colors.RED, "You can't just place a realm barrier by hand!")) - return - end, -}) - - - - --- The void below the bedrock. Void damage is handled in mcl_playerplus. --- The void does not exist as a block in Minecraft but we register it as a --- block here to make things easier for us. -minetest.register_node("mcl_core:void", { - description = S("Void"), - _doc_items_create_entry = false, - drawtype = "airlike", - paramtype = "light", - pointable = false, - walkable = false, - floodable = false, - buildable_to = false, - inventory_image = "mcl_core_void.png", - wield_image = "mcl_core_void.png", - stack_max = 64, - sunlight_propagates = true, - is_ground_content = false, - groups = { not_in_creative_inventory = 1 }, - on_blast = function() end, - -- Prevent placement to protect player from screwing up the world, because the node is not pointable and hard to get rid of. - node_placement_prediction = "", - on_place = function(pos, placer, itemstack, pointed_thing) - minetest.chat_send_player(placer:get_player_name(), minetest.colorize(mcl_colors.RED, "You can't just place the void by hand!")) - return - end, - drop = "", - -- Infinite blast resistance; it should never be destroyed by explosions - _mcl_blast_resistance = -1, - _mcl_hardness = -1, -}) diff --git a/mods/ITEMS/mcl_core/nodes_trees.lua b/mods/ITEMS/mcl_core/nodes_trees.lua deleted file mode 100644 index 54a43d6bf..000000000 --- a/mods/ITEMS/mcl_core/nodes_trees.lua +++ /dev/null @@ -1,275 +0,0 @@ --- Tree nodes: Wood, Wooden Planks, Sapling, Leaves, Stripped Wood -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_screwdriver = minetest.get_modpath("screwdriver") - -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - --- Register tree trunk (wood) and bark -local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_variant) - minetest.register_node("mcl_core:"..subname, { - description = description_trunk, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - tiles = {tile_inner, tile_inner, tile_bark}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - _mcl_stripped_variant = stripped_variant, - }) - - minetest.register_node("mcl_core:"..subname.."_bark", { - description = description_bark, - _doc_items_longdesc = S("This is a decorative block surrounded by the bark of a tree trunk."), - tiles = {tile_bark}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1,axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = false, - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - _mcl_stripped_variant = stripped_variant.."_bark", - }) - - minetest.register_craft({ - output = "mcl_core:"..subname.."_bark 3", - recipe = { - { "mcl_core:"..subname, "mcl_core:"..subname }, - { "mcl_core:"..subname, "mcl_core:"..subname }, - } - }) -end - --- Register stripped trunk and stripped wood -local function register_stripped_trunk(subname, description_stripped_trunk, description_stripped_bark, longdesc, longdesc_wood, tile_stripped_inner, tile_stripped_bark) - minetest.register_node("mcl_core:"..subname, { - description = description_stripped_trunk, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - tiles = {tile_stripped_inner, tile_stripped_inner, tile_stripped_bark}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - }) - - minetest.register_node("mcl_core:"..subname.."_bark", { - description = description_stripped_bark, - _doc_items_longdesc = longdesc_wood, - tiles = {tile_stripped_bark}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1, axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = false, - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - }) - - minetest.register_craft({ - output = "mcl_core:"..subname.."_bark 3", - recipe = { - { "mcl_core:"..subname, "mcl_core:"..subname }, - { "mcl_core:"..subname, "mcl_core:"..subname }, - } - }) -end - -local function register_wooden_planks(subname, description, tiles) - minetest.register_node("mcl_core:"..subname, { - description = description, - _doc_items_longdesc = doc.sub.items.temp.build, - _doc_items_hidden = false, - tiles = tiles, - stack_max = 64, - is_ground_content = false, - groups = {handy=1,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 2, - }) -end - -local function register_leaves(subname, description, longdesc, tiles, sapling, drop_apples, sapling_chances, leafdecay_distance) - if leafdecay_distance == nil then - leafdecay_distance = 4 - end - local apple_chances = {200, 180, 160, 120, 40} - local stick_chances = {50, 45, 30, 35, 10} - - local function get_drops(fortune_level) - local drop = { - max_items = 1, - items = { - { - items = {sapling}, - rarity = sapling_chances[fortune_level + 1] or sapling_chances[fortune_level] - }, - { - items = {"mcl_core:stick 1"}, - rarity = stick_chances[fortune_level + 1] - }, - { - items = {"mcl_core:stick 2"}, - rarity = stick_chances[fortune_level + 1] - }, - } - } - if drop_apples then - table.insert(drop.items, { - items = {"mcl_core:apple"}, - rarity = apple_chances[fortune_level + 1] - }) - end - return drop - end - - minetest.register_node("mcl_core:"..subname, { - description = description, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - drawtype = "allfaces_optional", - waving = 2, - place_param2 = 1, -- Prevent leafdecay for placed nodes - tiles = tiles, - paramtype = "light", - stack_max = 64, - groups = { - handy = 1, hoey = 1, shearsy = 1, swordy = 1, dig_by_piston = 1, - leaves = 1, leafdecay = leafdecay_distance, deco_block = 1, - flammable = 2, fire_encouragement = 30, fire_flammability = 60, - compostability = 30 - }, - drop = get_drops(0), - _mcl_shears_drop = true, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) }, - }) -end - -local function register_sapling(subname, description, longdesc, tt_help, texture, selbox) - minetest.register_node("mcl_core:"..subname, { - description = description, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - drawtype = "plantlike", - waving = 1, - visual_scale = 1.0, - tiles = {texture}, - inventory_image = texture, - wield_image = texture, - paramtype = "light", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = selbox - }, - stack_max = 64, - groups = { - plant = 1, sapling = 1, non_mycelium_plant = 1, attached_node = 1, - deco_block = 1, dig_immediate = 3, dig_by_water = 1, dig_by_piston = 1, - destroy_by_lava_flow = 1, compostability = 30 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("stage", 0) - end, - on_place = mcl_util.generate_on_place_plant_function(function(pos, node) - local node_below = minetest.get_node_or_nil({x=pos.x,y=pos.y-1,z=pos.z}) - if not node_below then return false end - local nn = node_below.name - return minetest.get_item_group(nn, "grass_block") == 1 or - nn == "mcl_core:podzol" or nn == "mcl_core:podzol_snow" or - nn == "mcl_core:dirt" or nn == "mcl_core:mycelium" or nn == "mcl_core:coarse_dirt" - end), - node_placement_prediction = "", - _mcl_blast_resistance = 0, - _mcl_hardness = 0, - }) -end - ---------------------- - -register_tree_trunk("tree", S("Oak Wood"), S("Oak Bark"), S("The trunk of an oak tree."), "default_tree_top.png", "default_tree.png", "mcl_core:stripped_oak") -register_tree_trunk("darktree", S("Dark Oak Wood"), S("Dark Oak Bark"), S("The trunk of a dark oak tree."), "mcl_core_log_big_oak_top.png", "mcl_core_log_big_oak.png", "mcl_core:stripped_dark_oak") -register_tree_trunk("acaciatree", S("Acacia Wood"), S("Acacia Bark"), S("The trunk of an acacia."), "default_acacia_tree_top.png", "default_acacia_tree.png", "mcl_core:stripped_acacia") -register_tree_trunk("sprucetree", S("Spruce Wood"), S("Spruce Bark"), S("The trunk of a spruce tree."), "mcl_core_log_spruce_top.png", "mcl_core_log_spruce.png", "mcl_core:stripped_spruce") -register_tree_trunk("birchtree", S("Birch Wood"), S("Birch Bark"), S("The trunk of a birch tree."), "mcl_core_log_birch_top.png", "mcl_core_log_birch.png", "mcl_core:stripped_birch") -register_tree_trunk("jungletree", S("Jungle Wood"), S("Jungle Bark"), S("The trunk of a jungle tree."), "default_jungletree_top.png", "default_jungletree.png", "mcl_core:stripped_jungle") - -register_stripped_trunk("stripped_oak", S("Stripped Oak Log"), S("Stripped Oak Wood"), S("The stripped trunk of an oak tree."), S("The stripped wood of an oak tree."), "mcl_core_stripped_oak_top.png", "mcl_core_stripped_oak_side.png") -register_stripped_trunk("stripped_acacia", S("Stripped Acacia Log"), S("Stripped Acacia Wood"), S("The stripped trunk of an acacia tree."), S("The stripped wood of an acacia tree."), "mcl_core_stripped_acacia_top.png", "mcl_core_stripped_acacia_side.png") -register_stripped_trunk("stripped_dark_oak", S("Stripped Dark Oak Log"), S("Stripped Dark Oak Wood"), S("The stripped trunk of a dark oak tree."), S("The stripped wood of a dark oak tree."), "mcl_core_stripped_dark_oak_top.png", "mcl_core_stripped_dark_oak_side.png") -register_stripped_trunk("stripped_birch", S("Stripped Birch Log"), S("Stripped Birch Wood"), S("The stripped trunk of a birch tree."), S("The stripped wood of a birch tree."), "mcl_core_stripped_birch_top.png", "mcl_core_stripped_birch_side.png") -register_stripped_trunk("stripped_spruce", S("Stripped Spruce Log"), S("Stripped Spruce Wood"), S("The stripped trunk of a spruce tree."), S("The stripped wood of a spruce tree."), "mcl_core_stripped_spruce_top.png", "mcl_core_stripped_spruce_side.png") -register_stripped_trunk("stripped_jungle", S("Stripped Jungle Log"), S("Stripped Jungle Wood"), S("The stripped trunk of a jungle tree."), S("The stripped wood of a jungle tree."),"mcl_core_stripped_jungle_top.png", "mcl_core_stripped_jungle_side.png") -register_wooden_planks("wood", S("Oak Wood Planks"), {"default_wood.png"}) -register_wooden_planks("darkwood", S("Dark Oak Wood Planks"), {"mcl_core_planks_big_oak.png"}) -register_wooden_planks("junglewood", S("Jungle Wood Planks"), {"default_junglewood.png"}) -register_wooden_planks("sprucewood", S("Spruce Wood Planks"), {"mcl_core_planks_spruce.png"}) -register_wooden_planks("acaciawood", S("Acacia Wood Planks"), {"default_acacia_wood.png"}) -register_wooden_planks("birchwood", S("Birch Wood Planks"), {"mcl_core_planks_birch.png"}) - - -register_sapling("sapling", S("Oak Sapling"), - S("When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time."), - S("Needs soil and light to grow"), - "default_sapling.png", {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}) -register_sapling("darksapling", S("Dark Oak Sapling"), - S("Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light."), - S("Needs soil and light to grow") .. "\n" .. S("2×2 saplings required"), - "mcl_core_sapling_big_oak.png", {-5/16, -0.5, -5/16, 5/16, 7/16, 5/16}) -register_sapling("junglesapling", S("Jungle Sapling"), - S("When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree."), - S("Needs soil and light to grow") .. "\n" .. S("2×2 saplings = large tree"), - "default_junglesapling.png", {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}) -register_sapling("acaciasapling", S("Acacia Sapling"), - S("When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time."), - S("Needs soil and light to grow"), - "default_acacia_sapling.png", {-5/16, -0.5, -5/16, 5/16, 4/16, 5/16}) -register_sapling("sprucesapling", S("Spruce Sapling"), - S("When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce."), - S("Needs soil and light to grow") .. "\n" .. S("2×2 saplings = large tree"), - "mcl_core_sapling_spruce.png", {-4/16, -0.5, -4/16, 4/16, 0.5, 4/16}) -register_sapling("birchsapling", S("Birch Sapling"), - S("When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time."), - S("Needs soil and light to grow"), - "mcl_core_sapling_birch.png", {-4/16, -0.5, -4/16, 4/16, 0.5, 4/16}) - - -register_leaves("leaves", S("Oak Leaves"), S("Oak leaves are grown from oak trees."), {"default_leaves.png"}, "mcl_core:sapling", true, {20, 16, 12, 10}) -register_leaves("darkleaves", S("Dark Oak Leaves"), S("Dark oak leaves are grown from dark oak trees."), {"mcl_core_leaves_big_oak.png"}, "mcl_core:darksapling", true, {20, 16, 12, 10}) -register_leaves("jungleleaves", S("Jungle Leaves"), S("Jungle leaves are grown from jungle trees."), {"default_jungleleaves.png"}, "mcl_core:junglesapling", false, {40, 26, 32, 24, 10}) -register_leaves("acacialeaves", S("Acacia Leaves"), S("Acacia leaves are grown from acacia trees."), {"default_acacia_leaves.png"}, "mcl_core:acaciasapling", false, {20, 16, 12, 10}) -register_leaves("spruceleaves", S("Spruce Leaves"), S("Spruce leaves are grown from spruce trees."), {"mcl_core_leaves_spruce.png"}, "mcl_core:sprucesapling", false, {20, 16, 12, 10}) -register_leaves("birchleaves", S("Birch Leaves"), S("Birch leaves are grown from birch trees."), {"mcl_core_leaves_birch.png"}, "mcl_core:birchsapling", false, {20, 16, 12, 10}) - - - --- Node aliases - -minetest.register_alias("default:acacia_tree", "mcl_core:acaciatree") -minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves") diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_1.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_1.mts deleted file mode 100644 index 8685bc855..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_1.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_2.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_2.mts deleted file mode 100644 index 2d90ba23b..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_2.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_3.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_3.mts deleted file mode 100644 index 38831c3cf..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_3.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_4.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_4.mts deleted file mode 100644 index d3c98b437..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_4.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_5.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_5.mts deleted file mode 100644 index 8c709f73b..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_5.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_6.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_6.mts deleted file mode 100644 index 8a63cf185..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_6.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_7.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_7.mts deleted file mode 100644 index 2ffc78d4c..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_7.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_weirdo.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_weirdo.mts deleted file mode 100644 index 63b0c35e5..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_acacia_weirdo.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_birch.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_birch.mts deleted file mode 100644 index fc511a094..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_birch.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_birch_tall.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_birch_tall.mts deleted file mode 100644 index 1c39cd2ab..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_birch_tall.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_dark_oak.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_dark_oak.mts deleted file mode 100644 index de1121e60..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_dark_oak.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_bush_oak_leaves.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_bush_oak_leaves.mts deleted file mode 100644 index 894001866..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_bush_oak_leaves.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree.mts deleted file mode 100644 index c015d242d..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree_huge_1.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree_huge_1.mts deleted file mode 100644 index ba4f9fa26..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree_huge_1.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree_huge_2.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree_huge_2.mts deleted file mode 100644 index df0114f6b..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_jungle_tree_huge_2.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_balloon.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_balloon.mts deleted file mode 100644 index bcbd9beaf..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_balloon.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_classic.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_classic.mts deleted file mode 100644 index 295ef93e8..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_classic.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_1.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_1.mts deleted file mode 100644 index 4dc118964..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_1.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_2.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_2.mts deleted file mode 100644 index 8e859e3df..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_2.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_3.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_3.mts deleted file mode 100644 index bddcaefd4..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_3.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_4.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_4.mts deleted file mode 100644 index b1bc17ac1..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_large_4.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_swamp.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_swamp.mts deleted file mode 100644 index 3308dba4a..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_swamp.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_v6.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_oak_v6.mts deleted file mode 100644 index 4c9e09940..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_oak_v6.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_1.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_1.mts deleted file mode 100644 index f16034c18..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_1.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_2.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_2.mts deleted file mode 100644 index 299cee00e..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_2.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_3.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_3.mts deleted file mode 100644 index 9a70debf3..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_3.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_4.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_4.mts deleted file mode 100644 index 95d8e84ac..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_4.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_5.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_5.mts deleted file mode 100644 index bc0512f84..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_5.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_1.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_1.mts deleted file mode 100644 index d78e2fa67..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_1.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_2.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_2.mts deleted file mode 100644 index 2ffb6c6ce..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_2.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_3.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_3.mts deleted file mode 100644 index d3b80b193..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_3.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_4.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_4.mts deleted file mode 100644 index 538b96d67..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_4.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_1.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_1.mts deleted file mode 100644 index 02bf912c3..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_1.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_2.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_2.mts deleted file mode 100644 index fc4b91f2a..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_2.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_3.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_3.mts deleted file mode 100644 index 55a9a5ff4..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_huge_up_3.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_lollipop.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_lollipop.mts deleted file mode 100644 index 46d01e0b9..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_lollipop.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_matchstick.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_matchstick.mts deleted file mode 100644 index 69ac616ae..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_matchstick.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_tall.mts b/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_tall.mts deleted file mode 100644 index ef2190142..000000000 Binary files a/mods/ITEMS/mcl_core/schematics/mcl_core_spruce_tall.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_core/sounds/slimenodes_dug.1.ogg b/mods/ITEMS/mcl_core/sounds/slimenodes_dug.1.ogg deleted file mode 100644 index a8bc4b2e6..000000000 Binary files a/mods/ITEMS/mcl_core/sounds/slimenodes_dug.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_core/sounds/slimenodes_place.1.ogg b/mods/ITEMS/mcl_core/sounds/slimenodes_place.1.ogg deleted file mode 100644 index b766c1e38..000000000 Binary files a/mods/ITEMS/mcl_core/sounds/slimenodes_place.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_core/sounds/slimenodes_step.1.ogg b/mods/ITEMS/mcl_core/sounds/slimenodes_step.1.ogg deleted file mode 100644 index e32996fba..000000000 Binary files a/mods/ITEMS/mcl_core/sounds/slimenodes_step.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_core/sounds/slimenodes_step.2.ogg b/mods/ITEMS/mcl_core/sounds/slimenodes_step.2.ogg deleted file mode 100644 index 6ad28efc1..000000000 Binary files a/mods/ITEMS/mcl_core/sounds/slimenodes_step.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_core/sounds/slimenodes_step.3.ogg b/mods/ITEMS/mcl_core/sounds/slimenodes_step.3.ogg deleted file mode 100644 index 92d6cd367..000000000 Binary files a/mods/ITEMS/mcl_core/sounds/slimenodes_step.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_core/sounds/slimenodes_step.4.ogg b/mods/ITEMS/mcl_core/sounds/slimenodes_step.4.ogg deleted file mode 100644 index 47b9cd68c..000000000 Binary files a/mods/ITEMS/mcl_core/sounds/slimenodes_step.4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_acacia_leaves.png b/mods/ITEMS/mcl_core/textures/default_acacia_leaves.png deleted file mode 100644 index a24e58f16..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_acacia_leaves.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_acacia_sapling.png b/mods/ITEMS/mcl_core/textures/default_acacia_sapling.png deleted file mode 100644 index b708c8098..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_acacia_sapling.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_acacia_tree.png b/mods/ITEMS/mcl_core/textures/default_acacia_tree.png deleted file mode 100644 index 2f62228c9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_acacia_tree.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_acacia_tree_top.png b/mods/ITEMS/mcl_core/textures/default_acacia_tree_top.png deleted file mode 100644 index 471aaa700..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_acacia_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_acacia_wood.png b/mods/ITEMS/mcl_core/textures/default_acacia_wood.png deleted file mode 100644 index 106304997..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_acacia_wood.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_apple.png b/mods/ITEMS/mcl_core/textures/default_apple.png deleted file mode 100644 index 2c376deca..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_apple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_brick.png b/mods/ITEMS/mcl_core/textures/default_brick.png deleted file mode 100644 index 785554395..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_clay.png b/mods/ITEMS/mcl_core/textures/default_clay.png deleted file mode 100644 index 63d2ff18c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_clay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_clay_brick.png b/mods/ITEMS/mcl_core/textures/default_clay_brick.png deleted file mode 100644 index ac1b74497..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_clay_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_clay_lump.png b/mods/ITEMS/mcl_core/textures/default_clay_lump.png deleted file mode 100644 index 6b50f4143..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_clay_lump.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_coal_block.png b/mods/ITEMS/mcl_core/textures/default_coal_block.png deleted file mode 100644 index cf3579499..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_coal_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_coal_lump.png b/mods/ITEMS/mcl_core/textures/default_coal_lump.png deleted file mode 100644 index 55a9ad693..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_coal_lump.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_diamond.png b/mods/ITEMS/mcl_core/textures/default_diamond.png deleted file mode 100644 index 69db99dd1..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_diamond_block.png b/mods/ITEMS/mcl_core/textures/default_diamond_block.png deleted file mode 100644 index df8a33779..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_diamond_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_dirt.png b/mods/ITEMS/mcl_core/textures/default_dirt.png deleted file mode 100644 index e60fa9b3b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_dirt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_dry_grass.png b/mods/ITEMS/mcl_core/textures/default_dry_grass.png deleted file mode 100644 index e610678a6..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_dry_grass.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_dry_grass_side.png b/mods/ITEMS/mcl_core/textures/default_dry_grass_side.png deleted file mode 100644 index b12d06e7b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_dry_grass_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_dry_shrub.png b/mods/ITEMS/mcl_core/textures/default_dry_shrub.png deleted file mode 100644 index e1e84079c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_dry_shrub.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_flint.png b/mods/ITEMS/mcl_core/textures/default_flint.png deleted file mode 100644 index 7c5876b25..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_flint.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_glass.png b/mods/ITEMS/mcl_core/textures/default_glass.png deleted file mode 100644 index adb4bec8a..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_glass.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_glass_detail.png b/mods/ITEMS/mcl_core/textures/default_glass_detail.png deleted file mode 100644 index 6205f84a5..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_glass_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_gold_block.png b/mods/ITEMS/mcl_core/textures/default_gold_block.png deleted file mode 100644 index 8f2b9f51c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_gold_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_gold_ingot.png b/mods/ITEMS/mcl_core/textures/default_gold_ingot.png deleted file mode 100644 index a940ac531..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_gold_ingot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_gravel.png b/mods/ITEMS/mcl_core/textures/default_gravel.png deleted file mode 100644 index 8108db716..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_gravel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_ice.png b/mods/ITEMS/mcl_core/textures/default_ice.png deleted file mode 100644 index e741bccc6..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_ice.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_jungleleaves.png b/mods/ITEMS/mcl_core/textures/default_jungleleaves.png deleted file mode 100644 index d92a6e089..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_jungleleaves.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_junglesapling.png b/mods/ITEMS/mcl_core/textures/default_junglesapling.png deleted file mode 100644 index c66730738..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_junglesapling.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_jungletree.png b/mods/ITEMS/mcl_core/textures/default_jungletree.png deleted file mode 100644 index 54fd0ccbd..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_jungletree.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_jungletree_top.png b/mods/ITEMS/mcl_core/textures/default_jungletree_top.png deleted file mode 100644 index a2fa3a33f..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_jungletree_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_junglewood.png b/mods/ITEMS/mcl_core/textures/default_junglewood.png deleted file mode 100644 index 8f180e005..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_junglewood.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_ladder.png b/mods/ITEMS/mcl_core/textures/default_ladder.png deleted file mode 100644 index e9fc364a9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_ladder.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_lava_flowing_animated.png b/mods/ITEMS/mcl_core/textures/default_lava_flowing_animated.png deleted file mode 100644 index decf3322e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_lava_flowing_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_lava_source_animated.png b/mods/ITEMS/mcl_core/textures/default_lava_source_animated.png deleted file mode 100644 index 1bfec7200..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_lava_source_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_leaves.png b/mods/ITEMS/mcl_core/textures/default_leaves.png deleted file mode 100644 index 7b01275f9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_leaves.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_mossycobble.png b/mods/ITEMS/mcl_core/textures/default_mossycobble.png deleted file mode 100644 index 0cbd5a5ba..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_mossycobble.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_obsidian.png b/mods/ITEMS/mcl_core/textures/default_obsidian.png deleted file mode 100644 index a7f1d8896..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_obsidian.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_paper.png b/mods/ITEMS/mcl_core/textures/default_paper.png deleted file mode 100644 index af90416b5..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_paper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_sand.png b/mods/ITEMS/mcl_core/textures/default_sand.png deleted file mode 100644 index 7fc254aa2..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_sand.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_sapling.png b/mods/ITEMS/mcl_core/textures/default_sapling.png deleted file mode 100644 index 54009cf6a..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_sapling.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_snow.png b/mods/ITEMS/mcl_core/textures/default_snow.png deleted file mode 100644 index 81526cbd9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_snow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_steel_block.png b/mods/ITEMS/mcl_core/textures/default_steel_block.png deleted file mode 100644 index a2e061eca..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_steel_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_steel_ingot.png b/mods/ITEMS/mcl_core/textures/default_steel_ingot.png deleted file mode 100644 index 3cbc81dce..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_steel_ingot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_stick.png b/mods/ITEMS/mcl_core/textures/default_stick.png deleted file mode 100644 index e4a211bc9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_stick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_stone.png b/mods/ITEMS/mcl_core/textures/default_stone.png deleted file mode 100644 index 8831ffb9b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_stone.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_stone_brick.png b/mods/ITEMS/mcl_core/textures/default_stone_brick.png deleted file mode 100644 index 318b91b3d..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_stone_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_tree.png b/mods/ITEMS/mcl_core/textures/default_tree.png deleted file mode 100644 index 1ec7ee20b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_tree.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_tree_top.png b/mods/ITEMS/mcl_core/textures/default_tree_top.png deleted file mode 100644 index 9a781d7e9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_water_flowing_animated.png b/mods/ITEMS/mcl_core/textures/default_water_flowing_animated.png deleted file mode 100644 index 7c2ffaba1..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_water_flowing_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_water_source_animated.png b/mods/ITEMS/mcl_core/textures/default_water_source_animated.png deleted file mode 100644 index 5d4582244..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_water_source_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/default_wood.png b/mods/ITEMS/mcl_core/textures/default_wood.png deleted file mode 100644 index ee97b8d8a..000000000 Binary files a/mods/ITEMS/mcl_core/textures/default_wood.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_andesite.png b/mods/ITEMS/mcl_core/textures/mcl_core_andesite.png deleted file mode 100644 index cdb1fa690..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_andesite.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_andesite_smooth.png b/mods/ITEMS/mcl_core/textures/mcl_core_andesite_smooth.png deleted file mode 100644 index ff082af62..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_andesite_smooth.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_apple_golden.png b/mods/ITEMS/mcl_core/textures/mcl_core_apple_golden.png deleted file mode 100644 index 639afd908..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_apple_golden.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_barrier.png b/mods/ITEMS/mcl_core/textures/mcl_core_barrier.png deleted file mode 100644 index 5a700c5c3..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_barrier.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_bedrock.png b/mods/ITEMS/mcl_core/textures/mcl_core_bedrock.png deleted file mode 100644 index a96b21aca..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_bedrock.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_bone_block_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_bone_block_side.png deleted file mode 100644 index 8e2413527..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_bone_block_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_bone_block_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_bone_block_top.png deleted file mode 100644 index 9fc994cc3..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_bone_block_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_bowl.png b/mods/ITEMS/mcl_core/textures/mcl_core_bowl.png deleted file mode 100644 index 52cde8db2..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_bowl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_cactus_bottom.png b/mods/ITEMS/mcl_core/textures/mcl_core_cactus_bottom.png deleted file mode 100644 index 610a0aec5..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_cactus_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_cactus_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_cactus_side.png deleted file mode 100644 index 1a75eacdf..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_cactus_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_cactus_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_cactus_top.png deleted file mode 100644 index 988ce176f..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_cactus_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_charcoal.png b/mods/ITEMS/mcl_core/textures/mcl_core_charcoal.png deleted file mode 100644 index 9e2ae284e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_charcoal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_coal_ore.png b/mods/ITEMS/mcl_core/textures/mcl_core_coal_ore.png deleted file mode 100644 index 2695ae001..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_coal_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_coarse_dirt.png b/mods/ITEMS/mcl_core/textures/mcl_core_coarse_dirt.png deleted file mode 100644 index a39ccef81..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_coarse_dirt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_diamond_ore.png b/mods/ITEMS/mcl_core/textures/mcl_core_diamond_ore.png deleted file mode 100644 index 9f0ea24b0..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_diamond_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_diorite.png b/mods/ITEMS/mcl_core/textures/mcl_core_diorite.png deleted file mode 100644 index 86c5a890e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_diorite.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_diorite_smooth.png b/mods/ITEMS/mcl_core/textures/mcl_core_diorite_smooth.png deleted file mode 100644 index d7f5452f9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_diorite_smooth.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_dirt_podzol_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_dirt_podzol_side.png deleted file mode 100644 index 0d89941ff..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_dirt_podzol_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_dirt_podzol_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_dirt_podzol_top.png deleted file mode 100644 index 71bee0435..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_dirt_podzol_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_emerald.png b/mods/ITEMS/mcl_core/textures/mcl_core_emerald.png deleted file mode 100644 index 9b3fd263b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_emerald.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_emerald_block.png b/mods/ITEMS/mcl_core/textures/mcl_core_emerald_block.png deleted file mode 100644 index c400a7bc9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_emerald_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_emerald_ore.png b/mods/ITEMS/mcl_core/textures/mcl_core_emerald_ore.png deleted file mode 100644 index 04ebdf482..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_emerald_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_0.png b/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_0.png deleted file mode 100644 index 5b33471d9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_1.png b/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_1.png deleted file mode 100644 index fd3756ebf..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_2.png b/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_2.png deleted file mode 100644 index e90d8dd8f..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_3.png b/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_3.png deleted file mode 100644 index b6b93e88b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_frosted_ice_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_black.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_black.png deleted file mode 100644 index 35a9dbb7d..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_black_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_black_detail.png deleted file mode 100644 index 9dac71149..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_black_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_blue.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_blue.png deleted file mode 100644 index 9e0790a67..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_blue_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_blue_detail.png deleted file mode 100644 index 13d0e83b2..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_blue_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_brown.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_brown.png deleted file mode 100644 index 3f898ef4c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_brown_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_brown_detail.png deleted file mode 100644 index d342045b1..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_brown_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_cyan.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_cyan.png deleted file mode 100644 index 24382900c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_cyan_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_cyan_detail.png deleted file mode 100644 index 6b907f54d..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_cyan_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_gray.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_gray.png deleted file mode 100644 index 70b0a4359..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_gray.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_gray_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_gray_detail.png deleted file mode 100644 index 4dbc15680..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_gray_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_green.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_green.png deleted file mode 100644 index 380333dc5..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_green_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_green_detail.png deleted file mode 100644 index 03b9943f1..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_green_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_light_blue.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_light_blue.png deleted file mode 100644 index eef2edf1f..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_light_blue_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_light_blue_detail.png deleted file mode 100644 index 842441a2c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_light_blue_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_lime.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_lime.png deleted file mode 100644 index dbf7da166..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_lime_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_lime_detail.png deleted file mode 100644 index 8b80407d3..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_lime_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_magenta.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_magenta.png deleted file mode 100644 index 9c7af074e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_magenta_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_magenta_detail.png deleted file mode 100644 index cd2d23458..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_magenta_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_orange.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_orange.png deleted file mode 100644 index 64f931864..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_orange_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_orange_detail.png deleted file mode 100644 index 930992769..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_orange_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_pink.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_pink.png deleted file mode 100644 index 9f666075c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_pink_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_pink_detail.png deleted file mode 100644 index d06f90f6b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_pink_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_purple.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_purple.png deleted file mode 100644 index ea106b29b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_purple.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_purple_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_purple_detail.png deleted file mode 100644 index a5685731f..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_purple_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_red.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_red.png deleted file mode 100644 index 5de6aadc9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_red_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_red_detail.png deleted file mode 100644 index 587fbdbdd..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_red_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_silver.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_silver.png deleted file mode 100644 index 632c318df..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_silver.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_silver_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_silver_detail.png deleted file mode 100644 index 49d444b80..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_silver_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_white.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_white.png deleted file mode 100644 index 84aca6ee0..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_white_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_white_detail.png deleted file mode 100644 index e7e0db92d..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_white_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_yellow.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_yellow.png deleted file mode 100644 index 58c7dacf9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_glass_yellow_detail.png b/mods/ITEMS/mcl_core/textures/mcl_core_glass_yellow_detail.png deleted file mode 100644 index b3fc7c893..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_glass_yellow_detail.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_gold_nugget.png b/mods/ITEMS/mcl_core/textures/mcl_core_gold_nugget.png deleted file mode 100644 index 287cc4691..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_gold_nugget.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_gold_ore.png b/mods/ITEMS/mcl_core/textures/mcl_core_gold_ore.png deleted file mode 100644 index d6e004cb7..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_gold_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_granite.png b/mods/ITEMS/mcl_core/textures/mcl_core_granite.png deleted file mode 100644 index e06aebfde..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_granite.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_granite_smooth.png b/mods/ITEMS/mcl_core/textures/mcl_core_granite_smooth.png deleted file mode 100644 index 003aa8371..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_granite_smooth.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_grass_block_side_overlay.png b/mods/ITEMS/mcl_core/textures/mcl_core_grass_block_side_overlay.png deleted file mode 100644 index a1cc154d9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_grass_block_side_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_grass_path_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_grass_path_side.png deleted file mode 100644 index ac25e45c4..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_grass_path_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_grass_path_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_grass_path_top.png deleted file mode 100644 index 22a7626a1..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_grass_path_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_grass_side_snowed.png b/mods/ITEMS/mcl_core/textures/mcl_core_grass_side_snowed.png deleted file mode 100644 index 9830db7eb..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_grass_side_snowed.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_ice_packed.png b/mods/ITEMS/mcl_core/textures/mcl_core_ice_packed.png deleted file mode 100644 index 7623d45de..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_ice_packed.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_iron_nugget.png b/mods/ITEMS/mcl_core/textures/mcl_core_iron_nugget.png deleted file mode 100644 index bbb89d6a3..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_iron_nugget.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_iron_ore.png b/mods/ITEMS/mcl_core/textures/mcl_core_iron_ore.png deleted file mode 100644 index f83b8303e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_iron_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_lapis_block.png b/mods/ITEMS/mcl_core/textures/mcl_core_lapis_block.png deleted file mode 100644 index 9ccd753e9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_lapis_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_lapis_ore.png b/mods/ITEMS/mcl_core/textures/mcl_core_lapis_ore.png deleted file mode 100644 index f4bc61c8e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_lapis_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_leaves_big_oak.png b/mods/ITEMS/mcl_core/textures/mcl_core_leaves_big_oak.png deleted file mode 100644 index 859d14ac8..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_leaves_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_leaves_birch.png b/mods/ITEMS/mcl_core/textures/mcl_core_leaves_birch.png deleted file mode 100644 index d83adabc7..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_leaves_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_leaves_spruce.png b/mods/ITEMS/mcl_core/textures/mcl_core_leaves_spruce.png deleted file mode 100644 index 1407ff7e3..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_leaves_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_log_big_oak.png b/mods/ITEMS/mcl_core/textures/mcl_core_log_big_oak.png deleted file mode 100644 index 9b7a85ce9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_log_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_log_big_oak_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_log_big_oak_top.png deleted file mode 100644 index d4328c328..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_log_big_oak_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_log_birch.png b/mods/ITEMS/mcl_core/textures/mcl_core_log_birch.png deleted file mode 100644 index b53eb796e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_log_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_log_birch_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_log_birch_top.png deleted file mode 100644 index 51339550a..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_log_birch_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_log_spruce.png b/mods/ITEMS/mcl_core/textures/mcl_core_log_spruce.png deleted file mode 100644 index 3372a36ae..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_log_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_log_spruce_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_log_spruce_top.png deleted file mode 100644 index 965e2e294..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_log_spruce_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_mycelium_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_mycelium_side.png deleted file mode 100644 index 756a92780..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_mycelium_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_mycelium_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_mycelium_top.png deleted file mode 100644 index 6581f19cd..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_mycelium_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_palette_grass.png b/mods/ITEMS/mcl_core/textures/mcl_core_palette_grass.png deleted file mode 100644 index 116d0cb86..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_palette_grass.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_papyrus.png b/mods/ITEMS/mcl_core/textures/mcl_core_papyrus.png deleted file mode 100644 index c928402f9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_papyrus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_planks_big_oak.png b/mods/ITEMS/mcl_core/textures/mcl_core_planks_big_oak.png deleted file mode 100644 index 422e0eb3b..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_planks_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_planks_birch.png b/mods/ITEMS/mcl_core/textures/mcl_core_planks_birch.png deleted file mode 100644 index ab3ae8f7f..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_planks_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_planks_spruce.png b/mods/ITEMS/mcl_core/textures/mcl_core_planks_spruce.png deleted file mode 100644 index 74fc6908c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_planks_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_red_sand.png b/mods/ITEMS/mcl_core/textures/mcl_core_red_sand.png deleted file mode 100644 index 4305cffa2..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_red_sand.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_bottom.png b/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_bottom.png deleted file mode 100644 index f6e6ea499..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_carved.png b/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_carved.png deleted file mode 100644 index fc8b2a09e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_carved.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_normal.png b/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_normal.png deleted file mode 100644 index 446f35cd2..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_normal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_smooth.png b/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_smooth.png deleted file mode 100644 index f6e6ea499..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_smooth.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_top.png deleted file mode 100644 index 807094464..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_red_sandstone_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_redstone_ore.png b/mods/ITEMS/mcl_core/textures/mcl_core_redstone_ore.png deleted file mode 100644 index f26a9cd7f..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_redstone_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_reeds.png b/mods/ITEMS/mcl_core/textures/mcl_core_reeds.png deleted file mode 100644 index e048a779a..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_reeds.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_bottom.png b/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_bottom.png deleted file mode 100644 index 51d4174d4..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_carved.png b/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_carved.png deleted file mode 100644 index bbe724c5e..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_carved.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_normal.png b/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_normal.png deleted file mode 100644 index 5a92d4ccc..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_normal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_smooth.png b/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_smooth.png deleted file mode 100644 index 51d4174d4..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_smooth.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_top.png deleted file mode 100644 index cb3e7aa1c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sandstone_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sapling_big_oak.png b/mods/ITEMS/mcl_core/textures/mcl_core_sapling_big_oak.png deleted file mode 100644 index 1700e5082..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sapling_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sapling_birch.png b/mods/ITEMS/mcl_core/textures/mcl_core_sapling_birch.png deleted file mode 100644 index 864b1b6bb..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sapling_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sapling_spruce.png b/mods/ITEMS/mcl_core/textures/mcl_core_sapling_spruce.png deleted file mode 100644 index 3b6f18b98..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sapling_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_slime.png b/mods/ITEMS/mcl_core/textures/mcl_core_slime.png deleted file mode 100644 index a098a90b0..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_slime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_carved.png b/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_carved.png deleted file mode 100644 index d4891ded2..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_carved.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_cracked.png b/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_cracked.png deleted file mode 100644 index 38fcb1e8c..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_cracked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_mossy.png b/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_mossy.png deleted file mode 100644 index c0d82c50d..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stonebrick_mossy.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_side.png deleted file mode 100644 index 2b57a0863..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_top.png deleted file mode 100644 index bd10499c8..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_side.png deleted file mode 100644 index 5eed80b39..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_top.png deleted file mode 100644 index 69d2e0bfd..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_side.png deleted file mode 100644 index 32a8bfebd..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_top.png deleted file mode 100644 index 48c6da9af..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_side.png deleted file mode 100644 index c65669655..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_top.png deleted file mode 100644 index 028e37eaf..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_side.png deleted file mode 100644 index c37220bb6..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_top.png deleted file mode 100644 index e060862e7..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_side.png deleted file mode 100644 index 55cb4cec3..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_top.png deleted file mode 100644 index ec0dd2da8..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_sugar.png b/mods/ITEMS/mcl_core/textures/mcl_core_sugar.png deleted file mode 100644 index 8d76a0e88..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_sugar.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_vine.png b/mods/ITEMS/mcl_core/textures/mcl_core_vine.png deleted file mode 100644 index 831f9d2a9..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_vine.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_void.png b/mods/ITEMS/mcl_core/textures/mcl_core_void.png deleted file mode 100644 index e0fc66765..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_void.png and /dev/null differ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_web.png b/mods/ITEMS/mcl_core/textures/mcl_core_web.png deleted file mode 100644 index e2233c1b2..000000000 Binary files a/mods/ITEMS/mcl_core/textures/mcl_core_web.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/API.md b/mods/ITEMS/mcl_crafting_table/API.md deleted file mode 100644 index 45aa0c9ce..000000000 --- a/mods/ITEMS/mcl_crafting_table/API.md +++ /dev/null @@ -1,6 +0,0 @@ -# mcl_crafting_table -Add a node which allow players to craft more complex things. - -## mcl_crafting_table.show_crafting_form(player) -Show the crafting form to a player. -Used in the node registration, but can be used by external mods. \ No newline at end of file diff --git a/mods/ITEMS/mcl_crafting_table/init.lua b/mods/ITEMS/mcl_crafting_table/init.lua deleted file mode 100644 index 7f6b9ccc5..000000000 --- a/mods/ITEMS/mcl_crafting_table/init.lua +++ /dev/null @@ -1,70 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local formspec_escape = minetest.formspec_escape -local show_formspec = minetest.show_formspec -local C = minetest.colorize -local text_color = "#313131" -local itemslot_bg = mcl_formspec.get_itemslot_bg - -mcl_crafting_table = {} - -function mcl_crafting_table.show_crafting_form(player) - player:get_inventory():set_width("craft", 3) - player:get_inventory():set_size("craft", 9) - - show_formspec(player:get_player_name(), "main", - "size[9,8.75]".. - "image[4.7,1.5;1.5,1;gui_crafting_arrow.png]".. - "label[0,4;"..formspec_escape(C(text_color, S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - itemslot_bg(0,7.74,9,1).. - "label[1.75,0;"..formspec_escape(C(text_color, S("Crafting"))).."]".. - "list[current_player;craft;1.75,0.5;3,3;]".. - itemslot_bg(1.75,0.5,3,3).. - "list[current_player;craftpreview;6.1,1.5;1,1;]".. - itemslot_bg(6.1,1.5,1,1).. - "image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]".. - "tooltip[__mcl_craftguide;"..formspec_escape(S("Recipe book")).."]".. - "listring[current_player;main]".. - "listring[current_player;craft]" - ) -end - -minetest.register_node("mcl_crafting_table:crafting_table", { - description = S("Crafting Table"), - _tt_help = S("3×3 crafting grid"), - _doc_items_longdesc = S("A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts."), - _doc_items_usagehelp = S("Rightclick the crafting table to access the 3×3 crafting grid."), - _doc_items_hidden = false, - is_ground_content = false, - tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png", - "crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"}, - paramtype2 = "facedir", - groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1}, - on_rightclick = function(pos, node, player, itemstack) - if not player:get_player_control().sneak then - mcl_crafting_table.show_crafting_form(player) - end - end, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, -}) - -minetest.register_craft({ - output = "mcl_crafting_table:crafting_table", - recipe = { - {"group:wood", "group:wood"}, - {"group:wood", "group:wood"} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_crafting_table:crafting_table", - burntime = 15, -}) - -minetest.register_alias("crafting:workbench", "mcl_crafting_table:crafting_table") -minetest.register_alias("mcl_inventory:workbench", "mcl_crafting_table:crafting_table") diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.de.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.de.tr deleted file mode 100644 index 00a9c9cce..000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Werkbank -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Die Werkbank ist ein Block, mit dem Sie Zugriff auf ein 3×3-Fertigungsgitter erhalten, wodurch sie fortgeschrittene Dinge herstellen können. -Rightclick the crafting table to access the 3×3 crafting grid.=Rechtsklicken Sie auf die Werkbank, um auf das 3×3-Fertigungsgitter zuzugreifen. -Recipe book=Fertigungsbuch -Inventory=Inventar -Crafting=Fertigen -3×3 crafting grid=3×3 Fertigungsgitter diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.es.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.es.tr deleted file mode 100644 index 8d560fd5e..000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.es.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Mesa de trabajo -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Una mesa de trabajo es un bloque que le otorga acceso a una cuadrícula de creación 3 × 3 que le permite realizar manualidades avanzadas. -Rightclick the crafting table to access the 3×3 crafting grid.=Haz clic derecho en la mesa de trabajo para acceder a la cuadrícula de creación 3 × 3. -Recipe book=Libro de recetas -Inventory=Inventario -Crafting=Elaboración diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.fr.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.fr.tr deleted file mode 100644 index 23caccff7..000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Etabli -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Un établi est un bloc qui vous donne accès à une grille d'établi 3×3 qui vous permet d'effectuer des objets avancés. -Rightclick the crafting table to access the 3×3 crafting grid.=Faites un clic droit sur l'établi pour accéder à la grille d'établi 3x3. -Recipe book=Livre de Recette -Crafting=Fabriquer -Inventory=Inventaire -3×3 crafting grid=Grille d'établi 3×3 diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr deleted file mode 100644 index aed33bf6c..000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Stół rzemieślniczy -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Stół rzemieślniczy jest blokiem, który daje dostęp do siatki wytwarzania rozmiaru 3×3, co daje dostęp do zaawansowanego wytwarzania. -Rightclick the crafting table to access the 3×3 crafting grid.=Kliknij prawym przyciskiem na stół rzemieślniczy aby zyskać dostęp do siatki wytwarzania rozmiaru 3×3. -Recipe book=Księga receptur -Crafting=Wytwarzanie -Inventory=Ekwipunek -3×3 crafting grid=Siatka wytwarzania 3×3 diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.ru.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.ru.tr deleted file mode 100644 index 1e4eb560f..000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.ru.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Верстак -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Верстак это блок, позволяющий крафтить в решётке 3×3, что позволяет выполнять продвинутый крафтинг. -Rightclick the crafting table to access the 3×3 crafting grid.=Кликните правой для получения доступа к решётке крафтинга 3×3. -Recipe book=Книга рецептов -Crafting=Крафтинг -Inventory=Инвентарь -3×3 crafting grid=Решётка крафтинга 3×3 diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.zh_TW.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.zh_TW.tr deleted file mode 100644 index b393d5a48..000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.zh_TW.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=合成台 -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=合成台是一個塊狀物,可以讓你進入一個3×3的合成網格,讓你進行高級合成。 -Rightclick the crafting table to access the 3×3 crafting grid.=右鍵點擊合成台以進入3×3合成網格。 -Recipe book=合成教學 -Crafting=合成 -Inventory=物品欄 -3×3 crafting grid=3×3合成網格 diff --git a/mods/ITEMS/mcl_crafting_table/locale/template.txt b/mods/ITEMS/mcl_crafting_table/locale/template.txt deleted file mode 100644 index 4563b7340..000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table= -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.= -Rightclick the crafting table to access the 3×3 crafting grid.= -Recipe book= -Crafting= -Inventory= -3×3 crafting grid= diff --git a/mods/ITEMS/mcl_crafting_table/mod.conf b/mods/ITEMS/mcl_crafting_table/mod.conf deleted file mode 100644 index 149d1c982..000000000 --- a/mods/ITEMS/mcl_crafting_table/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_crafting_table -description = Adds a crafting table. -depends = mcl_init, mcl_formspec, mcl_sounds, mcl_colors diff --git a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_front.png b/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_front.png deleted file mode 100644 index 3d42e4ce7..000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_side.png b/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_side.png deleted file mode 100644 index 3d42e4ce7..000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_top.png b/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_top.png deleted file mode 100644 index 5d85e5177..000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/textures/gui_crafting_arrow.png b/mods/ITEMS/mcl_crafting_table/textures/gui_crafting_arrow.png deleted file mode 100644 index 93ce1e1b9..000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/gui_crafting_arrow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/README.md b/mods/ITEMS/mcl_deepslate/README.md deleted file mode 100644 index 398e70361..000000000 --- a/mods/ITEMS/mcl_deepslate/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Mineclone2 New Ores and Deepslate -by NO11 - -This mod adds Deepslate to the Minetest game Mineclone2, which Minecraft adds in version 1.17. -Find new ores or build something from the 30 new blocks! Deepslate is generated directly above the lava layer in overworld. - -Important: You need my "Mineclone2 Raw Ores" mod for this mod to work! -All other dependencies are automatically in the mineclone2 game. -Optionally use "Mineclone2 Copper" to get the deepslate copper ore as well. - - -You can find all craft recipes for deepslate blocks here: https://minecraft.fandom.com/wiki/Deepslate_(disambiguation) -(just click on the respective block) - -Textures are from Pixel Perfection! diff --git a/mods/ITEMS/mcl_deepslate/init.lua b/mods/ITEMS/mcl_deepslate/init.lua deleted file mode 100644 index 6b03358e2..000000000 --- a/mods/ITEMS/mcl_deepslate/init.lua +++ /dev/null @@ -1,440 +0,0 @@ -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) - ---local layer_max = mcl_worlds.layer_to_y(16) ---local layer_min = mcl_vars.mg_overworld_min - -local copper_mod = minetest.get_modpath("mcl_copper") - -local cobble = "mcl_deepslate:deepslate_cobbled" -local stick = "mcl_core:stick" - ---[[ -local mountains = { - "ExtremeHills", "ExtremeHills_beach", "ExtremeHills_ocean", "ExtremeHills_deep_ocean", "ExtremeHills_underground", - "ExtremeHills+", "ExtremeHills+_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills+_underground", - "ExtremeHillsM", "ExtremeHillsM_ocean", "ExtremeHillsM_deep_ocean", "ExtremeHillsM_underground", -} -]] - -minetest.register_node("mcl_deepslate:deepslate", { - description = S("Deepslate"), - _doc_items_longdesc = S("Deepslate is a stone type found deep underground in the Overworld that functions similar to regular stone but is harder than the stone."), - _doc_items_hidden = false, - tiles = { "mcl_deepslate_top.png", "mcl_deepslate_top.png", "mcl_deepslate.png" }, - paramtype2 = "facedir", - is_ground_content = true, - on_place = mcl_util.rotate_axis, - groups = { pickaxey = 1, stone = 1, building_block = 1, material_stone = 1 }, - drop = cobble, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rotate = screwdriver.rotate_3way, - _mcl_blast_resistance = 6, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, -}) - -local function spawn_silverfish(pos, oldnode, oldmetadata, digger) - if not minetest.is_creative_enabled("") then - minetest.add_entity(pos, "mobs_mc:silverfish") - end -end - -minetest.register_node("mcl_deepslate:infested_deepslate", { - description = S("Infested Deepslate"), - _doc_items_longdesc = S("An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart."), - _tt_help = S("Hides a silverfish"), - tiles = { "mcl_deepslate_top.png", "mcl_deepslate_top.png", "mcl_deepslate.png" }, - is_ground_content = true, - groups = { dig_immediate = 3, spawns_silverfish = 1, deco_block = 1 }, - drop = "", - sounds = mcl_sounds.node_sound_stone_defaults(), - after_dig_node = spawn_silverfish, - _mcl_hardness = 0, - _mcl_blast_resistance = 0.5, -}) - -minetest.register_node("mcl_deepslate:tuff", { - description = S("Tuff"), - _doc_items_longdesc = S("Tuff is an ornamental rock formed from volcanic ash, occurring in underground blobs below Y=16."), - _doc_items_hidden = false, - tiles = { "mcl_deepslate_tuff.png" }, - groups = { pickaxey = 1, deco_block = 1 }, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, - _mcl_silk_touch_drop = true, -}) - -local function register_deepslate_ore(desc, drop, cooked, pick, xp) - local item = desc:lower() - local item_string - if item == "lapis lazuli" then - item_string = "lapis" - else - item_string = item - end - local nodename = "mcl_deepslate:deepslate_with_"..item_string - minetest.register_node(nodename, { - description = S("Deepslate "..desc.." Ore"), - _doc_items_longdesc = S("Deepslate "..item.." ore is a variant of "..item.." ore that can generate in deepslate and tuff blobs."), - _doc_items_hidden = false, - tiles = { "mcl_deepslate_"..item_string.."_ore.png" }, - is_ground_content = true, - stack_max = 64, - groups = { pickaxey = pick, building_block = 1, material_stone = 1, xp = xp }, - drop = drop, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 4.5, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore, - }) - - minetest.register_craft({ - type = "cooking", - output = cooked, - recipe = nodename, - cooktime = 10, - }) -end - -local lapis_drops = { - max_items = 1, items = { - { items = { "mcl_dye:blue 8" }, rarity = 5 }, - { items = { "mcl_dye:blue 7" }, rarity = 5 }, - { items = { "mcl_dye:blue 6" }, rarity = 5 }, - { items = { "mcl_dye:blue 5" }, rarity = 5 }, - { items = { "mcl_dye:blue 4" } } - } -} - -local deepslate_ores = { - { "Coal", "mcl_core:coal_lump", "mcl_core:coal_lump", 1, 1 }, - { "Iron", "mcl_raw_ores:raw_iron", "mcl_core:iron_ingot", 3, 0 }, - { "Gold", "mcl_raw_ores:raw_gold", "mcl_core:gold_ingot", 4, 0 }, - { "Emerald", "mcl_core:emerald", "mcl_core:emerald", 4, 6 }, - { "Diamond", "mcl_core:diamond", "mcl_core:diamond", 4, 4 }, - { "Lapis Lazuli", lapis_drops, "mcl_dye:blue", 3, 6 }, -} - -for _, p in pairs(deepslate_ores) do - register_deepslate_ore(p[1], p[2], p[3], p[4], p[5]) -end - -if copper_mod then - register_deepslate_ore("Copper", "mcl_copper:raw_copper", "mcl_copper:copper_ingot", 4, 4) -end - -local redstone_timer = 68.28 - -local function redstone_ore_activate(pos) - minetest.swap_node(pos, { name = "mcl_deepslate:deepslate_with_redstone_lit" }) - local t = minetest.get_node_timer(pos) - t:start(redstone_timer) -end - -local function redstone_ore_reactivate(pos) - local t = minetest.get_node_timer(pos) - t:start(redstone_timer) -end - -minetest.register_node("mcl_deepslate:deepslate_with_redstone", { - description = S("Deepslate Redstone Ore"), - _doc_items_longdesc = S("Deepslate redstone ore is a variant of redstone ore that can generate in deepslate and tuff blobs."), - tiles = { "mcl_deepslate_redstone_ore.png" }, - is_ground_content = true, - groups = { pickaxey = 4, building_block = 1, material_stone = 1, xp = 7 }, - drop = { - items = { - max_items = 1, - { items = { "mesecons:redstone 4" }, rarity = 2 }, - { items = { "mesecons:redstone 5" } }, - } - }, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_punch = redstone_ore_activate, - on_walk_over = redstone_ore_activate, - _mcl_blast_resistance = 3, - _mcl_hardness = 4.5, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = { "mesecons:redstone" }, - min_count = 4, - max_count = 5, - } -}) - -minetest.register_node("mcl_deepslate:deepslate_with_redstone_lit", { - description = S("Lit Deepslate Redstone Ore"), - _doc_items_create_entry = false, - tiles = { "mcl_deepslate_redstone_ore.png" }, - paramtype = "light", - light_source = 9, - is_ground_content = true, - groups = { pickaxey = 4, not_in_creative_inventory = 1, material_stone = 1, xp = 7 }, - drop = { - items = { - max_items = 1, - { items = { "mesecons:redstone 4" }, rarity = 2 }, - { items = { "mesecons:redstone 5" } }, - } - }, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_punch = redstone_ore_reactivate, - on_walk_over = redstone_ore_reactivate, -- Uses walkover mod - on_timer = function(pos, _) - minetest.swap_node(pos, { name = "mcl_deepslate:deepslate_with_redstone" }) - end, - _mcl_blast_resistance = 3, - _mcl_hardness = 4.5, - _mcl_silk_touch_drop = { "mcl_deepslate:deepslate_with_redstone" }, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = { "mesecons:redstone" }, - min_count = 4, - max_count = 5, - }, -}) - -minetest.register_craft({ - type = "cooking", - output = "mesecons:redstone", - recipe = "mcl_deepslate:deepslate_with_redstone", - cooktime = 10, -}) - ---[[ Commented out for now because there the discussion how to handle this is ongoing -minetest.register_ore({ - ore_type = "blob", - ore = "mcl_deepslate:deepslate", - wherein = { "mcl_core:stone" }, - clust_scarcity = 200, - clust_num_ores = 100, - clust_size = 10, - y_min = layer_min, - y_max = layer_max, - noise_params = { - offset = 0, - scale = 1, - spread = { x = 250, y = 250, z = 250 }, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - } -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "mcl_deepslate:tuff", - wherein = { "mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite", "mcl_deepslate:deepslate" }, - clust_scarcity = 10*10*10, - clust_num_ores = 58, - clust_size = 7, - y_min = layer_min, - y_max = layer_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - } -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_deepslate:infested_deepslate", - wherein = "mcl_deepslate:deepslate", - clust_scarcity = 26 * 26 * 26, - clust_num_ores = 3, - clust_size = 2, - y_min = layer_min, - y_max = layer_max, - biomes = mountains, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:water_source", - wherein = "mcl_deepslate:deepslate", - clust_scarcity = 9000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(5), - y_max = layer_max, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:lava_source", - wherein = "mcl_deepslate:deepslate", - clust_scarcity = 2000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(1), - y_max = mcl_worlds.layer_to_y(10), -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:lava_source", - wherein = "mcl_deepslate:deepslate", - clust_scarcity = 9000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(11), - y_max = layer_max, -}) - - -if minetest.settings:get_bool("mcl_generate_ores", true) then - local stonelike = { "mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite" } - local function register_ore_mg(ore, scarcity, num, size, y_min, y_max, biomes) - biomes = biomes or "" - minetest.register_ore({ - ore_type = "scatter", - ore = ore, - wherein = { "mcl_deepslate:deepslate", "mcl_deepslate:tuff" }, - clust_scarcity = scarcity, - clust_num_ores = num, - clust_size = size, - y_min = y_min, - y_max = y_max, - biomes = biomes, - }) - end - local ore_mapgen = { - { "coal", 1575, 5, 3, layer_min, layer_max }, - { "coal", 1530, 8, 3, layer_min, layer_max }, - { "coal", 1500, 12, 3, layer_min, layer_max }, - { "iron", 830, 5, 3, layer_min, layer_max }, - { "gold", 4775, 5, 3, layer_min, layer_max }, - { "gold", 6560, 7, 3, layer_min, layer_max }, - { "diamond", 10000, 4, 3, layer_min, mcl_worlds.layer_to_y(12) }, - { "diamond", 5000, 2, 3, layer_min, mcl_worlds.layer_to_y(12) }, - { "diamond", 10000, 8, 3, layer_min, mcl_worlds.layer_to_y(12) }, - { "diamond", 20000, 1, 1, mcl_worlds.layer_to_y(13), mcl_worlds.layer_to_y(15) }, - { "diamond", 20000, 2, 2, mcl_worlds.layer_to_y(13), mcl_worlds.layer_to_y(15) }, - { "redstone", 500, 4, 3, layer_min, mcl_worlds.layer_to_y(13) }, - { "redstone", 800, 7, 4, layer_min, mcl_worlds.layer_to_y(13) }, - { "redstone", 1000, 4, 3, mcl_worlds.layer_to_y(13), mcl_worlds.layer_to_y(15) }, - { "redstone", 1600, 7, 4, mcl_worlds.layer_to_y(13), mcl_worlds.layer_to_y(15) }, - { "lapis", 10000, 7, 4, mcl_worlds.layer_to_y(14), layer_max }, - { "lapis", 12000, 6, 3, mcl_worlds.layer_to_y(10), mcl_worlds.layer_to_y(13) }, - { "lapis", 14000, 5, 3, mcl_worlds.layer_to_y(6), mcl_worlds.layer_to_y(9) }, - { "lapis", 16000, 4, 3, mcl_worlds.layer_to_y(2), mcl_worlds.layer_to_y(5) }, - { "lapis", 18000, 3, 2, mcl_worlds.layer_to_y(0), mcl_worlds.layer_to_y(2) }, - } - for _, o in pairs(ore_mapgen) do - register_ore_mg("mcl_deepslate:deepslate_with_"..o[1], o[2], o[3], o[4], o[5], o[6]) - end - if minetest.get_mapgen_setting("mg_name") == "v6" then - register_ore_mg("mcl_deepslate:deepslate_with_emerald", 14340, 1, 1, layer_min, layer_max) - else - register_ore_mg("mcl_deepslate:deepslate_with_emerald", 16384, 1, 1, mcl_worlds.layer_to_y(4), layer_max, mountains) - end - if copper_mod then - register_ore_mg("mcl_deepslate:deepslate_with_copper", 830, 5, 3, layer_min, layer_max) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_copper:stone_with_copper", - wherein = stonelike, - clust_scarcity = 830, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(39), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_copper:stone_with_copper", - wherein = stonelike, - clust_scarcity = 1660, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(40), - y_max = mcl_worlds.layer_to_y(63), - }) - end -end ---]] -local function register_deepslate_variant(item, desc, longdesc) - local texture = desc:lower():gsub("% ", "_") - local def = { - description = S(desc), - _doc_items_longdesc = S(longdesc), - _doc_items_hidden = false, - tiles = { "mcl_"..texture..".png" }, - groups = { pickaxey = 1, building_block = 1, material_stone = 1 }, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 3.5, - _mcl_silk_touch_drop = true, - } - if item == "cobbled" then - def.groups.cobble = 1 - end - minetest.register_node("mcl_deepslate:deepslate_"..item, table.copy(def)) - - if item == "bricks" or item == "tiles" then - def.description = S("Cracked "..desc) - def._doc_items_longdesc = S("Cracked "..desc:lower().." are a cracked variant.") - def.tiles = { "mcl_cracked_"..texture..".png" } - minetest.register_node("mcl_deepslate:deepslate_"..item.."_cracked", def) - end - if item ~= "chiseled" then - mcl_stairs.register_stair_and_slab_simple("deepslate_"..item, "mcl_deepslate:deepslate_"..item, S(desc.." Stairs"), S(desc.." Slab"), S("Double "..desc.." Slab")) - mcl_walls.register_wall("mcl_deepslate:deepslate"..item.."wall", S(desc.." Wall"), "mcl_deepslate:deepslate_"..item) - end -end - -local deepslate_variants = { - { "cobbled", "Cobbled Deepslate", "Cobbled deepslate is a stone variant that functions similar to cobblestone or blackstone." }, - { "polished", "Polished Deepslate", "Polished deepslate is the stone-like polished version of deepslate." }, - { "bricks", "Deepslate Bricks", "Deepslate bricks are the brick version of deepslate." }, - { "tiles", "Deepslate Tiles", "Deepslate tiles are a decorative variant of deepslate." }, - { "chiseled", "Chiseled Deepslate", "Chiseled deepslate is the chiseled version of deepslate." }, -} - -for _, dv in pairs(deepslate_variants) do - register_deepslate_variant(dv[1], dv[2], dv[3]) -end - -for i = 1, 3 do - local s = "mcl_deepslate:deepslate_"..deepslate_variants[i][1] - minetest.register_craft({ - output = "mcl_deepslate:deepslate_"..deepslate_variants[i+1][1].." 4", - recipe = { { s, s }, { s, s } } - }) -end - -for _, p in pairs({ "bricks", "tiles" }) do - minetest.register_craft({ - type = "cooking", - output = "mcl_deepslate:deepslate_"..p.."_cracked", - recipe = "mcl_deepslate:deepslate_"..p, - cooktime = 10, - }) -end - -minetest.register_craft({ - type = "cooking", - output = "mcl_deepslate:deepslate", - recipe = cobble, - cooktime = 10, -}) - -minetest.register_craft({ - output = "mcl_deepslate:deepslate_chiseled", - recipe = { - { "mcl_stairs:slab_deepslate_cobbled" }, - { "mcl_stairs:slab_deepslate_cobbled" }, - }, -}) diff --git a/mods/ITEMS/mcl_deepslate/locale/mcl_deepslate.de.tr b/mods/ITEMS/mcl_deepslate/locale/mcl_deepslate.de.tr deleted file mode 100644 index 35cf86869..000000000 --- a/mods/ITEMS/mcl_deepslate/locale/mcl_deepslate.de.tr +++ /dev/null @@ -1,53 +0,0 @@ -# textdomain: mcl_deepslate -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=Ein befallener Block ist ein Block, aus dem ein Silberfisch herausspringt, wenn er abgebaut wird. Er sieht genauso aus wie sein normales Gegenstück. -Chiseled deepslate is the chiseled version of deepslate.=Gemeißelter Tiefenschiefer ist die behauene Version von Tiefenschiefer. -Chiseled Deepslate=Gemeißelter Tiefenschiefer -Cobbled deepslate is a stone variant that functions similar to cobblestone or blackstone.=Bruchtiefenschiefer funktioniert ähnlich wie Bruchstein, hat jedoch eine längere Abbauzeit. -Cobbled Deepslate Slab=Bruchtiefenschieferstufe -Cobbled Deepslate Stairs=Bruchtiefenschiefertreppe -Cobbled Deepslate Wall=Bruchtiefenschiefermauer -Cobbled Deepslate=Bruchtiefenschiefer -Cracked Deepslate Bricks=Rissige Tiefenschieferziegel -Cracked Deepslate Tiles=Rissige Tiefenschieferfliesen -Deepslate bricks are the brick version of deepslate.=Tiefenschieferziegel ist eine Variante des Tiefenschiefers. Er kann als dekorativer Block verwendet werden. -Deepslate Bricks Slab=Tiefenschieferziegelstufe -Deepslate Bricks Stairs=Tiefenschieferziegeltreppe -Deepslate Bricks Wall=Tiefenschieferziegelmauer -Deepslate Bricks=Tiefenschieferziegel -Deepslate coal ore is a variant of coal ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Steinkohle ist eine Variante von Steinkohle, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate Coal Ore=Tiefenschiefer-Steinkohle -Deepslate copper ore is a variant of copper ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Kupfererz ist eine Variante von Kupfererz, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate Copper Ore=Tiefenschiefer-Kupfererz -Deepslate diamond ore is a variant of diamond ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Diamanterz ist eine Variante von Diamanterz, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate Diamond Ore=Tiefenschiefer-Diamanterz -Deepslate emerald ore is a variant of emerald ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Smaragderz ist eine Variante von Smaragderz, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate Emerald Ore=Tiefenschiefer-Smaragderz -Deepslate gold ore is a variant of gold ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Golderz ist eine Variante von Golderz, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate Gold Ore=Tiefenschiefer-Golderz -Deepslate iron ore is a variant of iron ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Eisenerz ist eine Variante von Eisenerz, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate Iron Ore=Tiefenschiefer-Eisenerz -Deepslate is a stone type found deep underground in the Overworld that functions similar to regular stone but is harder than the stone.=Tiefenschiefer ist eine Gesteinsart. Er kann als dekorativer Block verwendet und in viele Varianten weiterverarbeitet werden. -Deepslate Lapis Lazuli Ore=Tiefenschiefer-Lapislazulierz -Deepslate lapis ore is a variant of lapis ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Lapislazulierz ist eine Variante von Lapislazulierz, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate redstone ore is a variant of redstone ore that can generate in deepslate and tuff blobs.=Tiefenschiefer-Redstone-Erz ist eine Variante von Redstone-Erz, die in Tiefenschiefer und Tuff generiert werden kann. -Deepslate Redstone Ore=Tiefenschiefer-Redstone-Erz -Deepslate tiles are a decorative variant of deepslate.=Tiefenschieferfliesen ist eine Variante des Tiefenschiefers. Der Block kann als dekorativer Block verwendet werden. -Deepslate Tiles Slab=Tiefenschieferfliesenstufe -Deepslate Tiles Stairs=Tiefenschieferfliesentreppe -Deepslate Tiles Wall=Tiefenschieferfliesenmauer -Deepslate Tiles=Tiefenschieferfliesen -Deepslate=Tiefenschiefer -Double Cobbled Deepslate Slab=Doppelte Bruchtiefenschieferstufe -Double Deepslate Bricks Slab=Doppelte Tiefenschieferziegelstufe -Double Deepslate Tiles Slab=Doppelte Tiefenschieferfliesenstufe -Double Polished Deepslate Slab=Doppelte Polierte Tiefenschieferstufe -Hides a silverfish=Versteckt einen Silberfisch -Infested Deepslate=Befallener Tiefenschiefer -Lit Deepslate Redstone Ore=Leuchtendes Tiefschiefer-Redstone-Erz -Polished deepslate is the stone-like polished version of deepslate.=Polierter Tiefenschiefer ist eine Variante des Tiefenschiefers. Er kann als dekorativer Block verwendet werden. -Polished Deepslate Slab=Polierte Tiefenschieferstufe -Polished Deepslate Stairs=Polierte Tiefenschiefertreppe -Polished Deepslate Wall=Polierte Tiefenschiefermauer -Polished Deepslate=Polierter Tiefenschiefer -Tuff=Tuffstein -Tuff is an ornamental rock formed from volcanic ash, occurring in underground blobs below Y=16.=Der Tuffstein ist ein grauer, vulkanischer Block. diff --git a/mods/ITEMS/mcl_deepslate/locale/template.txt b/mods/ITEMS/mcl_deepslate/locale/template.txt deleted file mode 100644 index 44da92c66..000000000 --- a/mods/ITEMS/mcl_deepslate/locale/template.txt +++ /dev/null @@ -1,53 +0,0 @@ -# textdomain: mcl_deepslate -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.= -Chiseled deepslate is the chiseled version of deepslate.= -Chiseled Deepslate= -Cobbled deepslate is a stone variant that functions similar to cobblestone or blackstone.= -Cobbled Deepslate Slab= -Cobbled Deepslate Stairs= -Cobbled Deepslate Wall= -Cobbled Deepslate= -Cracked Deepslate Bricks= -Cracked Deepslate Tiles= -Deepslate bricks are the brick version of deepslate.= -Deepslate Bricks Slab= -Deepslate Bricks Stairs= -Deepslate Bricks Wall= -Deepslate Bricks= -Deepslate coal ore is a variant of coal ore that can generate in deepslate and tuff blobs.= -Deepslate Coal Ore= -Deepslate copper ore is a variant of copper ore that can generate in deepslate and tuff blobs.= -Deepslate Copper Ore= -Deepslate diamond ore is a variant of diamond ore that can generate in deepslate and tuff blobs.= -Deepslate Diamond Ore= -Deepslate emerald ore is a variant of emerald ore that can generate in deepslate and tuff blobs.= -Deepslate Emerald Ore= -Deepslate gold ore is a variant of gold ore that can generate in deepslate and tuff blobs.= -Deepslate Gold Ore= -Deepslate iron ore is a variant of iron ore that can generate in deepslate and tuff blobs.= -Deepslate Iron Ore= -Deepslate is a stone type found deep underground in the Overworld that functions similar to regular stone but is harder than the stone.= -Deepslate Lapis Lazuli Ore= -Deepslate lapis ore is a variant of lapis ore that can generate in deepslate and tuff blobs.= -Deepslate redstone ore is a variant of redstone ore that can generate in deepslate and tuff blobs.= -Deepslate Redstone Ore= -Deepslate tiles are a decorative variant of deepslate.= -Deepslate Tiles Slab= -Deepslate Tiles Stairs= -Deepslate Tiles Wall= -Deepslate Tiles= -Deepslate= -Double Cobbled Deepslate Slab= -Double Deepslate Bricks Slab= -Double Deepslate Tiles Slab= -Double Polished Deepslate Slab= -Hides a silverfish= -Infested Deepslate= -Lit Deepslate Redstone Ore= -Polished deepslate is the stone-like polished version of deepslate.= -Polished Deepslate Slab= -Polished Deepslate Stairs= -Polished Deepslate Wall= -Polished Deepslate= -Tuff= -Tuff is an ornamental rock formed from volcanic ash, occurring in underground blobs below Y=16.= diff --git a/mods/ITEMS/mcl_deepslate/mod.conf b/mods/ITEMS/mcl_deepslate/mod.conf deleted file mode 100644 index 7e9a44cfc..000000000 --- a/mods/ITEMS/mcl_deepslate/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_deepslate -author = NO11 -depends = mcl_raw_ores, mcl_core, mcl_sounds, mcl_dye, mcl_util, screwdriver, mobs_mc, walkover, mcl_walls, mcl_stairs, mcl_brewing, mcl_mobitems, mcl_furnaces, mcl_farming, mcl_worlds -optional_depends = mcl_copper diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_chiseled_deepslate.png b/mods/ITEMS/mcl_deepslate/textures/mcl_chiseled_deepslate.png deleted file mode 100644 index 19955d578..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_chiseled_deepslate.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_cobbled_deepslate.png b/mods/ITEMS/mcl_deepslate/textures/mcl_cobbled_deepslate.png deleted file mode 100644 index 67dcd172c..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_cobbled_deepslate.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_cracked_deepslate_bricks.png b/mods/ITEMS/mcl_deepslate/textures/mcl_cracked_deepslate_bricks.png deleted file mode 100644 index a2cf287eb..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_cracked_deepslate_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_cracked_deepslate_tiles.png b/mods/ITEMS/mcl_deepslate/textures/mcl_cracked_deepslate_tiles.png deleted file mode 100644 index c62f36d92..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_cracked_deepslate_tiles.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate.png deleted file mode 100644 index 68cd507d6..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_bricks.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_bricks.png deleted file mode 100644 index b6ef3b4bd..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_coal_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_coal_ore.png deleted file mode 100644 index ae42a3186..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_coal_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_copper_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_copper_ore.png deleted file mode 100644 index 140adbc0a..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_copper_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_diamond_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_diamond_ore.png deleted file mode 100644 index 67afa14fe..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_diamond_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_emerald_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_emerald_ore.png deleted file mode 100644 index 3041551c9..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_emerald_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_gold_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_gold_ore.png deleted file mode 100644 index 1cf0c8153..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_gold_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_iron_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_iron_ore.png deleted file mode 100644 index 4e94d6a80..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_iron_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_lapis_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_lapis_ore.png deleted file mode 100644 index 31781c1c6..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_lapis_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_redstone_ore.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_redstone_ore.png deleted file mode 100644 index 3b979ed51..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_redstone_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_tiles.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_tiles.png deleted file mode 100644 index 43fe0f319..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_tiles.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_top.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_top.png deleted file mode 100644 index 9e66d7b9a..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_tuff.png b/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_tuff.png deleted file mode 100644 index f1c8fc2a1..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_deepslate_tuff.png and /dev/null differ diff --git a/mods/ITEMS/mcl_deepslate/textures/mcl_polished_deepslate.png b/mods/ITEMS/mcl_deepslate/textures/mcl_polished_deepslate.png deleted file mode 100644 index cfbc9c418..000000000 Binary files a/mods/ITEMS/mcl_deepslate/textures/mcl_polished_deepslate.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/README.txt b/mods/ITEMS/mcl_doors/README.txt deleted file mode 100644 index c0cfc0525..000000000 --- a/mods/ITEMS/mcl_doors/README.txt +++ /dev/null @@ -1,36 +0,0 @@ -License of source code: ------------------------ -Copyright (C) 2012 PilzAdam -modified by BlockMen (added sounds, glassdoor, trapdoor) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - - -License of sounds --------------------------------------- -Opening-Sound created by CGEffex (CC BY 3.0), modified by BlockMen - doors_door_open.ogg -Closing-Sound created by bennstir (CC BY 3.0) - doors_door_close.ogg -Steel door sounds open & close (CC-BY-3.0) by HazMatt - - http://www.freesound.org/people/HazMattt/sounds/187283/ - doors_steel_door_open.ogg - doors_steel_door_close.ogg - -License/authors of texture files --------------------------------------- -Same as media license for MineClone 2 (see root directory). - -With modifications by GitHub user kingoscargames: -- `doors_item_steel.png` -- `mcl_doors_door_iron_lower.png` -- `mcl_doors_door_iron_upper.png` -- `mcl_doors_trapdoor_acaica.png` -- `mcl_doors_trapdoor_birch.png` -- `mcl_doors_trapdoor_spruce.png` -- `mcl_doors_trapdoor_dark_oak.png` -- `mcl_doors_trapdoor_jungle.png` diff --git a/mods/ITEMS/mcl_doors/alias.lua b/mods/ITEMS/mcl_doors/alias.lua deleted file mode 100644 index e0203804d..000000000 --- a/mods/ITEMS/mcl_doors/alias.lua +++ /dev/null @@ -1,23 +0,0 @@ --- Register aliases -local doornames = { - ["door"] = "wooden_door", - ["door_jungle"] = "jungle_door", - ["door_spruce"] = "spruce_door", - ["door_dark_oak"] = "dark_oak_door", - ["door_birch"] = "birch_door", - ["door_acacia"] = "acacia_door", - ["door_iron"] = "iron_door", -} - -for oldname, newname in pairs(doornames) do - minetest.register_alias("doors:"..oldname, "mcl_doors:"..newname) - minetest.register_alias("doors:"..oldname.."_t_1", "mcl_doors:"..newname.."_t_1") - minetest.register_alias("doors:"..oldname.."_b_1", "mcl_doors:"..newname.."_b_1") - minetest.register_alias("doors:"..oldname.."_t_2", "mcl_doors:"..newname.."_t_2") - minetest.register_alias("doors:"..oldname.."_b_2", "mcl_doors:"..newname.."_b_2") -end - -minetest.register_alias("doors:trapdoor", "mcl_doors:trapdoor") -minetest.register_alias("doors:trapdoor_open", "mcl_doors:trapdoor_open") -minetest.register_alias("doors:iron_trapdoor", "mcl_doors:iron_trapdoor") -minetest.register_alias("doors:iron_trapdoor_open", "mcl_doors:iron_trapdoor_open") diff --git a/mods/ITEMS/mcl_doors/api_doors.lua b/mods/ITEMS/mcl_doors/api_doors.lua deleted file mode 100644 index c2fc7c377..000000000 --- a/mods/ITEMS/mcl_doors/api_doors.lua +++ /dev/null @@ -1,559 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local minetest_get_meta = minetest.get_meta - --- This helper function calls on_place_node callbacks. -local function on_place_node(place_to, newnode, - placer, oldnode, itemstack, pointed_thing) - -- Run script hook - for _, callback in pairs(minetest.registered_on_placenodes) do - -- Deep-copy pos, node and pointed_thing because callback can modify them - local place_to_copy = {x = place_to.x, y = place_to.y, z = place_to.z} - local newnode_copy = - {name = newnode.name, param1 = newnode.param1, param2 = newnode.param2} - local oldnode_copy = - {name = oldnode.name, param1 = oldnode.param1, param2 = oldnode.param2} - local pointed_thing_copy = { - type = pointed_thing.type, - above = vector.new(pointed_thing.above), - under = vector.new(pointed_thing.under), - ref = pointed_thing.ref, - } - callback(place_to_copy, newnode_copy, placer, - oldnode_copy, itemstack, pointed_thing_copy) - end -end - --- Registers a door --- name: The name of the door --- def: a table with the folowing fields: --- description --- inventory_image --- groups --- tiles_bottom: the tiles of the bottom part of the door {front, side} --- tiles_top: the tiles of the bottom part of the door {front, side} --- If the following fields are not defined the default values are used --- node_box_bottom --- node_box_top --- selection_box_bottom --- selection_box_top --- only_placer_can_open: if true only the player who placed the door can --- open it --- only_redstone_can_open: if true, the door can only be opened by redstone, --- not by rightclicking it - -function mcl_doors:register_door(name, def) - def.groups.not_in_creative_inventory = 1 - def.groups.dig_by_piston = 1 - def.groups.door = 1 - def.groups.mesecon_ignore_opaque_dig = 1 - - if not def.sound_open then - def.sound_open = "doors_door_open" - end - if not def.sound_close then - def.sound_close = "doors_door_close" - end - - local box = {{-8/16, -8/16, -8/16, 8/16, 8/16, -5/16}} - - if not def.node_box_bottom then - def.node_box_bottom = box - end - if not def.node_box_top then - def.node_box_top = box - end - if not def.selection_box_bottom then - def.selection_box_bottom= box - end - if not def.selection_box_top then - def.selection_box_top = box - end - - local longdesc, usagehelp, tt_help - tt_help = def._tt_help - longdesc = def._doc_items_longdesc - if not longdesc then - if def.only_redstone_can_open then - longdesc = S("This door is a 2-block high barrier which can be opened or closed by hand or by redstone power.") - else - longdesc = S("This door is a 2-block high barrier which can only be opened by redstone power, not by hand.") - end - end - usagehelp = def._doc_items_usagehelp - if not usagehelp then - if def.only_redstone_can_open then - usagehelp = S("To open or close this door, send a redstone signal to its bottom half.") - else - usagehelp = S("To open or close this door, rightclick it or send a redstone signal to its bottom half.") - end - end - if not tt_help then - if def.only_redstone_can_open then - tt_help = S("Openable by redstone power") - else - tt_help = S("Openable by players and redstone power") - end - end - - local craftitem_groups = { mesecon_conductor_craftable = 1, deco_block = 1 } - if def.groups and def.groups.flammable then - craftitem_groups.flammable = def.groups.flammable - end - - minetest.register_craftitem(name, { - description = def.description, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - inventory_image = def.inventory_image, - stack_max = 64, - groups = craftitem_groups, - on_place = function(itemstack, placer, pointed_thing) - if not pointed_thing.type == "node" or not placer or not placer:is_player() then - return itemstack - end - local pn = placer:get_player_name() - if minetest.is_protected(pointed_thing.above, pn) and minetest.is_protected(pointed_thing.under, pn) then - return itemstack - end - local ptu = pointed_thing.under - local nu = minetest.get_node(ptu) - -- Pointed thing's rightclick action takes precedence, unless player holds down the sneak key - if minetest.registered_nodes[nu.name] and minetest.registered_nodes[nu.name].on_rightclick and not placer:get_player_control().sneak then - return minetest.registered_nodes[nu.name].on_rightclick(ptu, nu, placer, itemstack) - end - - local pt - if minetest.registered_nodes[nu.name] and minetest.registered_nodes[nu.name].buildable_to then - pt = pointed_thing.under - else - pt = pointed_thing.above - end - local pt2 = {x=pt.x, y=pt.y, z=pt.z} - pt2.y = pt2.y+1 - local ptname = minetest.get_node(pt).name - local pt2name = minetest.get_node(pt2).name - if - (minetest.registered_nodes[ptname] and not minetest.registered_nodes[ptname].buildable_to) or - (minetest.registered_nodes[pt2name] and not minetest.registered_nodes[pt2name].buildable_to) - then - return itemstack - end - - -- get left coordinate for checking if another door is there - local pt_left = {x=pt.x, y=pt.y, z=pt.z} - local p2 = minetest.dir_to_facedir(placer:get_look_dir()) - - if p2 == 0 then - pt_left.x = pt_left.x-1 - elseif p2 == 1 then - pt_left.z = pt_left.z+1 - elseif p2 == 2 then - pt_left.x = pt_left.x+1 - elseif p2 == 3 then - pt_left.z = pt_left.z-1 - end - - local left_node = minetest.get_node(pt_left) - - -- Set door nodes - minetest.set_node(pt, {name=name.."_b_1", param2=p2}) - minetest.set_node(pt2, {name=name.."_t_1", param2=p2}) - - if def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {pos=pt}, true) - end - - if def.only_placer_can_open then - local meta = minetest_get_meta(pt) - meta:set_string("doors_owner", "") - meta = minetest_get_meta(pt2) - meta:set_string("doors_owner", "") - end - - local meta1 = minetest_get_meta(pt) - local meta2 = minetest_get_meta(pt2) - -- save mirror state for the correct door - if left_node.name:sub(1, #name) == name then - meta1:set_int("is_mirrored", 1) - meta2:set_int("is_mirrored", 1) - end - - -- Save open state. 1 = open. 0 = closed - meta1:set_int("is_open", 0) - meta2:set_int("is_open", 0) - - - if not minetest.is_creative_enabled(pn) then - itemstack:take_item() - end - - on_place_node(pt, minetest.get_node(pt), placer, nu, itemstack, pointed_thing) - on_place_node(pt2, minetest.get_node(pt2), placer, minetest.get_node({x=ptu.x,y=ptu.y+1,z=ptu.z}), itemstack, pointed_thing) - - return itemstack - end, - }) - - local tt = def.tiles_top - local tb = def.tiles_bottom - - local function on_open_close(pos, dir, check_name, replace, replace_dir) - local meta1 = minetest_get_meta(pos) - pos.y = pos.y+dir - local meta2 = minetest_get_meta(pos) - - -- if name of other door is not the same as check_name -> return - if not minetest.get_node(pos).name == check_name then - return - end - - -- swap directions if mirrored - local params = {3,0,1,2} - if meta1:get_int("is_open") == 0 and meta2:get_int("is_mirrored") == 0 or meta1:get_int("is_open") == 1 and meta2:get_int("is_mirrored") == 1 then - params = {1,2,3,0} - end - - local p2 = minetest.get_node(pos).param2 - local np2 = params[p2+1] - - minetest.swap_node(pos, {name=replace_dir, param2=np2}) - pos.y = pos.y-dir - minetest.swap_node(pos, {name=replace, param2=np2}) - - local door_switching_sound - if meta1:get_int("is_open") == 1 then - door_switching_sound = def.sound_close - meta1:set_int("is_open", 0) - meta2:set_int("is_open", 0) - else - door_switching_sound = def.sound_open - meta1:set_int("is_open", 1) - meta2:set_int("is_open", 1) - end - minetest.sound_play(door_switching_sound, {pos = pos, gain = 0.5, max_hear_distance = 16}, true) - end - - local function on_mesecons_signal_open(pos, node) - on_open_close(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2") - end - local function on_mesecons_signal_close(pos, node) - if not mesecon.is_powered({x=pos.x,y=pos.y+1,z=pos.z}) then - on_open_close(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1") - end - end - local function on_mesecons_signal_open_top(pos, node) - on_mesecons_signal_open({x=pos.x, y=pos.y-1, z=pos.z}, node) - end - local function on_mesecons_signal_close_top(pos, node) - if not mesecon.is_powered({x=pos.x,y=pos.y-1,z=pos.z}) then - on_mesecons_signal_close({x=pos.x, y=pos.y-1, z=pos.z}, node) - end - end - - local function check_player_priv(pos, player) - if not def.only_placer_can_open then - return true - end - local meta = minetest_get_meta(pos) - local pn = player:get_player_name() - return meta:get_string("doors_owner") == pn - end - - local on_rightclick - -- Disable on_rightclick if this is a redstone-only door - if not def.only_redstone_can_open then - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2") - end - end - end - - minetest.register_node(name.."_b_1", { - tiles = {"blank.png", tt[2].."^[transformFXR90", tb[2], tb[2].."^[transformFX", tb[1], tb[1].."^[transformFX"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_bottom - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_bottom - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(bottom, oldnode) - local meta_bottom = minetest_get_meta(bottom) - if meta_bottom:get_int("rotation") == 1 then - meta_bottom:set_int("rotation", 0) - else - minetest.add_item(bottom, name) - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - if minetest.get_node(bottom).name ~= name.."_b_2" and minetest.get_node(top).name == name.."_t_1" then - minetest.remove_node(top) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_on = on_mesecons_signal_open, - }}, - - on_rotate = function(bottom, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(bottom, node, mode) - minetest.swap_node(bottom, node) - - local top = {x=bottom.x,y=bottom.y+1,z=bottom.z} - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.name = name .."_t_1" - minetest.swap_node(top, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - if def.only_redstone_can_open then - on_rightclick = nil - else - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2") - end - end - end - - minetest.register_node(name.."_t_1", { - tiles = {tt[2].."^[transformR90", "blank.png", tt[2], tt[2].."^[transformFX", tt[1], tt[1].."^[transformFX"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_top - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_top - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(top, oldnode) - local meta_top = minetest_get_meta(top) - if meta_top:get_int("rotation") == 1 then - meta_top:set_int("rotation", 0) - else - local bottom = { x = top.x, y = top.y - 1, z = top.z } - if minetest.get_node(top).name ~= name.."_t_2" and minetest.get_node(bottom).name == name.."_b_1" and oldnode.name == name.."_t_1" then - minetest.dig_node(bottom) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_on = on_mesecons_signal_open_top, - rules = mesecon.rules.flat, - }}, - - on_rotate = function(top, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(top, node, mode) - minetest.swap_node(top, node) - - local bottom = {x=top.x,y=top.y-1,z=top.z} - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.name = name .."_b_1" - minetest.swap_node(bottom, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - if def.only_redstone_can_open then - on_rightclick = nil - else - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1") - end - end - end - - minetest.register_node(name.."_b_2", { - tiles = {"blank.png", tt[2].."^[transformFXR90", tb[2].."^[transformI", tb[2].."^[transformFX", tb[1].."^[transformFX", tb[1]}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_bottom - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_bottom - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(bottom, oldnode) - local meta_bottom = minetest_get_meta(bottom) - if meta_bottom:get_int("rotation") == 1 then - meta_bottom:set_int("rotation", 0) - else - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - minetest.add_item(bottom, name) - if minetest.get_node(bottom).name ~= name.."_b_1" and minetest.get_node(top).name == name.."_t_2" then - minetest.remove_node(top) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_off = on_mesecons_signal_close, - }}, - - on_rotate = function(bottom, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(bottom, node, mode) - minetest.swap_node(bottom, node) - - local top = {x=bottom.x,y=bottom.y+1,z=bottom.z} - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.name = name .."_t_2" - minetest.swap_node(top, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - if def.only_redstone_can_open then - on_rightclick = nil - else - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1") - end - end - end - - minetest.register_node(name.."_t_2", { - tiles = {tt[2].."^[transformR90", "blank.png", tt[2].."^[transformI", tt[2].."^[transformFX", tt[1].."^[transformFX", tt[1]}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_top - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_top - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(top, oldnode) - local meta_top = minetest_get_meta(top) - if meta_top:get_int("rotation") == 1 then - meta_top:set_int("rotation", 0) - else - local bottom = { x = top.x, y = top.y - 1, z = top.z } - if minetest.get_node(top).name ~= name.."_t_1" and minetest.get_node(bottom).name == name.."_b_2" and oldnode.name == name.."_t_2" then - minetest.dig_node(bottom) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_off = on_mesecons_signal_close_top, - rules = mesecon.rules.flat, - }}, - - on_rotate = function(top, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(top, node, mode) - minetest.swap_node(top, node) - - local bottom = {x=top.x,y=top.y-1,z=top.z} - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.name = name .."_b_2" - minetest.swap_node(bottom, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - -- Add entry aliases for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("craftitems", name, "nodes", name.."_b_1") - doc.add_entry_alias("craftitems", name, "nodes", name.."_b_2") - doc.add_entry_alias("craftitems", name, "nodes", name.."_t_1") - doc.add_entry_alias("craftitems", name, "nodes", name.."_t_2") - end - -end diff --git a/mods/ITEMS/mcl_doors/api_trapdoors.lua b/mods/ITEMS/mcl_doors/api_trapdoors.lua deleted file mode 100644 index 5b7a0e5d0..000000000 --- a/mods/ITEMS/mcl_doors/api_trapdoors.lua +++ /dev/null @@ -1,231 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Wrapper around mintest.pointed_thing_to_face_pos. -local function get_fpos(placer, pointed_thing) - local fpos - -- Workaround: minetest.pointed_thing_to_face_pos crashes in MT 0.4.16 if - -- pointed_thing.under and pointed_thing.above are equal - -- FIXME: Remove this when MT got fixed. - if not vector.equals(pointed_thing.under, pointed_thing.above) then - -- The happy case: Everything is normal - local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) - fpos = finepos.y % 1 - else - -- Fallback if both above and under are equal - fpos = 0 - end - return fpos -end - ----- Trapdoor ---- - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = function(pos, node, user, mode, param2) - -- Flip trapdoor vertically - if mode == screwdriver.ROTATE_AXIS then - local minor = node.param2 - if node.param2 >= 20 then - minor = node.param2 - 20 - if minor == 3 then - minor = 1 - elseif minor == 1 then - minor = 3 - end - node.param2 = minor - else - if minor == 3 then - minor = 1 - elseif minor == 1 then - minor = 3 - end - node.param2 = minor - node.param2 = node.param2 + 20 - end - minetest.set_node(pos, node) - return true - end - end -end - -function mcl_doors:register_trapdoor(name, def) - local groups = table.copy(def.groups) - if groups == nil then - groups = {} - end - groups.mesecon_ignore_opaque_dig = 1 - - if not def.sound_open then - def.sound_open = "doors_door_open" - end - if not def.sound_close then - def.sound_close = "doors_door_close" - end - - local function punch(pos) - local me = minetest.get_node(pos) - local tmp_node - -- Close - if minetest.get_item_group(me.name, "trapdoor") == 2 then - minetest.sound_play(def.sound_close, {pos = pos, gain = 0.3, max_hear_distance = 16}, true) - tmp_node = {name=name, param1=me.param1, param2=me.param2} - -- Open - else - minetest.sound_play(def.sound_open, {pos = pos, gain = 0.3, max_hear_distance = 16}, true) - tmp_node = {name=name.."_open", param1=me.param1, param2=me.param2} - end - minetest.set_node(pos, tmp_node) - end - - local on_rightclick - if not def.only_redstone_can_open then - on_rightclick = function(pos, node, clicker) - punch(pos) - end - end - - -- Default help texts - local longdesc, usagehelp, tt_help - longdesc = def._doc_items_longdesc - if not longdesc then - if def.only_redstone_can_open then - longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can only be opened or closed by redstone power.") - else - longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can be opened or closed by hand or redstone power.") - end - end - usagehelp = def._doc_items_usagehelp - if not usagehelp and not def.only_redstone_can_open then - usagehelp = S("To open or close this trapdoor, rightclick it or send a redstone signal to it.") - end - if def.only_redstone_can_open then - tt_help = S("Openable by redstone power") - else - tt_help = S("Openable by players and redstone power") - end - - -- Closed trapdoor - - local tile_front = def.tile_front - local tile_side = def.tile_side - if not tile_side then - tile_side = tile_front - end - local tiles_closed = { - tile_front, - tile_front .. "^[transformFY", - tile_side, tile_side, - tile_side, tile_side, - } - - local groups_closed = groups - groups_closed.trapdoor = 1 - groups_closed.deco_block = 1 - minetest.register_node(name, { - description = def.description, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = tiles_closed, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - inventory_image = def.inventory_image, - wield_image = def.wield_image, - is_ground_content = false, - paramtype = "light", - stack_max = 64, - paramtype2 = "facedir", - sunlight_propagates = true, - groups = groups_closed, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - node_box = { - type = "fixed", - fixed = { - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16},}, - }, - mesecons = {effector = { - action_on = (function(pos, node) - punch(pos) - end), - }}, - on_place = function(itemstack, placer, pointed_thing) - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:get_pos() - if placer_pos then - param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) - end - - local fpos = get_fpos(placer, pointed_thing) - - --local origname = itemstack:get_name() - if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) - or (fpos < -0.5 and fpos > -0.999999999) then - param2 = param2 + 20 - if param2 == 21 then - param2 = 23 - elseif param2 == 23 then - param2 = 21 - end - end - return minetest.item_place(itemstack, placer, pointed_thing, param2) - end, - on_rightclick = on_rightclick, - on_rotate = on_rotate, - }) - - -- Open trapdoor - - local groups_open = table.copy(groups) - - local tiles_open = { - tile_side, - tile_side .. "^[transformR180", - tile_side .. "^[transformR270", - tile_side .. "^[transformR90", - tile_front .. "^[transform46", - tile_front .. "^[transformFY", - } - - groups_open.trapdoor = 2 - groups_open.not_in_creative_inventory = 1 - minetest.register_node(name.."_open", { - drawtype = "nodebox", - tiles = tiles_open, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - is_ground_content = false, - paramtype = "light", - paramtype2 = "facedir", - -- TODO: Implement Minecraft behaviour: Climbable if directly above - -- ladder w/ matching orientation. - -- Current behavour: Always climbable - climbable = true, - sunlight_propagates = true, - pointable = true, - groups = groups_open, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - drop = name, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, 5/16, 0.5, 0.5, 0.5} - }, - on_rightclick = on_rightclick, - mesecons = {effector = { - action_off = (function(pos, node) - punch(pos) - end), - }}, - on_rotate = on_rotate, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", name, "nodes", name.."_open") - end - -end diff --git a/mods/ITEMS/mcl_doors/init.lua b/mods/ITEMS/mcl_doors/init.lua deleted file mode 100644 index a39b33c5e..000000000 --- a/mods/ITEMS/mcl_doors/init.lua +++ /dev/null @@ -1,9 +0,0 @@ -mcl_doors = {} - -local this = minetest.get_current_modname() -local path = minetest.get_modpath(this) - -dofile(path.."/api_doors.lua") -- Doors API -dofile(path.."/api_trapdoors.lua") -- Trapdoors API -dofile(path.."/register.lua") -- Register builtin doors and trapdoors -dofile(path.."/alias.lua") -- Legacy aliases diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr deleted file mode 100644 index be88513cb..000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Holztüren sind 2 Blöcke hohe Barrieren, die von Hand oder mit einem Redstone-Signal geöffnet oder geschlossen werden können. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Um die Holztür zu öffnen oder zu schließen, rechtsklicken Sie sie oder versorgen Sie sie mit einem Redstone-Signal. -Oak Door=Eichentür -Acacia Door=Akazientür -Birch Door=Birkentür -Dark Oak Door=Schwarzeichentür -Jungle Door=Dschungeltür -Spruce Door=Fichtentür -Iron Door=Eisentür -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Eisentüren sind 2 Blöcke hohe Barrieren, die nur von einem Redstone-Signal geöffnet oder geschlossen werden können. -To open or close an iron door, supply its lower half with a redstone signal.=Um eine Eisentür zu öffnen oder zu schließen, versorgen Sie die untere Hälfte mit einem Redstone-Signal. -Oak Trapdoor=Eichenfalltür -Acacia Trapdoor=Akazienfalltür -Birch Trapdoor=Birkenfalltür -Spruce Trapdoor=Fichtenfalltür -Dark Oak Trapdoor=Schwarzeichenfalltür -Jungle Trapdoor=Dschungelfalltür -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Holzfalltüren sind horizontale Barrieren, die von Hand oder mit einem Redstone-Signal geöffnet oder geschlossen werden können. Sie belegen den oberen oder unteren Teil eines Blocks, je nachdem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Um die Falltür zu öffnen oder zu schließen, rechtsklicken Sie sie oder schicken Sie ein Redstone-Signal zu ihr. -Iron Trapdoor=Eisenfalltür -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Eisenfalltüren sind horizontale Barrieren, die nur mit einem Redstone-Signal geöffnet oder geschlossen werden können, nicht von Hand. Sie belegen den oberen oder unteren Teil eines Blocks, je nachdem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. -Openable by players and redstone power=Zu öffnen von Spielern und Redstoneenergie -Openable by redstone power=Zu öffnen von Redstoneenergie diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.es.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.es.tr deleted file mode 100644 index 1a510815b..000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.es.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Las puertas de madera son barreras altas de 2 bloques que se pueden abrir o cerrar a mano y con una señal de redstone. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Para abrir o cerrar una puerta de madera, haga clic derecho o suministre a su mitad inferior una señal de redstone. -Oak Door=Puerta de roble -Acacia Door=Puerta de acacia -Birch Door=Puerta de abedul -Dark Oak Door=Puerta de roble oscuro -Jungle Door=Puerta de jungla -Spruce Door=Puerta de abeto -Iron Door=Puerta de Hierro -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Las puertas de hierro son barreras altas de 2 bloques que solo se pueden abrir o cerrar mediante una señal de redstone, no a mano. -To open or close an iron door, supply its lower half with a redstone signal.=Para abrir o cerrar una puerta de hierro, suministre a su mitad inferior una señal de redstone. -Oak Trapdoor=Trampilla de roble -Acacia Trapdoor=Trampilla de acacia -Birch Trapdoor=Trampilla de abedul -Spruce Trapdoor=Trampilla de abeto -Dark Oak Trapdoor=Trampilla de roble oscuro -Jungle Trapdoor=Trampilla de jungla -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Las trampillas de madera son barreras horizontales que se pueden abrir y cerrar a mano o una señal de redstone. Ocupan la parte superior o inferior de un bloque, dependiendo de cómo se hayan colocado. Cuando están abiertos, se pueden subir como una escalera. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Para abrir o cerrar la trampilla, haga clic derecho o envíele una señal de redstone. -Iron Trapdoor=Trampilla de hierro -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Las trampillas de hierro son barreras horizontales que solo pueden abrirse y cerrarse mediante señales de redstone, no a mano. Ocupan la parte superior o inferior de un bloque, dependiendo de cómo se hayan colocado. Cuando están abiertos, se pueden subir como una escalera. diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.fr.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.fr.tr deleted file mode 100644 index 9d1f25d9a..000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.fr.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Les portes en bois sont des barrières hautes à 2 blocs qui peuvent être ouvertes ou fermées à la main et par un signal redstone. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Pour ouvrir ou fermer une porte en bois, faites un clic droit dessus ou fournissez à sa moitié inférieure un signal redstone. -Oak Door=Porte en Chêne -Acacia Door=Porte en Acacia -Birch Door=Porte en Bouleau -Dark Oak Door=Porte en Chêne Noir -Jungle Door=Porte en Acajou -Spruce Door=Porte en Sapin -Iron Door=Porte en Fer -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Les portes en fer sont des barrières hautes à 2 blocs qui ne peuvent être ouvertes ou fermées que par un signal redstone, mais pas à la main. -To open or close an iron door, supply its lower half with a redstone signal.=Pour ouvrir ou fermer une porte en fer, fournir à sa moitié inférieure un signal redstone. -Oak Trapdoor=Trappe en Chêne -Acacia Trapdoor=Trappe en Acacia -Birch Trapdoor=Trappe en Bouleau -Spruce Trapdoor=Trappe en Sapin -Dark Oak Trapdoor=Trappe en Chêne Noir -Jungle Trapdoor=Trappe en Acajou -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Les trappes en bois sont des barrières horizontales qui peuvent être ouvertes et fermées à la main ou par un signal redstone. Ils occupent la partie supérieure ou inférieure d'un bloc, selon la façon dont ils ont été placés. Lorsqu'elles sont ouvertes, elles peuvent être montées comme une échelle. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Pour ouvrir ou fermer la trappe, faites un clic droit dessus ou envoyez-lui un signal redstone. -Iron Trapdoor=Trappe en Fer -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Les trappes en fer sont des barrières horizontales qui ne peuvent être ouvertes et fermées que par des signaux de redstone, mais pas à la main. Ils occupent la partie supérieure ou inférieure d'un bloc, selon la façon dont ils ont été placés. Lorsqu'elles sont ouvertes, elles peuvent être montées comme une échelle. -Openable by players and redstone power=Ouvrable par les joueurs et puissance redstone -Openable by redstone power=Ouvrable par la puissance redstone diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr deleted file mode 100644 index e26c5861a..000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Drewniane drzwi są blokami o wysokości 2, które mogą być otworzone i zamknięte ręcznie bądź przez zasilenie czerwienitem. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Aby otworzyć lub zamknąć drewniane drzwi, kliknij je prawym przyciskiem bądź zasil ich dolną połowę czerwienitem. -Oak Door=Dębowe drzwi -Acacia Door=Akacjowe drzwi -Birch Door=Brzozowe drzwi -Dark Oak Door=Ciemno-dębowe drzwi -Jungle Door=Tropikalne drzwi -Spruce Door=Świerkowe drzwi -Iron Door=Żelazne drzwi -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Żelazne drzwi są blokami o wysokości dwa, które mogą być otwarte lub zamknięte przez zasilanie czerwienitem, ale nie ręcznie. -To open or close an iron door, supply its lower half with a redstone signal.=Aby otworzyć lub zamknąć żelazne drzwi zasil ich dolną część czerwienitem. -Oak Trapdoor=Dębowa klapa -Acacia Trapdoor=Akacjowa klapa -Birch Trapdoor=Brzozowa klapa -Spruce Trapdoor=Świerkowa klapa -Dark Oak Trapdoor=Ciemno-dębowa klapa -Jungle Trapdoor=Tropikalna klapa -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Drewniane klapy są poziomymi barierami, które mogą być otwarte i zamknięte ręcznie bądź przez zasilenie czerwienitem. Zajmują główną lub dolną część bloku w zależności od tego jak zostaną postawione. Gdy są otwarte można się po nich wspinać jak po drabinie. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Aby otworzyć lub zamknąć drewniane klapy, kliknij je prawym przyciskiem bądź zasil ich dolną połowę czerwienitem. -Iron Trapdoor=Żelazna klapa -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Żelazne klapy są poziomymi barierami, które mogą być otwarte i zamknięte tylko przez zasilenie czerwienitem, ale nie ręcznie. Zajmują główną lub dolną część bloku w zależności od tego jak zostaną postawione. Gdy są otwarte można się po nich wspinać jak po drabinie. -Openable by players and redstone power=Mogą być otworzone przez graczy i zasilanie czerwienitem -Openable by redstone power=Mogą być otworzone przez zasilanie czerwienitem diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.ru.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.ru.tr deleted file mode 100644 index 1515a2cd2..000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.ru.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Деревянные двери это сдвоенные блочные преграды, которые можно открывать и закрывать вручную и по сигналу редстоуна. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Чтобы открыть или закрыть деревянную дверь, кликните правой либо подайте к её нижней части сигнал редстоуна. -Oak Door=Дубовая дверь -Acacia Door=Дверь из акации -Birch Door=Берёзовая дверь -Dark Oak Door=Дверь из тёмного дуба -Jungle Door=Дверь из дерева джунглей -Spruce Door=Еловая дверь -Iron Door=Железная дверь -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Железные двери это сдвоенные блочные преграды, которые можно открывать и закрывать только по сигналу редстоуна и нельзя вручную. -To open or close an iron door, supply its lower half with a redstone signal.=Чтобы открыть или закрыть железную дверь, подайте на её нижнюю часть сигнал редстоуна. -Oak Trapdoor=Дубовый люк -Acacia Trapdoor=Люк из акации -Birch Trapdoor=Берёзовый люк -Spruce Trapdoor=Еловый люк -Dark Oak Trapdoor=Люк из тёмного дуба -Jungle Trapdoor=Люк из дерева джунглей -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Деревянные люки это горизонтальные преграды, которые можно открывать и закрывать вручную и по сигналу редстоуна. Они занимают верхнюю или нижнюю часть блока, в зависимости от того, как они были установлены. В открытом состоянии по ним можно карабкаться, как по лестницам. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Чтобы открыть или закрыть деревянные люк, кликните по нему правой клавишей либо подайте на него сигнал редстоуна. -Iron Trapdoor=Железный люк -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Железные люки это горизонтальные преграды, которые можно открывать и закрывать только по сигналу редстоуна и нельзя вручную. Они занимают верхнюю или нижнюю часть блока, в зависимости от того, как они были установлены. В открытом состоянии по ним можно карабкаться, как по лестницам. -Openable by players and redstone power=Открывается игроками и действием редстоуна -Openable by redstone power=Открывается действием редстоуна diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.zh_TW.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.zh_TW.tr deleted file mode 100644 index 62e2761d7..000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.zh_TW.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=木門是2格高的障礙物,可以用手和紅石信號來打開或關閉。 -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=要打開或關閉一扇木門,請右擊它或在其下半部分提供紅石信號。 -Oak Door=橡木門 -Acacia Door=相思木門 -Birch Door=樺木門 -Dark Oak Door=黑橡木門 -Jungle Door=叢林木門 -Spruce Door=杉木門 -Iron Door=鐵門 -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=鐵門是2格高的障礙物,能通過紅石信號打開或關閉,但不能用手。 -To open or close an iron door, supply its lower half with a redstone signal.=要打開或關閉鐵門,請在其下半部分提供紅石信號。 -Oak Trapdoor=橡木地板門 -Acacia Trapdoor=相思木地板門 -Birch Trapdoor=樺木地板門 -Spruce Trapdoor=杉木地板門 -Dark Oak Trapdoor=黑橡木地板門 -Jungle Trapdoor=叢林木地板門 -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=木質地板門是水平的障礙物,可以用手或紅石信號來打開和關閉。它們佔據一個方塊的上部或下部,這取決於它們被放置的方式。當打開時,它們可以像梯子一樣被爬上去。 -To open or close the trapdoor, rightclick it or send a redstone signal to it.=要打開或關閉活板門,請右擊它或向它發送紅石信號。 -Iron Trapdoor=鐵製地板門 -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=木質地板門是水平的障礙物,能通過紅石信號打開或關閉,但不能用手。它們佔據一個方塊的上部或下部,這取決於它們被放置的方式。當打開時,它們可以像梯子一樣被爬上去。 -Openable by players and redstone power=可以用手和紅石信號來打開 -Openable by redstone power=能通過紅石信號打開 diff --git a/mods/ITEMS/mcl_doors/locale/template.txt b/mods/ITEMS/mcl_doors/locale/template.txt deleted file mode 100644 index d8c7c8609..000000000 --- a/mods/ITEMS/mcl_doors/locale/template.txt +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.= -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.= -Oak Door= -Acacia Door= -Birch Door= -Dark Oak Door= -Jungle Door= -Spruce Door= -Iron Door= -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.= -To open or close an iron door, supply its lower half with a redstone signal.= -Oak Trapdoor= -Acacia Trapdoor= -Birch Trapdoor= -Spruce Trapdoor= -Dark Oak Trapdoor= -Jungle Trapdoor= -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.= -To open or close the trapdoor, rightclick it or send a redstone signal to it.= -Iron Trapdoor= -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.= -Openable by players and redstone power= -Openable by redstone power= diff --git a/mods/ITEMS/mcl_doors/mod.conf b/mods/ITEMS/mcl_doors/mod.conf deleted file mode 100644 index ed2b094a8..000000000 --- a/mods/ITEMS/mcl_doors/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_doors -depends = mcl_core, mcl_sounds, mesecons -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_doors/register.lua b/mods/ITEMS/mcl_doors/register.lua deleted file mode 100644 index c998f6538..000000000 --- a/mods/ITEMS/mcl_doors/register.lua +++ /dev/null @@ -1,268 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - ---[[ Doors ]] - -local wood_longdesc = S("Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.") -local wood_usagehelp = S("To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.") - ---- Oak Door --- -mcl_doors:register_door("mcl_doors:wooden_door", { - description = S("Oak Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "doors_item_wood.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_wood_lower.png", "mcl_doors_door_wood_side_lower.png"}, - tiles_top = {"mcl_doors_door_wood_upper.png", "mcl_doors_door_wood_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:wooden_door 3", - recipe = { - {"mcl_core:wood", "mcl_core:wood"}, - {"mcl_core:wood", "mcl_core:wood"}, - {"mcl_core:wood", "mcl_core:wood"} - } -}) - ---- Acacia Door -- -mcl_doors:register_door("mcl_doors:acacia_door", { - description = S("Acacia Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_acacia.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_acacia_lower.png", "mcl_doors_door_acacia_side_lower.png"}, - tiles_top = {"mcl_doors_door_acacia_upper.png", "mcl_doors_door_acacia_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:acacia_door 3", - recipe = { - {"mcl_core:acaciawood", "mcl_core:acaciawood"}, - {"mcl_core:acaciawood", "mcl_core:acaciawood"}, - {"mcl_core:acaciawood", "mcl_core:acaciawood"} - } -}) - ---- Birch Door -- -mcl_doors:register_door("mcl_doors:birch_door", { - description = S("Birch Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_birch.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_birch_lower.png", "mcl_doors_door_birch_side_lower.png"}, - tiles_top = {"mcl_doors_door_birch_upper.png", "mcl_doors_door_birch_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:birch_door 3", - recipe = { - {"mcl_core:birchwood", "mcl_core:birchwood"}, - {"mcl_core:birchwood", "mcl_core:birchwood"}, - {"mcl_core:birchwood", "mcl_core:birchwood"}, - } -}) - ---- Dark Oak Door -- -mcl_doors:register_door("mcl_doors:dark_oak_door", { - description = S("Dark Oak Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_dark_oak.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_dark_oak_lower.png", "mcl_doors_door_dark_oak_side_lower.png"}, - tiles_top = {"mcl_doors_door_dark_oak_upper.png", "mcl_doors_door_dark_oak_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:dark_oak_door 3", - recipe = { - {"mcl_core:darkwood", "mcl_core:darkwood"}, - {"mcl_core:darkwood", "mcl_core:darkwood"}, - {"mcl_core:darkwood", "mcl_core:darkwood"}, - } -}) - ---- Jungle Door -- -mcl_doors:register_door("mcl_doors:jungle_door", { - description = S("Jungle Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_jungle.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_jungle_lower.png", "mcl_doors_door_jungle_side_lower.png"}, - tiles_top = {"mcl_doors_door_jungle_upper.png", "mcl_doors_door_jungle_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:jungle_door 3", - recipe = { - {"mcl_core:junglewood", "mcl_core:junglewood"}, - {"mcl_core:junglewood", "mcl_core:junglewood"}, - {"mcl_core:junglewood", "mcl_core:junglewood"} - } -}) - ---- Spruce Door -- -mcl_doors:register_door("mcl_doors:spruce_door", { - description = S("Spruce Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_spruce.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_spruce_lower.png", "mcl_doors_door_spruce_side_lower.png"}, - tiles_top = {"mcl_doors_door_spruce_upper.png", "mcl_doors_door_spruce_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:spruce_door 3", - recipe = { - {"mcl_core:sprucewood", "mcl_core:sprucewood"}, - {"mcl_core:sprucewood", "mcl_core:sprucewood"}, - {"mcl_core:sprucewood", "mcl_core:sprucewood"} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:wooden_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:jungle_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:dark_oak_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:birch_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:acacia_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:spruce_door", - burntime = 10, -}) - ---- Iron Door --- -mcl_doors:register_door("mcl_doors:iron_door", { - description = S("Iron Door"), - _doc_items_longdesc = S("Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand."), - _doc_items_usagehelp = S("To open or close an iron door, supply its lower half with a redstone signal."), - inventory_image = "doors_item_steel.png", - groups = {pickaxey=1, mesecon_effector_on=1}, - _mcl_hardness = 5, - _mcl_blast_resistance = 5, - tiles_bottom = {"mcl_doors_door_iron_lower.png^[transformFX", "mcl_doors_door_iron_side_lower.png"}, - tiles_top = {"mcl_doors_door_iron_upper.png^[transformFX", "mcl_doors_door_iron_side_upper.png"}, - sounds = mcl_sounds.node_sound_metal_defaults(), - sound_open = "doors_steel_door_open", - sound_close = "doors_steel_door_close", - - only_redstone_can_open = true, -}) - -minetest.register_craft({ - output = "mcl_doors:iron_door 3", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"} - } -}) - - - ---[[ Trapdoors ]] -local woods = { - -- id, desc, texture, craftitem - { "trapdoor", S("Oak Trapdoor"), "doors_trapdoor.png", "doors_trapdoor_side.png", "mcl_core:wood" }, - { "acacia_trapdoor", S("Acacia Trapdoor"), "mcl_doors_trapdoor_acacia.png", "mcl_doors_trapdoor_acacia_side.png", "mcl_core:acaciawood" }, - { "birch_trapdoor", S("Birch Trapdoor"), "mcl_doors_trapdoor_birch.png", "mcl_doors_trapdoor_birch_side.png", "mcl_core:birchwood" }, - { "spruce_trapdoor", S("Spruce Trapdoor"), "mcl_doors_trapdoor_spruce.png", "mcl_doors_trapdoor_spruce_side.png", "mcl_core:sprucewood" }, - { "dark_oak_trapdoor", S("Dark Oak Trapdoor"), "mcl_doors_trapdoor_dark_oak.png", "mcl_doors_trapdoor_dark_oak_side.png", "mcl_core:darkwood" }, - { "jungle_trapdoor", S("Jungle Trapdoor"), "mcl_doors_trapdoor_jungle.png", "mcl_doors_trapdoor_jungle_side.png", "mcl_core:junglewood" }, -} - -for w=1, #woods do - mcl_doors:register_trapdoor("mcl_doors:"..woods[w][1], { - description = woods[w][2], - _doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."), - _doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."), - tile_front = woods[w][3], - tile_side = woods[w][4], - wield_image = woods[w][3], - groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - sounds = mcl_sounds.node_sound_wood_defaults(), - }) - - minetest.register_craft({ - output = "mcl_doors:"..woods[w][1].." 2", - recipe = { - {woods[w][5], woods[w][5], woods[w][5]}, - {woods[w][5], woods[w][5], woods[w][5]}, - } - }) - - minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:"..woods[w][1], - burntime = 15, - }) -end - -mcl_doors:register_trapdoor("mcl_doors:iron_trapdoor", { - description = S("Iron Trapdoor"), - _doc_items_longdesc = S("Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."), - tile_front = "doors_trapdoor_steel.png", - tile_side = "doors_trapdoor_steel_side.png", - wield_image = "doors_trapdoor_steel.png", - groups = {pickaxey=1, mesecon_effector_on=1}, - _mcl_hardness = 5, - _mcl_blast_resistance = 5, - sounds = mcl_sounds.node_sound_metal_defaults(), - sound_open = "doors_steel_door_open", - sound_close = "doors_steel_door_close", - - only_redstone_can_open = true, -}) - -minetest.register_craft({ - output = "mcl_doors:iron_trapdoor", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - } -}) diff --git a/mods/ITEMS/mcl_doors/sounds/doors_door_close.ogg b/mods/ITEMS/mcl_doors/sounds/doors_door_close.ogg deleted file mode 100644 index b4a13ec72..000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_door_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/sounds/doors_door_open.ogg b/mods/ITEMS/mcl_doors/sounds/doors_door_open.ogg deleted file mode 100644 index d03570eef..000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_door_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_close.ogg b/mods/ITEMS/mcl_doors/sounds/doors_steel_door_close.ogg deleted file mode 100644 index aea7be670..000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_open.ogg b/mods/ITEMS/mcl_doors/sounds/doors_steel_door_open.ogg deleted file mode 100644 index de8747701..000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_item_steel.png b/mods/ITEMS/mcl_doors/textures/doors_item_steel.png deleted file mode 100644 index 82a500baf..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_item_steel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_item_wood.png b/mods/ITEMS/mcl_doors/textures/doors_item_wood.png deleted file mode 100644 index ca3a31862..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_item_wood.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor.png deleted file mode 100644 index 24e34c35b..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_side.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor_side.png deleted file mode 100644 index 97a5904c4..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel.png deleted file mode 100644 index dc8f5325c..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel_side.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel_side.png deleted file mode 100644 index 109829f5b..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia.png deleted file mode 100644 index 11657784d..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_lower.png deleted file mode 100644 index 510c04728..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_lower.png deleted file mode 100644 index 9faa931d0..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_upper.png deleted file mode 100644 index f1c04b99e..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_upper.png deleted file mode 100644 index 7e97bb718..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch.png deleted file mode 100644 index 58af89e58..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_lower.png deleted file mode 100644 index 844ce3a21..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_lower.png deleted file mode 100644 index dd7310ef2..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_upper.png deleted file mode 100644 index a6805e4f6..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_upper.png deleted file mode 100644 index 3de49d6ab..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak.png deleted file mode 100644 index 7b827cc46..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_lower.png deleted file mode 100644 index b3b7e81da..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_lower.png deleted file mode 100644 index 51f28b35e..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_upper.png deleted file mode 100644 index db254813e..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_upper.png deleted file mode 100644 index 398547b91..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_lower.png deleted file mode 100644 index 583b3e261..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_lower.png deleted file mode 100644 index 583b3e261..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_upper.png deleted file mode 100644 index a30b93003..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_upper.png deleted file mode 100644 index 093d91ce3..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle.png deleted file mode 100644 index 29032482c..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_lower.png deleted file mode 100644 index dde5be774..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_lower.png deleted file mode 100644 index 6014b5303..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_upper.png deleted file mode 100644 index 9f01843a6..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_upper.png deleted file mode 100644 index c69c15717..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce.png deleted file mode 100644 index 847ec3f9b..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_lower.png deleted file mode 100644 index ebe81d620..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_lower.png deleted file mode 100644 index c46055962..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_upper.png deleted file mode 100644 index 8ca2474d4..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_upper.png deleted file mode 100644 index 9d7daaab9..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_lower.png deleted file mode 100644 index e69244b56..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_lower.png deleted file mode 100644 index 6ee18505d..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_upper.png deleted file mode 100644 index abdbb0e5c..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_upper.png deleted file mode 100644 index 4e75538c2..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia.png deleted file mode 100644 index 7e01900ed..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia_side.png deleted file mode 100644 index e63f839e2..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch.png deleted file mode 100644 index fbd39dbcb..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch_side.png deleted file mode 100644 index 040eaaec6..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak.png deleted file mode 100644 index 1a75bb9a6..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak_side.png deleted file mode 100644 index d344c6352..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle.png deleted file mode 100644 index cf83de6a0..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle_side.png deleted file mode 100644 index cc7cbafac..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce.png deleted file mode 100644 index 3c743f977..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce_side.png deleted file mode 100644 index d05d717ca..000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/API.md b/mods/ITEMS/mcl_dye/API.md deleted file mode 100644 index 04169f966..000000000 --- a/mods/ITEMS/mcl_dye/API.md +++ /dev/null @@ -1,14 +0,0 @@ -# mcl_dye - -# Bone meal API -Callback and particle functions. - -## mcl_dye.add_bone_meal_particle(pos, def) -Spawns standard or custom bone meal particles. -* `pos`: position, is ignored if you define def.minpos and def.maxpos -* `def`: (optional) particle definition - -## mcl_dye.register_on_bone_meal_apply(function(pointed_thing, user)) -Called when the bone meal is applied anywhere. -* `pointed_thing`: exact pointing location (see Minetest API), where the bone meal is applied -* `user`: ObjectRef of the player who aplied the bone meal, can be nil! \ No newline at end of file diff --git a/mods/ITEMS/mcl_dye/README.txt b/mods/ITEMS/mcl_dye/README.txt deleted file mode 100644 index dc0ea1647..000000000 --- a/mods/ITEMS/mcl_dye/README.txt +++ /dev/null @@ -1,15 +0,0 @@ -Minetest 0.4 mod: dye -====================== - -See init.lua for documentation. - -License of source code: ---------------------------------------- -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - diff --git a/mods/ITEMS/mcl_dye/init.lua b/mods/ITEMS/mcl_dye/init.lua deleted file mode 100644 index 727a78460..000000000 --- a/mods/ITEMS/mcl_dye/init.lua +++ /dev/null @@ -1,563 +0,0 @@ --- To make recipes that will work with any dye ever made by anybody, define --- them based on groups. --- You can select any group of groups, based on your need for amount of colors. --- basecolor: 9, excolor: 17, unicolor: 89 --- --- Example of one shapeless recipe using a color group: --- Note: As this uses basecolor_*, you'd need 9 of these. --- minetest.register_craft({ --- type = "shapeless", --- output = ":item_yellow", --- recipe = {":item_no_color", "group:basecolor_yellow"}, --- }) - -mcl_dye = {} - -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math -local string = string - --- Other mods can use these for looping through available colors -mcl_dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} -mcl_dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"} - --- Base color groups: --- - basecolor_white --- - basecolor_grey --- - basecolor_black --- - basecolor_red --- - basecolor_yellow --- - basecolor_green --- - basecolor_cyan --- - basecolor_blue --- - basecolor_magenta - --- Extended color groups (* = equal to a base color): --- * excolor_white --- - excolor_lightgrey --- * excolor_grey --- - excolor_darkgrey --- * excolor_black --- * excolor_red --- - excolor_orange --- * excolor_yellow --- - excolor_lime --- * excolor_green --- - excolor_aqua --- * excolor_cyan --- - excolor_sky_blue --- * excolor_blue --- - excolor_violet --- * excolor_magenta --- - excolor_red_violet - --- The whole unifieddyes palette as groups: --- - unicolor_ --- For the following, no white/grey/black is allowed: --- - unicolor_medium_ --- - unicolor_dark_ --- - unicolor_light_ --- - unicolor__s50 --- - unicolor_medium__s50 --- - unicolor_dark__s50 - --- Local stuff -local dyelocal = {} - --- This collection of colors is partly a historic thing, partly something else. -dyelocal.dyes = { - {"white", "mcl_dye_white", S("Bone Meal"), {dye=1, craftitem=1, basecolor_white=1, excolor_white=1, unicolor_white=1}}, - {"grey", "dye_grey", S("Light Grey Dye"), {dye=1, craftitem=1, basecolor_grey=1, excolor_grey=1, unicolor_grey=1}}, - {"dark_grey", "dye_dark_grey", S("Grey Dye"), {dye=1, craftitem=1, basecolor_grey=1, excolor_darkgrey=1, unicolor_darkgrey=1}}, - {"black", "mcl_dye_black", S("Ink Sac"), {dye=1, craftitem=1, basecolor_black=1, excolor_black=1, unicolor_black=1}}, - {"violet", "dye_violet", S("Purple Dye"), {dye=1, craftitem=1, basecolor_magenta=1, excolor_violet=1, unicolor_violet=1}}, - {"blue", "mcl_dye_blue", S("Lapis Lazuli"), {dye=1, craftitem=1, basecolor_blue=1, excolor_blue=1, unicolor_blue=1}}, - {"lightblue", "mcl_dye_light_blue", S("Light Blue Dye"), {dye=1, craftitem=1, basecolor_blue=1, excolor_blue=1, unicolor_light_blue=1}}, - {"cyan", "dye_cyan", S("Cyan Dye"), {dye=1, craftitem=1, basecolor_cyan=1, excolor_cyan=1, unicolor_cyan=1}}, - {"dark_green", "dye_dark_green", S("Cactus Green"),{dye=1, craftitem=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}}, - {"green", "mcl_dye_lime", S("Lime Dye"), {dye=1, craftitem=1, basecolor_green=1, excolor_green=1, unicolor_green=1}}, - {"yellow", "dye_yellow", S("Dandelion Yellow"), {dye=1, craftitem=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}}, - {"brown", "mcl_dye_brown", S("Cocoa Beans"), {dye=1, craftitem=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1, compostability = 65}}, - {"orange", "dye_orange", S("Orange Dye"), {dye=1, craftitem=1, basecolor_orange=1, excolor_orange=1, unicolor_orange=1}}, - {"red", "dye_red", S("Rose Red"), {dye=1, craftitem=1, basecolor_red=1, excolor_red=1, unicolor_red=1}}, - {"magenta", "dye_magenta", S("Magenta Dye"), {dye=1, craftitem=1, basecolor_magenta=1, excolor_red_violet=1,unicolor_red_violet=1}}, - {"pink", "dye_pink", S("Pink Dye"), {dye=1, craftitem=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}}, -} - -local mg_name = minetest.get_mapgen_setting("mg_name") - -dyelocal.unicolor_to_dye_id = {} -for d=1, #dyelocal.dyes do - for k, _ in pairs(dyelocal.dyes[d][4]) do - if string.sub(k, 1, 9) == "unicolor_" then - dyelocal.unicolor_to_dye_id[k] = dyelocal.dyes[d][1] - end - end -end - --- Takes an unicolor group name (e.g. “unicolor_white”) and returns a corresponding dye name (if it exists), nil otherwise. -function mcl_dye.unicolor_to_dye(unicolor_group) - local color = dyelocal.unicolor_to_dye_id[unicolor_group] - if color then - return "mcl_dye:" .. color - else - return nil - end -end - --- Define items -for _, row in ipairs(dyelocal.dyes) do - local name = row[1] - -- White and brown dyes are defined explicitly below - if name ~= "white" and name ~= "brown" then - local img = row[2] - local description = row[3] - local groups = row[4] - local item_name = "mcl_dye:"..name - local item_image = img..".png" - minetest.register_craftitem(item_name, { - inventory_image = item_image, - description = description, - _doc_items_longdesc = S("This item is a dye which is used for dyeing and crafting."), - _doc_items_usagehelp = S("Rightclick on a sheep to dye its wool. Other things are dyed by crafting."), - groups = groups, - stack_max = 64, - }) - end -end - --- Bone Meal -function mcl_dye.add_bone_meal_particle(pos, def) - if not def then - def = {} - end - minetest.add_particlespawner({ - amount = def.amount or 10, - time = def.time or 0.1, - minpos = def.minpos or vector.subtract(pos, 0.5), - maxpos = def.maxpos or vector.add(pos, 0.5), - minvel = def.minvel or vector.new(-0.01, 0.01, -0.01), - maxvel = def.maxvel or vector.new(0.01, 0.01, 0.01), - minacc = def.minacc or vector.new(0, 0, 0), - maxacc = def.maxacc or vector.new(0, 0, 0), - minexptime = def.minexptime or 1, - maxexptime = def.maxexptime or 4, - minsize = def.minsize or 0.7, - maxsize = def.maxsize or 2.4, - texture = "mcl_particles_bonemeal.png^[colorize:#00EE00:125", -- TODO: real MC color - glow = def.glow or 1, - }) -end - -mcl_dye.bone_meal_callbacks = {} - -function mcl_dye.register_on_bone_meal_apply(func) - table.insert(mcl_dye.bone_meal_callbacks, func) -end - -local function apply_bone_meal(pointed_thing) - -- Bone meal currently spawns all flowers found in the plains. - local flowers_table_plains = { - "mcl_flowers:dandelion", - "mcl_flowers:dandelion", - "mcl_flowers:poppy", - - "mcl_flowers:oxeye_daisy", - "mcl_flowers:tulip_orange", - "mcl_flowers:tulip_red", - "mcl_flowers:tulip_white", - "mcl_flowers:tulip_pink", - "mcl_flowers:azure_bluet", - } - local flowers_table_simple = { - "mcl_flowers:dandelion", - "mcl_flowers:poppy", - } - local flowers_table_swampland = { - "mcl_flowers:blue_orchid", - } - local flowers_table_flower_forest = { - "mcl_flowers:dandelion", - "mcl_flowers:poppy", - "mcl_flowers:oxeye_daisy", - "mcl_flowers:tulip_orange", - "mcl_flowers:tulip_red", - "mcl_flowers:tulip_white", - "mcl_flowers:tulip_pink", - "mcl_flowers:azure_bluet", - "mcl_flowers:allium", - } - - local pos = pointed_thing.under - local n = minetest.get_node(pos) - if n.name == "" then return false end - - for _, func in pairs(mcl_dye.bone_meal_callbacks) do - if func(pointed_thing, user) then - return true - end - end - - if minetest.get_item_group(n.name, "sapling") >= 1 then - mcl_dye.add_bone_meal_particle(pos) - -- Saplings: 45% chance to advance growth stage - if math.random(1,100) <= 45 then - return mcl_core.grow_sapling(pos, n) - end - elseif minetest.get_item_group(n.name, "mushroom") == 1 then - mcl_dye.add_bone_meal_particle(pos) - -- Try to grow huge mushroom - - -- Must be on a dirt-type block - local below = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if below.name ~= "mcl_core:mycelium" and below.name ~= "mcl_core:dirt" and minetest.get_item_group(below.name, "grass_block") ~= 1 and below.name ~= "mcl_core:coarse_dirt" and below.name ~= "mcl_core:podzol" then - return false - end - - -- Select schematic - local schematic, offset, height - if n.name == "mcl_mushrooms:mushroom_brown" then - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_huge_brown.mts" - offset = { x = -3, y = -1, z = -3 } - height = 8 - elseif n.name == "mcl_mushrooms:mushroom_red" then - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_huge_red.mts" - offset = { x = -2, y = -1, z = -2 } - height = 8 - else - return false - end - -- 40% chance - if math.random(1, 100) <= 40 then - -- Check space requirements - for i=1,3 do - local cpos = vector.add(pos, {x=0, y=i, z=0}) - if minetest.get_node(cpos).name ~= "air" then - return false - end - end - local yoff = 3 - local minp, maxp = {x=pos.x-3, y=pos.y+yoff, z=pos.z-3}, {x=pos.x+3, y=pos.y+yoff+(height-3), z=pos.z+3} - local diff = vector.subtract(maxp, minp) - diff = vector.add(diff, {x=1,y=1,z=1}) - local totalnodes = diff.x * diff.y * diff.z - local goodnodes = minetest.find_nodes_in_area(minp, maxp, {"air", "group:leaves"}) - if #goodnodes < totalnodes then - return false - end - - -- Place the huge mushroom - minetest.remove_node(pos) - local place_pos = vector.add(pos, offset) - local ok = minetest.place_schematic(place_pos, schematic, 0, nil, false) - return ok ~= nil - end - return false - -- Wheat, Potato, Carrot, Pumpkin Stem, Melon Stem: Advance by 2-5 stages - elseif string.find(n.name, "mcl_farming:wheat_") then - mcl_dye.add_bone_meal_particle(pos) - local stages = math.random(2, 5) - return mcl_farming:grow_plant("plant_wheat", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:potato_") then - mcl_dye.add_bone_meal_particle(pos) - local stages = math.random(2, 5) - return mcl_farming:grow_plant("plant_potato", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:carrot_") then - mcl_dye.add_bone_meal_particle(pos) - local stages = math.random(2, 5) - return mcl_farming:grow_plant("plant_carrot", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:pumpkin_") then - mcl_dye.add_bone_meal_particle(pos) - local stages = math.random(2, 5) - return mcl_farming:grow_plant("plant_pumpkin_stem", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:melontige_") then - mcl_dye.add_bone_meal_particle(pos) - local stages = math.random(2, 5) - return mcl_farming:grow_plant("plant_melon_stem", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:beetroot_") then - mcl_dye.add_bone_meal_particle(pos) - -- Beetroot: 75% chance to advance to next stage - if math.random(1, 100) <= 75 then - return mcl_farming:grow_plant("plant_beetroot", pos, n, 1, true) - end - elseif n.name == "mcl_cocoas:cocoa_1" or n.name == "mcl_cocoas:cocoa_2" then - mcl_dye.add_bone_meal_particle(pos) - -- Cocoa: Advance by 1 stage - mcl_cocoas.grow(pos) - return true - elseif minetest.get_item_group(n.name, "grass_block") == 1 then - -- Grass Block: Generate tall grass and random flowers all over the place - for i = -7, 7 do - for j = -7, 7 do - for y = -1, 1 do - pos = vector.offset(pointed_thing.above, i, y, j) - n = minetest.get_node(pos) - local n2 = minetest.get_node(vector.offset(pos, 0, -1, 0)) - - if n.name ~= "" and n.name == "air" and (minetest.get_item_group(n2.name, "grass_block_no_snow") == 1) then - -- Randomly generate flowers, tall grass or nothing - if math.random(1, 100) <= 90 / ((math.abs(i) + math.abs(j)) / 2)then - -- 90% tall grass, 10% flower - mcl_dye.add_bone_meal_particle(pos, {amount = 4}) - if math.random(1,100) <= 90 then - local col = n2.param2 - minetest.add_node(pos, {name="mcl_flowers:tallgrass", param2=col}) - else - local flowers_table - if mg_name == "v6" then - flowers_table = flowers_table_plains - else - local biome = minetest.get_biome_name(minetest.get_biome_data(pos).biome) - if biome == "Swampland" or biome == "Swampland_shore" or biome == "Swampland_ocean" or biome == "Swampland_deep_ocean" or biome == "Swampland_underground" then - flowers_table = flowers_table_swampland - elseif biome == "FlowerForest" or biome == "FlowerForest_beach" or biome == "FlowerForest_ocean" or biome == "FlowerForest_deep_ocean" or biome == "FlowerForest_underground" then - flowers_table = flowers_table_flower_forest - elseif biome == "Plains" or biome == "Plains_beach" or biome == "Plains_ocean" or biome == "Plains_deep_ocean" or biome == "Plains_underground" or biome == "SunflowerPlains" or biome == "SunflowerPlains_ocean" or biome == "SunflowerPlains_deep_ocean" or biome == "SunflowerPlains_underground" then - flowers_table = flowers_table_plains - else - flowers_table = flowers_table_simple - end - end - minetest.add_node(pos, {name=flowers_table[math.random(1, #flowers_table)]}) - end - end - end - end - end - end - return true - - -- Double flowers: Drop corresponding item - elseif n.name == "mcl_flowers:rose_bush" or n.name == "mcl_flowers:rose_bush_top" then - mcl_dye.add_bone_meal_particle(pos) - minetest.add_item(pos, "mcl_flowers:rose_bush") - return true - elseif n.name == "mcl_flowers:peony" or n.name == "mcl_flowers:peony_top" then - mcl_dye.add_bone_meal_particle(pos) - minetest.add_item(pos, "mcl_flowers:peony") - return true - elseif n.name == "mcl_flowers:lilac" or n.name == "mcl_flowers:lilac_top" then - mcl_dye.add_bone_meal_particle(pos) - minetest.add_item(pos, "mcl_flowers:lilac") - return true - elseif n.name == "mcl_flowers:sunflower" or n.name == "mcl_flowers:sunflower_top" then - mcl_dye.add_bone_meal_particle(pos) - minetest.add_item(pos, "mcl_flowers:sunflower") - return true - - elseif n.name == "mcl_flowers:tallgrass" then - mcl_dye.add_bone_meal_particle(pos) - -- Tall Grass: Grow into double tallgrass - local toppos = { x=pos.x, y=pos.y+1, z=pos.z } - local topnode = minetest.get_node(toppos) - if minetest.registered_nodes[topnode.name].buildable_to then - minetest.set_node(pos, { name = "mcl_flowers:double_grass", param2 = n.param2 }) - minetest.set_node(toppos, { name = "mcl_flowers:double_grass_top", param2 = n.param2 }) - return true - end - - elseif n.name == "mcl_flowers:fern" then - mcl_dye.add_bone_meal_particle(pos) - -- Fern: Grow into large fern - local toppos = { x=pos.x, y=pos.y+1, z=pos.z } - local topnode = minetest.get_node(toppos) - if minetest.registered_nodes[topnode.name].buildable_to then - minetest.set_node(pos, { name = "mcl_flowers:double_fern", param2 = n.param2 }) - minetest.set_node(toppos, { name = "mcl_flowers:double_fern_top", param2 = n.param2 }) - return true - end - end - - return false -end - -minetest.register_craftitem("mcl_dye:white", { - inventory_image = "mcl_dye_white.png", - description = S("Bone Meal"), - _tt_help = S("Speeds up plant growth"), - _doc_items_longdesc = S("Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants."), - _doc_items_usagehelp = S("Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place."), - stack_max = 64, - groups = dyelocal.dyes[1][4], - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - - -- Use the bone meal on the ground - if (apply_bone_meal(pointed_thing, user) and (not minetest.is_creative_enabled(user:get_player_name()))) then - itemstack:take_item() - end - return itemstack - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Apply bone meal, if possible - local pointed_thing - if dropnode.name == "air" then - pointed_thing = { above = droppos, under = { x=droppos.x, y=droppos.y-1, z=droppos.z } } - else - pointed_thing = { above = pos, under = droppos } - end - local success = apply_bone_meal(pointed_thing, nil) - if success then - stack:take_item() - end - return stack - end, - _dispense_into_walkable = true -}) - -minetest.register_craftitem("mcl_dye:brown", { - inventory_image = "mcl_dye_brown.png", - _tt_help = S("Grows at the side of jungle trees"), - _doc_items_longdesc = S("Cocoa beans are a brown dye and can be used to plant cocoas."), - _doc_items_usagehelp = S("Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa."), - description = S("Cocoa Beans"), - stack_max = 64, - groups = dyelocal.dyes[12][4], - on_place = function(itemstack, placer, pointed_thing) - return mcl_cocoas.place(itemstack, placer, pointed_thing, "mcl_cocoas:cocoa_1") - end, -}) - --- Dye mixing -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:dark_grey 2", - recipe = {"mcl_dye:black", "mcl_dye:white"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:lightblue 2", - recipe = {"mcl_dye:blue", "mcl_dye:white"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:grey 3", - recipe = {"mcl_dye:black", "mcl_dye:white", "mcl_dye:white"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:grey 2", - recipe = {"mcl_dye:dark_grey", "mcl_dye:white"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:green 2", - recipe = {"mcl_dye:dark_green", "mcl_dye:white"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:magenta 4", - recipe = {"mcl_dye:blue", "mcl_dye:white", "mcl_dye:red", "mcl_dye:red"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:magenta 3", - recipe = {"mcl_dye:pink", "mcl_dye:red", "mcl_dye:blue"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:magenta 2", - recipe = {"mcl_dye:violet", "mcl_dye:pink"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:pink 2", - recipe = {"mcl_dye:red", "mcl_dye:white"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:cyan 2", - recipe = {"mcl_dye:blue", "mcl_dye:dark_green"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:violet 2", - recipe = {"mcl_dye:blue", "mcl_dye:red"}, -}) -minetest.register_craft({ - type = "shapeless", - output = "mcl_dye:orange 2", - recipe = {"mcl_dye:yellow", "mcl_dye:red"}, -}) - --- Dye creation -minetest.register_craft({ - output = "mcl_dye:yellow", - recipe = {{"mcl_flowers:dandelion"}}, -}) -minetest.register_craft({ - output = "mcl_dye:yellow 2", - recipe = {{"mcl_flowers:sunflower"}}, -}) -minetest.register_craft({ - output = "mcl_dye:lightblue", - recipe = {{"mcl_flowers:blue_orchid"}}, -}) -minetest.register_craft({ - output = "mcl_dye:grey", - recipe = {{"mcl_flowers:azure_bluet"}}, -}) -minetest.register_craft({ - output = "mcl_dye:grey", - recipe = {{"mcl_flowers:oxeye_daisy"}}, -}) -minetest.register_craft({ - output = "mcl_dye:grey", - recipe = {{"mcl_flowers:tulip_white"}}, -}) -minetest.register_craft({ - output = "mcl_dye:magenta", - recipe = {{"mcl_flowers:allium"}}, -}) -minetest.register_craft({ - output = "mcl_dye:magenta 2", - recipe = {{"mcl_flowers:lilac"}}, -}) -minetest.register_craft({ - output = "mcl_dye:orange", - recipe = {{"mcl_flowers:tulip_orange"}}, -}) -minetest.register_craft({ - output = "mcl_dye:pink", - recipe = {{"mcl_flowers:tulip_pink"}}, -}) -minetest.register_craft({ - output = "mcl_dye:pink 2", - recipe = {{"mcl_flowers:peony"}}, -}) -minetest.register_craft({ - output = "mcl_dye:red", - recipe = {{"mcl_farming:beetroot_item"}}, -}) -minetest.register_craft({ - output = "mcl_dye:red", - recipe = {{"mcl_flowers:poppy"}}, -}) -minetest.register_craft({ - output = "mcl_dye:red", - recipe = {{"mcl_flowers:tulip_red"}}, -}) -minetest.register_craft({ - output = "mcl_dye:red 2", - recipe = {{"mcl_flowers:rose_bush"}}, -}) -minetest.register_craft({ - type = "cooking", - output = "mcl_dye:dark_green", - recipe = "mcl_core:cactus", - cooktime = 10, -}) -minetest.register_craft({ - output = "mcl_dye:white 3", - recipe = {{"mcl_mobitems:bone"}}, -}) diff --git a/mods/ITEMS/mcl_dye/locale/mcl_dye.de.tr b/mods/ITEMS/mcl_dye/locale/mcl_dye.de.tr deleted file mode 100644 index 29cd4d20d..000000000 --- a/mods/ITEMS/mcl_dye/locale/mcl_dye.de.tr +++ /dev/null @@ -1,27 +0,0 @@ -# textdomain: mcl_dye -Bone Meal=Knochenmehl -Light Grey Dye=Hellgrauer Farbstoff -Grey Dye=Grauer Farbstoff -Ink Sac=Tintenbeutel -Purple Dye=Violetter Farbstoff -Lapis Lazuli=Lapislazuli -Light Blue Dye=Hellblauer Farbstoff -Cyan Dye=Türkiser Farbstoff -Cactus Green=Kaktusgrün -Lime Dye=Lindgrüner Farbstoff -Dandelion Yellow=Löwenzahngelb -Cocoa Beans=Kakaobohnen -Orange Dye=Orange Farbstoff -Rose Red=Rosenrot -Magenta Dye=Magenta Farbstoff -Pink Dye=Rosa Farbstoff -This item is a dye which is used for dyeing and crafting.=Dieser Gegenstand ist ein Farbstoff, der zum Einfärben und in der Herstellung benutzt werden kann. -Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=Rechtsklicken Sie auf ein Schaf, um seine Wolle zu färben. Andere Dinge werden mit der Fertigung eingefärbt. -Bone Meal=Knochenmehl -Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=Knochenmehl ist ein weißer Farbstoff und auch nützlich als Dünger, um das Wachstum vieler Pflanzen zu beschleunigen. -Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=Rechtsklicken Sie auf ein Schaf, um die Wolle weiß einzufärben. Rechtsklicken Sie auf eine Pflanze, um ihr Wachstum zu beschleunigen. Beachten Sie, dass nicht alle Pflanzen darauf ansprechen. Benutzen Sie es auf einem Grasblock, wächst viel hohes Gras und vielleicht auch ein paar Blumen. -Cocoa beans are a brown dye and can be used to plant cocoas.=Kakaobohnen sind ein brauner Farbstoff und werden benutzt, um Kakao anzupflanzen. -Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=Rechtsklicken Sie auf ein Schaf, um die Wolle braun einzufärben. Rechtsklicken Sie an die Seite eines Dschungelbaumstamms (Dschungelholz), um eine junge Kakaoschote zu pflanzen. -Cocoa Beans=Kakaobohnen -Grows at the side of jungle trees=Wächst an der Seite von Dschungelbäumen -Speeds up plant growth=Beschleunigt Pflanzenwachstum diff --git a/mods/ITEMS/mcl_dye/locale/mcl_dye.es.tr b/mods/ITEMS/mcl_dye/locale/mcl_dye.es.tr deleted file mode 100644 index d20e8c96a..000000000 --- a/mods/ITEMS/mcl_dye/locale/mcl_dye.es.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_dye -Bone Meal=Harina de hueso -Light Grey Dye=Tinte gris claro -Grey Dye=Tinte gris -Ink Sac=Saco de tinta -Purple Dye=Tinte púrpura -Lapis Lazuli=Lapislázuli -Light Blue Dye=Tinte azul claro -Cyan Dye=Tinte cian -Cactus Green=Tinte verde -Lime Dye=Tinte amarillo verdoso -Dandelion Yellow=Tinte amarillo -Cocoa Beans=Granos de cacao -Orange Dye=Tinte naranja -Rose Red=Tinte rojo -Magenta Dye=Tinte magenta -Pink Dye=Tinte rosado -This item is a dye which is used for dyeing and crafting.=Este artículo es un tinte que se utiliza para teñir y elaborar. -Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=Haga clic derecho sobre una oveja para teñir su lana. Otras cosas pueden ser teñidas mediante la elaboración. -Bone Meal=Harina de hueso -Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=La harina de hueso es un tinte blanco y también es útil como fertilizante para acelerar el crecimiento de muchas plantas. -Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=RHaga clic derecho en una oveja para volver su lana blanca. Haga clic derecho en una planta para acelerar su crecimiento. Tenga en cuenta que no todas las plantas pueden ser fertilizadas de esta manera. Cuando haces clic derecho en un bloque de hierba, crecerán hierba alta y flores por todo el lugar. -Cocoa beans are a brown dye and can be used to plant cocoas.=Los granos de cacao son un tinte marrón y se pueden usar para plantar cacao. -Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=Haga clic derecho en una oveja para convertir su lana en marrón. Haga clic derecho en el costado del tronco de un árbol de jungla para plantar un cacao joven. -Cocoa Beans=Granos de cacao diff --git a/mods/ITEMS/mcl_dye/locale/mcl_dye.fr.tr b/mods/ITEMS/mcl_dye/locale/mcl_dye.fr.tr deleted file mode 100644 index 8d53cc73e..000000000 --- a/mods/ITEMS/mcl_dye/locale/mcl_dye.fr.tr +++ /dev/null @@ -1,27 +0,0 @@ -# textdomain: mcl_dye -Bone Meal=Poudre d'Os -Light Grey Dye=Teinture Gris Clair -Grey Dye=Teinture Gris -Ink Sac=Poche d'Encre -Purple Dye=Teinture Violette -Lapis Lazuli=Lapis Lazuli -Light Blue Dye=Teinture Bleu Clair -Cyan Dye=Teinture Cyan -Cactus Green=Cactus Vert -Lime Dye=Teinture Vert Clair -Dandelion Yellow=Pissenlit Jaune -Cocoa Beans=Fèves de Cacao -Orange Dye=Teinture Orange -Rose Red=Rose Rouge -Magenta Dye=Teinture Magenta -Pink Dye=Teinture Rose -This item is a dye which is used for dyeing and crafting.=Cet objet est un colorant utilisé pour la teinture et l'artisanat. -Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=Clic droit sur un mouton pour teindre sa laine. D'autres choses sont teintes par l'artisanat. -Bone Meal=Farine d'Os -Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=La farine d'os est une teinture blanche et également utile comme engrais pour accélérer la croissance de nombreuses plantes. -Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=Cliquez avec le bouton droit sur un mouton pour blanchir sa laine. Cliquez avec le bouton droit sur une plante pour accélérer sa croissance. Notez que toutes les plantes ne peuvent pas être fertilisées comme ça. Lorsque vous cliquez avec le bouton droit sur un bloc d'herbe, les hautes herbes et les fleurs poussent partout. -Cocoa beans are a brown dye and can be used to plant cocoas.=Les fèves de cacao ont une teinture brune et peuvent être utilisées pour planter du cacao. -Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=Faites un clic droit sur un mouton pour brunir sa laine. Clic droit sur le côté d'un tronc d'arbre de la jungle (Bois Acajou) pour planter un jeune cacao. -Cocoa Beans=Fèves de Cacao -Grows at the side of jungle trees=Pousse à côté des arbres de la jungle -Speeds up plant growth=Accélère la croissance des plantes diff --git a/mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr b/mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr deleted file mode 100644 index d16edb5b0..000000000 --- a/mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr +++ /dev/null @@ -1,27 +0,0 @@ -# textdomain: mcl_dye -Bone Meal=Mączka kostna -Light Grey Dye=Jasnoszara farba -Grey Dye=Szara farba -Ink Sac=Torbiel z atramentem -Purple Dye=Fioletowa farba -Lapis Lazuli=Lazuryt -Light Blue Dye=Jasnoniebieska farba -Cyan Dye=Błękitna farba -Cactus Green=Kaktusowa zieleń -Lime Dye=Jasnozielona farba -Dandelion Yellow=Mleczowy żółty -Cocoa Beans=Ziarna kakaowe -Orange Dye=Pomarańczowa farba -Rose Red=Różany czerwony -Magenta Dye=Karmazynowa farba -Pink Dye=Różowa farba -This item is a dye which is used for dyeing and crafting.=Ten przedmiot to farba wykorzystywana to farbowania i wytwarzania. -Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=Kliknij prawym na owcę aby zafarbować jej wełnę. Inne rzeczy mogą być zafarbowane przy wytwarzaniu. -Bone Meal=Mączka kostna -Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=Mączka kostna to biała farba i przydatny nawóz, który przyspiesza rośnięcie wielu roślin. -Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=Kliknij prawym na owcę, aby wybielić jej wełnę. Kliknij prawym na roślinę aby przyspieszyć jej wzrost. Zważ, że nie na wszystkie rośliny to tak działa. Gdy klikniesz prawym na blok trawy, wysoka trawa wyrośnie wokół. -Cocoa beans are a brown dye and can be used to plant cocoas.=Ziarna kakaowe mogą być wykorzystane do sadzenia kakao. -Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=Naciśnij prawym aby zafarbować wełnę owcy na brązowo. Naciśnij prawym na boku tropikalnego pnia (Tropikalne drewno) aby zasadzić młode kakao. -Cocoa Beans=Ziarna kakaowe -Grows at the side of jungle trees=Rośnie na boku tropikalnych drzew -Speeds up plant growth=Przyspiesza wzrost roślin diff --git a/mods/ITEMS/mcl_dye/locale/mcl_dye.ru.tr b/mods/ITEMS/mcl_dye/locale/mcl_dye.ru.tr deleted file mode 100644 index e70388115..000000000 --- a/mods/ITEMS/mcl_dye/locale/mcl_dye.ru.tr +++ /dev/null @@ -1,27 +0,0 @@ -# textdomain: mcl_dye -Bone Meal=Костная мука -Light Grey Dye=Светло-серый краситель -Grey Dye=Серый краситель -Ink Sac=Чернильный мешок -Purple Dye=Пурпурный краситель -Lapis Lazuli=Ляпис-лазурь -Light Blue Dye=Светло-голубой краситель -Cyan Dye=Голубой краситель -Cactus Green=Зелень кактуса -Lime Dye=Зелёный лаймовый краситель -Dandelion Yellow=Одуванчиковый жёлтый краситель -Cocoa Beans=Какао-бобы -Orange Dye=Оранжевый краситель -Rose Red=Экстракт красной розы -Magenta Dye=Фиолетовый краситель -Pink Dye=Розовый краситель -This item is a dye which is used for dyeing and crafting.=Это краситель, которые используется, чтобы окрашивать и крафтить. -Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=Кликните правой по овце, чтобы окрасить её шерсть. Остальные вещи окрашиваются путём крафтинга. -Bone Meal=Костная мука -Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=Костная мука является белым красителем. Она также полезна в качестве удобрения, чтобы увеличить скорость роста многих растений. -Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=Кликните правой по овце, чтобы сделать её шерсть белой. Кликните правой по растению, чтобы ускорить его рост. Имейте в виду, что не все растения можно удобрять таким способом. Если вы кликнете по травяному блоку, то на этом месте вырастет высокая трава и цветы. -Cocoa beans are a brown dye and can be used to plant cocoas.=Какао-бобы являются коричневым красителем. Их также можно использовать, чтобы посадить какао. -Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=Кликните правой по овце, чтобы сделать её шерсть коричневой. Кликните правой по боковой части ствола дерева джунглей, чтобы посадить молодое какао. -Cocoa Beans=Какао-бобы -Grows at the side of jungle trees=Растут на стволах деревьев джунглей -Speeds up plant growth=Ускоряет рост растений diff --git a/mods/ITEMS/mcl_dye/locale/mcl_dye.zh_TW.tr b/mods/ITEMS/mcl_dye/locale/mcl_dye.zh_TW.tr deleted file mode 100644 index 23d2face2..000000000 --- a/mods/ITEMS/mcl_dye/locale/mcl_dye.zh_TW.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_dye -Bone Meal=骨粉 -Light Grey Dye=淺灰色染料 -Grey Dye=灰色染料 -Ink Sac=墨囊 -Purple Dye=紫色染料 -Lapis Lazuli=青金石 -Light Blue Dye=淺藍色染料 -Cyan Dye=青色染料 -Cactus Green=仙人掌綠 -Lime Dye=淺綠色染料 -Dandelion Yellow=蒲公英黃 -Cocoa Beans=可可豆 -Orange Dye=橙色染料 -Rose Red=玫瑰紅 -Magenta Dye=洋紅色染料 -Pink Dye=粉紅色染料 -This item is a dye which is used for dyeing and crafting.=這個物品是一種用於染色和合成的染料。 -Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=右鍵單擊綿羊以染它的毛。其他東西是通過合成染色的。 -Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=骨粉是一種白色染料,也可作為肥料,加速許多植物的生長。 -Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=右鍵點擊一隻羊,使其羊毛變白。右鍵點擊一株植物以加快其生長速度。注意,不是所有的植物都能像這樣施肥。當你右鍵點擊一個草方時,高高的草和花會到處生長。 -Cocoa beans are a brown dye and can be used to plant cocoas.=可可豆是一種棕色染料,也可用於種植可可。 -Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=右鍵點擊一隻羊,使其羊毛變成褐色。右鍵點擊叢林木的一側,可以種植一個可可。 -Grows at the side of jungle trees=在叢林木側生長 -Speeds up plant growth=加速植物生長 diff --git a/mods/ITEMS/mcl_dye/locale/template.txt b/mods/ITEMS/mcl_dye/locale/template.txt deleted file mode 100644 index 94e250f06..000000000 --- a/mods/ITEMS/mcl_dye/locale/template.txt +++ /dev/null @@ -1,27 +0,0 @@ -# textdomain: mcl_dye -Bone Meal= -Light Grey Dye= -Grey Dye= -Ink Sac= -Purple Dye= -Lapis Lazuli= -Light Blue Dye= -Cyan Dye= -Cactus Green= -Lime Dye= -Dandelion Yellow= -Cocoa Beans= -Orange Dye= -Rose Red= -Magenta Dye= -Pink Dye= -This item is a dye which is used for dyeing and crafting.= -Rightclick on a sheep to dye its wool. Other things are dyed by crafting.= -Bone Meal= -Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.= -Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.= -Cocoa beans are a brown dye and can be used to plant cocoas.= -Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.= -Cocoa Beans= -Grows at the side of jungle trees= -Speeds up plant growth= diff --git a/mods/ITEMS/mcl_dye/mod.conf b/mods/ITEMS/mcl_dye/mod.conf deleted file mode 100644 index fe93278fc..000000000 --- a/mods/ITEMS/mcl_dye/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_dye -depends = mcl_core, mcl_flowers, mcl_mobitems, mcl_cocoas diff --git a/mods/ITEMS/mcl_dye/textures/dye_cyan.png b/mods/ITEMS/mcl_dye/textures/dye_cyan.png deleted file mode 100644 index 1507fcd6d..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_dark_green.png b/mods/ITEMS/mcl_dye/textures/dye_dark_green.png deleted file mode 100644 index 738d6758a..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_dark_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_dark_grey.png b/mods/ITEMS/mcl_dye/textures/dye_dark_grey.png deleted file mode 100644 index 1cae4c2f1..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_dark_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_grey.png b/mods/ITEMS/mcl_dye/textures/dye_grey.png deleted file mode 100644 index a8724c941..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_magenta.png b/mods/ITEMS/mcl_dye/textures/dye_magenta.png deleted file mode 100644 index 2652dfbeb..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_orange.png b/mods/ITEMS/mcl_dye/textures/dye_orange.png deleted file mode 100644 index 30fd814c5..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_pink.png b/mods/ITEMS/mcl_dye/textures/dye_pink.png deleted file mode 100644 index 420fba283..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_red.png b/mods/ITEMS/mcl_dye/textures/dye_red.png deleted file mode 100644 index 8e8c4fff9..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_violet.png b/mods/ITEMS/mcl_dye/textures/dye_violet.png deleted file mode 100644 index 26c94f3ed..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_violet.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/dye_yellow.png b/mods/ITEMS/mcl_dye/textures/dye_yellow.png deleted file mode 100644 index 8f2a0d569..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/dye_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/mcl_dye_black.png b/mods/ITEMS/mcl_dye/textures/mcl_dye_black.png deleted file mode 100644 index 95a8df4ad..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/mcl_dye_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/mcl_dye_blue.png b/mods/ITEMS/mcl_dye/textures/mcl_dye_blue.png deleted file mode 100644 index e0e302307..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/mcl_dye_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/mcl_dye_brown.png b/mods/ITEMS/mcl_dye/textures/mcl_dye_brown.png deleted file mode 100644 index 877ee69dc..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/mcl_dye_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/mcl_dye_light_blue.png b/mods/ITEMS/mcl_dye/textures/mcl_dye_light_blue.png deleted file mode 100644 index bc819e118..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/mcl_dye_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/mcl_dye_lime.png b/mods/ITEMS/mcl_dye/textures/mcl_dye_lime.png deleted file mode 100644 index 7b4d08b34..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/mcl_dye_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_dye/textures/mcl_dye_white.png b/mods/ITEMS/mcl_dye/textures/mcl_dye_white.png deleted file mode 100644 index bc06c2865..000000000 Binary files a/mods/ITEMS/mcl_dye/textures/mcl_dye_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/enchantments.lua b/mods/ITEMS/mcl_enchanting/enchantments.lua deleted file mode 100644 index f137b4230..000000000 --- a/mods/ITEMS/mcl_enchanting/enchantments.lua +++ /dev/null @@ -1,684 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Taken from https://minecraft.gamepedia.com/Enchanting - -local function increase_damage(damage_group, factor) - return function(itemstack, level) - local tool_capabilities = itemstack:get_tool_capabilities() - tool_capabilities.damage_groups[damage_group] = (tool_capabilities.damage_groups[damage_group] or 0) + level * factor - itemstack:get_meta():set_tool_capabilities(tool_capabilities) - end -end - --- implemented via on_enchant and additions in mobs_mc; Slowness IV part unimplemented -mcl_enchanting.enchantments.bane_of_arthropods = { - name = S("Bane of Arthropods"), - max_level = 5, - primary = {sword = true}, - secondary = {axe = true}, - disallow = {}, - incompatible = {smite = true, sharpness = true}, - weight = 5, - description = S("Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites)."), - curse = false, - on_enchant = increase_damage("anthropod", 2.5), - requires_tool = false, - treasure = false, - power_range_table = {{5, 25}, {13, 33}, {21, 41}, {29, 49}, {37, 57}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- requires missing MineClone2 feature ---[[mcl_enchanting.enchantments.channeling = { - name = S("Channeling"), - max_level = 1, - primary = {trident = true}, - secondary = {}, - disallow = {}, - incompatible = {riptide = true}, - weight = 1, - description = S("Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{25, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - --- implemented in mcl_death_drop -mcl_enchanting.enchantments.curse_of_vanishing = { - name = S("Curse of Vanishing"), - max_level = 1, - primary = {}, - secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true, tool = true, weapon = true}, - disallow = {}, - incompatible = {}, - weight = 1, - description = S("Item destroyed on death."), - curse = true, - on_enchant = function() end, - requires_tool = false, - treasure = true, - power_range_table = {{25, 50}}, - inv_combat_tab = true, - inv_tool_tab = true, -} - --- implemented in mcl_playerplus -mcl_enchanting.enchantments.depth_strider = { - name = S("Depth Strider"), - max_level = 3, - primary = {}, - secondary = {armor_feet = true}, - disallow = {non_combat_armor = true}, - incompatible = {frost_walker = true}, - weight = 2, - description = S("Increases underwater movement speed."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{10, 25}, {20, 35}, {30, 45}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented via on_enchant -mcl_enchanting.enchantments.efficiency = { - name = S("Efficiency"), - max_level = 5, - primary = {pickaxe = true, shovel = true, axe = true, hoe = true}, - secondary = {shears = true}, - disallow = {}, - incompatible = {}, - weight = 10, - description = S("Increases mining speed."), - curse = false, - on_enchant = function() - -- Updating digging speed is handled by update_groupcaps which - -- is called from load_enchantments. - end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 61}, {11, 71}, {21, 81}, {31, 91}, {41, 101}}, - inv_combat_tab = false, - inv_tool_tab = true, -} - --- implemented in mcl_mobs and via register_on_punchplayer callback -mcl_enchanting.enchantments.fire_aspect = { - name = S("Fire Aspect"), - max_level = 2, - primary = {sword = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Sets target on fire."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{10, 61}, {30, 71}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage) - if hitter and hitter:is_player() then - local wielditem = hitter:get_wielded_item() - if wielditem then - local fire_aspect_level = mcl_enchanting.get_enchantment(wielditem, "fire_aspect") - if fire_aspect_level > 0 then - mcl_burning.set_on_fire(player, fire_aspect_level * 4) - end - end - end -end) - -mcl_enchanting.enchantments.flame = { - name = S("Flame"), - max_level = 1, - primary = {bow = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Arrows set target on fire."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{20, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented in mcl_item_entity -mcl_enchanting.enchantments.fortune = { - name = S("Fortune"), - max_level = 3, - primary = {pickaxe = true, shovel = true, axe = true, hoe = true}, - secondary = {}, - disallow = {}, - incompatible = {silk_touch = true}, - weight = 2, - description = S("Increases certain block drops."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{15, 61}, {24, 71}, {33, 81}}, - inv_combat_tab = false, - inv_tool_tab = true, -} - --- implemented via walkover.register_global -mcl_enchanting.enchantments.frost_walker = { - name = S("Frost Walker"), - max_level = 2, - primary = {}, - secondary = {armor_feet = true}, - disallow = {non_combat_armor = true}, - incompatible = {depth_strider = true}, - weight = 2, - description = S("Turns water beneath the player into frosted ice and prevents the damage from magma blocks."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = true, - power_range_table = {{10, 25}, {20, 35}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -walkover.register_global(function(pos, _, player) - local boots = player:get_inventory():get_stack("armor", 5) - local frost_walker = mcl_enchanting.get_enchantment(boots, "frost_walker") - if frost_walker <= 0 then - return - end - local radius = frost_walker + 2 - local minp = {x = pos.x - radius, y = pos.y, z = pos.z - radius} - local maxp = {x = pos.x + radius, y = pos.y, z = pos.z + radius} - local positions = minetest.find_nodes_in_area_under_air(minp, maxp, "mcl_core:water_source") - for _, p in ipairs(positions) do - if vector.distance(pos, p) <= radius then - minetest.set_node(p, {name = "mcl_core:frosted_ice_0"}) - end - end -end) - --- requires missing MineClone2 feature ---[[mcl_enchanting.enchantments.impaling = { - name = S("Impaling"), - max_level = 5, - primary = {trident = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Trident deals additional damage to ocean mobs."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 21}, {9, 29}, {17, 37}, {25, 45}, {33, 53}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - --- implemented in mcl_bows -mcl_enchanting.enchantments.infinity = { - name = S("Infinity"), - max_level = 1, - primary = {bow = true}, - secondary = {}, - disallow = {}, - incompatible = {mending = true}, - weight = 1, - description = S("Shooting consumes no regular arrows."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{20, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented via minetest.calculate_knockback -mcl_enchanting.enchantments.knockback = { - name = S("Knockback"), - max_level = 2, - primary = {sword = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 5, - description = S("Increases knockback."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{5, 61}, {25, 71}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -local old_calculate_knockback = minetest.calculate_knockback -function minetest.calculate_knockback(player, hitter, time_from_last_punch, tool_capabilities, dir, distance, damage) - local knockback = old_calculate_knockback(player, hitter, time_from_last_punch, tool_capabilities, dir, distance, damage) - local luaentity - if hitter then - luaentity = hitter:get_luaentity() - end - if hitter and hitter:is_player() then - local wielditem = hitter:get_wielded_item() - knockback = knockback + 3 * mcl_enchanting.get_enchantment(wielditem, "knockback") - elseif luaentity and luaentity._knockback then - knockback = knockback + luaentity._knockback - end - return knockback -end - --- implemented in mcl_mobs and mobs_mc -mcl_enchanting.enchantments.looting = { - name = S("Looting"), - max_level = 3, - primary = {sword = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Increases mob loot."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{15, 61}, {24, 71}, {33, 81}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- requires missing MineClone2 feature ---[[mcl_enchanting.enchantments.loyalty = { - name = S("Loyalty"), - max_level = 3, - primary = {trident = true}, - secondary = {}, - disallow = {}, - incompatible = {riptide = true}, - weight = 5, - description = S("Trident returns after being thrown. Higher levels reduce return time."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{12, 50}, {19, 50}, {26, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - --- implemented in mcl_fishing -mcl_enchanting.enchantments.luck_of_the_sea = { - name = S("Luck of the Sea"), - max_level = 3, - primary = {fishing_rod = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Increases rate of good loot (enchanting books, etc.)"), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{15, 61}, {24, 71}, {33, 81}}, - inv_combat_tab = false, - inv_tool_tab = true, -} - --- implemented in mcl_fishing -mcl_enchanting.enchantments.lure = { - name = S("Lure"), - max_level = 3, - primary = {fishing_rod = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Decreases time until rod catches something."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{15, 61}, {24, 71}, {33, 81}}, - inv_combat_tab = false, - inv_tool_tab = true, -} - --- implemented in mcl_experience -mcl_enchanting.enchantments.mending = { - name = S("Mending"), - max_level = 1, - primary = {}, - secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true, tool = true, weapon = true}, - disallow = {}, - incompatible = {infinity = true}, - weight = 2, - description = S("Repair the item while gaining XP orbs."), - curse = false, - on_enchant = function() end, - requires_tool = true, - treasure = true, - power_range_table = {{25, 75}}, - inv_combat_tab = true, - inv_tool_tab = true, -} - -mcl_experience.register_on_add_xp(function(player, xp) - local inv = player:get_inventory() - - local candidates = { - {list = "main", index = player:get_wield_index()}, - {list = "armor", index = 2}, - {list = "armor", index = 3}, - {list = "armor", index = 4}, - {list = "armor", index = 5}, - {list = "offhand", index = 1}, - } - - local final_candidates = {} - for _, can in ipairs(candidates) do - local stack = inv:get_stack(can.list, can.index) - local wear = stack:get_wear() - if mcl_enchanting.has_enchantment(stack, "mending") and wear > 0 then - can.stack = stack - can.wear = wear - table.insert(final_candidates, can) - end - end - - if #final_candidates > 0 then - local can = final_candidates[math.random(#final_candidates)] - local stack, list, index, wear = can.stack, can.list, can.index, can.wear - local uses = mcl_util.calculate_durability(stack) - local multiplier = 2 * 65535 / uses - local repair = xp * multiplier - local new_wear = wear - repair - - if new_wear < 0 then - xp = math.floor(-new_wear / multiplier + 0.5) - new_wear = 0 - else - xp = 0 - end - - stack:set_wear(math.floor(new_wear)) - inv:set_stack(list, index, stack) - end - - return xp -end, 0) - -mcl_enchanting.enchantments.multishot = { - name = S("Multishot"), - max_level = 1, - primary = {crossbow = true}, - secondary = {}, - disallow = {}, - incompatible = {piercing = true}, - weight = 2, - description = S("Shoot 3 arrows at the cost of one."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{20, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- requires missing MineClone2 feature -mcl_enchanting.enchantments.piercing = { - name = S("Piercing"), - max_level = 4, - primary = {crossbow = true}, - secondary = {}, - disallow = {}, - incompatible = {multishot = true}, - weight = 10, - description = S("Arrows passes through multiple objects."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 50}, {11, 50}, {21, 50}, {31, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented in mcl_bows -mcl_enchanting.enchantments.power = { - name = S("Power"), - max_level = 5, - primary = {bow = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 10, - description = S("Increases arrow damage."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 16}, {11, 26}, {21, 36}, {31, 46}, {41, 56}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented via minetest.calculate_knockback (together with the Knockback enchantment) and mcl_bows -mcl_enchanting.enchantments.punch = { - name = S("Punch"), - max_level = 2, - primary = {}, - secondary = {bow = true}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Increases arrow knockback."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{12, 37}, {32, 57}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- requires missing MineClone2 feature -mcl_enchanting.enchantments.quick_charge = { - name = S("Quick Charge"), - max_level = 3, - primary = {crossbow = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 5, - description = S("Decreases crossbow charging time."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{12, 50}, {32, 50}, {52, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- unimplemented ---[[mcl_enchanting.enchantments.respiration = { - name = S("Respiration"), - max_level = 3, - primary = {armor_head = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {}, - weight = 2, - description = S("Extends underwater breathing time."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{10, 40}, {20, 50}, {30, 60}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - --- requires missing MineClone2 feature ---[[mcl_enchanting.enchantments.riptide = { - name = S("Riptide"), - max_level = 3, - primary = {trident = true}, - secondary = {}, - disallow = {}, - incompatible = {channeling = true, loyalty = true}, - weight = 2, - description = S("Trident launches player with itself when thrown. Works only in water or rain."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{17, 50}, {24, 50}, {31, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - --- implemented via on_enchant -mcl_enchanting.enchantments.sharpness = { - name = S("Sharpness"), - max_level = 5, - primary = {sword = true}, - secondary = {axe = true}, - disallow = {}, - incompatible = {bane_of_arthropods = true, smite = true}, - weight = 5, - description = S("Increases damage."), - curse = false, - on_enchant = increase_damage("fleshy", 0.5), - requires_tool = false, - treasure = false, - power_range_table = {{1, 21}, {12, 32}, {23, 43}, {34, 54}, {45, 65}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented in mcl_item_entity -mcl_enchanting.enchantments.silk_touch = { - name = S("Silk Touch"), - max_level = 1, - primary = {pickaxe = true, shovel = true, axe = true, hoe = true}, - secondary = {shears = true}, - disallow = {}, - incompatible = {fortune = true}, - weight = 1, - description = S("Mined blocks drop themselves."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{15, 61}}, - inv_combat_tab = false, - inv_tool_tab = true, -} - --- implemented via on_enchant and additions in mobs_mc -mcl_enchanting.enchantments.smite = { - name = S("Smite"), - max_level = 5, - primary = {sword = true}, - secondary = {axe = true}, - disallow = {}, - incompatible = {bane_of_arthropods = true, sharpness = true}, - weight = 5, - description = S("Increases damage to undead mobs."), - curse = false, - on_enchant = increase_damage("undead", 2.5), - requires_tool = false, - treasure = false, - power_range_table = {{5, 25}, {13, 33}, {21, 41}, {29, 49}, {37, 57}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented in mcl_playerplus -mcl_enchanting.enchantments.soul_speed = { - name = S("Soul Speed"), - max_level = 3, - primary = {}, - secondary = {armor_feet = true}, - disallow = {non_combat_armor = true}, - incompatible = {frost_walker = true}, - weight = 2, - description = S("Increases walking speed on soul sand."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = true, - power_range_table = {{10, 25}, {20, 35}, {30, 45}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- requires missing MineClone2 feature ---[[mcl_enchanting.enchantments.sweeping_edge = { - name = S("Sweeping Edge"), - max_level = 3, - primary = {sword = true}, - secondary = {}, - disallow = {}, - incompatible = {}, - weight = 2, - description = S("Increases sweeping attack damage."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{5, 20}, {14, 29}, {23, 38}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - --- for tools & weapons implemented via on_enchant; for bows implemented in mcl_bows; for armor implemented in mcl_armor and mcl_tt; for fishing rods implemented in mcl_fishing -mcl_enchanting.enchantments.unbreaking = { - name = S("Unbreaking"), - max_level = 3, - primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true, pickaxe = true, shovel = true, axe = true, hoe = true, sword = true, fishing_rod = true, bow = true}, - secondary = {tool = true}, - disallow = {non_combat_armor = true}, - incompatible = {}, - weight = 5, - description = S("Increases item durability."), - curse = false, - on_enchant = function(itemstack, level) - local name = itemstack:get_name() - if not minetest.registered_tools[name].tool_capabilities then - return - end - - local tool_capabilities = itemstack:get_tool_capabilities() - tool_capabilities.punch_attack_uses = tool_capabilities.punch_attack_uses * (1 + level) - itemstack:get_meta():set_tool_capabilities(tool_capabilities) - - -- Updating digging durability is handled by update_groupcaps - -- which is called from load_enchantments. - end, - requires_tool = true, - treasure = false, - power_range_table = {{5, 61}, {13, 71}, {21, 81}}, - inv_combat_tab = true, - inv_tool_tab = true, -} diff --git a/mods/ITEMS/mcl_enchanting/engine.lua b/mods/ITEMS/mcl_enchanting/engine.lua deleted file mode 100644 index 34fb55698..000000000 --- a/mods/ITEMS/mcl_enchanting/engine.lua +++ /dev/null @@ -1,687 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local F = minetest.formspec_escape - -function mcl_enchanting.is_book(itemname) - return itemname == "mcl_books:book" or itemname == "mcl_enchanting:book_enchanted" or itemname == "mcl_books:book_enchanted" -end - -function mcl_enchanting.get_enchantments(itemstack) - if not itemstack then - return {} - end - return minetest.deserialize(itemstack:get_meta():get_string("mcl_enchanting:enchantments")) or {} -end - -function mcl_enchanting.unload_enchantments(itemstack) - local itemdef = itemstack:get_definition() - local meta = itemstack:get_meta() - if itemdef.tool_capabilities then - meta:set_tool_capabilities(nil) - meta:set_string("groupcaps_hash", "") - end - if meta:get_string("name") == "" then - meta:set_string("description", "") - meta:set_string("groupcaps_hash", "") - end -end - -function mcl_enchanting.load_enchantments(itemstack, enchantments) - if not mcl_enchanting.is_book(itemstack:get_name()) then - mcl_enchanting.unload_enchantments(itemstack) - for enchantment, level in pairs(enchantments or mcl_enchanting.get_enchantments(itemstack)) do - local enchantment_def = mcl_enchanting.enchantments[enchantment] - if enchantment_def.on_enchant then - enchantment_def.on_enchant(itemstack, level) - end - end - mcl_enchanting.update_groupcaps(itemstack) - end - tt.reload_itemstack_description(itemstack) -end - -function mcl_enchanting.set_enchantments(itemstack, enchantments) - itemstack:get_meta():set_string("mcl_enchanting:enchantments", minetest.serialize(enchantments)) - mcl_enchanting.load_enchantments(itemstack) -end - -function mcl_enchanting.get_enchantment(itemstack, enchantment) - return mcl_enchanting.get_enchantments(itemstack)[enchantment] or 0 -end - -function mcl_enchanting.has_enchantment(itemstack, enchantment) - return mcl_enchanting.get_enchantment(itemstack, enchantment) > 0 -end - -function mcl_enchanting.get_enchantment_description(enchantment, level) - local enchantment_def = mcl_enchanting.enchantments[enchantment] - return enchantment_def.name .. (enchantment_def.max_level == 1 and "" or " " .. mcl_enchanting.roman_numerals.toRoman(level)) -end - -function mcl_enchanting.get_colorized_enchantment_description(enchantment, level) - return minetest.colorize(mcl_enchanting.enchantments[enchantment].curse and mcl_colors.RED or mcl_colors.GRAY, mcl_enchanting.get_enchantment_description(enchantment, level)) -end - -function mcl_enchanting.get_enchanted_itemstring(itemname) - local def = minetest.registered_items[itemname] - return def and def._mcl_enchanting_enchanted_tool -end - -function mcl_enchanting.set_enchanted_itemstring(itemstack) - itemstack:set_name(mcl_enchanting.get_enchanted_itemstring(itemstack:get_name())) -end - -function mcl_enchanting.is_enchanted(itemname) - return minetest.get_item_group(itemname, "enchanted") > 0 -end - -function mcl_enchanting.not_enchantable_on_enchanting_table(itemname) - return mcl_enchanting.get_enchantability(itemname) == -1 -end - -function mcl_enchanting.is_enchantable(itemname) - return mcl_enchanting.get_enchantability(itemname) > 0 or mcl_enchanting.not_enchantable_on_enchanting_table(itemname) -end - -function mcl_enchanting.can_enchant_freshly(itemname) - return mcl_enchanting.is_enchantable(itemname) and not mcl_enchanting.is_enchanted(itemname) -end - -function mcl_enchanting.get_enchantability(itemname) - return minetest.get_item_group(itemname, "enchantability") -end - -function mcl_enchanting.item_supports_enchantment(itemname, enchantment, early) - if not mcl_enchanting.is_enchantable(itemname) then - return false - end - local enchantment_def = mcl_enchanting.enchantments[enchantment] - if mcl_enchanting.is_book(itemname) then - return true, (not enchantment_def.treasure) - end - local itemdef = minetest.registered_items[itemname] - if itemdef.type ~= "tool" and enchantment_def.requires_tool then - return false - end - for disallow in pairs(enchantment_def.disallow) do - if minetest.get_item_group(itemname, disallow) > 0 then - return false - end - end - for group in pairs(enchantment_def.primary) do - if minetest.get_item_group(itemname, group) > 0 then - return true, true - end - end - for group in pairs(enchantment_def.secondary) do - if minetest.get_item_group(itemname, group) > 0 then - return true, false - end - end - return false -end - -function mcl_enchanting.can_enchant(itemstack, enchantment, level) - local enchantment_def = mcl_enchanting.enchantments[enchantment] - if not enchantment_def then - return false, "enchantment invalid" - end - local itemname = itemstack:get_name() - if itemname == "" then - return false, "item missing" - end - local supported, primary = mcl_enchanting.item_supports_enchantment(itemname, enchantment) - if not supported then - return false, "item not supported" - end - if not level then - return false, "level invalid" - end - if level > enchantment_def.max_level then - return false, "level too high", enchantment_def.max_level - elseif level < 1 then - return false, "level too small", 1 - end - local item_enchantments = mcl_enchanting.get_enchantments(itemstack) - local enchantment_level = item_enchantments[enchantment] - if enchantment_level then - return false, "incompatible", mcl_enchanting.get_enchantment_description(enchantment, enchantment_level) - end - if not mcl_enchanting.is_book(itemname) then - for incompatible in pairs(enchantment_def.incompatible) do - local incompatible_level = item_enchantments[incompatible] - if incompatible_level then - return false, "incompatible", mcl_enchanting.get_enchantment_description(incompatible, incompatible_level) - end - end - end - return true, nil, nil, primary -end - -function mcl_enchanting.enchant(itemstack, enchantment, level) - mcl_enchanting.set_enchanted_itemstring(itemstack) - local enchantments = mcl_enchanting.get_enchantments(itemstack) - enchantments[enchantment] = level - mcl_enchanting.set_enchantments(itemstack, enchantments) - return itemstack -end - -function mcl_enchanting.combine(itemstack, combine_with) - local itemname = itemstack:get_name() - local combine_name = combine_with:get_name() - local enchanted_itemname = mcl_enchanting.get_enchanted_itemstring(itemname) - if not enchanted_itemname or enchanted_itemname ~= mcl_enchanting.get_enchanted_itemstring(combine_name) and not mcl_enchanting.is_book(combine_name) then - return false - end - local enchantments = mcl_enchanting.get_enchantments(itemstack) - for enchantment, combine_level in pairs(mcl_enchanting.get_enchantments(combine_with)) do - local enchantment_def = mcl_enchanting.enchantments[enchantment] - local enchantment_level = enchantments[enchantment] - if enchantment_level then - if enchantment_level == combine_level then - enchantment_level = math.min(enchantment_level + 1, enchantment_def.max_level) - else - enchantment_level = math.max(enchantment_level, combine_level) - end - elseif mcl_enchanting.item_supports_enchantment(itemname, enchantment) then - local supported = true - for incompatible in pairs(enchantment_def.incompatible) do - if enchantments[incompatible] then - supported = false - break - end - end - if supported then - enchantment_level = combine_level - end - end - if enchantment_level and enchantment_level > 0 then - enchantments[enchantment] = enchantment_level - end - end - local any_enchantment = false - for enchantment, enchantment_level in pairs(enchantments) do - if enchantment_level > 0 then - any_enchantment = true - break - end - end - if any_enchantment then - itemstack:set_name(enchanted_itemname) - end - mcl_enchanting.set_enchantments(itemstack, enchantments) - return true -end - -function mcl_enchanting.enchantments_snippet(_, _, itemstack) - if not itemstack then - return - end - local enchantments = mcl_enchanting.get_enchantments(itemstack) - local text = "" - for enchantment, level in pairs(enchantments) do - text = text .. mcl_enchanting.get_colorized_enchantment_description(enchantment, level) .. "\n" - end - if text ~= "" then - if not itemstack:get_definition()._tt_original_description then - text = text:sub(1, text:len() - 1) - end - return text, false - end -end - --- Returns the after_use callback function to use when registering an enchanted --- item. The after_use callback is used to update the tool_capabilities of --- efficiency enchanted tools with outdated digging times. --- --- It does this by calling apply_efficiency to reapply the efficiency --- enchantment. That function is written to use hash values to only update the --- tool if neccessary. --- --- This is neccessary for digging times of tools to be in sync when MineClone2 --- or mods add new hardness values. -local function get_after_use_callback(itemdef) - if itemdef.after_use then - -- If the tool already has an after_use, make sure to call that - -- one too. - return function(itemstack, user, node, digparams) - itemdef.after_use(itemstack, user, node, digparams) - mcl_enchanting.update_groupcaps(itemstack) - end - end - - -- If the tool does not have after_use, add wear to the tool as if no - -- after_use was registered. - return function(itemstack, user, node, digparams) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:add_wear(digparams.wear) - end - - --local enchantments = mcl_enchanting.get_enchantments(itemstack) - mcl_enchanting.update_groupcaps(itemstack) - end -end - -function mcl_enchanting.initialize() - local register_tool_list = {} - local register_item_list = {} - for itemname, itemdef in pairs(minetest.registered_items) do - if mcl_enchanting.can_enchant_freshly(itemname) and not mcl_enchanting.is_book(itemname) then - local new_name = itemname .. "_enchanted" - minetest.override_item(itemname, {_mcl_enchanting_enchanted_tool = new_name}) - local new_def = table.copy(itemdef) - new_def.inventory_image = itemdef.inventory_image .. mcl_enchanting.overlay - if new_def.wield_image then - new_def.wield_image = new_def.wield_image .. mcl_enchanting.overlay - end - new_def.groups.not_in_creative_inventory = 1 - new_def.groups.not_in_craft_guide = 1 - new_def.groups.enchanted = 1 - - if new_def._mcl_armor_texture then - if type(new_def._mcl_armor_texture) == "string" then - new_def._mcl_armor_texture = new_def._mcl_armor_texture .. mcl_enchanting.overlay - end - end - - new_def._mcl_enchanting_enchanted_tool = new_name - new_def.after_use = get_after_use_callback(itemdef) - local register_list = register_item_list - if itemdef.type == "tool" then - register_list = register_tool_list - end - register_list[":" .. new_name] = new_def - end - end - for new_name, new_def in pairs(register_item_list) do - minetest.register_craftitem(new_name, new_def) - end - for new_name, new_def in pairs(register_tool_list) do - minetest.register_tool(new_name, new_def) - end -end - -function mcl_enchanting.random(pr, ...) - local r = pr and pr:next(...) or math.random(...) - - if pr and not ({...})[1] then - r = r / 32767 - end - - return r -end - -function mcl_enchanting.get_random_enchantment(itemstack, treasure, weighted, exclude, pr) - local possible = {} - - for enchantment, enchantment_def in pairs(mcl_enchanting.enchantments) do - local can_enchant, _, _, primary = mcl_enchanting.can_enchant(itemstack, enchantment, 1) - - if can_enchant and (primary or treasure) and (not exclude or table.indexof(exclude, enchantment) == -1) then - local weight = weighted and enchantment_def.weight or 1 - - for i = 1, weight do - table.insert(possible, enchantment) - end - end - end - - return #possible > 0 and possible[mcl_enchanting.random(pr, 1, #possible)] -end - -function mcl_enchanting.generate_random_enchantments(itemstack, enchantment_level, treasure, no_reduced_bonus_chance, ignore_already_enchanted, pr) - local itemname = itemstack:get_name() - - if (not mcl_enchanting.can_enchant_freshly(itemname) and not ignore_already_enchanted) or mcl_enchanting.not_enchantable_on_enchanting_table(itemname) then - return - end - - itemstack = ItemStack(itemstack) - - local enchantability = minetest.get_item_group(itemname, "enchantability") - enchantability = 1 + mcl_enchanting.random(pr, 0, math.floor(enchantability / 4)) + mcl_enchanting.random(pr, 0, math.floor(enchantability / 4)) - - enchantment_level = enchantment_level + enchantability - enchantment_level = enchantment_level + enchantment_level * (mcl_enchanting.random(pr) + mcl_enchanting.random(pr) - 1) * 0.15 - enchantment_level = math.max(math.floor(enchantment_level + 0.5), 1) - - local enchantments = {} - local description - - enchantment_level = enchantment_level * 2 - - repeat - enchantment_level = math.floor(enchantment_level / 2) - - if enchantment_level == 0 then - break - end - - local selected_enchantment = mcl_enchanting.get_random_enchantment(itemstack, treasure, true, nil, pr) - - if not selected_enchantment then - break - end - - local enchantment_def = mcl_enchanting.enchantments[selected_enchantment] - local power_range_table = enchantment_def.power_range_table - - local enchantment_power - - for i = enchantment_def.max_level, 1, -1 do - local power_range = power_range_table[i] - if enchantment_level >= power_range[1] and enchantment_level <= power_range[2] then - enchantment_power = i - break - end - end - - if not description then - if not enchantment_power then - return - end - - description = mcl_enchanting.get_enchantment_description(selected_enchantment, enchantment_power) - end - - if enchantment_power then - enchantments[selected_enchantment] = enchantment_power - mcl_enchanting.enchant(itemstack, selected_enchantment, enchantment_power) - end - - until not no_reduced_bonus_chance and mcl_enchanting.random(pr) >= (enchantment_level + 1) / 50 - - return enchantments, description -end - -function mcl_enchanting.generate_random_enchantments_reliable(itemstack, enchantment_level, treasure, no_reduced_bonus_chance, ignore_already_enchanted, pr) - local enchantments - - repeat - enchantments = mcl_enchanting.generate_random_enchantments(itemstack, enchantment_level, treasure, no_reduced_bonus_chance, ignore_already_enchanted, pr) - until enchantments - - return enchantments -end - -function mcl_enchanting.enchant_randomly(itemstack, enchantment_level, treasure, no_reduced_bonus_chance, ignore_already_enchanted, pr) - local enchantments = mcl_enchanting.generate_random_enchantments_reliable(itemstack, enchantment_level, treasure, no_reduced_bonus_chance, ignore_already_enchanted, pr) - - mcl_enchanting.set_enchanted_itemstring(itemstack) - mcl_enchanting.set_enchantments(itemstack, enchantments) - - return itemstack -end - -function mcl_enchanting.enchant_uniform_randomly(stack, exclude, pr) - local enchantment = mcl_enchanting.get_random_enchantment(stack, true, false, exclude, pr) - - if enchantment then - mcl_enchanting.enchant(stack, enchantment, mcl_enchanting.random(pr, 1, mcl_enchanting.enchantments[enchantment].max_level)) - end - - return stack -end - -function mcl_enchanting.get_random_glyph_row() - local glyphs = "" - local x = 1.3 - for i = 1, 9 do - glyphs = glyphs .. "image[".. x .. ",0.1;0.5,0.5;mcl_enchanting_glyph_" .. math.random(18) .. ".png^[colorize:#675D49:255]" - x = x + 0.6 - end - return glyphs -end - -function mcl_enchanting.generate_random_table_slots(itemstack, num_bookshelves) - local base = math.random(8) + math.floor(num_bookshelves / 2) + math.random(0, num_bookshelves) - local required_levels = { - math.max(base / 3, 1), - (base * 2) / 3 + 1, - math.max(base, num_bookshelves * 2) - } - local slots = {} - for i, enchantment_level in ipairs(required_levels) do - local slot = false - local enchantments, description = mcl_enchanting.generate_random_enchantments(itemstack, enchantment_level) - if enchantments then - slot = { - enchantments = enchantments, - description = description, - glyphs = mcl_enchanting.get_random_glyph_row(), - level_requirement = math.max(i, math.floor(enchantment_level)), - } - end - slots[i] = slot - end - return slots -end - -function mcl_enchanting.get_table_slots(player, itemstack, num_bookshelves) - local itemname = itemstack:get_name() - if (not mcl_enchanting.can_enchant_freshly(itemname)) or mcl_enchanting.not_enchantable_on_enchanting_table(itemname) then - return {false, false, false} - end - local meta = player:get_meta() - local player_slots = minetest.deserialize(meta:get_string("mcl_enchanting:slots")) or {} - local player_bookshelves_slots = player_slots[num_bookshelves] or {} - local player_bookshelves_item_slots = player_bookshelves_slots[itemname] - if player_bookshelves_item_slots then - return player_bookshelves_item_slots - else - player_bookshelves_item_slots = mcl_enchanting.generate_random_table_slots(itemstack, num_bookshelves) - if player_bookshelves_item_slots then - player_bookshelves_slots[itemname] = player_bookshelves_item_slots - player_slots[num_bookshelves] = player_bookshelves_slots - meta:set_string("mcl_enchanting:slots", minetest.serialize(player_slots)) - return player_bookshelves_item_slots - else - return {false, false, false} - end - end -end - -function mcl_enchanting.reset_table_slots(player) - player:get_meta():set_string("mcl_enchanting:slots", "") -end - -function mcl_enchanting.show_enchanting_formspec(player) - local C = minetest.get_color_escape_sequence - local name = player:get_player_name() - local meta = player:get_meta() - local inv = player:get_inventory() - local num_bookshelves = meta:get_int("mcl_enchanting:num_bookshelves") - local table_name = meta:get_string("mcl_enchanting:table_name") - local formspec = "" - .. "size[9.07,8.6;]" - .. "formspec_version[3]" - .. "label[0,0;" .. C("#313131") .. F(table_name) .. "]" - .. mcl_formspec.get_itemslot_bg(0.2, 2.4, 1, 1) - .. "list[current_player;enchanting_item;0.2,2.4;1,1]" - .. mcl_formspec.get_itemslot_bg(1.1, 2.4, 1, 1) - .. "image[1.1,2.4;1,1;mcl_enchanting_lapis_background.png]" - .. "list[current_player;enchanting_lapis;1.1,2.4;1,1]" - .. "label[0,4;" .. C("#313131") .. F(S("Inventory")).."]" - .. mcl_formspec.get_itemslot_bg(0, 4.5, 9, 3) - .. mcl_formspec.get_itemslot_bg(0, 7.74, 9, 1) - .. "list[current_player;main;0,4.5;9,3;9]" - .. "listring[current_player;enchanting_item]" - .. "listring[current_player;main]" - .. "listring[current_player;enchanting]" - .. "listring[current_player;main]" - .. "listring[current_player;enchanting_lapis]" - .. "listring[current_player;main]" - .. "list[current_player;main;0,7.74;9,1;]" - .. "real_coordinates[true]" - .. "image[3.15,0.6;7.6,4.1;mcl_enchanting_button_background.png]" - local itemstack = inv:get_stack("enchanting_item", 1) - local player_levels = mcl_experience.get_level(player) - local y = 0.65 - local any_enchantment = false - local table_slots = mcl_enchanting.get_table_slots(player, itemstack, num_bookshelves) - for i, slot in ipairs(table_slots) do - any_enchantment = any_enchantment or slot - local enough_lapis = inv:contains_item("enchanting_lapis", ItemStack({name = "mcl_dye:blue", count = i})) - local enough_levels = slot and slot.level_requirement <= player_levels - local can_enchant = (slot and enough_lapis and enough_levels) - local ending = (can_enchant and "" or "_off") - local hover_ending = (can_enchant and "_hovered" or "_off") - formspec = formspec - .. "container[3.2," .. y .. "]" - .. (slot and "tooltip[button_" .. i .. ";" .. C("#818181") .. ((slot.description and F(slot.description)) or "") .. " " .. C("#FFFFFF") .. " . . . ?\n\n" .. (enough_levels and C(enough_lapis and "#818181" or "#FC5454") .. F(S("@1 Lapis Lazuli", i)) .. "\n" .. C("#818181") .. F(S("@1 Enchantment Levels", i)) or C("#FC5454") .. F(S("Level requirement: @1", slot.level_requirement))) .. "]" or "") - .. "style[button_" .. i .. ";bgimg=mcl_enchanting_button" .. ending .. ".png;bgimg_hovered=mcl_enchanting_button" .. hover_ending .. ".png;bgimg_pressed=mcl_enchanting_button" .. hover_ending .. ".png]" - .. "button[0,0;7.5,1.3;button_" .. i .. ";]" - .. (slot and "image[0,0;1.3,1.3;mcl_enchanting_number_" .. i .. ending .. ".png]" or "") - .. (slot and "label[7.2,1.1;" .. C(can_enchant and "#80FF20" or "#407F10") .. slot.level_requirement .. "]" or "") - .. (slot and slot.glyphs or "") - .. "container_end[]" - y = y + 1.35 - end - formspec = formspec - .. "image[" .. (any_enchantment and 0.58 or 1.15) .. ",1.2;" .. (any_enchantment and 2 or 0.87) .. ",1.43;mcl_enchanting_book_" .. (any_enchantment and "open" or "closed") .. ".png]" - minetest.show_formspec(name, "mcl_enchanting:table", formspec) -end - -function mcl_enchanting.handle_formspec_fields(player, formname, fields) - if formname == "mcl_enchanting:table" then - local button_pressed - for i = 1, 3 do - if fields["button_" .. i] then - button_pressed = i - end - end - if not button_pressed then return end - local name = player:get_player_name() - local inv = player:get_inventory() - local meta = player:get_meta() - local num_bookshelfes = meta:get_int("mcl_enchanting:num_bookshelves") - local itemstack = inv:get_stack("enchanting_item", 1) - local cost = ItemStack({name = "mcl_dye:blue", count = button_pressed}) - if not inv:contains_item("enchanting_lapis", cost) then - return - end - local slots = mcl_enchanting.get_table_slots(player, itemstack, num_bookshelfes) - local slot = slots[button_pressed] - if not slot then - return - end - local player_level = mcl_experience.get_level(player) - if player_level < slot.level_requirement then - return - end - mcl_experience.set_level(player, player_level - button_pressed) - inv:remove_item("enchanting_lapis", cost) - mcl_enchanting.set_enchanted_itemstring(itemstack) - mcl_enchanting.set_enchantments(itemstack, slot.enchantments) - inv:set_stack("enchanting_item", 1, itemstack) - minetest.sound_play("mcl_enchanting_enchant", {to_player = name, gain = 5.0}) - mcl_enchanting.reset_table_slots(player) - mcl_enchanting.show_enchanting_formspec(player) - end -end - -function mcl_enchanting.initialize_player(player) - local inv = player:get_inventory() - inv:set_size("enchanting", 1) - inv:set_size("enchanting_item", 1) - inv:set_size("enchanting_lapis", 1) -end - -function mcl_enchanting.is_enchanting_inventory_action(action, inventory, inventory_info) - if inventory:get_location().type == "player" then - local enchanting_lists = mcl_enchanting.enchanting_lists - if action == "move" then - local is_from = table.indexof(enchanting_lists, inventory_info.from_list) ~= -1 - local is_to = table.indexof(enchanting_lists, inventory_info.to_list) ~= -1 - return is_from or is_to, is_to - elseif (action == "put" or action == "take") and table.indexof(enchanting_lists, inventory_info.listname) ~= -1 then - return true - end - else - return false - end -end - -function mcl_enchanting.allow_inventory_action(player, action, inventory, inventory_info) - local is_enchanting_action, do_limit = mcl_enchanting.is_enchanting_inventory_action(action, inventory, inventory_info) - if is_enchanting_action and do_limit then - if action == "move" then - local listname = inventory_info.to_list - local stack = inventory:get_stack(inventory_info.from_list, inventory_info.from_index) - if stack:get_name() == "mcl_dye:blue" and listname ~= "enchanting_item" then - local count = stack:get_count() - local old_stack = inventory:get_stack("enchanting_lapis", 1) - if old_stack:get_name() ~= "" then - count = math.min(count, old_stack:get_free_space()) - end - return count - elseif inventory:get_stack("enchanting_item", 1):get_count() == 0 and listname ~= "enchanting_lapis" then - return 1 - else - return 0 - end - else - return 0 - end - end -end - -function mcl_enchanting.on_inventory_action(player, action, inventory, inventory_info) - if mcl_enchanting.is_enchanting_inventory_action(action, inventory, inventory_info) then - if action == "move" and inventory_info.to_list == "enchanting" then - local stack = inventory:get_stack("enchanting", 1) - local result_list - if stack:get_name() == "mcl_dye:blue" then - result_list = "enchanting_lapis" - stack:add_item(inventory:get_stack("enchanting_lapis", 1)) - else - result_list = "enchanting_item" - end - inventory:set_stack(result_list, 1, stack) - inventory:set_stack("enchanting", 1, nil) - end - mcl_enchanting.show_enchanting_formspec(player) - end -end - -function mcl_enchanting.schedule_book_animation(self, anim) - self.scheduled_anim = {timer = self.anim_length, anim = anim} -end - -function mcl_enchanting.set_book_animation(self, anim) - local anim_index = mcl_enchanting.book_animations[anim] - local start, stop = mcl_enchanting.book_animation_steps[anim_index], mcl_enchanting.book_animation_steps[anim_index + 1] - self.object:set_animation({x = start, y = stop}, mcl_enchanting.book_animation_speed, 0, mcl_enchanting.book_animation_loop[anim] or false) - self.scheduled_anim = nil - self.anim_length = (stop - start) / 40 -end - -function mcl_enchanting.check_animation_schedule(self, dtime) - local schedanim = self.scheduled_anim - if schedanim then - schedanim.timer = schedanim.timer - dtime - if schedanim.timer <= 0 then - mcl_enchanting.set_book_animation(self, schedanim.anim) - end - end -end - -function mcl_enchanting.look_at(self, pos2) - local pos1 = self.object:get_pos() - local vec = vector.subtract(pos1, pos2) - local yaw = math.atan(vec.z / vec.x) - math.pi/2 - yaw = yaw + (pos1.x >= pos2.x and math.pi or 0) - self.object:set_yaw(yaw + math.pi) -end - -function mcl_enchanting.get_bookshelves(pos) - local absolute, relative = {}, {} - for i, rp in ipairs(mcl_enchanting.bookshelf_positions) do - local airp = vector.add(pos, mcl_enchanting.air_positions[i]) - local ap = vector.add(pos, rp) - if minetest.get_node(ap).name == "mcl_books:bookshelf" and minetest.get_node(airp).name == "air" then - table.insert(absolute, ap) - table.insert(relative, rp) - end - end - return absolute, relative -end diff --git a/mods/ITEMS/mcl_enchanting/groupcaps.lua b/mods/ITEMS/mcl_enchanting/groupcaps.lua deleted file mode 100644 index 2a8372772..000000000 --- a/mods/ITEMS/mcl_enchanting/groupcaps.lua +++ /dev/null @@ -1,72 +0,0 @@ -local groupcaps_cache = {} - --- Compute a hash value. -function compute_hash(value) - return string.sub(minetest.sha1(minetest.serialize(value)), 1, 8) -end - --- Get the groupcaps and hash for an enchanted tool. If this function is called --- repeatedly with the same values it will return data from a cache. --- --- Parameters: --- toolname - Name of the tool --- level - The efficiency level of the tool --- --- Returns a table with the following two fields: --- values - The groupcaps table --- hash - The hash of the groupcaps table -local function get_efficiency_groupcaps(toolname, level) - local toolcache = groupcaps_cache[toolname] - local level = level - - if not toolcache then - toolcache = {} - groupcaps_cache[toolname] = toolcache - end - - local levelcache = toolcache[level] - if not levelcache then - levelcache = {} - levelcache.values = mcl_autogroup.get_groupcaps(toolname, level) - levelcache.hash = compute_hash(levelcache.values) - toolcache[level] = levelcache - end - - return levelcache -end - --- Update groupcaps of an enchanted tool. This function will be called --- repeatedly to make sure the digging times stored in groupcaps stays in sync --- when the digging times of nodes can change. --- --- To make it more efficient it will first check a hash value to determine if --- the tool needs to be updated. -function mcl_enchanting.update_groupcaps(itemstack) - local name = itemstack:get_name() - if not minetest.registered_tools[name] or not minetest.registered_tools[name].tool_capabilities then - return - end - - local efficiency = mcl_enchanting.get_enchantment(itemstack, "efficiency") - local unbreaking = mcl_enchanting.get_enchantment(itemstack, "unbreaking") - if unbreaking == 0 and efficiency == 0 then - return - end - - local groupcaps = get_efficiency_groupcaps(name, efficiency) - local hash = itemstack:get_meta():get_string("groupcaps_hash") - - if not hash or hash ~= groupcaps.hash then - local tool_capabilities = itemstack:get_tool_capabilities() - tool_capabilities.groupcaps = table.copy(groupcaps.values) - - -- Increase the number of uses depending on the unbreaking level - -- of the tool. - for group, capability in pairs(tool_capabilities.groupcaps) do - capability.uses = capability.uses * (1 + unbreaking) - end - - itemstack:get_meta():set_tool_capabilities(tool_capabilities) - itemstack:get_meta():set_string("groupcaps_hash", groupcaps.hash) - end -end diff --git a/mods/ITEMS/mcl_enchanting/init.lua b/mods/ITEMS/mcl_enchanting/init.lua deleted file mode 100644 index 9f9fbd271..000000000 --- a/mods/ITEMS/mcl_enchanting/init.lua +++ /dev/null @@ -1,368 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - -local math = math -local vector = vector - -mcl_enchanting = { - book_offset = vector.new(0, 0.75, 0), - book_animations = {["close"] = 1, ["opening"] = 2, ["open"] = 3, ["closing"] = 4}, - book_animation_steps = {0, 640, 680, 700, 740}, - book_animation_loop = {["open"] = true, ["close"] = true}, - book_animation_speed = 40, - roman_numerals = dofile(modpath .. "/roman_numerals.lua"), -- https://exercism.io/tracks/lua/exercises/roman-numerals/solutions/73c2fb7521e347209312d115f872fa49 - enchantments = {}, - overlay = "^[colorize:purple:50", - --overlay = "^[invert:rgb^[multiply:#4df44d:50^[invert:rgb", - enchanting_lists = {"enchanting", "enchanting_item", "enchanting_lapis"}, - bookshelf_positions = { - {x = -2, y = 0, z = -2}, {x = -2, y = 1, z = -2}, - {x = -1, y = 0, z = -2}, {x = -1, y = 1, z = -2}, - {x = 0, y = 0, z = -2}, {x = 0, y = 1, z = -2}, - {x = 1, y = 0, z = -2}, {x = 1, y = 1, z = -2}, - {x = 2, y = 0, z = -2}, {x = 2, y = 1, z = -2}, - {x = -2, y = 0, z = 2}, {x = -2, y = 1, z = 2}, - {x = -1, y = 0, z = 2}, {x = -1, y = 1, z = 2}, - {x = 0, y = 0, z = 2}, {x = 0, y = 1, z = 2}, - {x = 1, y = 0, z = 2}, {x = 1, y = 1, z = 2}, - {x = 2, y = 0, z = 2}, {x = 2, y = 1, z = 2}, - -- {x = -2, y = 0, z = -2}, {x = -2, y = 1, z = -2}, - {x = -2, y = 0, z = -1}, {x = -2, y = 1, z = -1}, - {x = -2, y = 0, z = 0}, {x = -2, y = 1, z = 0}, - {x = -2, y = 0, z = 1}, {x = -2, y = 1, z = 1}, - -- {x = -2, y = 0, z = 2}, {x = -2, y = 1, z = 2}, - -- {x = 2, y = 0, z = -2}, {x = 2, y = 1, z = -2}, - {x = 2, y = 0, z = -1}, {x = 2, y = 1, z = -1}, - {x = 2, y = 0, z = 0}, {x = 2, y = 1, z = 0}, - {x = 2, y = 0, z = 1}, {x = 2, y = 1, z = 1}, - -- {x = 2, y = 0, z = 2}, {x = 2, y = 1, z = 2}, - }, - air_positions = { - {x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1}, - {x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1}, - {x = 0, y = 0, z = -1}, {x = 0, y = 1, z = -1}, - {x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1}, - {x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1}, - {x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1}, - {x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1}, - {x = 0, y = 0, z = 1}, {x = 0, y = 1, z = 1}, - {x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1}, - {x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1}, - -- {x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1}, - {x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1}, - {x = -1, y = 0, z = 0}, {x = -1, y = 1, z = 0}, - {x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1}, - -- {x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1}, - -- {x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1}, - {x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1}, - {x = 1, y = 0, z = 0}, {x = 1, y = 1, z = 0}, - {x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1}, - -- {x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1}, - }, -} - -dofile(modpath .. "/engine.lua") -dofile(modpath .. "/groupcaps.lua") -dofile(modpath .. "/enchantments.lua") - -minetest.register_chatcommand("enchant", { - description = S("Enchant an item"), - params = S(" []"), - privs = {give = true}, - func = function(_, param) - local sparam = param:split(" ") - local target_name = sparam[1] - local enchantment = sparam[2] - local level_str = sparam[3] - local level = tonumber(level_str or "1") - if not target_name or not enchantment then - return false, S("Usage: /enchant []") - end - local target = minetest.get_player_by_name(target_name) - if not target then - return false, S("Player '@1' cannot be found.", target_name) - end - local itemstack = target:get_wielded_item() - local can_enchant, errorstring, extra_info = mcl_enchanting.can_enchant(itemstack, enchantment, level) - if not can_enchant then - if errorstring == "enchantment invalid" then - return false, S("There is no such enchantment '@1'.", enchantment) - elseif errorstring == "item missing" then - return false, S("The target doesn't hold an item.") - elseif errorstring == "item not supported" then - return false, S("The selected enchantment can't be added to the target item.") - elseif errorstring == "level invalid" then - return false, S("'@1' is not a valid number", level_str) - elseif errorstring == "level too high" then - return false, S("The number you have entered (@1) is too big, it must be at most @2.", level_str, extra_info) - elseif errorstring == "level too small" then - return false, S("The number you have entered (@1) is too small, it must be at least @2.", level_str, extra_info) - elseif errorstring == "incompatible" then - return false, S("@1 can't be combined with @2.", mcl_enchanting.get_enchantment_description(enchantment, level), extra_info) - end - else - target:set_wielded_item(mcl_enchanting.enchant(itemstack, enchantment, level)) - return true, S("Enchanting succeded.") - end - end -}) - -minetest.register_chatcommand("forceenchant", { - description = S("Forcefully enchant an item"), - params = S(" []"), - privs = {give = true}, - func = function(_, param) - local sparam = param:split(" ") - local target_name = sparam[1] - local enchantment = sparam[2] - local level_str = sparam[3] - local level = tonumber(level_str or "1") - if not target_name or not enchantment then - return false, S("Usage: /forceenchant []") - end - local target = minetest.get_player_by_name(target_name) - if not target then - return false, S("Player '@1' cannot be found.", target_name) - end - local itemstack = target:get_wielded_item() - local _, errorstring = mcl_enchanting.can_enchant(itemstack, enchantment, level) - if errorstring == "enchantment invalid" then - return false, S("There is no such enchantment '@1'.", enchantment) - elseif errorstring == "item missing" then - return false, S("The target doesn't hold an item.") - elseif errorstring == "item not supported" and not mcl_enchanting.is_enchantable(itemstack:get_name()) then - return false, S("The target item is not enchantable.") - elseif errorstring == "level invalid" then - return false, S("'@1' is not a valid number.", level_str) - else - target:set_wielded_item(mcl_enchanting.enchant(itemstack, enchantment, level)) - return true, S("Enchanting succeded.") - end - end -}) - -minetest.register_craftitem("mcl_enchanting:book_enchanted", { - description = S("Enchanted Book"), - inventory_image = "mcl_enchanting_book_enchanted.png" .. mcl_enchanting.overlay, - groups = {enchanted = 1, not_in_creative_inventory = 1, enchantability = 1}, - _mcl_enchanting_enchanted_tool = "mcl_enchanting:book_enchanted", - stack_max = 1, -}) - -minetest.register_alias("mcl_books:book_enchanted", "mcl_enchanting:book_enchanted") - -local function spawn_book_entity(pos, respawn) - if respawn then - -- Check if we already have a book - local objs = minetest.get_objects_inside_radius(pos, 1) - for o=1, #objs do - local obj = objs[o] - local lua = obj:get_luaentity() - if lua and lua.name == "mcl_enchanting:book" then - if lua._table_pos and vector.equals(pos, lua._table_pos) then - return - end - end - end - end - local obj = minetest.add_entity(vector.add(pos, mcl_enchanting.book_offset), "mcl_enchanting:book") - if obj then - local lua = obj:get_luaentity() - if lua then - lua._table_pos = table.copy(pos) - end - end -end - -minetest.register_entity("mcl_enchanting:book", { - initial_properties = { - visual = "mesh", - mesh = "mcl_enchanting_book.b3d", - visual_size = {x = 12.5, y = 12.5}, - collisionbox = {0, 0, 0}, - pointable = false, - physical = false, - textures = {"mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png"}, - static_save = false, - }, - _player_near = false, - _table_pos = nil, - on_activate = function(self, staticdata) - self.object:set_armor_groups({immortal = 1}) - mcl_enchanting.set_book_animation(self, "close") - end, - on_step = function(self, dtime) - local old_player_near = self._player_near - local player_near = false - local player - for _, obj in pairs(minetest.get_objects_inside_radius(vector.subtract(self.object:get_pos(), mcl_enchanting.book_offset), 2.5)) do - if obj:is_player() then - player_near = true - player = obj - end - end - if player_near and not old_player_near then - mcl_enchanting.set_book_animation(self, "opening") - mcl_enchanting.schedule_book_animation(self, "open") - elseif old_player_near and not player_near then - mcl_enchanting.set_book_animation(self, "closing") - mcl_enchanting.schedule_book_animation(self, "close") - end - if player then - mcl_enchanting.look_at(self, player:get_pos()) - end - self._player_near = player_near - mcl_enchanting.check_animation_schedule(self, dtime) - end, -}) - -local rotate -if minetest.get_modpath("screwdriver") then - rotate = screwdriver.rotate_simple -end - -minetest.register_node("mcl_enchanting:table", { - description = S("Enchanting Table"), - _tt_help = S("Spend experience, and lapis to enchant various items."), - _doc_items_longdesc = S("Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli."), - _doc_items_usagehelp = - S("Rightclick the Enchanting Table to open the enchanting menu.").."\n".. - S("Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.").."\n".."\n".. - S("After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.").."\n".. - S("These options are randomized, and dependent on experience level; but the enchantment strength can be increased.").."\n".."\n".. - S("To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.").."\n".."\n".. - S("After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place."), - _doc_items_hidden = false, - drawtype = "nodebox", - tiles = {"mcl_enchanting_table_top.png", "mcl_enchanting_table_bottom.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0.25, 0.5}, - }, - sounds = mcl_sounds.node_sound_stone_defaults(), - groups = {pickaxey = 2, deco_block = 1}, - on_rotate = rotate, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local player_meta = clicker:get_meta() - --local table_meta = minetest.get_meta(pos) - --local num_bookshelves = table_meta:get_int("mcl_enchanting:num_bookshelves") - local table_name = minetest.get_meta(pos):get_string("name") - if table_name == "" then - table_name = S("Enchant") - end - local bookshelves = mcl_enchanting.get_bookshelves(pos) - player_meta:set_int("mcl_enchanting:num_bookshelves", math.min(15, #bookshelves)) - player_meta:set_string("mcl_enchanting:table_name", table_name) - mcl_enchanting.show_enchanting_formspec(clicker) - -- Respawn book entity just in case it got lost - spawn_book_entity(pos, true) - end, - on_construct = function(pos) - spawn_book_entity(pos) - end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local dname = (digger and digger:get_player_name()) or "" - if minetest.is_creative_enabled(dname) then - return - end - local itemstack = ItemStack("mcl_enchanting:table") - local meta = minetest.get_meta(pos) - local itemmeta = itemstack:get_meta() - itemmeta:set_string("name", meta:get_string("name")) - itemmeta:set_string("description", meta:get_string("description")) - minetest.add_item(pos, itemstack) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - local meta = minetest.get_meta(pos) - local itemmeta = itemstack:get_meta() - meta:set_string("name", itemmeta:get_string("name")) - meta:set_string("description", itemmeta:get_string("description")) - end, - after_destruct = function(pos) - local objs = minetest.get_objects_inside_radius(pos, 1) - for o=1, #objs do - local obj = objs[o] - local lua = obj:get_luaentity() - if lua and lua.name == "mcl_enchanting:book" then - if lua._table_pos and vector.equals(pos, lua._table_pos) then - obj:remove() - end - end - end - end, - drop = "", - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, -}) - -minetest.register_craft({ - output = "mcl_enchanting:table", - recipe = { - {"", "mcl_books:book", ""}, - {"mcl_core:diamond", "mcl_core:obsidian", "mcl_core:diamond"}, - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"} - } -}) - -minetest.register_abm({ - label = "Enchanting table bookshelf particles", - interval = 1, - chance = 1, - nodenames = "mcl_enchanting:table", - action = function(pos) - local playernames = {} - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 15)) do - if obj:is_player() then - table.insert(playernames, obj:get_player_name()) - end - end - if #playernames < 1 then - return - end - local absolute, relative = mcl_enchanting.get_bookshelves(pos) - for i, ap in ipairs(absolute) do - if math.random(5) == 1 then - local rp = relative[i] - local t = math.random()+1 --time - local d = {x = rp.x, y=rp.y-0.7, z=rp.z} --distance - local v = {x = -math.random()*d.x, y = math.random(), z = -math.random()*d.z} --velocity - local a = {x = 2*(-v.x*t - d.x)/t/t, y = 2*(-v.y*t - d.y)/t/t, z = 2*(-v.z*t - d.z)/t/t} --acceleration - local s = math.random()+0.9 --size - t = t - 0.1 --slightly decrease time to avoid texture overlappings - local tx = "mcl_enchanting_glyph_" .. math.random(18) .. ".png" - for _, name in pairs(playernames) do - minetest.add_particle({ - pos = ap, - velocity = v, - acceleration = a, - expirationtime = t, - size = s, - texture = tx, - collisiondetection = false, - playername = name - }) - end - end - end - end -}) - -minetest.register_lbm({ - label = "(Re-)spawn book entity above enchanting table", - name = "mcl_enchanting:spawn_book_entity", - nodenames = {"mcl_enchanting:table"}, - run_at_every_load = true, - action = function(pos) - spawn_book_entity(pos, true) - end, -}) - - -minetest.register_on_mods_loaded(mcl_enchanting.initialize) -minetest.register_on_joinplayer(mcl_enchanting.initialize_player) -minetest.register_on_player_receive_fields(mcl_enchanting.handle_formspec_fields) -minetest.register_allow_player_inventory_action(mcl_enchanting.allow_inventory_action) -minetest.register_on_player_inventory_action(mcl_enchanting.on_inventory_action) -tt.register_priority_snippet(mcl_enchanting.enchantments_snippet) diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.de.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.de.tr deleted file mode 100644 index ecc08b5dc..000000000 --- a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.de.tr +++ /dev/null @@ -1,100 +0,0 @@ -# textdomain: mcl_enchanting -Aqua Affinity=Aquaaffinität -Increases underwater mining speed.=Erhöht Unterwassergrabegeschwindigkeit. -Bane of Arthropods=Schrecken der Gliederfüßler -Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Erhöht Schaden und gibt Langsamkeit IV an Gliederfüßlern (Spinnen, Höhlenspinenn, Silberfischchen und Endermilben). -Blast Protection=Explosionsschutz -Reduces explosion damage and knockback.=Reduziert Explosionsschaden und -rückschlag. -Channeling=Kanalisierung -Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Kanalisiert einen Blitz zu einem Ziel. Funktioniert nur während Gewitterstürmen und solange kein undurchsichtiger Block im Weg ist. -Curse of Binding=Fluch der Bindung -Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Gegenstand kann nicht von den Rüstungsplätzen entfernt werden, außer beim Tod, Zerbrechen oder im Kreativmodus. -Curse of Vanishing=Fluch des Verschwindens -Item destroyed on death.=Gegenstand wird bei Tod zerstört. -Depth Strider=Tiefenstreicher -Increases underwater movement speed.=Erhöht Bewegungsgeschwindigkeit im Wasser. -Efficiency=Effizienz -Increases mining speed.=Erhöht Grabegeschwindigkeit. -Feather Falling=Federfall -Reduces fall damage.=Reduziert Fallschaden. -Fire Aspect=Feueraspekt -Sets target on fire.=Zündet das Ziel an. -Fire Protection=Feuerschutz -Reduces fire damage.=Reduziert Feuerschaden -Flame=Flamme -Arrows set target on fire.=Pfeile zünden Ziel an. -Fortune=Glück -Increases certain block drops.=Erhöht bestimmte Blockabwürfe. -Frost Walker=Frostläufer -Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Verwandelt Wasser unter dem Spieler zu brüchigem Eis und verhindert Schaden von Magmablöcken. -Impaling=Aufspießen -Trident deals additional damage to ocean mobs.=Dreizack richtet Zusatzschaden an Ozeanmobs an. -Infinity=Unendlichkeit -Shooting consumes no regular arrows.=Schüsse verbrauchen keine regulären Pfeile. -Knockback=Rückschlag -Increases knockback.=Verstärkt Rückschlag. -Looting=Plünderer -Increases mob loot.=Erhöht Abwürfe von Mobs. -Loyalty=Loyalität -Trident returns after being thrown. Higher levels reduce return time.=Dreizack kehrt nach Wurf zurück. Höhere Stufen reduzieren die Rückkehrzeit. -Luck of the Sea=Glück des Meeres -Increases rate of good loot (enchanting books, etc.)=Erhöht die Rate von guten Abwürfen (verzauberte Bücher, usw.) -Lure=Köder -Decreases time until rod catches something.=Reduziert die Zeit, bis die Angel etwas fängt. -Mending=Ausbessern -Repair the item while gaining XP orbs.=Gegenstand reparieren, während man Erfahrungskugeln erhält. -Multishot=Mehrfachschuss -Shoot 3 arrows at the cost of one.=3 Pfeile zum Preis von 1 schießen. -Piercing=Durchbohren -Arrows passes through multiple objects.=Pfeile durchdringen mehrere Objekte. -Power=Stärke -Increases arrow damage.=Erhöht Pfeilschaden. -Projectile Protection=Projektilprojektion -Reduces projectile damage.=Reduziert Projektilschaden. -Protection=Schutz -Reduces most types of damage by 4% for each level.=Reduziert die meisten Schadensarten um 4% je Stufe. -Punch=Schlag -Increases arrow knockback.=Erhöht Pfeilrückschlag. -Quick Charge=Schnellladen -Decreases crossbow charging time.=Reduziert Armbrustladezeit. -Respiration=Atmung -Extends underwater breathing time.=Erhöht Unterwasseratemzeit. -Riptide=Strömung -Trident launches player with itself when thrown. Works only in water or rain.=Dreizack wirft den Spieler mit. Funktioniert nur im Wasser oder Regen. -Sharpness=Schärfe -Increases damage.=Erhöht Schaden. -Silk Touch=Sorgfalt -Mined blocks drop themselves.=Abgebaute Blöcke werfen sich selbst ab. -Smite=Qual -Increases damage to undead mobs.=Erhöht Schaden für untote Mobs. -Soul Speed=Schnelle Seele -Increases walking speed on soul sand.=Erhöht Gehgeschwindigkeit auf Seelensand. -Sweeping Edge=Schwungklinge -Increases sweeping attack damage.=Erhöht Schwungangriffsschaden. -Thorns=Dornen -Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflektiert etwas des Schadens beim Erleiden eines Treffers, auf Kosten der Haltbarkeit. -Unbreaking=Haltbarkeit -Increases item durability.=Erhöht Haltbarkeit des Gegenstands. -Inventory=Inventar -@1 Lapis Lazuli=@1 Lapislazuli -@1 Enchantment Levels=@1 Verzauberungsstufen -Level requirement: @1=Level benötigt: @1 -Enchant an item=Gegenstand verzaubern - []= [] -Usage: /enchant []=Verwendung: /enchant [] -Player '@1' cannot be found.=Spieler „@1“ kann nicht gefunden werden. -There is no such enchantment '@1'.=Es gibt keine Verzauberung namens „@1“. -The target doesn't hold an item.=Das Ziel hält keinen Gegenstand. -The selected enchantment can't be added to the target item.=Die gewählte Verzauberug kann nicht dem Ziel gegeben werden. -'@1' is not a valid number='@1' ist keine gültige Zahl -The number you have entered (@1) is too big, it must be at most @2.=Die eingegebene Zahl (@1) ist zu groß, maximal @1 erlaubt. -The number you have entered (@1) is too small, it must be at least @2.=Die eingegebene Zahl (@1) ist zu klein, minimal @1 erlaubt. -@1 can't be combined with @2.=@1 kann nicht mit @2 kombiniert werden. -Enchanting succeded.=Verzauberug erfolgreich. -Forcefully enchant an item=Einen Gegenstand zwangsweise verzaubern -Usage: /forceenchant []=Verwendung: /forceenchant [] -The target item is not enchantable.=Der Zielgegenstand ist nicht verzauberbar. -'@1' is not a valid number.='@1' ist keine gültige Zahl. -Enchanted Book=Verzaubertes Buch -Enchanting Table=Zaubertisch -Enchant=Verzaubern diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.es.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.es.tr deleted file mode 100644 index a977e8fe6..000000000 --- a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.es.tr +++ /dev/null @@ -1,123 +0,0 @@ -# textdomain: mcl_enchanting - - -### enchantments.lua ### - -Arrows passes through multiple objects.=Las flechas atraviesan multiples enemigos. -Arrows set target on fire.=Las flechas prenderan los enemigos. -Bane of Arthropods=Perdición de los Artrópodos -Channeling=Conductividad - -Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canaliza los rayos de una tormenta hacia el enemigo. - -Curse of Vanishing=Maldición de Desaparición -Decreases crossbow charging time.=Disminuye el tiempo de carga de las ballestas. -Decreases time until rod catches something.=Disminuye el tiempo que tardan en picar los cebos en la pesca. -Depth Strider=Agilidad acuática -Efficiency=Eficiencia -Extends underwater breathing time.=Aumenta el tiempo de mantener la respiración. -Fire Aspect=Aspecto Ígneo -Flame=Fuego -Fortune=Fortuna -Frost Walker=Paso Helado -Impaling=Empalamiento -Increases arrow damage.=Incrementa el daño de las flechas. -Increases arrow knockback.=Incrementa el empuje de las flechas. -Increases certain block drops.=Incrementa la cantidad de objetos que sueltan los bloques. - -Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Incrementa el daño y ralentiza a los artrópodos. (arañas, lepismas, endermitas, etc) - -Increases damage to undead mobs.=Incrementa el daño contra no-muertos. -Increases damage.=Incrementa el daño. -Increases item durability.=Incrementa la durabilidad de una herramienta. -Increases knockback.=Incrementa el empuje. -Increases mining speed.=Incrementa la velocidad de picado. -Increases mob loot.=Incrementa el botín de los enemigos. -Increases rate of good loot (enchanting books, etc.)=Incrementa la probabilidad de encontrar tesoros. -Increases sweeping attack damage.=Incrementa el daño de efecto area. -Increases underwater movement speed.=Incrementa la velocidad de nado bajo el agua. -Increases walking speed on soul sand.=Incrementa la velocidad al caminar sobre arena de Almas. -Infinity=Infinidad -Item destroyed on death.=El objeto se destruye tras tu muerte. -Knockback=Empuje -Looting=Botín -Loyalty=Lealtad -Luck of the Sea=Suerte Marina -Lure=Atracción -Mending=Reparación -Mined blocks drop themselves.=Los bloques se minarán enteros. -Multishot=Multidisparo -Piercing=Perforación -Power=Poder -Punch=Retroceso -Quick Charge=Carga Rápida -Repair the item while gaining XP orbs.=Repara los objetos portados al recibir orbes de experiencia. -Respiration=Respiración -Riptide=Propulsión acuática -Sets target on fire.=Incencia al enemigo. -Sharpness=Filo -Shoot 3 arrows at the cost of one.=Dispara 3 flechas al precio de una. -Shooting consumes no regular arrows.=No se consumiran las flechas lanzadas. -Silk Touch=Toque de Seda -Smite=Golpeo -Soul Speed=Velocidad de Almas -Sweeping Edge=Filo Arrasador -Trident deals additional damage to ocean mobs.=Incrementa el daño del tridente sobre criaturas acuáticas. - -Trident launches player with itself when thrown. Works only in water or rain.=El tridente impulsa al portador dentro del agua o bajo la lluvia. - -Trident returns after being thrown. Higher levels reduce return time.=El tridente regresa al portador tras lanzarlo. - -Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Congela el agua bajo tus pies y evita el daño de los bloques de magma. - -Unbreaking=Irrompibilidad - -### engine.lua ### - -@1 Enchantment Levels=Nivel de encantamiento: @1 -@1 Lapis Lazuli=@1 Lapis Lázuli -Inventory=Inventario -Level requirement: @1=Nivel requerido: @1 - -### init.lua ### - -'@1' is not a valid number='@1' no es un número válido -'@1' is not a valid number.='@1' no es un número válido - []= [] -@1 can't be combined with @2.=@1 no se puede combinar con @2 - -After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.=Despues elige tu encantamiento, los niveles de experiencia y el lapis lázuli seran consumidos y el encantamiento aplicado al objeto. - -After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.=Coloca el objeto en su ranura yse mostraran los encantamientos a elegir. - -Enchant=Encantamiento -Enchant an item=Encantar objeto -Enchanted Book=Libro Encantado -Enchanting Table=Mesa de Encantamientos - -Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.=La mesa de Encantamientos dara a tus herramientas, armas o armadura algunas habilidades magicas. Pero a coste de algo de experiencia y lapis lázuli. - -Enchanting succeded.=Encantado correctamente. -Forcefully enchant an item=Encantar objeto a la fuerza. - -Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.=Coloca una herramienta, arma, armadura o libro sobre la ranura izquierda, coloca de 1 a 3 Lapis lázulis en la ranura derecha. - -Player '@1' cannot be found.=Jugador @1 no encontrado. -Rightclick the Enchanting Table to open the enchanting menu.=Clic derecho sobre la mesa de encantamientos para abrir la interfaz. -Spend experience, and lapis to enchant various items.=Experiencia y Lapis para encantar varios objetos. - -The number you have entered (@1) is too big, it must be at most @2.=@1 es muy grande, debe ser menor que @2 - -The number you have entered (@1) is too small, it must be at least @2.=@1 es muy pequeño, debe ser mayor a @2 - -The selected enchantment can't be added to the target item.=El encantamiento seleccionado no puede añadirse a ese objeto. -The target doesn't hold an item.=El jugador no sujeta un objeto. -The target item is not enchantable.=El objeto del jugador no se puede encantar. -There is no such enchantment '@1'.=@1 no es un encantamiento. - -These options are randomized, and dependent on experience level; but the enchantment strength can be increased.=Las opciones seran aleatorias dependiendo del nivel de experiencia, los niveles de encantamiento pueden ser aumentados. - -To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.=Para aumentar los niveles de encantamientos, coloca librerias alrededor y cerca de la mesa de encantamientos. - -Usage: /enchant []=Usa: /enchant [] -Usage: /forceenchant []=Usa /forceenchant [] diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.fr.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.fr.tr deleted file mode 100644 index 985499964..000000000 --- a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.fr.tr +++ /dev/null @@ -1,100 +0,0 @@ -# textdomain: mcl_enchanting -Aqua Affinity=Affinité aquatique -Increases underwater mining speed.=Augmente la vitesse de minage sous-marine. -Bane of Arthropods=Fléau des arthropodes -Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Augmente les dégâts et applique la lenteur IV aux mobs arthropodes (araignées, araignées des cavernes, lépismes argentés et endermites). -Blast Protection=Protection contre les explosions -Reduces explosion damage and knockback.=Réduit les dégâts d'explosion et de recul. -Channeling=Canalisation -Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canalise un éclair vers une cible. Fonctionne uniquement pendant les orages et si la cible n'est pas obstruée par des blocs opaques. -Curse of Binding=Malédiction du lien éternel -Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=L'objet ne peut pas être retiré des emplacements d'armure sauf en cas de mort, de rupture ou en mode créatif. -Curse of Vanishing=Malédiction de disparition -Item destroyed on death.=Objet détruit à la mort. -Depth Strider=Agilité aquatique -Increases underwater movement speed.=Augmente la vitesse de déplacement sous l'eau. -Efficiency=Efficacité -Increases mining speed.=Augmente la vitesse de minage. -Feather Falling=Chute amortie -Reduces fall damage.=Reduit les dégats de chute. -Fire Aspect=Aura de feu -Sets target on fire.=Définit la cible en feu. -Fire Protection=Protection contre le feu -Reduces fire damage.=Reduit les dégats de feu. -Flame=Flamme -Arrows set target on fire.=Les flèches mettent le feu à la cible. -Fortune=Fortune -Increases certain block drops.=Multiplie les items droppés -Frost Walker=Semelles givrantes -Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Transforme l'eau sous le joueur en glace givrée et empêche les dommages causés par les blocs de magma. -Impaling=Empalement -Trident deals additional damage to ocean mobs.=Trident inflige des dégâts supplémentaires aux mobs océaniques. -Infinity=Infinité -Shooting consumes no regular arrows.=Le tir ne consomme pas de flèches standard. -Knockback=Recul -Increases knockback.=Augmente le recul. -Looting=Butin -Increases mob loot.=Augmente le butin des mobs. -Loyalty=Loyauté -Trident returns after being thrown. Higher levels reduce return time.=Trident revient après avoir été jeté. Des niveaux plus élevés réduisent le temps de retour. -Luck of the Sea=Chance de la mer -Increases rate of good loot (enchanting books, etc.)=Augmente le taux de bon butin (livres enchanteurs, etc.) -Lure=Appât -Decreases time until rod catches something.=Diminue le temps jusqu'à ce qu'un poisson ne morde à l'hameçon. -Mending=Raccommodage -Repair the item while gaining XP orbs.=Réparez l'objet tout en gagnant des points d'XP. -Multishot=Tir multiple -Shoot 3 arrows at the cost of one.=Tirez sur 3 flèches au prix d'une. -Piercing=Perforation -Arrows passes through multiple objects.=Les flèches traversent plusieurs objets. -Power=Puissance -Increases arrow damage.=Augmente les dégâts des flèches. -Projectile Protection=Protection contre les projectiles -Reduces projectile damage.=Réduit les dommages causés par les projectiles. -Protection=Protection -Reduces most types of damage by 4% for each level.=éduit la plupart des types de dégâts de 4% pour chaque niveau. -Punch=Frappe -Increases arrow knockback.=Augmente le recul de la flèche. -Quick Charge=Charge rapide -Decreases crossbow charging time.=Diminue le temps de chargement de l'arbalète. -Respiration=Apnée -Extends underwater breathing time.=Prolonge le temps de respiration sous l'eau. -Riptide=Impulsion -Trident launches player with itself when thrown. Works only in water or rain.=Trident lance le joueur avec lui-même lorsqu'il est lancé. Fonctionne uniquement sous l'eau ou sous la pluie. -Sharpness=Tranchant -Increases damage.=Augmente les dégâts. -Silk Touch=Toucher de soie -Mined blocks drop themselves.=Les blocs minés tombent d'eux-mêmes. -Smite=Châtiment -Increases damage to undead mobs.=Augmente les dégâts infligés aux monstres morts-vivants. -Soul Speed=Agilité des âmes -Increases walking speed on soul sand.=Augmente la vitesse de marche sur le sable de l'âme. -Sweeping Edge=Affilage -Increases sweeping attack damage.=Augmente les dégâts de l'épée -Thorns=Épines -Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflète une partie des dégâts subis lors de la frappe, au prix d'une réduction de la durabilité à chaque déclenchement. -Unbreaking=Solidité -Increases item durability.=Augmente la durabilité des objets. -Inventory=Inventaire -@1 Lapis Lazuli=@1 Lapis Lazuli -@1 Enchantment Levels=@1 Niveaux d'enchantement -Level requirement: @1=Niveau requis: @1 -Enchant an item=Enchanter un objet - []= [] -Usage: /enchant []=Usage: /enchant [] -Player '@1' cannot be found.=Le joueur '@1' est introuvable. -There is no such enchantment '@1'.=Il n'y a pas un tel enchantement '@1'. -The target doesn't hold an item.=La cible ne contient aucun élément. -The selected enchantment can't be added to the target item.=L'enchantement sélectionné ne peut pas être ajouté à la cible. -'@1' is not a valid number='@1' n'est pas un nombre valide -The number you have entered (@1) is too big, it must be at most @2.=Le nombre que vous avez entré (@1) est trop grand, il doit être au plus de @2. -The number you have entered (@1) is too small, it must be at least @2.=Le nombre que vous avez entré (@1) est trop petit, il doit être au moins de @2. -@1 can't be combined with @2.=@1 ne peut pas être combiné avec @2. -Enchanting succeded.=L'enchantement a réussi. -Forcefully enchant an item=Enchantement forcé d'un objet -Usage: /forceenchant []=Usage: /forceenchant [] -The target item is not enchantable.=L'objet cible n'est pas enchantable. -'@1' is not a valid number.='@1' n'est pas un nombre valide. -Enchanted Book=Livre enchanté -Enchanting Table=Table d'enchantement -Enchant=Enchantement diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.pl.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.pl.tr deleted file mode 100644 index 179702d79..000000000 --- a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.pl.tr +++ /dev/null @@ -1,100 +0,0 @@ -# textdomain: mcl_enchanting -Aqua Affinity=Powinowactwo wodne -Increases underwater mining speed.=Przyspiesza wydobywanie pod wodą. -Bane of Arthropods=Zmora stawonogów -Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Zwiększa obrażenia i aplikuje Spowolnienie IV stawonogom (pająkom, pająkom jaskiniowym, rybikom cukrowym i endermitom) -Blast Protection=Ochrona od wybuchów -Reduces explosion damage and knockback.=Zmniejsza obrażenia od wybuchów i odrzut. -Channeling=Przekierowanie -Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Przekierowuje błyskawicę w stronę celu. Działa tylko podczas burz jeśli cel nie jest zasłonięty przez nieprzezroczyste bloki. -Curse of Binding=Klątwa wiązania -Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Przedmiotu nie można zdjąć z miejsc na zbroję inaczej niż przez śmierć, zepsucie bądź w trybie kreatywnym. -Curse of Vanishing=Klątwa znikania -Item destroyed on death.=Przedmiot niszczony przy śmierci -Depth Strider=Głębinowy wędrowiec -Increases underwater movement speed.=Zwiększa prędkość poruszania pod wodą. -Efficiency=Wydajność -Increases mining speed.=Zwiększa prędkość wydobywania zasobów. -Feather Falling=Powolne opadanie -Reduces fall damage.=Zmniejsza obrażenia od upadku. -Fire Aspect=Zaklęty ogień -Sets target on fire.=Podpala cel. -Fire Protection=Ochrona przed ogniem -Reduces fire damage.=Zmniejsza obrażenia od ognia -Flame=Płomień -Arrows set target on fire.=Strzały podpalają cel. -Fortune=Fortuna -Increases certain block drops.=Zwiększa prawdopodobieństwo wypadnięcia przedmiotów z niektórych bloków. -Frost Walker=Mroźny piechur -Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Zamienia wodę pod graczem w oszroniony lód i pozwala uniknąć obrażeń od bloków magmy. -Impaling=Przebicie -Trident deals additional damage to ocean mobs.=Trójząb zadaje dodatkowe obrażenia podwodnym stworzeniom. -Infinity=Nieskończoność -Shooting consumes no regular arrows.=Strzelanie nie zużywa zwykłych strzał. -Knockback=Odrzut -Increases knockback.=Zwiększa odrzut. -Looting=Grabież -Increases mob loot.=Zwiększa liczbę przedmiotów wypadających z mobów. -Loyalty=Lojalność -Trident returns after being thrown. Higher levels reduce return time.=Trydent wraca do gracza po rzuceniu. Większy poziom zmniejsza czas powrotu. -Luck of the Sea=Morska fortuna -Increases rate of good loot (enchanting books, etc.)=Zwiększa szansę na wypadnięcie dobrych przedmiotów (zaklętych książek itp.) -Lure=Przynęta -Decreases time until rod catches something.=Zmniejsza czas po którym coś złapie się na wędkę -Mending=Naprawa -Repair the item while gaining XP orbs.=Naprawia przedmiot podczas podnoszenia kul doświadczenia. -Multishot=Wielostrzał -Shoot 3 arrows at the cost of one.=Wystrzel 3 strzały kosztem jednej. -Piercing=Przeszycie -Arrows passes through multiple objects.=Strzała przelatuje przez wiele obiektów. -Power=Moc -Increases arrow damage.=Zwiększa obrażenia od strzał. -Projectile Protection=Ochrona przed pociskami -Reduces projectile damage.=Zmniejsza obrażenia od pocisków. -Protection=Obrona -Reduces most types of damage by 4% for each level.=Zmniejsza obrażenia większości typów o 4% za każdy poziom. -Punch=Uderzenie -Increases arrow knockback.=Zwiększa odrzut strzał. -Quick Charge=Szybkie ładowanie -Decreases crossbow charging time.=Zmniejsza czas ładowania kuszy. -Respiration=Oddychanie -Extends underwater breathing time.=Zwiększa czas na który można wstrzymać oddech pod wodą. -Riptide=Torpeda -Trident launches player with itself when thrown. Works only in water or rain.=Trydent porywa gracza ze sobą podczas rzucania. Działa tylko w wodzie lub w deszczu. -Sharpness=Ostrość -Increases damage.=Zwiększa obrażenia. -Silk Touch=Jedwabny dotyk -Mined blocks drop themselves.=Z wydobywanych bloków wypadają one same. -Smite=Pogromca nieumarłych -Increases damage to undead mobs.=Zwiększa obrażenia zadawane nieumarłym mobom. -Soul Speed=Prędkość dusz -Increases walking speed on soul sand.=Zwiększa szybkość chodzenia po piasku dusz. -Sweeping Edge=Szerokie ostrze -Increases sweeping attack damage.=Zwiększa obrażenia przy ataku z zamachu. -Thorns=Ciernie -Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Odbija część zadanych obrażeń kosztem utraty wytrzymałości zbroi. -Unbreaking=Niezniszczalność -Increases item durability.=Zwiększa wytrzymałość przedmiotu. -Inventory=Ekwipunek -@1 Lapis Lazuli=@1 Lazurytów -@1 Enchantment Levels=@1 poziomów zaklęcia -Level requirement: @1=Wymagany poziom: @1 -Enchant an item=Zaczaruj przedmiot - []= [] -Usage: /enchant []=Użycie: /enchant [] -Player '@1' cannot be found.=Gracz '@1' nie został znaleziony. -There is no such enchantment '@1'.=Nie ma takiego zaklęcia '@1'. -The target doesn't hold an item.=Cel nie trzyma żadnego przedmiotu. -The selected enchantment can't be added to the target item.=Wybrane zaklęcie nie może zostać zaaplikowane do docelowego przedmiotu. -'@1' is not a valid number='@1' nie jest poprawną liczbą. -The number you have entered (@1) is too big, it must be at most @2.=Liczba którą wpisałaś (@1) jest zbyt duża, nie może być większa niż @2. -The number you have entered (@1) is too small, it must be at least @2.=Liczba którą wpisałaś (@1) jest zbyt mała, nie może być mniejsza niż @2. -@1 can't be combined with @2.=@1 nie może być połączone z @2. -Enchanting succeded.=Zaklinanie powiodło się. -Forcefully enchant an item=Bezwzględnie zaczaruj przedmiot. -Usage: /forceenchant []=Użycie: /forceenchant [] -The target item is not enchantable.=Docelowego przedmiotu nie można zaczarować. -'@1' is not a valid number.='@1' nie jest poprawną liczbą. -Enchanted Book=Zaklęta książka -Enchanting Table=Stół do zaklinania -Enchant=Zaczaruj diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.ru.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.ru.tr deleted file mode 100644 index 6cd1e1db6..000000000 --- a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.ru.tr +++ /dev/null @@ -1,100 +0,0 @@ -# textdomain: mcl_enchanting -Aqua Affinity=Родство с водой -Increases underwater mining speed.=Увеличивает скорость добычи под водой. -Bane of Arthropods=Бич членистоногих -Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Увеличивает урон и применяет Замедление IV к насекомым и членистоногим (паукам, пещерным паукам, чешуйницам и чешуйницам края). -Blast Protection=Взрывоустойчивость -Reduces explosion damage and knockback.=Уменьшает урон и отдачу от взрывов. -Channeling=Громовержец -Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Бьёт молнией в цель. Работает только во время грозы, когда цель не защищена плотными блоками. -Curse of Binding=Проклятие несъёмности -Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Предмет не может быть изъят из слота доспехов, кроме как в результате смерти, разрушения или в креативном режиме. -Curse of Vanishing=Проклятье утраты -Item destroyed on death.=Предмет уничтожается при смерти. -Depth Strider=Покоритель глубин -Increases underwater movement speed.=Увеличивает скорость передвижения под водой. -Efficiency=Эффективность -Increases mining speed.=Увеличивает скорость добычи. -Feather Falling=Невесомость -Reduces fall damage.=Снижает урон от падения. -Fire Aspect=Заговор огня -Sets target on fire.=Поджигает цель. -Fire Protection=Защита от огня -Reduces fire damage.=Уменьшает урон от огня. -Flame=Пламя -Arrows set target on fire.=Стрелы поджигают цель. -Fortune=Удача -Increases certain block drops.=Увеличивает выпадение ресурсов из блоков. -Frost Walker=Ледоход -Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Превращает воду под игроком в замороженный лёд и предотвращает урон от магмовых блоков. -Impaling=Пронзатель -Trident deals additional damage to ocean mobs.=Трезубец наносит дополнительный урон океаническим мобам. -Infinity=Бесконечность -Shooting consumes no regular arrows.=При стрельбе не расходуются стрелы. -Knockback=Отскок -Increases knockback.=Увеличивает отдачу. -Looting=Добыча -Increases mob loot.=Увеличивает добычу от мобов. -Loyalty=Верность -Trident returns after being thrown. Higher levels reduce return time.=Возвращает трезубец после броска. Более высокие уровни сокращают время возврата. -Luck of the Sea=Везучий рыбак -Increases rate of good loot (enchanting books, etc.)=Увеличивает шанс поймать сокровище (зачарованные книги и т.п.) -Lure=Приманка -Decreases time until rod catches something.=Уменьшает время ожидания клёва. -Mending=Починка -Repair the item while gaining XP orbs.=Предмет чинится при сборе жемчужин опыта. -Multishot=Залп -Shoot 3 arrows at the cost of one.=Выстреливают три стрелы по стоимости одной. -Piercing=Бронебойность -Arrows passes through multiple objects.=Стрела пробивает насквозь несколько объектов. -Power=Сила -Increases arrow damage.=Увеличивает урон от стрел. -Projectile Protection=Защита от снарядов -Reduces projectile damage.=Уменьшает урон от снарядов. -Protection=Защита -Reduces most types of damage by 4% for each level.=Уменьшает большинство повреждений на 4% за каждый уровень. -Punch=Отбрасывание -Increases arrow knockback.=Увеличивает отбрасывание от стрелы. -Quick Charge=Быстрая перезарядка -Decreases crossbow charging time.=Уменьшает время заряда снаряда. -Respiration=Подводное дыхание -Extends underwater breathing time.=Увеличивает время дыхания под водой. -Riptide=Тягун -Trident launches player with itself when thrown. Works only in water or rain.=Трезубец тянет игрока за собой. Работает только в воде или под дождём. -Sharpness=Острота -Increases damage.=Увеличенный урон. -Silk Touch=Шёлковое касание -Mined blocks drop themselves.=Добываемый блок выпадает сам, даже если из него должно выпадать что-то другое. -Smite=Небесная кара -Increases damage to undead mobs.=Дополнительный урон мертвякам (зомби и т.п.). -Soul Speed=Скорость души -Increases walking speed on soul sand.=Увеличивает скорость ходьбы по песку душ. -Sweeping Edge=Разящий клинок -Increases sweeping attack damage.=Увеличивает урон по мобам, стоящих рядом с целью. -Thorns=Шипы -Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Отражают некоторый урон, получаемый от ударов, за счёт снижения прочности с каждым разом. -Unbreaking=Нерушимость -Increases item durability.=Увеличивает прочность предмета. -Inventory=Инвентарь -@1 Lapis Lazuli=@1 Ляпис-лазурь -@1 Enchantment Levels=@1 Уровень зачаровывания -Level requirement: @1=Требуемый уровень: @1 -Enchant an item=Зачаровать предмет - []=<игрок> <зачарование> [<уровень>] -Usage: /enchant []=Использование: /enchant <игрок> <зачарование> [<уровень>] -Player '@1' cannot be found.=Не удалось найти игрока '@1'. -There is no such enchantment '@1'.=Нет такого зачаровывания: '@1'. -The target doesn't hold an item.=Цель не держит предмета. -The selected enchantment can't be added to the target item.=Выбранное зачарование не может быть добавлено к целевому предмету. -'@1' is not a valid number='@1' не является допустимым числом -The number you have entered (@1) is too big, it must be at most @2.=Число, которое вы задали (@1), слишком велико, оно может быть максимум @2. -The number you have entered (@1) is too small, it must be at least @2.=Число, которое вы задали (@1), слишком мало, оно может быть минимум @2. -@1 can't be combined with @2.=@1 нельзя сочетать с @2. -Enchanting succeded.=Зачарование выполнено. -Forcefully enchant an item=Принудительно зачаровать предмет -Usage: /forceenchant []=Использование: /forceenchant <игрок> <зачарование> [<уровень>] -The target item is not enchantable.=Указана незачаровываемая цель. -'@1' is not a valid number.='@1' не является допустимым числом. -Enchanted Book=Зачарованная книга -Enchanting Table=Стол зачаровывания -Enchant=Зачарование diff --git a/mods/ITEMS/mcl_enchanting/locale/template.txt b/mods/ITEMS/mcl_enchanting/locale/template.txt deleted file mode 100644 index 1f540d6d3..000000000 --- a/mods/ITEMS/mcl_enchanting/locale/template.txt +++ /dev/null @@ -1,129 +0,0 @@ -# textdomain: mcl_enchanting - - -### enchantments.lua ### - -Arrows passes through multiple objects.= -Arrows set target on fire.= -Bane of Arthropods= -Channeling= - -Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.= - -Curse of Vanishing= -Decreases crossbow charging time.= -Decreases time until rod catches something.= -Depth Strider= -Efficiency= -Extends underwater breathing time.= -Fire Aspect= -Flame= -Fortune= -Frost Walker= -Impaling= -Increases arrow damage.= -Increases arrow knockback.= -Increases certain block drops.= - -Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).= - -Increases damage to undead mobs.= -Increases damage.= -Increases item durability.= -Increases knockback.= -Increases mining speed.= -Increases mob loot.= -Increases rate of good loot (enchanting books, etc.)= -Increases sweeping attack damage.= -Increases underwater movement speed.= -Increases walking speed on soul sand.= -Infinity= -Item destroyed on death.= -Knockback= -Looting= -Loyalty= -Luck of the Sea= -Lure= -Mending= -Mined blocks drop themselves.= -Multishot= -Piercing= -Power= -Punch= -Quick Charge= -Repair the item while gaining XP orbs.= -Respiration= -Riptide= -Sets target on fire.= -Sharpness= -Shoot 3 arrows at the cost of one.= -Shooting consumes no regular arrows.= -Silk Touch= -Smite= -Soul Speed= -Sweeping Edge= -Trident deals additional damage to ocean mobs.= - -Trident launches player with itself when thrown. Works only in water or rain.= - -Trident returns after being thrown. Higher levels reduce return time.= - -Turns water beneath the player into frosted ice and prevents the damage from magma blocks.= - -Unbreaking= - -### engine.lua ### - -@1 Enchantment Levels= -@1 Lapis Lazuli= -Inventory= -Level requirement: @1= - -### init.lua ### - -'@1' is not a valid number= -'@1' is not a valid number.= - []= -@1 can't be combined with @2.= - -After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.= - -After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.= - -Enchant= -Enchant an item= -Enchanted Book= -Enchanting Table= - -Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.= - -Enchanting succeded.= -Forcefully enchant an item= - -Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.= - -Player '@1' cannot be found.= -Rightclick the Enchanting Table to open the enchanting menu.= -Spend experience, and lapis to enchant various items.= - -The number you have entered (@1) is too big, it must be at most @2.= - -The number you have entered (@1) is too small, it must be at least @2.= - -The selected enchantment can't be added to the target item.= -The target doesn't hold an item.= -The target item is not enchantable.= -There is no such enchantment '@1'.= - -These options are randomized, and dependent on experience level; but the enchantment strength can be increased.= - -To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.= - -Usage: /enchant []= -Usage: /forceenchant []= - - -##### not used anymore ##### - -# textdomain: mcl_enchanting -Aqua Affinity= diff --git a/mods/ITEMS/mcl_enchanting/mod.conf b/mods/ITEMS/mcl_enchanting/mod.conf deleted file mode 100644 index 4d4741fb8..000000000 --- a/mods/ITEMS/mcl_enchanting/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_enchanting -description = Enchanting for MineClone2 -depends = tt, walkover, mcl_sounds, mcl_colors -optional_depends = screwdriver -author = Fleckenstein diff --git a/mods/ITEMS/mcl_enchanting/models/mcl_enchanting_book.b3d b/mods/ITEMS/mcl_enchanting/models/mcl_enchanting_book.b3d deleted file mode 100644 index ecc8d91ea..000000000 Binary files a/mods/ITEMS/mcl_enchanting/models/mcl_enchanting_book.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/models/mcl_enchanting_book_entity.png b/mods/ITEMS/mcl_enchanting/models/mcl_enchanting_book_entity.png deleted file mode 100644 index fe6acf601..000000000 Binary files a/mods/ITEMS/mcl_enchanting/models/mcl_enchanting_book_entity.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/roman_numerals.lua b/mods/ITEMS/mcl_enchanting/roman_numerals.lua deleted file mode 100644 index f40c65406..000000000 --- a/mods/ITEMS/mcl_enchanting/roman_numerals.lua +++ /dev/null @@ -1,34 +0,0 @@ --------------------------------------------------------------------- ---! @file ---! @brief Convert from normal numbers to Roman Numerals ---------------------------------------------------------------------- -local conversionTable = { - { number = 1000, symbol = "M" }, - { number = 900, symbol = "CM" }, - { number = 500, symbol = "D" }, - { number = 400, symbol = "CD" }, - { number = 100, symbol = "C" }, - { number = 90, symbol = "XC" }, - { number = 50, symbol = "L" }, - { number = 40, symbol = "XL" }, - { number = 10, symbol = "X" }, - { number = 9, symbol = "IX" }, - { number = 5, symbol = "V" }, - { number = 4, symbol = "IV" }, - { number = 1, symbol = "I" } -} - -return{ - toRoman = function(number) - local romanNumeral = "" - - for _,table in pairs (conversionTable) do - while(number >= table.number) do - romanNumeral = romanNumeral .. table.symbol - number = number - table.number - end - end - - return romanNumeral - end -} diff --git a/mods/ITEMS/mcl_enchanting/sounds/attributions.txt b/mods/ITEMS/mcl_enchanting/sounds/attributions.txt deleted file mode 100644 index 261a4ad99..000000000 --- a/mods/ITEMS/mcl_enchanting/sounds/attributions.txt +++ /dev/null @@ -1,7 +0,0 @@ -Alecia Shepherd (CC BY-SA 4.0): - - mcl_enchanting_enchant.0.ogg - mcl_enchanting_enchant.1.ogg - mcl_enchanting_enchant.2.ogg - -Source: SnowSong sound and music pack diff --git a/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.0.ogg b/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.0.ogg deleted file mode 100644 index a7f357f03..000000000 Binary files a/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.0.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.1.ogg b/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.1.ogg deleted file mode 100644 index 246fde346..000000000 Binary files a/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.2.ogg b/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.2.ogg deleted file mode 100644 index 4ad66d9a2..000000000 Binary files a/mods/ITEMS/mcl_enchanting/sounds/mcl_enchanting_enchant.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_closed.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_closed.png deleted file mode 100644 index 7defcbc65..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_closed.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_enchanted.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_enchanted.png deleted file mode 100644 index 5cd46d8b6..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_enchanted.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_open.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_open.png deleted file mode 100644 index 7059db5fc..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_book_open.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button.png deleted file mode 100644 index 92674cae1..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_background.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_background.png deleted file mode 100644 index a9ddf6cb2..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_background.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_hovered.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_hovered.png deleted file mode 100644 index d733e4e5e..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_hovered.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_off.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_off.png deleted file mode 100644 index 11b71696c..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_button_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_1.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_1.png deleted file mode 100644 index a5ac3f553..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_10.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_10.png deleted file mode 100644 index d002147f5..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_10.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_11.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_11.png deleted file mode 100644 index c9cd9ff5c..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_11.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_12.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_12.png deleted file mode 100644 index dc5dd1d20..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_12.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_13.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_13.png deleted file mode 100644 index 45c6d5a63..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_13.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_14.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_14.png deleted file mode 100644 index 68623878a..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_14.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_15.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_15.png deleted file mode 100644 index 0db3a9ea2..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_15.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_16.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_16.png deleted file mode 100644 index d10a72b75..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_16.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_17.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_17.png deleted file mode 100644 index 2b374e881..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_17.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_18.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_18.png deleted file mode 100644 index e762e350b..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_18.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_2.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_2.png deleted file mode 100644 index eb1e74fbc..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_3.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_3.png deleted file mode 100644 index e82145e5c..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_4.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_4.png deleted file mode 100644 index e93f23830..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_5.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_5.png deleted file mode 100644 index f0635bf2b..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_5.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_6.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_6.png deleted file mode 100644 index c93976cfb..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_6.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_7.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_7.png deleted file mode 100644 index 1e4ff0248..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_7.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_8.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_8.png deleted file mode 100644 index 2f2b86c16..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_8.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_9.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_9.png deleted file mode 100644 index 4b3e366d9..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_glyph_9.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_lapis_background.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_lapis_background.png deleted file mode 100644 index 1a224f35f..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_lapis_background.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_1.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_1.png deleted file mode 100644 index ecd6b1120..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_1_off.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_1_off.png deleted file mode 100644 index 60d755e94..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_1_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_2.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_2.png deleted file mode 100644 index a90100f12..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_2_off.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_2_off.png deleted file mode 100644 index 9ba41bd55..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_2_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_3.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_3.png deleted file mode 100644 index 8dd37a8b9..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_3_off.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_3_off.png deleted file mode 100644 index ddcc98f9b..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_number_3_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_bottom.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_bottom.png deleted file mode 100644 index ef4cc8a15..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_side.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_side.png deleted file mode 100644 index 858b9e3dc..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_top.png b/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_top.png deleted file mode 100644 index 95b45c70e..000000000 Binary files a/mods/ITEMS/mcl_enchanting/textures/mcl_enchanting_table_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/building.lua b/mods/ITEMS/mcl_end/building.lua deleted file mode 100644 index 06c6722c4..000000000 --- a/mods/ITEMS/mcl_end/building.lua +++ /dev/null @@ -1,213 +0,0 @@ --- Building blocks and decorative nodes -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_screwdriver = minetest.get_modpath("screwdriver") - -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - -minetest.register_node("mcl_end:end_stone", { - description = S("End Stone"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_end_end_stone.png"}, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - after_dig_node = mcl_end.check_detach_chorus_plant, - _mcl_blast_resistance = 9, - _mcl_hardness = 3, -}) - -minetest.register_node("mcl_end:end_bricks", { - description = S("End Stone Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_end_end_bricks.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 9, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_end:purpur_block", { - description = S("Purpur Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_end_purpur_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1, purpur_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_end:purpur_pillar", { - description = S("Purpur Pillar"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - paramtype2 = "facedir", - is_ground_content = false, - on_place = mcl_util.rotate_axis, - tiles = {"mcl_end_purpur_pillar_top.png", "mcl_end_purpur_pillar_top.png", "mcl_end_purpur_pillar.png"}, - groups = {pickaxey=1, building_block=1, material_stone=1, purpur_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_end:end_rod", { - description = S("End Rod"), - _doc_items_longdesc = S("End rods are decorative light sources."), - tiles = { - "mcl_end_end_rod_top.png", - "mcl_end_end_rod_bottom.png", - "mcl_end_end_rod_side.png", - "mcl_end_end_rod_side.png", - "mcl_end_end_rod_side.png", - "mcl_end_end_rod_side.png", - }, - drawtype = "nodebox", - is_ground_content = false, - paramtype = "light", - paramtype2 = "facedir", - light_source = minetest.LIGHT_MAX, - sunlight_propagates = true, - groups = { dig_immediate=3, deco_block=1, destroy_by_lava_flow=1, }, - node_box = { - type = "fixed", - fixed = { - {-0.125, -0.5, -0.125, 0.125, -0.4375, 0.125}, -- Base - {-0.0625, -0.4375, -0.0625, 0.0625, 0.5, 0.0625}, -- Rod - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.125, -0.5, -0.125, 0.125, 0.5, 0.125}, -- Base - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.125, -0.5, -0.125, 0.125, 0.5, 0.125}, -- Base - }, - }, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:get_pos() - if placer_pos then - local dir = { - x = p1.x - placer_pos.x, - y = p1.y - placer_pos.y, - z = p1.z - placer_pos.z - } - param2 = minetest.dir_to_facedir(dir) - end - - if p0.y - 1 == p1.y then - param2 = 20 - elseif p0.x - 1 == p1.x then - param2 = 16 - elseif p0.x + 1 == p1.x then - param2 = 12 - elseif p0.z - 1 == p1.z then - param2 = 8 - elseif p0.z + 1 == p1.z then - param2 = 4 - end - - return minetest.item_place(itemstack, placer, pointed_thing, param2) - end, - - sounds = mcl_sounds.node_sound_glass_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_end:dragon_egg", { - description = S("Dragon Egg"), - _doc_items_longdesc = S("A dragon egg is a decorative item which can be placed."), - tiles = { - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - }, - drawtype = "nodebox", - is_ground_content = false, - paramtype = "light", - light_source = 1, - node_box = { - type = "fixed", - fixed = { - {-0.375, -0.5, -0.375, 0.375, -0.4375, 0.375}, - {-0.5, -0.4375, -0.5, 0.5, -0.1875, 0.5}, - {-0.4375, -0.1875, -0.4375, 0.4375, 0, 0.4375}, - {-0.375, 0, -0.375, 0.375, 0.125, 0.375}, - {-0.3125, 0.125, -0.3125, 0.3125, 0.25, 0.3125}, - {-0.25, 0.25, -0.25, 0.25, 0.3125, 0.25}, - {-0.1875, 0.3125, -0.1875, 0.1875, 0.375, 0.1875}, - {-0.125, 0.375, -0.125, 0.125, 0.4375, 0.125}, - {-0.0625, 0.4375, -0.0625, 0.0625, 0.5, 0.0625}, - } - }, - selection_box = { - type = "regular", - }, - groups = {handy = 1, falling_node = 1, deco_block = 1, not_in_creative_inventory = 1, dig_by_piston = 1 }, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 9, - _mcl_hardness = 3, - on_punch = function(pos, node, puncher) - if not minetest.is_protected(pos, puncher:get_player_name()) then - local max_dist = vector.new(15, 7, 15) - local positions = minetest.find_nodes_in_area(vector.subtract(pos, max_dist), vector.add(pos, max_dist), "air", false) - if #positions > 0 then - local tpos = positions[math.random(#positions)] - minetest.remove_node(pos) - minetest.set_node(tpos, node) - minetest.check_for_falling(tpos) - end - end - end, -}) - - - --- Crafting recipes -minetest.register_craft({ - output = "mcl_end:end_bricks 4", - recipe = { - {"mcl_end:end_stone", "mcl_end:end_stone"}, - {"mcl_end:end_stone", "mcl_end:end_stone"}, - } -}) - -minetest.register_craft({ - output = "mcl_end:purpur_block 4", - recipe = { - {"mcl_end:chorus_fruit_popped", "mcl_end:chorus_fruit_popped",}, - {"mcl_end:chorus_fruit_popped", "mcl_end:chorus_fruit_popped",}, - } -}) - -minetest.register_craft({ - output = "mcl_end:end_rod 4", - recipe = { - {"mcl_mobitems:blaze_rod"}, - {"mcl_end:chorus_fruit_popped"}, - }, -}) - diff --git a/mods/ITEMS/mcl_end/chorus_plant.lua b/mods/ITEMS/mcl_end/chorus_plant.lua deleted file mode 100644 index 4dc54db18..000000000 --- a/mods/ITEMS/mcl_end/chorus_plant.lua +++ /dev/null @@ -1,579 +0,0 @@ --- Chorus plants --- This includes chorus flowers, chorus plant stem nodes and chorus fruit - -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math -local table = table - ---- Plant parts --- - -local MAX_FLOWER_AGE = 5 -- Maximum age of chorus flower before it dies - -local chorus_flower_box = { - type = "fixed", - fixed = { - {-0.5, -0.375, -0.375, 0.5, 0.375, 0.375}, - {-0.375, -0.375, 0.375, 0.375, 0.375, 0.5}, - {-0.375, -0.375, -0.5, 0.375, 0.375, -0.375}, - {-0.375, 0.375, -0.375, 0.375, 0.5, 0.375}, - {-0.375, -0.5, -0.375, 0.375, -0.375, 0.375}, - } -} - --- Helper function -local function round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - --- This is a list of nodes that SHOULD NOT call their detach function -local no_detach = {} - --- This detaches all chorus plants that are/were attached --- at start_pos. -function mcl_end.detach_chorus_plant(start_pos, digger) - -- This node should not call a detach function, do NOTHING - local hash = minetest.hash_node_position(start_pos) - if no_detach[hash] then - return - end - - -- This node SHOULD be detached, make sure no others are - no_detach = {} - - local neighbors = { - { x=0, y=1, z=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 }, - { x=0, y=-1, z=0 }, - } - table.insert(neighbors, { x=0, y=-1, z=0 }) - local tree_start_posses = {} - for i=1, #neighbors do - table.insert(tree_start_posses, vector.add(start_pos, neighbors[i])) - end - - -- From the start_pos, we look at the 6 possible directions. Each of these can - -- have a full independent chorus plant ("tree") that might be detached. - for t=1, #tree_start_posses do - -- For each "tree", we do a depth-first search to traverse all - -- chorus plant nodes. - local touched_nodes_hashes = { minetest.hash_node_position(start_pos) } - local check_posses = { tree_start_posses[t] } - local chorus_nodes = {} - local break_tree = true - while #check_posses > 0 do - local pos = check_posses[1] - - -- Don't just count neighbors as being touched, count THIS NODE as well - -- This will prevent it from getting stuck in an endless loop - if not touched_nodes_hashes[minetest.hash_node_position(pos)] then - local node = minetest.get_node(pos) - touched_nodes_hashes[minetest.hash_node_position(pos)] = true - if node.name == "mcl_end:end_stone" then - -- End stone found, the algorithm ends here (haha!) - -- without destroying any nodes, because chorus plants - -- attach to end stone. - break_tree = false - break - elseif minetest.get_item_group(node.name, "chorus_plant") == 1 then - table.insert(chorus_nodes, pos) - for i=1, #neighbors do - local newpos = vector.add(pos, neighbors[i]) - if not touched_nodes_hashes[minetest.hash_node_position(newpos)] then - table.insert(check_posses, vector.add(pos, neighbors[i])) - end - end - end - end - - table.remove(check_posses, 1) - end - if break_tree then - -- If we traversed the entire chorus plant and it was not attached to end stone: - -- Drop ALL the chorus nodes we found. - for c=1, #chorus_nodes do - no_detach[ minetest.hash_node_position(chorus_nodes[c]) ] = true - if digger then - minetest.node_dig(chorus_nodes[c], { name = "mcl_end:chorus_plant" }, digger) - else - minetest.remove_node(chorus_nodes[c]) - end - end - end - end - - no_detach = {} -end - -function mcl_end.check_detach_chorus_plant(pos, oldnode, oldmetadata, digger) - mcl_end.detach_chorus_plant(pos, digger) -end - -function mcl_end.check_blast_chorus_plant(pos) - minetest.remove_node(pos) - mcl_end.detach_chorus_plant(pos) -end - -minetest.register_node("mcl_end:chorus_flower", { - description = S("Chorus Flower"), - _tt_help = S("Grows on end stone"), - _doc_items_longdesc = S("A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow."), - _doc_items_usagehelp = S("Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem."), - tiles = { - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - node_box = chorus_flower_box, - selection_box = { type = "regular" }, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy=1,axey=1, deco_block = 1, dig_by_piston = 1, destroy_by_lava_flow = 1,chorus_plant = 1}, - - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - local node_under = minetest.get_node(pointed_thing.under) - --local node_above = minetest.get_node(pointed_thing.above) - if placer and not placer:get_player_control().sneak then - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(pointed_thing.under, node_under, placer, itemstack) or itemstack - end - end - - --[[ Part 1: Check placement rules. Placement is legal if one of the following - conditions is met: - 1) On top of end stone or chorus plant - 2) On top of air and horizontally adjacent to exactly 1 chorus plant ]] - local pos - if minetest.registered_nodes[node_under.name].buildable_to then - pos = pointed_thing.under - else - pos = pointed_thing.above - end - - - local below = {x=pos.x, y=pos.y-1, z=pos.z} - local node_below = minetest.get_node(below) - local plant_ok = false - -- Condition 1 - if node_below.name == "mcl_end:chorus_plant" or node_below.name == "mcl_end:end_stone" then - plant_ok = true - -- Condition 2 - elseif node_below.name == "air" then - local around = { - { x= 1, y=0, z= 0 }, - { x=-1, y=0, z= 0 }, - { x= 0, y=0, z= 1 }, - { x= 0, y=0, z=-1 }, - } - local around_count = 0 - for a=1, #around do - local pos_side = vector.add(pos, around[a]) - local node_side = minetest.get_node(pos_side) - if node_side.name == "mcl_end:chorus_plant" then - around_count = around_count + 1 - if around_count > 1 then - break - end - end - end - if around_count == 1 then - plant_ok = true - end - end - if plant_ok then - -- Placement OK! Proceed normally - local it, suc = minetest.item_place_node(itemstack, placer, pointed_thing) - if suc then - minetest.sound_play(mcl_sounds.node_sound_wood_defaults().place, {pos = pos}, true) - end - return it - else - return itemstack - end - end, - after_dig_node = mcl_end.check_detach_chorus_plant, - on_blast = mcl_end.check_blast_chorus_plant, - _mcl_blast_resistance = 0.4, - _mcl_hardness = 0.4, -}) - -minetest.register_node("mcl_end:chorus_flower_dead", { - description = S("Dead Chorus Flower"), - _doc_items_longdesc = S("This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again."), - tiles = { - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - node_box = chorus_flower_box, - selection_box = { type = "regular" }, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = "mcl_end:chorus_flower", - groups = {handy=1,axey=1, deco_block = 1, dig_by_piston = 1, destroy_by_lava_flow = 1,chorus_plant = 1, not_in_creative_inventory=1}, - after_dig_node = mcl_end.check_detach_chorus_plant, - on_blast = mcl_end.check_blast_chorus_plant, - _mcl_blast_resistance = 2, - _mcl_hardness = 0.4, -}) - -minetest.register_node("mcl_end:chorus_plant", { - description = S("Chorus Plant Stem"), - _doc_items_longdesc = S("A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers."), - _doc_items_usagehelp = S("The stem attaches itself to end stone and other chorus blocks."), - tiles = { - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - node_box = { - type = "connected", - fixed = { -0.25, -0.25, -0.25, 0.25, 0.25, 0.25 }, -- Core - connect_top = { -0.1875, 0.25, -0.1875, 0.1875, 0.5, 0.1875 }, - connect_left = { -0.5, -0.1875, -0.1875, -0.25, 0.1875, 0.1875 }, - connect_right = { 0.25, -0.1875, -0.1875, 0.5, 0.1875, 0.1875 }, - connect_bottom = { -0.1875, -0.5, -0.25, 0.1875, -0.25, 0.25 }, - connect_front = { -0.1875, -0.1875, -0.5, 0.1875, 0.1875, -0.25 }, - connect_back = { -0.1875, -0.1875, 0.25, 0.1875, 0.1875, 0.5 }, - }, - connect_sides = { "top", "bottom", "front", "back", "left", "right" }, - connects_to = {"group:chorus_plant", "mcl_end:end_stone"}, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = { - items = { - { items = { "mcl_end:chorus_fruit"}, rarity = 2 }, - } - }, - groups = {handy=1,axey=1, deco_block = 1, dig_by_piston = 1, destroy_by_lava_flow = 1, chorus_plant = 1 }, - - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - local node_under = minetest.get_node(pointed_thing.under) - local node_above = minetest.get_node(pointed_thing.above) - if placer and not placer:get_player_control().sneak then - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(pointed_thing.under, node_under, placer, itemstack) or itemstack - end - end - - --[[ Part 1: Check placement rules. Placement is legal if this - condition is met: - - placed on end stone or any chorus node ]] - local pos_place, node_check - if minetest.registered_nodes[node_under.name].buildable_to then - pos_place = pointed_thing.under - node_check = node_above - else - pos_place = pointed_thing.above - node_check = node_under - end - local plant_ok = false - if node_check.name == "mcl_end:end_stone" or minetest.get_item_group(node_check.name, "chorus_plant") > 0 then - plant_ok = true - end - if plant_ok then - -- Placement OK! Proceed normally - local it, suc = minetest.item_place_node(itemstack, placer, pointed_thing) - if suc then - minetest.sound_play(mcl_sounds.node_sound_wood_defaults().place, {pos = pos_place}, true) - end - return it - else - return itemstack - end - end, - after_dig_node = mcl_end.check_detach_chorus_plant, - on_blast = mcl_end.check_blast_chorus_plant, - _mcl_blast_resistance = 2, - _mcl_hardness = 0.4, -}) - --- Grow a complete chorus plant at pos -function mcl_end.grow_chorus_plant(pos, node, pr) - local flowers = { pos } - -- Plant initial flower (if it isn't there already) - if not node then - node = minetest.get_node(pos) - end - if node.name ~= "mcl_end:chorus_flower" then - minetest.set_node(pos, { name = "mcl_end:chorus_flower" }) - end - while true do - local new_flowers_list = {} - for f=1, #flowers do - local new_flowers = mcl_end.grow_chorus_plant_step(flowers[f], minetest.get_node(flowers[f]), pr) - if #new_flowers > 0 then - table.insert(new_flowers_list, new_flowers) - end - end - if #new_flowers_list == 0 then - return - end - flowers = {} - for l=1, #new_flowers_list do - for f=1, #new_flowers_list[l] do - table.insert(flowers, new_flowers_list[l][f]) - end - end - end -end - --- Grow a single step of a chorus plant at pos. --- Pos must be a chorus flower. -function mcl_end.grow_chorus_plant_step(pos, node, pr) - local new_flower_buds = {} - local above = { x = pos.x, y = pos.y + 1, z = pos.z } - local node_above = minetest.get_node(above) - local around = { - { x=-1, y=0, z= 0 }, - { x= 1, y=0, z= 0 }, - { x= 0, y=0, z=-1 }, - { x= 0, y=0, z= 1 }, - } - local air_around = true - for a=1, #around do - if minetest.get_node(vector.add(above, around[a])).name ~= "air" then - air_around = false - break - end - end - local grown = false - if node_above.name == "air" and air_around then - local branching = false - local h = 0 - for y=1, 4 do - local checkpos = {x=pos.x, y=pos.y-y, z=pos.z} - local node = minetest.get_node(checkpos) - if node.name == "mcl_end:chorus_plant" then - h = y - if not branching then - for a=1, #around do - local node_side = minetest.get_node(vector.add(checkpos, around[a])) - if node_side.name == "mcl_end:chorus_plant" then - branching = true - end - end - end - else - break - end - end - - local grow_chance - if h <= 1 then - grow_chance = 100 - elseif h == 2 and branching == false then - grow_chance = 60 - elseif h == 2 and branching == true then - grow_chance = 50 - elseif h == 3 and branching == false then - grow_chance = 40 - elseif h == 3 and branching == true then - grow_chance = 25 - elseif h == 4 and branching == false then - grow_chance = 20 - end - - if grow_chance then - local new_flowers = {} - local r = pr:next(1, 100) - local age = node.param2 - if r <= grow_chance then - table.insert(new_flowers, above) - else - age = age + 1 - local branches - if branching == false then - branches = pr:next(1, 4) - elseif branching == true then - branches = pr:next(0, 3) - end - for b=1, branches do - local next_branch = pr:next(1, #around) - local branch = vector.add(pos, around[next_branch]) - local below_branch = vector.add(branch, {x=0,y=-1,z=0}) - if minetest.get_node(below_branch).name == "air" then - table.insert(new_flowers, branch) - end - end - end - - for _, f in pairs(new_flowers) do - if age >= MAX_FLOWER_AGE then - local nn = minetest.get_node(f).name - if nn ~= "mcl_end:chorus_flower" and nn ~= "mcl_end:chorus_flower_dead" then - minetest.set_node(f, {name="mcl_end:chorus_flower_dead"}) - grown = true - end - else - local nn = minetest.get_node(f).name - if nn ~= "mcl_end:chorus_flower" and nn ~= "mcl_end:chorus_flower_dead" then - minetest.set_node(f, {name="mcl_end:chorus_flower", param2 = age}) - table.insert(new_flower_buds, f) - grown = true - end - end - end - if #new_flowers >= 1 then - minetest.set_node(pos, {name="mcl_end:chorus_plant"}) - grown = true - end - end - end - if not grown then - -- FIXME: In the End, chorus plant fails to generate thru mapchunk borders. - -- So the chorus plants are capped at a fixed height. - -- The mapgen needs to be taught somehow how to deal with this. - minetest.set_node(pos, {name = "mcl_end:chorus_flower_dead"}) - end - return new_flower_buds -end - ---- ABM --- -local seed = minetest.get_mapgen_setting("seed") -local pr = PseudoRandom(seed) -minetest.register_abm({ - label = "Chorus plant growth", - nodenames = { "mcl_end:chorus_flower" }, - interval = 35.0, - chance = 4.0, - action = function(pos, node, active_object_count, active_object_count_wider) - mcl_end.grow_chorus_plant_step(pos, node, pr) - end, -}) - ---- Chorus fruit --- - --- Attempt to randomly teleport the player within a 8×8×8 box around. Rules: --- * Not in solid blocks. --- * Not in liquids. --- * Always on top of a solid block --- * Maximum attempts: 16 --- --- Returns true on success. -local function random_teleport(player) - local pos = player:get_pos() - -- 16 attempts to find a suitable position - for a=1, 16 do - -- Teleportation box - local x,y,z - x = math.random(round(pos.x)-8, round(pos.x)+8) - y = math.random(math.ceil(pos.y)-8, math.ceil(pos.y)+8) - z = math.random(round(pos.z)-8, round(pos.z)+8) - local node_cache = {} - local ground_level = false - -- Scan nodes from selected position until we hit ground - for t=0, 16 do - local tpos = {x=x, y=y-t, z=z} - local tnode = minetest.get_node(tpos) - if tnode.name == "mcl_core:void" or tnode.name == "ignore" then - break - end - local tdef = minetest.registered_nodes[tnode.name] - table.insert(node_cache, {pos=tpos, node=tnode}) - if tdef.walkable then - ground_level = true - break - end - end - -- Ground found? Then let's check if the player has enough room - if ground_level and #node_cache >= 1 then - local streak = 0 - local last_was_walkable = true - for c=#node_cache, 1, -1 do - local tpos = node_cache[c].pos - local tnode = node_cache[c].node - local tdef = minetest.registered_nodes[tnode.name] - -- Player needs a space of 2 safe non-liquid nodes on top of a walkable node - if not tdef.walkable and tdef.liquidtype == "none" and tdef.damage_per_second <= 0 then - if (streak == 0 and last_was_walkable) or (streak > 0) then - streak = streak + 1 - end - else - streak = 0 - end - last_was_walkable = tdef.walkable - if streak >= 2 then - -- JACKPOT! Now we can teleport. - local goal = {x=tpos.x, y=tpos.y-1.5, z=tpos.z} - player:set_pos(goal) - minetest.sound_play({name="mcl_end_teleport", gain=0.8}, {pos=goal, max_hear_distance=16}, true) - return true - end - end - end - end - return false -end - --- Randomly teleport player and update hunger -local eat_chorus_fruit = function(itemstack, player, pointed_thing) - if player and pointed_thing and pointed_thing.type == "node" and not player:get_player_control().sneak then - local node_under = minetest.get_node(pointed_thing.under) - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(pointed_thing.under, node_under, player, itemstack) or itemstack - end - end - local count = itemstack:get_count() - local new_itemstack = minetest.do_item_eat(4, nil, itemstack, player, pointed_thing) - local new_count = new_itemstack:get_count() - if count ~= new_count or new_itemstack:get_name() ~= "mcl_end:chorus_fruit" or (minetest.is_creative_enabled(player:get_player_name()) == true) then - random_teleport(player) - end - return new_itemstack -end - -minetest.register_craftitem("mcl_end:chorus_fruit", { - description = S("Chorus Fruit"), - _tt_help = S("Randomly teleports you when eaten"), - _doc_items_longdesc = S("A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to."), - wield_image = "mcl_end_chorus_fruit.png", - inventory_image = "mcl_end_chorus_fruit.png", - on_place = eat_chorus_fruit, - on_secondary_use = eat_chorus_fruit, - groups = { food = 2, transport = 1, eatable = 4, can_eat_when_full = 1 }, - _mcl_saturation = 2.4, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_end:chorus_fruit_popped", { - description = S("Popped Chorus Fruit"), - _doc_items_longdesc = doc.sub.items.temp.craftitem, - wield_image = "mcl_end_chorus_fruit_popped.png", - inventory_image = "mcl_end_chorus_fruit_popped.png", - groups = { craftitem = 1 }, - stack_max = 64, -}) - ---- Crafting --- -minetest.register_craft({ - type = "cooking", - output = "mcl_end:chorus_fruit_popped", - recipe = "mcl_end:chorus_fruit", - cooktime = 10, -}) - diff --git a/mods/ITEMS/mcl_end/end_crystal.lua b/mods/ITEMS/mcl_end/end_crystal.lua deleted file mode 100644 index b7c80c55a..000000000 --- a/mods/ITEMS/mcl_end/end_crystal.lua +++ /dev/null @@ -1,179 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local vector = vector - -local explosion_strength = 6 - -local directions = { - {x = 1}, {x = -1}, {z = 1}, {z = -1} -} - -local dimensions = {"x", "y", "z"} - -for _, dir in pairs(directions) do - for _, dim in pairs(dimensions) do - dir[dim] = dir[dim] or 0 - end -end - -local function find_crystal(pos) - local objects = minetest.get_objects_inside_radius(pos, 0) - for _, obj in pairs(objects) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_end:crystal" then - return luaentity - end - end -end - -local function crystal_explode(self, puncher) - if self._exploded then return end - self._exploded = true - local strength = 1 - local source - if puncher then - strength = explosion_strength - local reason = {} - mcl_damage.from_punch(reason, puncher) - mcl_damage.finish_reason(reason) - source = reason.source - end - mcl_explosions.explode(vector.add(self.object:get_pos(), {x = 0, y = 1.5, z = 0}), strength, {drop_chance = 1}, self.object, source) - minetest.after(0, self.object.remove, self.object) -end - -local function set_crystal_animation(self) - self.object:set_animation({x = 0, y = 120}, 25) -end - -local function spawn_crystal(pos) - minetest.add_entity(pos, "mcl_end:crystal") - if not vector.equals(pos, vector.floor(pos)) then return end - if mcl_worlds.pos_to_dimension(pos) ~= "end" then return end - local portal_center - for _, dir in pairs(directions) do - local node = minetest.get_node(vector.add(pos, dir)) - if node.name == "mcl_portals:portal_end" then - portal_center = vector.add(pos, vector.multiply(dir, 3)) - break - end - end - if not portal_center then return end - local crystals = {} - for i, dir in pairs(directions) do - local crystal_pos = vector.add(portal_center, vector.multiply(dir, 3)) - crystals[i] = find_crystal(crystal_pos) - if not crystals[i] then return end - end - for _, crystal in pairs(crystals) do - crystal_explode(crystal) - end - local portal_pos = vector.add(portal_center, vector.new(-3, -1, -3)) - mcl_structures.call_struct(portal_pos, "end_exit_portal") - minetest.add_entity(vector.add(portal_pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity()._portal_pos = portal_pos -end - -minetest.register_entity("mcl_end:crystal", { - initial_properties = { - physical = true, - visual = "mesh", - visual_size = {x = 6, y = 6}, - collisionbox = {-1, 0.5, -1, 1, 2.5, 1}, - mesh = "mcl_end_crystal.b3d", - textures = {"mcl_end_crystal.png"}, - collide_with_objects = false, - }, - on_punch = crystal_explode, - on_activate = set_crystal_animation, - _exploded = false, - _hittable_by_projectile = true -}) - -minetest.register_entity("mcl_end:crystal_beam", { - initial_properties = { - physical = false, - visual = "cube", - visual_size = {x = 1, y = 1, z = 1}, - textures = { - "mcl_end_crystal_beam.png^[transformR90", - "mcl_end_crystal_beam.png^[transformR90", - "mcl_end_crystal_beam.png", - "mcl_end_crystal_beam.png", - "blank.png", - "blank.png", - }, - static_save = false, - }, - spin = 0, - init = function(self, dragon, crystal) - self.dragon, self.crystal = dragon, crystal - crystal:get_luaentity().beam = self.object - dragon:get_luaentity().beam = self.object - end, - on_deactivate = function(self) - if self.crystal and self.crystal:get_luaentity() then - self.crystal:get_luaentity().beam = nil - end - if self.dragon and self.dragon:get_luaentity() then - self.dragon:get_luaentity().beam = nil - end - end, - on_step = function(self, dtime) - if self.dragon and self.dragon:get_luaentity() and self.crystal and self.crystal:get_luaentity() then - self.spin = self.spin + dtime * math.pi * 2 / 4 - local dragon_pos, crystal_pos = self.dragon:get_pos(), self.crystal:get_pos() - - dragon_pos.y = dragon_pos.y + 4 - crystal_pos.y = crystal_pos.y + 2 - - self.object:set_pos(vector.divide(vector.add(dragon_pos, crystal_pos), 2)) - local rot = vector.dir_to_rotation(vector.direction(dragon_pos, crystal_pos)) - rot.z = self.spin - self.object:set_rotation(rot) - self.object:set_properties({visual_size = {x = 0.5, y = 0.5, z = vector.distance(dragon_pos, crystal_pos)}}) - else - self.object:remove() - end - end, -}) - -minetest.register_craftitem("mcl_end:crystal", { - inventory_image = "mcl_end_crystal_item.png", - description = S("End Crystal"), - stack_max = 64, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local pos = minetest.get_pointed_thing_position(pointed_thing) - local node = minetest.get_node(pos) - local node_name = node.name - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node_name] and minetest.registered_nodes[node_name].on_rightclick then - return minetest.registered_nodes[node_name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - if find_crystal(pos) then return itemstack end - if node_name == "mcl_core:obsidian" or node_name == "mcl_core:bedrock" then - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - spawn_crystal(pos) - end - end - return itemstack - end, - _tt_help = S("Ignited by a punch or a hit with an arrow").."\n"..S("Explosion radius: @1", tostring(explosion_strength)), - _doc_items_longdesc = S("End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal."), - _doc_items_usagehelp = S("Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal."), - -}) - -minetest.register_craft({ - output = "mcl_end:crystal", - recipe = { - {"mcl_core:glass", "mcl_core:glass", "mcl_core:glass"}, - {"mcl_core:glass", "mcl_end:ender_eye", "mcl_core:glass"}, - {"mcl_core:glass", "mcl_mobitems:ghast_tear", "mcl_core:glass"}, - } -}) - -minetest.register_alias("mcl_end_crystal:end_crystal", "mcl_end:crystal") diff --git a/mods/ITEMS/mcl_end/eye_of_ender.lua b/mods/ITEMS/mcl_end/eye_of_ender.lua deleted file mode 100644 index ea3d70aba..000000000 --- a/mods/ITEMS/mcl_end/eye_of_ender.lua +++ /dev/null @@ -1,156 +0,0 @@ --- Eye of Ender -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_entity("mcl_end:ender_eye", { - physical = false, - textures = {"mcl_end_ender_eye.png"}, - visual_size = {x=1.5, y=1.5}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - -- Save and restore age - get_staticdata = function(self) - return tostring(self._age) - end, - on_activate = function(self, staticdata, dtime_s) - local age = tonumber(staticdata) - if type(age) == "number" then - self._age = age - if self._age >= 2 then - self._phase = 1 - else - self._phase = 0 - end - end - end, - - on_step = function(self, dtime) - self._age = self._age + dtime - if self._age >= 3 then - -- End of life - local r = math.random(1,5) - if r == 1 then - -- 20% chance to get destroyed completely. - -- 100% if in Creative Mode - self.object:remove() - return - else - -- 80% to drop as an item - local pos = self.object:get_pos() - local v = self.object:get_velocity() - self.object:remove() - local item = minetest.add_item(pos, "mcl_end:ender_eye") - item:set_velocity(v) - return - end - elseif self._age >= 2 then - if self._phase == 0 then - self._phase = 1 - -- Stop the eye and wait for another second. - -- The vertical speed changes are just eye candy. - self.object:set_acceleration({x=0, y=-3, z=0}) - self.object:set_velocity({x=0, y=self.object:get_velocity().y*0.2, z=0}) - end - else - -- Fly normally and generate particles - local pos = self.object:get_pos() - pos.x = pos.x + math.random(-1, 1)*0.5 - pos.y = pos.y + math.random(-1, 0)*0.5 - pos.z = pos.z + math.random(-1, 1)*0.5 - minetest.add_particle({ - pos = pos, - texture = "mcl_particles_teleport.png", - expirationtime = 1, - velocity = {x=math.random(-1, 1)*0.1, y=math.random(-30, 0)*0.1, z=math.random(-1, 1)*0.1}, - acceleration = {x=0, y=0, z=0}, - size = 2.5, - }) - end - end, - - _age = 0, -- age in seconds - _phase = 0, -- phase 0: flying. phase 1: idling in mid air, about to drop or shatter -}) - -minetest.register_craftitem("mcl_end:ender_eye", { - description = S("Eye of Ender"), - _tt_help = S("Guides the way to the mysterious End dimension"), - _doc_items_longdesc = S("This item is used to locate End portal shrines in the Overworld and to activate End portals.") .. "\n" .. S("NOTE: The End dimension is currently incomplete and might change in future versions."), - _doc_items_usagehelp = S("Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.") .. "\n" .. S("To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame."), - wield_image = "mcl_end_ender_eye.png", - inventory_image = "mcl_end_ender_eye.png", - stack_max = 64, - -- Throw eye of ender to make it fly to the closest stronghold - on_use = function(itemstack, user, pointed_thing) - if user == nil then - return - end - local origin = user:get_pos() - origin.y = origin.y + 1.5 - local strongholds = mcl_structures.get_registered_structures("stronghold") - local dim = mcl_worlds.pos_to_dimension(origin) - local is_creative = minetest.is_creative_enabled(user:get_player_name()) - - -- Just drop the eye of ender if there are no strongholds - if #strongholds <= 0 or dim ~= "overworld" then - if not is_creative then - minetest.item_drop(ItemStack("mcl_end:ender_eye"), user, user:get_pos()) - itemstack:take_item() - end - return itemstack - end - - -- Find closest stronghold. - -- Note: Only the horizontal axes are taken into account. - local closest_stronghold - local lowest_dist - for s=1, #strongholds do - local h_pos = table.copy(strongholds[s].pos) - local h_origin = table.copy(origin) - h_pos.y = 0 - h_origin.y = 0 - local dist = vector.distance(h_origin, h_pos) - if not closest_stronghold then - closest_stronghold = strongholds[s] - lowest_dist = dist - else - if dist < lowest_dist then - closest_stronghold = strongholds[s] - lowest_dist = dist - end - end - end - - -- Throw it! - local obj = minetest.add_entity(origin, "mcl_end:ender_eye") - local dir - - if lowest_dist <= 25 then - local velocity = 4 - -- Stronghold is close: Fly directly to stronghold and take Y into account. - dir = vector.normalize(vector.direction(origin, closest_stronghold.pos)) - obj:set_velocity({x=dir.x*velocity, y=dir.y*velocity, z=dir.z*velocity}) - else - local velocity = 12 - -- Don't care about Y if stronghold is still far away. - -- Fly to direction of X/Z, and always upwards so it can be seen easily. - local o = {x=origin.x, y=0, z=origin.z} - local s = {x=closest_stronghold.pos.x, y=0, z=closest_stronghold.pos.z} - dir = vector.normalize(vector.direction(o, s)) - obj:set_acceleration({x=dir.x*-3, y=4, z=dir.z*-3}) - obj:set_velocity({x=dir.x*velocity, y=3, z=dir.z*velocity}) - end - - - if not is_creative then - itemstack:take_item() - end - return itemstack - end, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_end:ender_eye", - recipe = {"mcl_mobitems:blaze_powder", "mcl_throwing:ender_pearl"}, -}) diff --git a/mods/ITEMS/mcl_end/init.lua b/mods/ITEMS/mcl_end/init.lua deleted file mode 100644 index 2adcd7cf8..000000000 --- a/mods/ITEMS/mcl_end/init.lua +++ /dev/null @@ -1,9 +0,0 @@ -mcl_end = {} - -local basepath = minetest.get_modpath(minetest.get_current_modname()) -dofile(basepath.."/chorus_plant.lua") -dofile(basepath.."/building.lua") -dofile(basepath.."/eye_of_ender.lua") -if not minetest.get_modpath("mcl_end_crystal") then - dofile(basepath.."/end_crystal.lua") -end diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.de.tr b/mods/ITEMS/mcl_end/locale/mcl_end.de.tr deleted file mode 100644 index 69a3408bb..000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.de.tr +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone=Endstein -End Stone Bricks=Endsteinziegel -Purpur Block=Purpurblock -Purpur Pillar=Purpursäule -End Rod=Endstab -End rods are decorative light sources.=Endstäbe sind dekorative Lichtquellen. -Dragon Egg=Drachenei -A dragon egg is a decorative item which can be placed.=Ein Drahenei ist ein dekorativer, platzierbarer Gegenstand. -Chorus Flower=Chorusblume -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Eine Chorusblume ist der lebendige Teil einer Choruspflanze. Sie kann zu einer großen Choruspflanze heranwachsen, Schritt für Schritt. Wenn sie wächst, wird sie irgendwann am Alter absterben. Sie stirbt auch ab, wenn sie nicht weiterwachsen kann. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Platzieren Sie sie und warten Sie darauf, dass sie wächst. Sie kann nur auf Endstein, auf einen anderen Choruspflanzenstängel oder an der Seite von genau einem Choruspflanzenstängel platziert werden. -Dead Chorus Flower=Tote Chorusblume -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Dies ist ein Teil einer Choruspflanze. Er wächst nicht. Chorusblumen werden mit der Zeit alt und sterben ab, sie sterben auch ab, wenn sie nicht weiterwachsen können. Eine tote Chorusblume kann geerntet werden, um eine frische neue Choruspflanze zu erhalten, die wieder wachsen kann. -Chorus Plant Stem=Choruspflanzenstängel -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Ein Choruspflanzenstängel ist der Teil einer Choruspflanze, der die gesamte Pflanze zusammenhält. Sie braucht Endstein als Untergrund. Stängel wachsen aus Chorusblumen. -Chorus Fruit=Chorusfrucht -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Eine Chorusfrucht ist eine essbare Frucht von der Choruspflanze, die im Ende beheimatet ist. Wenn man sie isst, wird man auf einen zufälligen festen Block in der Nähe teleportiert, solange man nicht in eine Flüssigkeit, einen festen oder gefährlichen Block landen würde. Die Teleportation könnte fehlschlagen, wenn es sehr wenige oder keine Orte gibt, zu denen sie einen hinteleportieren könnte. -Popped Chorus Fruit=Aufgeploppte Chorusfrucht -Eye of Ender=Enderauge -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Dieser Gegenstand wird benutzt, um Endportalschreine in der Oberwelt zu finden und Endportale zu aktivieren. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Benutzen Sie die Angriffstaste, um das Enderauge loszulassen. Es wird aufsteigen und in einer horizontalen Richtung zum nächsten Endportalschrein fliegen. Wenn Sie sehr nah dran sind, wird das Enderauge stattdessen den direkten Weg zum Endportalschrein nehmen. Nach ein paar Sekunden hält es an. Es könnte als Gegenstand wieder herunterfallen, aber es wird mit einer 20%-Chance zerbrechen. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Um ein Endportal zu aktivieren, müssen Enderaugen in jeden Block eines intakten Endportalrahmens platziert werden. -NOTE: The End dimension is currently incomplete and might change in future versions.=ANMERKUNG: Die Ende-Dimension ist momentan unfertig und könnte sich in künftigen Versionen ändern. -The stem attaches itself to end stone and other chorus blocks.=Der Stängel muss sich neben anderen Chorusblöcken oder Endstein befinden. -Grows on end stone=Wächst auf Endstein -Randomly teleports you when eaten=Zufällige Teleportation, wenn gegessen -Guides the way to the mysterious End dimension=Weist den Weg zur mysteriösen Endedimension -End Crystal=Enderkristall -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Enderkristalle sind explosiv. Sie können auf Obsidian oder Grundgestein platziert werden. Man kann sie durch einen Schlag oder einen Treffer mit einem Pfeil entzünden. Außerdem können sie benutzt werden, um den Enderdrachen zu erzeugen, in dem man je einen auf jeder Seite des Endausgangsportals platziert. -Explosion radius: @1=Explosionsradius: @1 -Ignited by a punch or a hit with an arrow=Entzündbar durch einen Schlag oder einen Treffer mit einem Pfeil -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Enderkistall auf Obsidian oder Grundgestein platzieren, dann Enderkristall schlagen oder mit einem Pfeil treffen. Dies bewirkt eine riesige und meistens tödliche Explosion. diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.es.tr b/mods/ITEMS/mcl_end/locale/mcl_end.es.tr deleted file mode 100644 index c98045867..000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.es.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_end -End Stone=Fin de la piedra -End Stone Bricks=Fin de ladrillos de piedra -Purpur Block=Bloque púrpura -Purpur Pillar=Pilar púrpura -End Rod=Barra final -End rods are decorative light sources.=Las varillas finales son fuentes de luz decorativas. -Dragon Egg=Huevo de dragón -A dragon egg is a decorative item which can be placed.=Un huevo de dragón es un elemento decorativo que se puede colocar. -Chorus Flower=Flor de coro -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Una flor de coro es la parte viva de una planta de coro. Puede convertirse en una planta de coro alto, paso a paso. Cuando crece, puede morir con la vejez eventualmente. También muere cuando no puede crecer. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Colóquelo y espere a que crezca. Solo se puede colocar en la parte superior de la piedra del extremo, en la parte superior del tallo de la planta de coro, o al lado de exactamente un tallo de la planta de coro. -Dead Chorus Flower=Flor de coro muerto -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Esta es una parte de una planta de coro. No crece Las flores de coro mueren de vejez o cuando no pueden crecer. Se puede cosechar una flor de coro muerta para obtener una flor de coro fresca que pueda crecer nuevamente. -Chorus Plant Stem=Tallo de planta de coro -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=El tallo de una planta de coro es la parte de una planta de coro que mantiene unida a toda la planta. Necesita piedra final como su suelo. Los tallos se cultivan a partir de flores de coro. -Chorus Fruit=Fruta coro -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Una fruta de coro es una fruta comestible de la planta de coro que es el hogar del final. Comerlo te teletransporta a la parte superior de un bloque sólido aleatorio cercano, siempre que no termines dentro de un bloque líquido, sólido o dañino. La teletransportación puede fallar si hay muy pocos o ningún lugar para teletransportarse. -Popped Chorus Fruit=Fruta de coro reventado -Eye of Ender=Ojo de Ender -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Este elemento se usa para localizar santuarios de portal del fin en el mundo y para activar portales del final. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Usa la tecla de ataque para liberar el ojo de Ender. Se elevará y volará en la dirección horizontal del santuario portal más cercano. Si estás muy cerca, el ojo de Ender tomará el camino directo al Santuario del portal final. Después de unos segundos, se detiene. Puede caer como un elemento, pero hay un 20% de posibilidades de que se rompa. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Para activar un portal final, se deben colocar ojos de ender en cada bloque de un marco intacto del portal final. -NOTE: The End dimension is currently incomplete and might change in future versions.=NOTA: La dimensión Final está actualmente incompleta y puede cambiar en futuras versiones. -The stem attaches itself to end stone and other chorus blocks.=El tallo se adhiere al extremo de la piedra y a otros bloques de coro.. \ No newline at end of file diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.fr.tr b/mods/ITEMS/mcl_end/locale/mcl_end.fr.tr deleted file mode 100644 index dc091a0f4..000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.fr.tr +++ /dev/null @@ -1,34 +0,0 @@ -# textdomain: mcl_end -End Stone=Pierre de L'End -End Stone Bricks=Brique de l'End -Purpur Block=Bloc de Purpur -Purpur Pillar=Bloc de Purpur Sculpté -End Rod=Barre de l'End -End rods are decorative light sources.=Les barres de l'End sont des sources de lumière décoratives. -Dragon Egg=Oeuf de Dragon -A dragon egg is a decorative item which can be placed.=Un oeuf de dragon est un objet décoratif qui peut être placé. -Chorus Flower=Plante de Chorus -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Une fleur de chorus est la partie vivante d'une plante de chorus. Il peut devenir une grande plante de chorus, étape par étape. Quand elle grandit, elle peut finir par mourir en vieillissant. Elle meurt également lorsqu'il est incapable de grandir. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Placez-la et attendez qu'elle grandisse. Elle ne peut être placée que sur le dessus de la pierre d'End, sur le dessus d'une tige de plante de chorus ou exactement sur le côté d'une tige de plante de chorus. -Dead Chorus Flower=Plante de Chorus Morte -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Ceci fait partie d'une plante de chorus. Ça ne pousse pas. Les fleurs de chorus meurent de vieillesse ou lorsqu'elles ne peuvent pas pousser. Une fleur de chorus morte peut être récoltée pour obtenir une fleur de chorus fraîche qui peut repousser. -Chorus Plant Stem=Tige de Plante de Chorus -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Une tige de plante de chorus est la partie d'une plante de chorus qui maintient la plante entière ensemble. Il a besoin de pierre d'End comme sol. Les tiges sont issues de fleurs de chorus. -Chorus Fruit=Fruit de Chorus -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Un fruit de chorus est un fruit comestible de l'usine de chorus qui abrite la fin. Le manger vous téléporte au sommet d'un bloc solide aléatoire à proximité, à condition de ne pas vous retrouver dans un bloc liquide, solide ou nuisible. La téléportation peut échouer s'il y a très peu ou pas d'endroits où se téléporter. -Popped Chorus Fruit=Chorus Eclaté -Eye of Ender=Oeil de l'Ender -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Cet objet est utilisé pour localiser les sanctuaires du portail End dans l'Overworld et pour activer les portails End. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Utilisez la touche d'attaque pour libérer l'oeil d'ender. Il s'élèvera et volera dans la direction horizontale du sanctuaire portail d'Ender le plus proche. Si vous êtes très proche, l'oeil d'ender empruntera le chemin direct vers le sanctuaire du portail de l'End. Après quelques secondes, il s'arrête. Il peut tomber en tant qu'objet, mais il y a 20% de chances qu'il se brise. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Pour activer un portail d'End, les yeux d'ender doivent être placés dans chaque bloc d'un cadre de portail d'End intact. -NOTE: The End dimension is currently incomplete and might change in future versions.=REMARQUE: la dimension de l'End est actuellement incomplète et pourrait changer dans les futures versions. -The stem attaches itself to end stone and other chorus blocks.=La tige s'attache à la pierre d'End et à d'autres blocs de chorus. -Grows on end stone=Pousse sur la pierre d'End -Randomly teleports you when eaten=Vous téléporte au hasard quand il est mangé -Guides the way to the mysterious End dimension=Guide le chemin vers la dimension mystérieuse de l'End -End Crystal=Cristal de l'End -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Les cristaux de l'End sont des dispositifs explosifs. Ils peuvent être placés sur de l'Obsidienne ou de la Bedrock. Allumez-les par un coup de poing ou avec une flèche. Les cristaux de l'End peuvent également être utilisés pour engendrer l'Ender dragon en en plaçant un de chaque côté du portail de sortie de l'End. -Explosion radius: @1=Rayon d'explosion: @1 -Ignited by a punch or a hit with an arrow=Enflammé par un coup de poing ou un coup avec une flèche -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Placez le cristal de l'End sur l'obsidienne ou le substrat rocheux, puis frappez-le à coup de poing ou avec une flèche pour provoquer une énorme explosion probablement mortelle. Pour engendrer l'Ender dragon, placez-en un de chaque côté du portail de sortie de l'End. - diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr b/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr deleted file mode 100644 index e6526b265..000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone=Kamień Kresu -End Stone Bricks=Ceglany kamień Kresu -Purpur Block=Blok purpury -Purpur Pillar=Filar purpury -End Rod=Różdżka Kresu -End rods are decorative light sources.=Różdżki Kresu są dekoracyjnymi źródłami światła. -Dragon Egg=Jajo smoka -A dragon egg is a decorative item which can be placed.=Jajo smoka jest przedmiotem dekoracyjnym, który można postawić. -Chorus Flower=Kwiat refrenusu -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Kwiat refrenusu jest żywą częścią rośliny refrenusu. Może wyrosnąć w wysoką roślinę refrenusu blok po bloku. Gdy rośnie może po pewnym czasie umrzeć ze starości. Umiera również gdy nie jest w stanie rosnąć. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Postaw go i poczekaj aż urośnie. Może być postawiony tylko na kamieniu Kresu, na łodydze rośliny refrenusu lub na boku dokładnie jednej łodygi rośliny refrenusu. -Dead Chorus Flower=Martwy kwiat refrenusu -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Jest to część rośliny refrenusu, która nie rośnie. Kwiaty refrenusu umierają ze starości lub gdy nie mogą rosnąć. Martwy kwiat refrenusu może zostać zebrany by otrzymać świeży kwiat refrenusu, który znów może urosnąć. -Chorus Plant Stem=Łodyga rośliny refrenusu -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Łodyga rośliny refrenusu to część rośliny która utrzymuje całą roślinę razem. Potrzebuje kamienia Kresu jako podłoża. Łodygi wyrastają z kwiatów refrenusu. -Chorus Fruit=Owoc refrenusu -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Owoc refrenusu jest jadalną częścią rośliny refrenusu, której naturalnym środowiskiem jest Kres. Zjedzenie go teleportuje cię na górę któregoś losowego stałego bloku w pobliżu, jeśli nie wylądowałbyś w płynie, stałym bloku lub szkodliwym bloku. Teleportacja może się nie udać jeśli nie ma, lub jest mało bloków które spełniają te warunki. -Popped Chorus Fruit=Prażony owoc refrenusu -Eye of Ender=Oko Kresu -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Ten przedmiot jest wykorzystywany do znajdowaniu kapliczek portalu Kresu na Powierzchni oraz do aktywacji portali Kresu. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Użyj przycisku ataku aby wypuścić oko Kresu. Podniesie się ono i poleci w poziomym kierunku najbliższej kapliczki portalu. Jeśli jesteś bardzo blisko, oko Kresu podąży bezpośrednią ścieżką do kapliczki portalu Kresu. Po kilku sekundach się zatrzymuje. Może wypaść jako przedmiot, jednak jest 20% szans, że się rozbije. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Aby aktywować portal Kresu, w każdym bloku ramy portalu Kresu musi znajdować się oko Kresu. -NOTE: The End dimension is currently incomplete and might change in future versions.=UWAGA: Wymiar Kresu jest aktualnie nieukończony i może się zmienić w przyszłych wersjach. -The stem attaches itself to end stone and other chorus blocks.=Łodyga przytwierdza się do kamienia Kresu i innych refrenusowych bloków. -Grows on end stone=Rośnie na kamieniu Kresu -Randomly teleports you when eaten=Losowo teleportuje przy zjedzeniu -Guides the way to the mysterious End dimension=Prowadzi do tajemniczego wymiaru Kresu -End Crystal=Kryształ Kresu -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Kryształy kresu to wybuchowe narzędzia. Mogą być postawione na obsydianie bądź skale macierzystej. Zapal je uderzeniem bądź strzałą. Kryształy kresu mogą być również wykorzystane do przywołania smoka Kresu, jeśli ułoży się po jednym na każdym boku Portalu wyjścia z Kresu. -Explosion radius: @1=Promień wybuchu: @1 -Ignited by a punch or a hit with an arrow=Zapalane przez uderzenie lub strzałę -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Postaw kryształ na obsydianie lub skale macierzystej, a następnie uderz bądź strzel w niego strzałą, aby wywołać dużą, prawdopodobnie śmiertelną, eksplozję. Aby przywołać smoka Kresu postaw po jednej na każdym boku Portalu wyjścia z Kresu. diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.ru.tr b/mods/ITEMS/mcl_end/locale/mcl_end.ru.tr deleted file mode 100644 index 6ab7a3c67..000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.ru.tr +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone=Камень Предела -End Stone Bricks=Кирпичи из камня Предела -Purpur Block=Пурпурный блок -Purpur Pillar=Пурпурная колонна -End Rod=Стержень Предела -End rods are decorative light sources.=Стержень Предела это декоративный светильник. -Dragon Egg=Драконье яйцо -A dragon egg is a decorative item which can be placed.=Драконье яйцо это декоративный предмет, который можно поставить. -Chorus Flower=Цветок коруса -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Цветок коруса это живая часть растения коруса. Он может шаг за шагом вырасти в высокое растение коруса. Когда он растёт, то может иногда умирать от старости. Он также умирает, если не может расти. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Установите его на место и ожидайте роста. Его можно помещать только на верхушку камня предела, а также верхнюю часть либо строго одну сторону стебля растения коруса. -Dead Chorus Flower=Мёртвый цветок коруса -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Это часть растения коруса. Она не растёт. Цветы коруса умирают от старости или когда не могут расти. Мёртвый цветок коруса можно собрать, чтобы получить свежий цветок коруса, который может вырасти вновь. -Chorus Plant Stem=Стебель растения коруса -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Стебель растения коруса это часть растения коруса, которая связывает всё растение вместе. Ему нужен камень предела как почва. Стебли растут из цветков коруса. -Chorus Fruit=Фрукт коруса -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Фрукт коруса это съедобный фрукт растения коруса, домом которого является Предел. Употребление его в пищу телепортирует вас к вершине случайного твёрдого блок поблизости. Вы не закончите жизнь внутри жидкого, твёрдого или опасного блока, но телепортация может потерпеть неудачу, если поблизости слишком мало подходящих мест или такие места отсутствуют. -Popped Chorus Fruit=Лопнувший фрукт коруса -Eye of Ender=Око Предела -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Этот предмет используется для обнаружения храмов порталов в Верхнем Мире и активации порталов Предела. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Используйте клавишу [Атаковать], чтобы освободить око Предела. Оно поднимется и полетит в горизонтальном направлении к ближайшему храму портала. Если вы очень близко к храму портала Предела, то око Предела полетит к нему напрямую. Оно остановится через несколько секунд. Оно может превратиться обратно в предмет, но есть 20-процентная вероятность того, что оно разобьётся. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Чтобы активировать портал Предела, нужно поместить по оку Предела на каждый блок целой рамки портала. -NOTE: The End dimension is currently incomplete and might change in future versions.=Предупреждение: Измерение Предела в настоящее время не завершено полностью и может измениться в будущих версиях. -The stem attaches itself to end stone and other chorus blocks.=Стебель присоединяется к камню Предела, а также к другим блокам коруса. -Grows on end stone=Растёт на камнях Предела -Randomly teleports you when eaten=Телепортирует случайным образом при употреблении в пищу -Guides the way to the mysterious End dimension=Показывает путь к загадочному измерению Предела -End Crystal=Кристалл Предела -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Кристаллы Предела - это взрывные устройства. Их можно размещать на обсидиане или бедроке. Подрывайте их ударом или попаданием стрелы. Кристаллы Предела также можно использовать для порождения Дракона Предела, для этого их нужно поместить по одной штуке с каждой стороны выходного портала Предела. -Explosion radius: @1=Радиус взрыва: @1 -Ignited by a punch or a hit with an arrow=Поджигается ударом или при попадании стрелы -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Разместите кристалл Предела на обсидиане или бедроке и ударьте по нему или попадите в него стрелой, чтобы вызвать огромный и, вероятно, смертельный взрыв. Чтобы вызвать Дракона Предела, поместите по одной штуке с каждой стороны портала выходного портала Предела. diff --git a/mods/ITEMS/mcl_end/locale/template.txt b/mods/ITEMS/mcl_end/locale/template.txt deleted file mode 100644 index 08c7de07b..000000000 --- a/mods/ITEMS/mcl_end/locale/template.txt +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone= -End Stone Bricks= -Purpur Block= -Purpur Pillar= -End Rod= -End rods are decorative light sources.= -Dragon Egg= -A dragon egg is a decorative item which can be placed.= -Chorus Flower= -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.= -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.= -Dead Chorus Flower= -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.= -Chorus Plant Stem= -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.= -Chorus Fruit= -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.= -Popped Chorus Fruit= -Eye of Ender= -This item is used to locate End portal shrines in the Overworld and to activate End portals.= -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.= -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.= -NOTE: The End dimension is currently incomplete and might change in future versions.= -The stem attaches itself to end stone and other chorus blocks.= -Grows on end stone= -Randomly teleports you when eaten= -Guides the way to the mysterious End dimension= -End Crystal= -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.= -Explosion radius: @1= -Ignited by a punch or a hit with an arrow= -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.= diff --git a/mods/ITEMS/mcl_end/mod.conf b/mods/ITEMS/mcl_end/mod.conf deleted file mode 100644 index 021417e86..000000000 --- a/mods/ITEMS/mcl_end/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_end -depends = screwdriver, mcl_sounds, mcl_util, doc_items, mcl_worlds, mcl_structures \ No newline at end of file diff --git a/mods/ITEMS/mcl_end/models/mcl_end_crystal.b3d b/mods/ITEMS/mcl_end/models/mcl_end_crystal.b3d deleted file mode 100644 index b6c2b9a3d..000000000 Binary files a/mods/ITEMS/mcl_end/models/mcl_end_crystal.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_end/models/mcl_end_crystal.png b/mods/ITEMS/mcl_end/models/mcl_end_crystal.png deleted file mode 100644 index 13e12c2ea..000000000 Binary files a/mods/ITEMS/mcl_end/models/mcl_end_crystal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/sounds/mcl_end_teleport.ogg b/mods/ITEMS/mcl_end/sounds/mcl_end_teleport.ogg deleted file mode 100644 index addfe89c9..000000000 Binary files a/mods/ITEMS/mcl_end/sounds/mcl_end_teleport.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower.png deleted file mode 100644 index 47798ba0b..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower_dead.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower_dead.png deleted file mode 100644 index 88f798cd9..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower_dead.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit.png deleted file mode 100644 index 5c1677131..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit_popped.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit_popped.png deleted file mode 100644 index 7846d643d..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit_popped.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_plant.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_plant.png deleted file mode 100644 index afde6feec..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_plant.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png b/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png deleted file mode 100644 index b1b74265d..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_item.png b/mods/ITEMS/mcl_end/textures/mcl_end_crystal_item.png deleted file mode 100644 index e0eeac6a5..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_item.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_dragon_egg.png b/mods/ITEMS/mcl_end/textures/mcl_end_dragon_egg.png deleted file mode 100644 index c50d8f23d..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_dragon_egg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_bricks.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_bricks.png deleted file mode 100644 index 933be6e51..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_bottom.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_bottom.png deleted file mode 100644 index fc814a63b..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_side.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_side.png deleted file mode 100644 index b6a9fdf97..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_top.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_top.png deleted file mode 100644 index 1485a8a26..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_stone.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_stone.png deleted file mode 100644 index 2254f82e7..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_stone.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_ender_eye.png b/mods/ITEMS/mcl_end/textures/mcl_end_ender_eye.png deleted file mode 100644 index 794461ac5..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_ender_eye.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_eye.png b/mods/ITEMS/mcl_end/textures/mcl_end_endframe_eye.png deleted file mode 100644 index c1d3a2bb6..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_eye.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_side.png b/mods/ITEMS/mcl_end/textures/mcl_end_endframe_side.png deleted file mode 100644 index a2370ecef..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_top.png b/mods/ITEMS/mcl_end/textures/mcl_end_endframe_top.png deleted file mode 100644 index ad2b729ff..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_block.png b/mods/ITEMS/mcl_end/textures/mcl_end_purpur_block.png deleted file mode 100644 index 56889ffb2..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar.png b/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar.png deleted file mode 100644 index 4b7efbd08..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar_top.png b/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar_top.png deleted file mode 100644 index 752e77bc1..000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/README.txt b/mods/ITEMS/mcl_farming/README.txt deleted file mode 100644 index 5779d7035..000000000 --- a/mods/ITEMS/mcl_farming/README.txt +++ /dev/null @@ -1,46 +0,0 @@ -===FARMING MOD for MINETEST-C55=== -by PilzAdam - -Introduction: -This mod adds farming to Minetest. - -How to install: -Unzip the archive an place it in minetest-base-directory/mods/minetest/ -if you have a windows client or a linux run-in-place client. If you have -a linux system-wide instalation place it in ~/.minetest/mods/minetest/. -If you want to install this mod only in one world create the folder -worldmods/ in your worlddirectory. -For further information or help see: -http://wiki.minetest.com/wiki/Installing_Mods - -How to use the mod: -Craft a wood/stone/iron/gold/diamond hoe: -material material - stick - stick -Dig dirt with it and turn it to soil. Water the soil and plant the seeds -you get by digging dirt with the hoe. Wait until the seeds are seasoned -and harvest them. When harvesting you will get the product and new seeds. -For further information or help see: -http://minetest.net/forum/viewtopic.php?id=2787 - -License: -Sourcecode: WTFPL (see below) -Graphics: WTFPL (see below) - -See also: -http://minetest.net/ - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/ITEMS/mcl_farming/beetroot.lua b/mods/ITEMS/mcl_farming/beetroot.lua deleted file mode 100644 index 21096042b..000000000 --- a/mods/ITEMS/mcl_farming/beetroot.lua +++ /dev/null @@ -1,167 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_craftitem("mcl_farming:beetroot_seeds", { - description = S("Beetroot Seeds"), - _tt_help = S("Grows on farmland"), - _doc_items_longdesc = S("Grows into a beetroot plant. Chickens like beetroot seeds."), - _doc_items_usagehelp = S("Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds."), - groups = {craftitem = 1, compostability = 30}, - inventory_image = "mcl_farming_beetroot_seeds.png", - wield_image = "mcl_farming_beetroot_seeds.png", - on_place = function(itemstack, placer, pointed_thing) - return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:beetroot_0") - end -}) - -minetest.register_node("mcl_farming:beetroot_0", { - description = S("Premature Beetroot Plant (Stage 1)"), - _doc_items_longdesc = S("Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature."), - _doc_items_entry_name = S("Premature Beetroot Plant"), - paramtype = "light", - paramtype2 = "meshoptions", - sunlight_propagates = true, - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_farming:beetroot_seeds", - tiles = {"mcl_farming_beetroot_0.png"}, - inventory_image = "mcl_farming_beetroot_0.png", - wield_image = "mcl_farming_beetroot_0.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_farming:beetroot_1", { - description = S("Premature Beetroot Plant (Stage 2)"), - _doc_items_create_entry = false, - paramtype = "light", - paramtype2 = "meshoptions", - sunlight_propagates = true, - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_farming:beetroot_seeds", - tiles = {"mcl_farming_beetroot_1.png"}, - inventory_image = "mcl_farming_beetroot_1.png", - wield_image = "mcl_farming_beetroot_1.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -3/16, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_farming:beetroot_2", { - description = S("Premature Beetroot Plant (Stage 3)"), - _doc_items_create_entry = false, - paramtype = "light", - paramtype2 = "meshoptions", - sunlight_propagates = true, - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_farming:beetroot_seeds", - tiles = {"mcl_farming_beetroot_2.png"}, - inventory_image = "mcl_farming_beetroot_2.png", - wield_image = "mcl_farming_beetroot_2.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 2/16, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_farming:beetroot", { - description = S("Mature Beetroot Plant"), - _doc_items_longdesc = S("A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further."), - _doc_items_create_entry = true, - paramtype = "light", - paramtype2 = "meshoptions", - sunlight_propagates = true, - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = { - --[[ drops 1 beetroot guaranteed. - drops 0-3 beetroot seeds: - 0 seeds: 42.18% - 1 seed: 14.06% - 2 seeds: 18.75% - 3 seeds: 25% ]] - max_items = 2, - items = { - { items = {"mcl_farming:beetroot_item"}, rarity = 1 }, - { items = {"mcl_farming:beetroot_seeds 3"}, rarity = 4 }, - { items = {"mcl_farming:beetroot_seeds 2"}, rarity = 4 }, - { items = {"mcl_farming:beetroot_seeds 1"}, rarity = 4 }, - }, - }, - tiles = {"mcl_farming_beetroot_3.png"}, - inventory_image = "mcl_farming_beetroot_3.png", - wield_image = "mcl_farming_beetroot_3.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 3/16, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,beetroot=4}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_craftitem("mcl_farming:beetroot_item", { - description = S("Beetroot"), - _doc_items_longdesc = S("Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too."), - _doc_items_usagehelp = S("Hold it in your hand and right-click to eat it. Rightclick an animal to feed it."), - inventory_image = "mcl_farming_beetroot.png", - wield_image = "mcl_farming_beetroot.png", - on_place = minetest.item_eat(1), - on_secondary_use = minetest.item_eat(1), - groups = {food = 2, eatable = 1, compostability = 65}, - _mcl_saturation = 1.2, -}) - -minetest.register_craftitem("mcl_farming:beetroot_soup", { - description = S("Beetroot Soup"), - _doc_items_longdesc = S("Beetroot soup is a food item."), - stack_max = 1, - inventory_image = "mcl_farming_beetroot_soup.png", - wield_image = "mcl_farming_beetroot_soup.png", - on_place = minetest.item_eat(6, "mcl_core:bowl"), - on_secondary_use = minetest.item_eat(6, "mcl_core:bowl"), - groups = { food = 3, eatable = 6 }, - _mcl_saturation = 7.2, -}) - -minetest.register_craft({ - output = "mcl_farming:beetroot_soup", - recipe = { - { "mcl_farming:beetroot_item","mcl_farming:beetroot_item","mcl_farming:beetroot_item", }, - { "mcl_farming:beetroot_item","mcl_farming:beetroot_item","mcl_farming:beetroot_item", }, - { "", "mcl_core:bowl", "" }, - }, -}) - -mcl_farming:add_plant("plant_beetroot", "mcl_farming:beetroot", {"mcl_farming:beetroot_0", "mcl_farming:beetroot_1", "mcl_farming:beetroot_2"}, 68, 3) - -if minetest.get_modpath("doc") then - for i=1,2 do - doc.add_entry_alias("nodes", "mcl_farming:beetroot_0", "nodes", "mcl_farming:beetroot_"..i) - end -end diff --git a/mods/ITEMS/mcl_farming/carrots.lua b/mods/ITEMS/mcl_farming/carrots.lua deleted file mode 100644 index 1c3ebcdfa..000000000 --- a/mods/ITEMS/mcl_farming/carrots.lua +++ /dev/null @@ -1,127 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -for i=1, 7 do - local texture, sel_height - if i < 3 then - sel_height = -5/16 - texture = "farming_carrot_1.png" - elseif i < 5 then - sel_height = -3/16 - texture = "farming_carrot_2.png" - else - sel_height = 2/16 - texture = "farming_carrot_3.png" - end - - local create, name, longdesc - if i == 1 then - create = true - name = S("Premature Carrot Plant") - longdesc = S("Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.") - else - create = false - end - minetest.register_node("mcl_farming:carrot_"..i, { - description = S("Premature Carrot Plant (Stage @1)", i), - _doc_items_create_entry = create, - _doc_items_entry_name = name, - _doc_items_longdesc = longdesc, - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_farming:carrot_item", - tiles = {texture}, - inventory_image = texture, - wield_image = texture, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, sel_height, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, - }) -end - -minetest.register_node("mcl_farming:carrot", { - description = S("Mature Carrot Plant"), - _doc_items_longdesc = S("Mature carrot plants are ready to be harvested for carrots. They won't grow any further."), - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - tiles = {"farming_carrot_4.png"}, - inventory_image = "farming_carrot_4.png", - wield_image = "farming_carrot_4.png", - drop = { - max_items = 1, - items = { - { items = {"mcl_farming:carrot_item 4"}, rarity = 5 }, - { items = {"mcl_farming:carrot_item 3"}, rarity = 2 }, - { items = {"mcl_farming:carrot_item 2"}, rarity = 2 }, - { items = {"mcl_farming:carrot_item 1"} }, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 4/16, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_craftitem("mcl_farming:carrot_item", { - description = S("Carrot"), - _tt_help = S("Grows on farmland"), - _doc_items_longdesc = S("Carrots can be eaten and planted. Pigs and rabbits like carrots."), - _doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."), - inventory_image = "farming_carrot.png", - groups = {food = 2, eatable = 3, compostability = 65}, - _mcl_saturation = 3.6, - on_secondary_use = minetest.item_eat(3), - on_place = function(itemstack, placer, pointed_thing) - local new = mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:carrot_1") - if new then - return new - else - return minetest.do_item_eat(3, nil, itemstack, placer, pointed_thing) - end - end, -}) - -minetest.register_craftitem("mcl_farming:carrot_item_gold", { - description = S("Golden Carrot"), - _doc_items_longdesc = S("A golden carrot is a precious food item which can be eaten. It is really, really filling!"), - inventory_image = "farming_carrot_gold.png", - on_place = minetest.item_eat(6), - on_secondary_use = minetest.item_eat(6), - groups = { brewitem = 1, food = 2, eatable = 6 }, - _mcl_saturation = 14.4, -}) - -minetest.register_craft({ - output = "mcl_farming:carrot_item_gold", - recipe = { - {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, - {"mcl_core:gold_nugget", "mcl_farming:carrot_item", "mcl_core:gold_nugget"}, - {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, - } -}) - -mcl_farming:add_plant("plant_carrot", "mcl_farming:carrot", {"mcl_farming:carrot_1", "mcl_farming:carrot_2", "mcl_farming:carrot_3", "mcl_farming:carrot_4", "mcl_farming:carrot_5", "mcl_farming:carrot_6", "mcl_farming:carrot_7"}, 25, 20) - -if minetest.get_modpath("doc") then - for i=2,7 do - doc.add_entry_alias("nodes", "mcl_farming:carrot_1", "nodes", "mcl_farming:carrot_"..i) - end -end diff --git a/mods/ITEMS/mcl_farming/hoes.lua b/mods/ITEMS/mcl_farming/hoes.lua deleted file mode 100644 index d2250eb70..000000000 --- a/mods/ITEMS/mcl_farming/hoes.lua +++ /dev/null @@ -1,275 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local function create_soil(pos, inv) - if pos == nil then - return false - end - local node = minetest.get_node(pos) - local name = node.name - local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) - if minetest.get_item_group(name, "cultivatable") == 2 then - if above.name == "air" then - node.name = "mcl_farming:soil" - minetest.set_node(pos, node) - minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.5 }, true) - return true - end - elseif minetest.get_item_group(name, "cultivatable") == 1 then - if above.name == "air" then - node.name = "mcl_core:dirt" - minetest.set_node(pos, node) - minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.6 }, true) - return true - end - end - return false -end - -local hoe_on_place_function = function(wear_divisor) - return function(itemstack, user, pointed_thing) - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - - if minetest.is_protected(pointed_thing.under, user:get_player_name()) then - minetest.record_protection_violation(pointed_thing.under, user:get_player_name()) - return itemstack - end - - if create_soil(pointed_thing.under, user:get_inventory()) then - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:add_wear(65535/wear_divisor) - end - return itemstack - end - end -end - -local uses = { - wood = 60, - stone = 132, - iron = 251, - gold = 33, - diamond = 1562, -} - -local hoe_tt = S("Turns block into farmland") -local hoe_longdesc = S("Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.") -local hoe_usagehelp = S("Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.") - -minetest.register_tool("mcl_farming:hoe_wood", { - description = S("Wood Hoe"), - _tt_help = hoe_tt.."\n"..S("Uses: @1", uses.wood), - _doc_items_longdesc = hoe_longdesc, - _doc_items_usagehelp = hoe_usagehelp, - _doc_items_hidden = false, - inventory_image = "farming_tool_woodhoe.png", - wield_scale = mcl_vars.tool_wield_scale, - on_place = hoe_on_place_function(uses.wood), - groups = { tool=1, hoe=1, enchantability=15 }, - tool_capabilities = { - full_punch_interval = 1, - damage_groups = { fleshy = 1, }, - punch_attack_uses = uses.wood, - }, - _repair_material = "group:wood", - _mcl_toollike_wield = true, - _mcl_diggroups = { - hoey = { speed = 2, level = 1, uses = 60 } - }, -}) - -minetest.register_craft({ - output = "mcl_farming:hoe_wood", - recipe = { - {"group:wood", "group:wood"}, - {"", "mcl_core:stick"}, - {"", "mcl_core:stick"} - } -}) -minetest.register_craft({ - output = "mcl_farming:hoe_wood", - recipe = { - {"group:wood", "group:wood"}, - {"mcl_core:stick", ""}, - {"mcl_core:stick", ""} - } -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_farming:hoe_wood", - burntime = 10, -}) - -minetest.register_tool("mcl_farming:hoe_stone", { - description = S("Stone Hoe"), - _tt_help = hoe_tt.."\n"..S("Uses: @1", uses.stone), - _doc_items_longdesc = hoe_longdesc, - _doc_items_usagehelp = hoe_usagehelp, - inventory_image = "farming_tool_stonehoe.png", - wield_scale = mcl_vars.tool_wield_scale, - on_place = hoe_on_place_function(uses.stone), - groups = { tool=1, hoe=1, enchantability=5 }, - tool_capabilities = { - full_punch_interval = 0.5, - damage_groups = { fleshy = 1, }, - punch_attack_uses = uses.stone, - }, - _repair_material = "group:cobble", - _mcl_toollike_wield = true, - _mcl_diggroups = { - hoey = { speed = 4, level = 3, uses = 132 } - }, -}) - -minetest.register_craft({ - output = "mcl_farming:hoe_stone", - recipe = { - {"group:cobble", "group:cobble"}, - {"", "mcl_core:stick"}, - {"", "mcl_core:stick"} - } -}) -minetest.register_craft({ - output = "mcl_farming:hoe_stone", - recipe = { - {"group:cobble", "group:cobble"}, - {"mcl_core:stick", ""}, - {"mcl_core:stick", ""} - } -}) - -minetest.register_tool("mcl_farming:hoe_iron", { - description = S("Iron Hoe"), - _tt_help = hoe_tt.."\n"..S("Uses: @1", uses.iron), - _doc_items_longdesc = hoe_longdesc, - _doc_items_usagehelp = hoe_usagehelp, - inventory_image = "farming_tool_steelhoe.png", - wield_scale = mcl_vars.tool_wield_scale, - on_place = hoe_on_place_function(uses.iron), - groups = { tool=1, hoe=1, enchantability=14 }, - tool_capabilities = { - -- 1/3 - full_punch_interval = 0.33333333, - damage_groups = { fleshy = 1, }, - punch_attack_uses = uses.iron, - }, - _repair_material = "mcl_core:iron_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - hoey = { speed = 6, level = 4, uses = 251 } - }, -}) - -minetest.register_craft({ - output = "mcl_farming:hoe_iron", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"", "mcl_core:stick"}, - {"", "mcl_core:stick"} - } -}) -minetest.register_craft({ - output = "mcl_farming:hoe_iron", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:stick", ""}, - {"mcl_core:stick", ""} - } -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:iron_nugget", - recipe = "mcl_farming:hoe_iron", - cooktime = 10, -}) - -minetest.register_tool("mcl_farming:hoe_gold", { - description = S("Golden Hoe"), - _tt_help = hoe_tt.."\n"..S("Uses: @1", uses.gold), - _doc_items_longdesc = hoe_longdesc, - _doc_items_usagehelp = hoe_usagehelp, - inventory_image = "farming_tool_goldhoe.png", - wield_scale = mcl_vars.tool_wield_scale, - on_place = hoe_on_place_function(uses.gold), - groups = { tool=1, hoe=1, enchantability=22 }, - tool_capabilities = { - full_punch_interval = 1, - damage_groups = { fleshy = 1, }, - punch_attack_uses = uses.gold, - }, - _repair_material = "mcl_core:gold_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - hoey = { speed = 12, level = 2, uses = 33 } - }, -}) - -minetest.register_craft({ - output = "mcl_farming:hoe_gold", - recipe = { - {"mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"", "mcl_core:stick"}, - {"", "mcl_core:stick"} - } -}) -minetest.register_craft({ - output = "mcl_farming:hoe_gold", - recipe = { - {"mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"mcl_core:stick", ""}, - {"mcl_core:stick", ""} - } -}) - - - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_nugget", - recipe = "mcl_farming:hoe_gold", - cooktime = 10, -}) - -minetest.register_tool("mcl_farming:hoe_diamond", { - description = S("Diamond Hoe"), - _tt_help = hoe_tt.."\n"..S("Uses: @1", uses.diamond), - _doc_items_longdesc = hoe_longdesc, - _doc_items_usagehelp = hoe_usagehelp, - inventory_image = "farming_tool_diamondhoe.png", - wield_scale = mcl_vars.tool_wield_scale, - on_place = hoe_on_place_function(uses.diamond), - groups = { tool=1, hoe=1, enchantability=10 }, - tool_capabilities = { - full_punch_interval = 0.25, - damage_groups = { fleshy = 1, }, - punch_attack_uses = uses.diamond, - }, - _repair_material = "mcl_core:diamond", - _mcl_toollike_wield = true, - _mcl_diggroups = { - hoey = { speed = 8, level = 5, uses = 1562 } - }, -}) - -minetest.register_craft({ - output = "mcl_farming:hoe_diamond", - recipe = { - {"mcl_core:diamond", "mcl_core:diamond"}, - {"", "mcl_core:stick"}, - {"", "mcl_core:stick"} - } -}) -minetest.register_craft({ - output = "mcl_farming:hoe_diamond", - recipe = { - {"mcl_core:diamond", "mcl_core:diamond"}, - {"mcl_core:stick", ""}, - {"mcl_core:stick", ""} - } -}) diff --git a/mods/ITEMS/mcl_farming/init.lua b/mods/ITEMS/mcl_farming/init.lua deleted file mode 100644 index adce058ee..000000000 --- a/mods/ITEMS/mcl_farming/init.lua +++ /dev/null @@ -1,29 +0,0 @@ -mcl_farming = {} - --- IMPORTANT API AND HELPER FUNCTIONS -- --- Contain functions for planting seed, addind plant growth and gourds (melon/pumpkin-like) -dofile(minetest.get_modpath("mcl_farming").."/shared_functions.lua") - --- ========= SOIL ========= -dofile(minetest.get_modpath("mcl_farming").."/soil.lua") - --- ========= HOES ========= -dofile(minetest.get_modpath("mcl_farming").."/hoes.lua") - --- ========= WHEAT ========= -dofile(minetest.get_modpath("mcl_farming").."/wheat.lua") - --- ======= PUMPKIN ========= -dofile(minetest.get_modpath("mcl_farming").."/pumpkin.lua") - --- ========= MELON ========= -dofile(minetest.get_modpath("mcl_farming").."/melon.lua") - --- ========= CARROT ========= -dofile(minetest.get_modpath("mcl_farming").."/carrots.lua") - --- ========= POTATOES ========= -dofile(minetest.get_modpath("mcl_farming").."/potatoes.lua") - --- ========= BEETROOT ========= -dofile(minetest.get_modpath("mcl_farming").."/beetroot.lua") diff --git a/mods/ITEMS/mcl_farming/locale/mcl_farming.de.tr b/mods/ITEMS/mcl_farming/locale/mcl_farming.de.tr deleted file mode 100644 index 54b356306..000000000 --- a/mods/ITEMS/mcl_farming/locale/mcl_farming.de.tr +++ /dev/null @@ -1,99 +0,0 @@ -# textdomain: mcl_farming -Beetroot Seeds=Rote-Beete-Samen -Grows into a beetroot plant. Chickens like beetroot seeds.=Wachsen zu Rote Beete heran. Hühner mögen Rote-Beete-Samen. -Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.=Platzieren Sie die Rote-Beete-Samen auf Ackerboden (der mit einer Hacke gemacht werden kann), um Rote Beete zu pflanzen. Sie wächst im Sonnenlicht und wächst auf bewässertem Ackerboden schneller. Rechtsklicken Sie auf ein Tier, um es mit Rote-Beete-Samen zu füttern. -Premature Beetroot Plant (Stage 1)=Junge Rote Beete (1. Stufe) -Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Rote Beete ist eine Pflanze, die auf Ackerboden im Sonnenlicht in 4 Stufen wächst. Auf bewässertem Ackerboden wächst sie etwas schneller. Sie kann jederzeit abgeerntet werden, aber wird nur einen Ertrag abwerfen, wenn sie ausgewachsen ist. -Premature Beetroot Plant=Junge Rote Beete -Premature Beetroot Plant (Stage 2)=Junge Rote Beete (2. Stufe) -Premature Beetroot Plant (Stage 3)=Junge Rote Beete (3. Stufe) -Mature Beetroot Plant=Ausgewachsene Rote Beete -A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.=Eine ausgewachsene Rote Beete ist eine erntereife Pflanze, die für eine Rote-Beete-Rübe und ein paar Rote-Beete-Samen abgeerntet werden kann. Sie wächst nicht weiter. -Beetroot=Rote-Beete-Rübe -Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.=Rote-Beete-Rüben sind eine Speise und nützlich zur Herstellung von Farbstoffen. Schweine mögen sie auch. -Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.=Halten Sie es in der Hand und rechtsklicken Sie, um es zu essen. Rechtsklicken Sie auf ein Tier, um es zu füttern. -Beetroot Soup=Rote-Beete-Suppe -Beetroot soup is a food item.=Rote-Beete-Suppe ist ein Lebensmittel. -Premature Carrot Plant=Junge Karottenpflanze -Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Karottenpflanzen sind Pflanzen, die auf Ackerboden im Sonnenlicht in 8 Stufen wachsen, aber es gibt nur 4 sichtbar unterscheidbare Stufen. Auf bewässertem Ackerboden wachsen sie etwas schneller. Sie können jederzeit abgeerntet werden, aber werden nur einen Ertrag abwerfen, wenn sie ausgewachsen sind. -Premature Carrot Plant (Stage @1)=Junge Karottenpflanze (@1. Stufe) -Mature Carrot Plant=Ausgewachsene Karottenpflanze -Mature carrot plants are ready to be harvested for carrots. They won't grow any further.=Ausgewachsene Karottenpflanzen können für Karotten abgeerntet werden. Sie werden nicht weiter wachsen. -Carrot=Karotte -Carrots can be eaten and planted. Pigs and rabbits like carrots.=Karotten können gegessen und gepflanzt werden. Schweine und Kaninchen mögen Karotten. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Halten Sie es in ihrer Hand und rechtsklicken Sie, um es zu essen. Platzieren Sie sie auf Ackerboden, um sie einzupflanzen. Sie wächst im Sonnenlicht und wächst auf bewässertem Ackerboden schneller. Rechtsklicken Sie auf ein Tier, um es zu füttern. -Golden Carrot=Goldene Karotte -A golden carrot is a precious food item which can be eaten. It is really, really filling!=Eine goldene Karotte ist ein kostbares Lebensmittel. Es ist sehr, sehr sättigend! -Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.=Hacken sind unerlässliche Werkzeuge für die Zucht von Feldpflanzen. Sie können benutzt werden, um einen Ackerboden zu machen, auf dem Samen gepflanzt werden können. Hacken können zur Not auch als sehr schwache Waffen benutzt werden. -Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.=Benutzen Sie die Hacke auf einen beackerbaren Block (indem Sie ihn rechtsklicken), um ihn zu Ackerboden in verwandeln. Erde, Grasblöcke und Graspfade können beackert werden. Grobe Erde wird zu Erde. -Wood Hoe=Holzhacke -Stone Hoe=Steinhacke -Iron Hoe=Eisenhacke -Golden Hoe=Goldhacke -Diamond Hoe=Diamanthacke -Melon Seeds=Melonensamen -Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.=Platzieren Sie die Melonensamen auf Ackerboden (der mit einer Hacke gemacht werden kann), um einen Melonenstängel zu pflanzen. Melonenstängel wachsen im Sonnenlicht und wachen auf bewässertem Ackerboden schneller. Ausgewachsen wird der Melonenstängel versuchen, an der Seite eine Melone wachsen zu lassen. Rechtsklicken Sie auf ein Tier, um es mit Melonensamen zu füttern. -Melon=Melone -Grows into a melon stem which in turn grows melons. Chickens like melon seeds.=Wächst zu einem Melonenstängel heran, aus dem wiederum Melonen wachsen. Hühner mögen Melonensamen. -A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.=Eine Melone ist ein Block, der von Melonenstängeln wächst, der wiederum aus Melonensamen wächst. Er kann für Melonenstücke abgeerntet werden. -Premature Melon Stem=Junger Melonenstängel -Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.=Melonenstängel wachsen auf Ackerboden in 8 Stufen. Auf bewässertem Ackerboden ist das Wachstum etwas schneller. Aus ausgewachsenen Melonenstängeln können Melonen wachsen. -Premature Melon Stem (Stage @1)=Junger Melonenstängel (@1. Stufe) -Mature Melon Stem=Ausgewachsener Melonenstängel -A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.=Ein ausgewachsener Melonenstängel versucht, auf einem seiner vier benachbarten Blöcke eine Melone wachsen zu lassen. Eine Melone kann nur auf Ackerboden, Erde oder einem Grasblock wachsen. Wenn sich eine Melone neben einem Melonenstängel befindet, verbiegt sich der Melonenstängel und verbindet sich mit der Melone. Solange der Stängel verbunden ist, kann aus ihm keine neue Melone wachsen. Wenn alle Melonen um den Melonenstängel entfernt wurden, verliert er die Verbindung und aus ihm kann eine weitere Melone wachsen. -Melon Slice=Melonenstück -This is a food item which can be eaten.=Ein essbares Lebensmittel. -Premature Potato Plant=Junge Kartoffelpflanze -Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Kartoffelpflanzen sind Pflanzen, die auf Ackerboden im Sonnenlicht in 8 Stufen wachsen, aber es gibt nur 4 sichtbar unterscheidbare Stufen. Auf bewässertem Ackerboden wachsen sie etwas schneller. Sie können jederzeit abgeerntet werden, aber werden nur einen Ertrag abwerfen, wenn sie ausgewachsen sind. -Premature Potato Plant (Stage @1)=Junge Kartoffelpflanze (@1. Stufe) -Mature Potato Plant=Ausgewachsene Kartoffelpflanze -Mature potato plants are ready to be harvested for potatoes. They won't grow any further.=Ausgewachsene Kartoffelpflanzen können für Kartoffeln abgeerntet werden. Sie wachsen nicht weiter. -Potato=Kartoffel -Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.=Kartoffeln sind essbare Lebensmittel, können im Ofen gebacken und eingepflanzt werden. Schweine mögen Kartoffeln. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Halten Sie sie in der Hand und rechtsklicken Sie zum Essen. Platzieren Sie sie auf Ackerboden, um sie zu pflanzen. Sie wächst im Sonnenlicht und wächst auf bewässertem Ackerboden schneller. Rechtsklicken Sie auf ein Tier, um es zu füttern. -Baked Potato=Ofenkartoffel -Baked potatoes are food items which are more filling than the unbaked ones.=Ofenkartoffeln sind Lebensmittel, die etwas nahrhafter als rohe Kartoffeln sind. -Poisonous Potato=Giftige Kartoffel -This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.=Diese Kartoffel sieht nicht gerade gesund aus. Sie kann gegessen werden, um Hungerpunkte zu erhalten, aber es gibt eine Chance von 60%, dass das Sie kurz vergiften wird. -Pumpkin Seeds=Kürbissamen -Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.=Wächst zu einem Kürbisstängel heran, aus dem wiederum Kürbisse wachsen. Hühner mögen Kürbissamen. -Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.=Platzieren Sie die Kürbissamen auf Ackerboden (der mit einer Hacke gemacht werden kann), um einen Kürbisstängel zu pflanzen. Kürbisstängel wachsen im Sonnenlicht und wachsen auf bewässertem Ackerboden schneller. Ausgewachsen wird der Kürbisstängel versuchen, einen Kürbis an einem benachbartem Feld wachsen zu lassen. Rechtsklicken Sie auf ein Tier, um es mit Kürbissamen zu füttern. -Premature Pumpkin Stem=Junger Kürbisstängel -Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.=Kürbisstängel wachsen auf Ackerboden in 8 Stufen. Auf bewässertem Ackerboden ist das Wachstum etwas schneller. Aus ausgewachsenen Kürbisstängeln können Kürbisse wachsen. -Premature Pumpkin Stem (Stage @1)=Junger Kürbisstängel (@1. Stufe) -Mature Pumpkin Stem=Ausgewachsener Kürbisstängel -A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.=Ein ausgewachsener Kürbisstängel versucht, auf einem seiner vier benachbarten Blöcke einen Kürbis wachsen zu lassen. Ein Kürbis kann nur auf Ackerboden, Erde oder einem Grasblock wachsen. Wenn sich ein Kürbis neben einem Kürbisstängel befindet, verbiegt sich der Kürbisstängel und verbindet sich mit dem Kürbis. Solange der Stängel verbunden ist, kann aus ihm kein neuer Kürbis wachsen. Wenn alle Kürbisse um den Kürbisstängel entfernt wurden, verliert er die Verbindung und aus ihm kann ein weiterer Kürbis wachsen. -Faceless Pumpkin=Gesichtsloser Kürbis -A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=Ein gesichtsloser Kürbis ist ein dekorativer Block. Mit einer Schere kann man in ihm ein Muster schnitzen, um Kürbissamen zu erhalten. -Pumpkin=Kürbis -A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=Einen Kürbis kann zum Spaß als Helm getragen werden, aber er bietet keinen Schutz. Kürbisse wachsen aus Kürbisstängeln, welche wiederum aus Kürbissamen wachsen. -Jack o'Lantern=Kürbislaterne -A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=Eine Kürbislaterne ist eine traditionelle Dekoration für Halloween. Sie leuchtet hell. -Pumpkin Pie=Kürbiskuchen -A pumpkin pie is a tasty food item which can be eaten.=Ein Kürbiskuchen ist ein leckeres essbares Lebensmittel. -Farmland=Ackerboden -Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Ackerboden wird für den Ackerbau genutzt, ein unerlässlicher Boden zum Anbau von Nutzpflanzen. Er wird erstellt, wenn eine Hacke auf Erde oder einem ähnlichen Block benutzt wird. Pflanzen können auf Ackerboden wachsen, aber nur langsam. Ackerboden wird zu bewässertem Ackerboden (auf dem Pflanzen schneller wachsen), wenn es regnet oder sich eine Wasserquelle in der Nähe befindet. Dieser Block wird sich zurück zu Erde verwandeln, wenn über ihn ein fester Block auftaucht oder sich über ihn ein Kolbenarm ausbreitet. -Hydrated Farmland=Bewässerter Ackerboden -Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Bewässerter Ackerboden wird für den Ackerbau benutzt, auf ihm kann man Nutzpflanzen züchten. Er entsteht, wenn sich Ackerboden unter Regen oder in der Nähe von Wasser befindet. Ohne Wasser wird dieser Block irgendwann austrocknen. Dieser Block verwandelt sich zurück zu Erde, wenn über ihm ein fester Block auftaucht, oder ein Kolbenarm sich über ihn bewegt. -Wheat Seeds=Weizensamen -Grows into a wheat plant. Chickens like wheat seeds.=Wachsen zu einer Weizenpflanze heran. Hühner mögen Weizensamen. -Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.=Platzieren Sie die Weizensamen auf Ackerboden (welcher mit einer Hacke gemacht werden kann), um eine Weizenpflanze zu pflanzen. Sie wächst im Sonnenlicht und wächst schneller auf bewässertem Ackerboden. Rechtsklicken Sie auf ein Tier, um es mit Weizensamen zu füttern. -Premature Wheat Plant=Junge Weizenpflanze -Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.=Junge Weizenpflanzen wachsen auf Ackerboden im Sonnenlicht in 8 Stufen. Auf bewässertem Ackerboden wachsen sie schneller. Sie können jederzeit abgeerntet werden, aber werden nur ertragreich sein, wenn sie ausgewachsen sind. -Premature Wheat Plant (Stage @1)=Junge Weizenpflanze (@1. Stufe) -Mature Wheat Plant=Ausgewachsene Weizenpflanze -Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.=Ausgewachsene Weizenpflanzen können für Weizen und Weizensamen abgeerntet werden. Sie wachsen nicht weiter. -Wheat=Weizen -Wheat is used in crafting. Some animals like wheat.=Weizen wird in der Herstellung gebraucht. Einige Tiere mögen Weizen. -Cookie=Keks -Bread=Brot -Hay Bale=Heuballen -Hay bales are decorative blocks made from wheat.=Heuballen sind dekorative Blöcke, die aus Weizen gemacht sind. -To carve a face into the pumpkin, use the shears on the side you want to carve.=Um ein Gesicht in den Kürbis zu schnitzen, benutzen Sie die Schere an der Seite, die Sie schnitzen wollen. -Use the “Place” key on an animal to try to feed it wheat.=Benutzen Sie die „Platzieren“-Taste auf einem Tier, um zu versuchen, es zu füttern. -Grows on farmland=Wächst auf Ackerboden -Turns block into farmland=Macht Block zu Ackerboden -60% chance of poisoning=60% Vergiftungswahrscheinlichkeit -Surface for crops=Boden für Nutzpflanzen -Can become wet=Kann nass werden -Uses: @1=Verwendungen: @1 diff --git a/mods/ITEMS/mcl_farming/locale/mcl_farming.es.tr b/mods/ITEMS/mcl_farming/locale/mcl_farming.es.tr deleted file mode 100644 index 8366e8252..000000000 --- a/mods/ITEMS/mcl_farming/locale/mcl_farming.es.tr +++ /dev/null @@ -1,93 +0,0 @@ -# textdomain: mcl_farming -Beetroot Seeds=Semillas de remolacha -Grows into a beetroot plant. Chickens like beetroot seeds.=Crece en una planta de remolacha. A los pollos les gustan las semillas de remolacha. -Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.=Coloque las semillas de remolacha en tierras de cultivo (que se pueden crear con una azada) para plantar una planta de remolacha. Crecen a la luz del sol y crecen más rápido en tierras de cultivo hidratadas. Haga clic derecho en un animal para alimentarlo con semillas de remolacha. -Premature Beetroot Plant (Stage 1)=Planta de remolacha prematura (Etapa 1) -Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Las plantas de remolacha son plantas que crecen en tierras de cultivo bajo la luz solar en 4 etapas. En tierras de cultivo hidratadas, crecen un poco más rápido. Se pueden cosechar en cualquier momento, pero solo generarán ganancias cuando maduren. -Premature Beetroot Plant=Planta de remolacha prematura -Premature Beetroot Plant (Stage 2)=Planta de remolacha prematura (Etapa 2) -Premature Beetroot Plant (Stage 3)=Planta de remolacha prematura (Etapa 3) -Mature Beetroot Plant=Planta de remolacha madura -A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.=Una planta de remolacha madura es una planta de cultivo que está lista para ser cosechada para una remolacha y algunas semillas de remolacha. No crecerá más. -Beetroot=Remolacha -Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.=Las remolachas se usan como alimento y como colorante. A los cerdos también les gustan las remolachas. -Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.=Sostenlo en tu mano y haz clic derecho para comértelo. Haga clic derecho en un animal para alimentarlo. -Beetroot Soup=Estofado de remolacha -Beetroot soup is a food item.=El estofado de remolacha es un alimento. -Premature Carrot Plant=Planta de zanahoria prematura -Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Las plantas de zanahoria son plantas que crecen en tierras de cultivo bajo la luz solar en 8 etapas, pero solo 4 etapas se pueden distinguir visualmente. En tierras de cultivo hidratadas, crecen un poco más rápido. Se pueden cosechar en cualquier momento, pero solo generarán ganancias cuando maduren. -Premature Carrot Plant (Stage @1)=Planta de zanahoria prematura (Etapa @1) -Mature Carrot Plant=Planta de zanahoria madura -Mature carrot plants are ready to be harvested for carrots. They won't grow any further.=Las plantas de zanahoria maduras están listas para ser cosechadas para zanahorias. No crecerán más. -Carrot=Zanahoria -Carrots can be eaten and planted. Pigs and rabbits like carrots.=Las zanahorias se pueden comer y plantar. A los cerdos y conejos les gustan las zanahorias. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Sostenlo en tu mano y haz clic derecho para comértelo. Colóquelo encima de las tierras de cultivo para plantar la zanahoria. Crece a la luz del sol y crece más rápido en tierras de cultivo hidratadas. Haga clic derecho en un animal para alimentarlo. -Golden Carrot=Zanahoria dorada -A golden carrot is a precious food item which can be eaten. It is really, really filling!=Una zanahoria dorada es un alimento precioso que se puede comer. ¡Es realmente, realmente abundante! -Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.=Las azadas son herramientas esenciales para el cultivo. Se utilizan para crear tierras de cultivo para plantar semillas en él. Las azadas también se pueden usar como armas muy débiles en caso de apuro. -Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.=Use la azada en un bloque cultivable (al hacer clic derecho) para convertirlo en tierras de cultivo. La tierra, los bloques de hierba y los caminos de hierba son bloques cultivables. Usar una azada en tierra gruesa la convierte en tierra. -Wood Hoe=Azada de madera -Stone Hoe=Azada de piedra -Iron Hoe=Azada de hierro -Golden Hoe=Azada de oro -Diamond Hoe=Azada de diamante -Melon Seeds=Semillas de sandía -Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.=Coloque las semillas de sandía en tierras de cultivo (que se pueden crear con una azada) para plantar un tallo de sandía. Los tallos de sandía crecen a la luz del sol y crecen más rápido en tierras de cultivo hidratadas. Cuando esté maduro, el tallo intentará cultivar un sandía a un lado. Haga clic derecho en un animal para alimentarlo con semillas de sandía. -Melon=Sandía -Grows into a melon stem which in turn grows melons. Chickens like melon seeds.=Crece en un tallo de sandía que a su vez produce melones. A las gallinas les gustan las semillas de sandía. -A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.=Un sandía es un bloque que se puede cultivar a partir de tallos de sandía, que a su vez se cultivan a partir de semillas de sandía. Se puede cosechar para rebanadas de sandía. -Premature Melon Stem=Tallo de sandía prematuro -Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.=Los tallos de sandía crecen en tierras de cultivo en 8 etapas. En tierras de cultivo hidratadas, el crecimiento es un poco más rápido. Los tallos de sandía maduros pueden cultivar melones. -Premature Melon Stem (Stage @1)=Tallo de sandía prematuro (Etapa @1) -Mature Melon Stem=Tallo de sandía maduro -A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.=Un tallo de sandía maduro intenta cultivar un sandía en uno de sus cuatro bloques adyacentes. Un sandía solo puede crecer sobre tierras de cultivo, tierra o un bloque de hierba. Cuando un sandía está al lado de un tallo, el tallo se dobla inmediatamente y se conecta al sandía. Mientras está conectado, un tallo de sandía no puede cultivar otro sandía. Tan pronto como se hayan eliminado todos los melones alrededor del tallo, pierde la conexión y está listo para cultivar otro sandía. -Melon Slice=Rodaja de sandía -This is a food item which can be eaten.=Este es un alimento que se puede comer. -Premature Potato Plant=Planta de patata prematura -Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Las plantas de patata son plantas que crecen en tierras de cultivo bajo la luz solar en 8 etapas, pero solo 4 etapas se pueden distinguir visualmente. En tierras de cultivo hidratadas, crecen un poco más rápido. Se pueden cosechar en cualquier momento, pero solo generarán ganancias cuando maduren. -Premature Potato Plant (Stage @1)=Planta de patata prematura (Etapa @1) -Mature Potato Plant=Planta de patata madura -Mature potato plants are ready to be harvested for potatoes. They won't grow any further.=Las plantas de patatas maduras están listas para ser cosechadas. No crecerán más. -Potato=Patata -Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.=Las patatas son alimentos que se pueden comer, cocinar en el horno y plantar. A los cerdos les gustan las patatas. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Sostenlo en tu mano y haz clic derecho para comértelo. Colóquelo encima de las tierras de cultivo para plantarlo. Crece a la luz del sol y crece más rápido en tierras de cultivo hidratadas. Haga clic derecho en un animal para alimentarlo. -Baked Potato=Patata cocida -Baked potatoes are food items which are more filling than the unbaked ones.=Las patatas cocidas son alimentos que llenan más que las que no están cocidas. -Poisonous Potato=Patata venenosa -This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.=Esta patata no se ve muy saludable. Puedes comerla para restablecer los puntos de hambre, pero hay un 60% de posibilidades de que te envenene brevemente. -Pumpkin Seeds=Semillas de calabaza -Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.=Crece en un tallo de calabaza que a su vez produce calabazas. A los pollos les gustan las semillas de calabaza. -Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.=Coloque las semillas de calabaza en tierras de cultivo (que se pueden crear con una azada) para plantar un tallo de calabaza. Los tallos de calabaza crecen a la luz del sol y crecen más rápido en tierras de cultivo hidratadas. Cuando está maduro, el tallo intenta cultivar una calabaza junto a él. Haga clic derecho en un animal para alimentarlo con semillas de calabaza. -Premature Pumpkin Stem=Tallo de calabaza prematuro -Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.=Los tallos de calabaza crecen en tierras de cultivo en 8 etapas. En tierras de cultivo hidratadas, el crecimiento es un poco más rápido. Los tallos de calabaza maduros pueden cultivar calabazas. -Premature Pumpkin Stem (Stage @1)=Tallo de calabaza prematuro (Etapa @1) -Mature Pumpkin Stem=Tallo maduro de calabaza -A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.=Un tallo maduro de calabaza intenta cultivar una calabaza en uno de sus cuatro bloques adyacentes. Una calabaza solo puede crecer sobre tierras de cultivo, tierra o un bloque de hierba. Cuando una calabaza está al lado de un tallo de calabaza, el tallo de la calabaza se dobla inmediatamente y se conecta a la calabaza. Un tallo de calabaza conectado no puede cultivar otra calabaza. Tan pronto como se hayan eliminado todas las calabazas alrededor del tallo, pierde la conexión y está lista para cultivar otra calabaza. -Faceless Pumpkin=Calabaza sin rostro -A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=Una calabaza sin rostro es un bloque decorativo. Se puede tallar con tijeras para obtener semillas de calabaza. -Pumpkin=Calabaza -A pumpkin can be worn as a helmet for fun, but it doesn't offer any protection. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=Una calabaza se puede usar como casco por diversión, pero no ofrece ninguna protección. Las calabazas crecen de tallos de calabaza, que a su vez crecen de semillas de calabaza. -Jack o'Lantern=Calabaza de Halloween -A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=La calabaza de Halloween es una decoración tradicional de Halloween hecha de una calabaza. Brilla intensamente. -Pumpkin Pie=Tarta de calabaza -A pumpkin pie is a tasty food item which can be eaten.=Un tarta de calabaza es un alimento sabroso que se puede comer. -Farmland=Tierra de cultivo -Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Las tierras de cultivo se utilizan para la agricultura, una superficie necesaria para plantar cultivos. Se crea cuando se usa una azada sobre tierra o un bloque similar. Las plantas pueden crecer en tierras de cultivo, pero lentamente. Las tierras de cultivo se convertirán en tierras de cultivo hidratadas (en las cuales las plantas crecen más rápido) cuando llueve o hay una fuente de agua cerca. Este bloque volverá a convertirse en tierra cuando aparezca un bloque sólido sobre él o un brazo de pistón se extienda sobre él. -Hydrated Farmland=Tierra de cultivo hidratada -Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Las tierras de cultivo hidratadas se usan en la agricultura, aquí es donde puedes plantar y cultivar algunas plantas. Se crea cuando las tierras de cultivo están bajo la lluvia o cerca del agua. Sin agua, este bloque se secará eventualmente. Este bloque volverá a convertirse en tierra cuando aparezca un bloque sólido sobre él o un brazo de pistón se extienda sobre él. -Wheat Seeds=Semillas de trigo -Grows into a wheat plant. Chickens like wheat seeds.=Crece en una planta de trigo. A las gallinas les gustan las semillas de trigo. -Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.=Coloque las semillas de trigo en tierras de cultivo (que se pueden crear con una azada) para plantar una planta de trigo. Crecen a la luz del sol y crecen más rápido en tierras de cultivo hidratadas. Haga clic derecho en un animal para alimentarlo con semillas de trigo. -Premature Wheat Plant=Planta de trigo prematuro -Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.=Las plantas de trigo prematuras crecen en tierras de cultivo bajo la luz solar en 8 etapas. En tierras de cultivo hidratadas, crecen más rápido. Se pueden cosechar en cualquier momento, pero solo generarán ganancias cuando maduren. -Premature Wheat Plant (Stage @1)=Planta de trigo prematuro (Etapa @1) -Mature Wheat Plant=Planta de trigo maduro -Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.=Las plantas maduras de trigo están listas para ser cosechadas, las semillas de trigo no crecerán más. -Wheat=Trigo -Wheat is used in crafting. Some animals like wheat.=El trigo se usa en la elaboración. A algunos animales les gusta el trigo. -Cookie=Galleta -Bread=Pan -Hay Bale=Fardo de heno -Hay bales are decorative blocks made from wheat.=Las balas de heno son bloques decorativos hechos de trigo. -To carve a face into the pumpkin, use the shears on the side you want to carve.=Para tallar una cara en la calabaza, use las tijeras en el lado que desea tallar. -Use the “Place” key on an animal to try to feed it wheat.=Use la tecla "Colocar" en un animal para tratar de alimentarlo con trigo. diff --git a/mods/ITEMS/mcl_farming/locale/mcl_farming.fr.tr b/mods/ITEMS/mcl_farming/locale/mcl_farming.fr.tr deleted file mode 100644 index 5ee1bcdfc..000000000 --- a/mods/ITEMS/mcl_farming/locale/mcl_farming.fr.tr +++ /dev/null @@ -1,99 +0,0 @@ -# textdomain: mcl_farming -Beetroot Seeds=Graines de Betterave -Grows into a beetroot plant. Chickens like beetroot seeds.=Pousse en bettrave. Les poulets aiment les graines de betterave -Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.=Placez les graines de betterave sur les terres agricoles (qui peuvent être créées avec une houe) pour planter un plant de betterave. Elles poussent au soleil et poussent plus vite sur les terres agricoles hydratées. Faites un clic droit sur un animal pour le nourrir de graines de betteraves. -Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Les plants de betteraves poussent sur les terres agricoles sous le soleil en 4 étapes. Sur les terres agricoles hydratées, elles poussent un peu plus vite. Elles peuvent être récoltées à tout moment mais ne rapporteront de bénéfices qu'à maturité. -Premature Beetroot Plant=Plant de Betterave Prématurée -Premature Beetroot Plant (Stage 1)=Plant de Betterave Prématurée (Etape 1) -Premature Beetroot Plant (Stage 2)=Plant de Betterave Prématurée (Etape 2) -Premature Beetroot Plant (Stage 3)=Plant de Betterave Prématurée (Etape 3) -Mature Beetroot Plant=Betterave Mature -A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.=Une betterave mature est une plante agricole prête à être récoltée pour une betterave et quelques graines de betterave. Elle ne grandira plus. -Beetroot=Betterave -Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.=Les betteraves sont à la fois utilisées comme aliment et comme ingrédient colorant. Les porcs aiment aussi les betteraves. -Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.=Tenez-le dans votre main et faites un clic droit pour le manger. Faites un clic droit sur un animal pour le nourrir. -Beetroot Soup=Soupe de Betterave -Beetroot soup is a food item.=La soupe de betterave est un aliment. -Premature Carrot Plant=Plant de Carrote Prématurée -Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Les plants de carotte sont des plantes qui poussent sur les terres agricoles sous la lumière du soleil en 8 étapes, mais seulement 4 étapes peuvent être distinguées visuellement. Sur les terres agricoles hydratées, elles poussent un peu plus vite. Ils peuvent être récoltés à tout moment mais ne rapporteront de bénéfices qu'à maturité. -Premature Carrot Plant (Stage @1)=Plant de Carrote Prématurée (Etape 1) -Mature Carrot Plant=Plant de Carotte Mature -Mature carrot plants are ready to be harvested for carrots. They won't grow any further.=Les plants de carottes matures sont prêts à être récoltés pour les carottes. Ils ne grandiront plus. -Carrot=Carrotte -Carrots can be eaten and planted. Pigs and rabbits like carrots.=Les carottes peuvent être mangées et plantées. Les cochons et les lapins comme les carottes. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Tenez-la dans votre main et faites un clic droit pour le manger. Placez-le au-dessus des terres agricoles pour planter la carotte. Elle pousse au soleil et pousse plus vite sur les terres agricoles hydratées. Faites un clic droit sur un animal pour le nourrir. -Golden Carrot=Carrot Dorée -A golden carrot is a precious food item which can be eaten. It is really, really filling!=Une carotte dorée est un aliment précieux qui peut être mangé. C'est vraiment, vraiment rassasiant! -Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.=Les houes sont des outils essentiels pour faire pousser des cultures. Ils sont utilisés pour créer des terres agricoles afin d'y planter des graines. Les houes peuvent également être utilisées comme armes très faibles à la rigueur. -Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.=Utilisez la houe sur un bloc cultivable (en cliquant dessus avec le bouton droit) pour le transformer en terre agricole. La saleté, les blocs d'herbe et les chemins d'herbe sont des blocs cultivables. L'utilisation d'une houe sur la terre grossière la transforme en terre. -Wood Hoe=Houe en Bois -Stone Hoe=Houe en Pierre -Iron Hoe=Houe en Fer -Golden Hoe=Houe en Or -Diamond Hoe=Houe en Diamant -Melon Seeds=Graine de Pastèque -Grows into a melon stem which in turn grows melons. Chickens like melon seeds.=Se développe en une tige de pastèque qui à son tour forme des pastèques. Les poulets aiment les graines de pastèque. -Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.=Placez les graines de pastèque sur les terres agricoles (qui peuvent être créées avec une houe) pour planter une tige de pastèque. Les tiges de pastèque poussent au soleil et se développent plus rapidement sur les terres agricoles hydratées. À maturité, la tige tentera de faire pousser une pastèque sur le côté. Faites un clic droit sur un animal pour le nourrir de graines de pastèque. -Melon=Pastèque -A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.=Une pastèque est un bloc qui peut être cultivé à partir de tiges de pastèque, qui à leur tour sont cultivées à partir de graines de pastèque. Elle peut être récoltée pour des tranches de pastèque. -Premature Melon Stem=Tige de Pastèque Prématurée -Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.=Les tiges de pastèque poussent sur les terres agricoles en 8 étapes. Sur les terres agricoles hydratées, la croissance est un peu plus rapide. Les tiges de pastèque matures sont capables de faire pousser des pastèques. -Premature Melon Stem (Stage @1)=Tige de Pastèque Prématurée (Etape @1) -Mature Melon Stem=Tige de Pastèque Mature -A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.=Une tige de pastèque mature tente de faire pousser un pastèque sur l'un de ses quatre blocs adjacents. Une pastèque ne peut pousser que sur des terres agricoles, de la terre ou un bloc d'herbe. Lorsqu'une pastèque est à côté d'une tige de pastèque, la tige de pastèque se plie immédiatement et se connecte au melon. Lorsqu'elle est connectée, une tige de pastèque ne peut pas faire pousser une autre pastèque. Dès que tous les pastèques autour de la tige ont été supprimés, elle perd la connexion et est prêt à faire pousser une autre pastèque. -Melon Slice=Tranche de Pastèque -This is a food item which can be eaten.=Il s'agit d'un aliment qui peut être mangé. -Premature Potato Plant=Plant de Pomme de Terre Prématuré -Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Les plants de pommes de terre sont des plants qui poussent sur les terres agricoles sous la lumière du soleil en 8 étapes, mais seulement 4 étapes peuvent être distinguées visuellement. Sur les terres agricoles hydratées, elles poussent un peu plus vite. Ils peuvent être récoltés à tout moment mais ne rapporteront de bénéfices qu'à maturité. -Premature Potato Plant (Stage @1)=Plant de pomme de terre prématuré (Etape @1) -Mature Potato Plant=Plant de Pomme de Terre Mature -Mature potato plants are ready to be harvested for potatoes. They won't grow any further.=Les plants de pommes de terre matures sont prêts à être récoltés pour les pommes de terre. Ils ne grandiront plus. -Potato=Pomme de terre -Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.=Les pommes de terre sont des aliments qui peuvent être consommés, cuits au four et plantés. Des porcs comme des pommes de terre. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Tenez-le dans votre main et faites un clic droit pour le manger. Placez-le au-dessus des terres agricoles pour le planter. Il pousse au soleil et pousse plus vite sur les terres agricoles hydratées. Faites un clic droit sur un animal pour le nourrir. -Baked Potato=Pomme de Terre au Four -Baked potatoes are food items which are more filling than the unbaked ones.=Les pommes de terre au four sont des aliments qui sont plus copieux que ceux non cuits. -Poisonous Potato=Pomme de Terre Toxique -This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.=Cette pomme de terre n'a pas l'air trop saine. Vous pouvez le manger pour restaurer des points de faim, mais il y a 60% de chances qu'il vous empoisonne brièvement. -Pumpkin Seeds=Graines de Citrouille -Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.=Pousse dans une tige de citrouille qui à son tour fait pousser des citrouilles. Les poulets aiment des graines de citrouille. -Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.=Placez les graines de citrouille sur les terres agricoles (qui peuvent être créées avec une houe) pour planter une tige de citrouille. Les tiges de citrouille poussent au soleil et poussent plus vite sur les terres agricoles hydratées. À maturité, la tige tente de faire pousser une citrouille à côté d'elle. Faites un clic droit sur un animal pour le nourrir de graines de citrouille. -Premature Pumpkin Stem=Tige de Citrouille Prématurée -Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.=Les tiges de citrouille poussent sur les terres agricoles en 8 étapes. Sur les terres agricoles hydratées, la croissance est un peu plus rapide. Les tiges de citrouille matures peuvent faire pousser des citrouilles. -Premature Pumpkin Stem (Stage @1)=Tige de Citrouille Prématurée (Etape @1) -Mature Pumpkin Stem=Tige de Citrouille Mature -A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.=Une tige de citrouille mature tente de faire pousser une citrouille dans l'un de ses quatre blocs adjacents. Une citrouille ne peut pousser que sur des terres agricoles, de la terre ou un bloc d'herbe. Lorsqu'une citrouille est à côté d'une tige de citrouille, la tige de citrouille se plie immédiatement et se connecte à la citrouille. Une tige de citrouille connectée ne peut pas faire pousser une autre citrouille. Dès que toutes les citrouilles autour de la tige ont été retirées, elle perd la connexion et est prête à faire pousser une autre citrouille. -Faceless Pumpkin=Citrouille sans visage -A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=Une citrouille sans visage est un bloc décoratif. Il peut être sculpté avec une cisaille pour obtenir des graines de citrouille. -Pumpkin=Citrouille -A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=Une citrouille peut être portée comme un casque. Les citrouilles poussent à partir de tiges de citrouille, qui à leur tour poussent à partir de graines de citrouille. -Jack o'Lantern=Citrouille-lanterne -A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=Une citrouille-lanterne est une décoration traditionnelle d'Halloween à base de citrouille. Il brille de mille feux. -Pumpkin Pie=Tarte à la Citrouille -A pumpkin pie is a tasty food item which can be eaten.=Une tarte à la citrouille est un aliment savoureux qui peut être mangé. -Farmland=Terres Agricoles -Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Les terres agricoles sont utilisées pour l'agriculture, une surface nécessaire pour planter des cultures. Il est créé lorsqu'une houe est utilisée sur de la terre ou un bloc similaire. Les plantes peuvent pousser sur les terres agricoles, mais lentement. Les terres agricoles deviendront des terres agricoles hydratées (sur lesquelles les plantes poussent plus rapidement) lorsqu'il pleut ou lorsqu'une source d'eau est à proximité. Ce bloc redeviendra de la terre lorsqu'un bloc solide apparaît au-dessus ou qu'un bras de piston s'étend au-dessus. -Hydrated Farmland=Terres Agricoles Hydratées -Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Les terres agricoles hydratées sont utilisées dans l'agriculture, c'est là que vous pouvez planter et faire pousser certaines plantes. Il est créé lorsque les terres agricoles sont sous la pluie ou près de l'eau. Sans eau, ce bloc finira par se dessécher. Ce bloc redeviendra de la terre lorsqu'un bloc solide apparaît au-dessus ou qu'un bras de piston s'étend au-dessus. -Wheat Seeds=Graines de blé -Grows into a wheat plant. Chickens like wheat seeds.=Se transforme en blé. Les poulets aiment les graines de blé. -Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.=Placez les graines de blé sur les terres agricoles (qui peuvent être créées avec une houe) pour planter une plante de blé. Ils poussent au soleil et poussent plus vite sur les terres agricoles hydratées. Faites un clic droit sur un animal pour le nourrir de graines de blé. -Premature Wheat Plant=Plant de Blé Prématurée -Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.=Les plants de blé prématurés poussent sur les terres agricoles sous la lumière du soleil en 8 étapes. Sur les terres agricoles hydratées, ils croissent plus rapidement. Ils peuvent être récoltés à tout moment mais ne rapporteront de bénéfices qu'à maturité. -Premature Wheat Plant (Stage @1)=Plant de blé prématurée (Etape @1) -Mature Wheat Plant=Plant de Blé Maturée -Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.=Les plants de blé matures sont prêts à être récoltés pour le blé et les graines de blé. Ils ne grandiront plus. -Wheat=Blé -Wheat is used in crafting. Some animals like wheat.=Le blé est utilisé dans l'artisanat. Certains animaux aiment le blé. -Cookie=Cookie -Bread=Pain -Hay Bale=Balle de Foin -Hay bales are decorative blocks made from wheat.=Les balles de foin sont des blocs décoratifs en blé. -To carve a face into the pumpkin, use the shears on the side you want to carve.=Pour sculpter un visage dans la citrouille, utilisez les cisailles du côté que vous souhaitez sculpter. -Use the “Place” key on an animal to try to feed it wheat.=Utilisez la touche "Placer" sur un animal pour essayer de le nourrir de blé. -Grows on farmland=Pousse sur les terres agricoles -Turns block into farmland=Transforme un bloc en terres agricoles -60% chance of poisoning=60% de chances d'empoisonnement -Surface for crops=Surface pour les cultures -Can become wet=Peut devenir humide -Uses: @1=Utilisations: @1 diff --git a/mods/ITEMS/mcl_farming/locale/mcl_farming.pl.tr b/mods/ITEMS/mcl_farming/locale/mcl_farming.pl.tr deleted file mode 100644 index 3f8d0fc6c..000000000 --- a/mods/ITEMS/mcl_farming/locale/mcl_farming.pl.tr +++ /dev/null @@ -1,100 +0,0 @@ - -# textdomain: mcl_farming -Beetroot Seeds=Nasiona buraka -Grows into a beetroot plant. Chickens like beetroot seeds.=Wyrasta w roślinę buraka. Kurczaki lubią nasiona buraka. -Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.=Postaw nasiona buraka na polu uprawnym (możesz zaorać ziemię motyką) aby zasadzić roślinę buraka. Wyrasta ona w słońcu i rośnie szybciej na nawodnionym polu uprawnym. Kliknij prawym przyciskiem na zwierzę, aby je nakarmić nasionami buraka. -Premature Beetroot Plant (Stage 1)=Niedojrzała roślina buraka (etap 1) -Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Rośliny buraka są roślinami rosnącymi na oświetlonym polu uprawnym w czterech etapach. Na nawodnionym polu rosną nieco szybciej. Mogą być zebrane w dowolnym momencie ale będzie to zyskowne tylko jeśli są dojrzałe. -Premature Beetroot Plant=Niedojrzała roślina buraka -Premature Beetroot Plant (Stage 2)=Niedojrzała roślina buraka (etap 2) -Premature Beetroot Plant (Stage 3)=Niedojrzała roślina buraka (etap 3) -Mature Beetroot Plant=Dojrzała roślina buraka -A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.=Dojrzała roślina buraka jest rośliną hodowlaną, która jest gotowa do zebrania w celu uzyskania buraków i nasion. Nie urośnie już więcej. -Beetroot=Burak -Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.=Buraki są używane zarówno jako przedmioty jadalne jak i jako składniki do farb. -Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.=Weź je do ręki i kliknij prawy przycisk myszy by je zjeść. -Beetroot Soup=Zupa z buraków -Beetroot soup is a food item.=Zupa z buraków to przedmiot jadalny. -Premature Carrot Plant=Niedojrzała roślina marchwi -Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Rośliny marchwi są roślinami rosnącymi na polach uprawnych w słońcu w 8 etapach, ale tylko 4 etapy mogą być odróżnione wizualnie. Na nawodnionych polach uprawnych rosną one nieco szybciej. -Premature Carrot Plant (Stage @1)=Niedojrzała roślina marchwi (etap @1) -Mature Carrot Plant=Dojrzała roślina marchwi -Mature carrot plants are ready to be harvested for carrots. They won't grow any further.=Dojrzałe rośliny marchwi są gotowe do zebrania w celu uzyskania marchwi. -Carrot=Marchew -Carrots can be eaten and planted. Pigs and rabbits like carrots.=Marchewki mogą być zjedzone bądź zasadzone. Świnie i króliki lubią marchwie. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Weź ją do ręki i kliknij prawy przycisk myszy by ją zjeść. Postaw ją na górze pola uprawnego aby ją zasadzić. Rośnie w słońcu i rośnie szybciej na nawodnionym polu. Kliknij prawym przyciskiem na zwierzę aby je nakarmić. -Golden Carrot=Złota marchew -A golden carrot is a precious food item which can be eaten. It is really, really filling!=Złota marchewka to cenny przedmiot jadalny. Jest bardzo, bardzo sycąca! -Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.=Motyki są niezbędnymi narzędziami do uprawiania roślin. Są używane do tworzenia pól uprawnych na których można sadzić nasiona. Motyki mogą być również użyte jako bardzo słabe bronie w razie konieczności. -Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.=Użyj motyki na bloku który można zaorać (klikając go prawym przyciskiem), aby zamienić go w pole uprawne. Ziemia, bloki trawy i ścieżki trawy są blokami, które można zaorać. Korzystanie z motyki na twardej ziemi zamienia ją w ziemię. -Wood Hoe=Drewniana motyka -Stone Hoe=Kamienna motyka -Iron Hoe=Żelazna motyka -Golden Hoe=Złota motyka -Diamond Hoe=Diamentowa motyka -Melon Seeds=Nasiona melona -Grows into a melon stem which in turn grows melons. Chickens like melon seeds.=Wyrasta z nich łodyga melona, z której z kolei wyrastają melony. Kurczaki lubią nasiona melona. -Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.=Umieść nasiona melona na polu uprawnym (ziemię można zaorać motyką), aby zasadzić łodygę melona. Łodygi melona rosną w słońcu i rosną szybciej na nawodnionym polu. Gdy są dojrzałe, łodygi melona będą próbować umieścić melon na boku. Kliknij prawym na zwierzę aby nakarmić je nasionami melona. -Melon=Melon -A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.=Melon jest blokiem, który wyrasta z łodygi melona, która z kolei wyrasta z nasion melona. -Premature Melon Stem=Niedojrzała łodyga melona. -Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.=Łodygi melona rosną na polu uprawnym w 8 etapach. Na nawodnionym polu rosną nieco szybciej. Dojrzałe łodygi melona są w stanie tworzyć melony. -Premature Melon Stem (Stage @1)=Niedojrzała łodyga melona (etap @1) -Mature Melon Stem=Dojrzała łodyga melona -A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.=Dojrzała łodyga melona próbuje stworzyć melona na jednym z czterech sąsiednich bloków. Melon może wyrosnąć tylko na polu uprawnym, ziemi lub bloku trawy. Gdy melon jest obok łodygi melona, łodyga natychmiast się zgina i łączy z melonem. Dopóki jest połączona, nie może z niej wyrosnąć inny melon. Jak tylko wszystkie melony wokół łodygi są usunięte traci ona połączenie i może z niej wyrosnąć następny melon. -Melon Slice=Kawałek melona -This is a food item which can be eaten.=Jest to przedmiot, który można zjeść. -Premature Potato Plant=Niedojrzała roślina ziemniaka -Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Rośliny ziemniaka są roślinami rosnącymi w słońcu w 8 etapach, ale tylko 4 są rozróżnialne wizualnie. Na nawodnionym polu rosną nieco szybciej. Mogą być zebrane w dowolnym momencie, ale jest to zyskowne tylko gdy są dojrzałe. -Premature Potato Plant (Stage @1)=Niedojrzała roślina ziemniaka (Etap @1) -Mature Potato Plant=Dojrzała roślina ziemniaka -Mature potato plants are ready to be harvested for potatoes. They won't grow any further.=Dojrzałe rośliny ziemniaka są gotowe do zebrania. Nie będą już rosnąć. -Potato=Ziemniak -Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.=Ziemniaki to przedmioty, które można zjeść, upiec w piecu i zasadzić. Świnie lubią ziemniaki. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Weź je do ręki i kliknij prawy by je zjeść. Postaw je na polu uprawnym by je zasadzić. Rosną w słońcu i rosną szybciej na nawodnionym polu. Kliknij prawym na zwierzę by je nakarmić. -Baked Potato=Upieczony ziemniak -Baked potatoes are food items which are more filling than the unbaked ones.=Upieczone ziemniaki są przedmiotami jadalnymi, które są bardziej sycące niż nieupieczone ziemniaki. -Poisonous Potato=Zatruty ziemniak -This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.=Ten ziemniak nie wygląda na zdrowy. Możesz go zjeść aby odzyskać punkty głodu, ale jest 60% szans, że chwilowo cię zatruje. -Pumpkin Seeds=Nasiona dyni -Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.=Wyrasta z nich łodyga dyni, z której z kolei wyrastają dynie. Kurczaki lubią nasiona dyni. -Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.=Postaw nasiona dyni na polu uprawnym (możesz zaorać ziemię motyką) aby zasadzić łodygę dyni. Łodygi dyni rosną w słońcu i rosną szybciej na nawodnionym polu. Gdy są dojrzałe, próbują one postawić dynię na jednym z sąsiednich pól. -Premature Pumpkin Stem=Niedojrzała łodyga dyni -Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.=Łodygi dyni rosną w 8 etapach. Na nawodnionym polu rośnie nieco szybciej. Z dojrzałych łodyg dyni są w stanie wyrosnąć dynie. -Premature Pumpkin Stem (Stage @1)=Niedojrzała łodyga dyni (etap @1) -Mature Pumpkin Stem=Dojrzała łodyga dyni -A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.=Dojrzała łodyga dyni próbuje postawić dynię na jednym z czterech sąsiadujących bloków. Dynia może wyrosnąć tylko na polu uprawnym, ziemi lub bloku trawy. Gdy dynia jest obok łodygi dyni, ugina się ona i łączy z dynią. Z połączonej łodygi dyni nie może wyrosnąć kolejna dynia. Jak tylko wszystkie pobliskie dynie są usunięte, traci ona połączenie i może z niej wyrosnąć następna dynia. -Faceless Pumpkin=Dynia bez twarzy -A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=Dynia bez twarzy jest blokiem dekoracyjnym. Może być pokrojona nożycami aby otrzymać nasiona dyni. -Pumpkin=Dynia -A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=Dynia może być noszona jak hełm. Dynie rosną z łodygi dyni, która z kolei rośnie z nasion dyni. -Jack o'Lantern=Świecąca dynia -A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=Świecąca dynia jest tradycyjną dekoracją Halloween wykonaną z dyni, która jasno świeci. -Pumpkin Pie=Ciasto z dyni -A pumpkin pie is a tasty food item which can be eaten.=Ciasto z dyni jest pysznym przedmiotem, który można zjeść. -Farmland=Pole uprawne -Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Pole uprawne jest wykorzystywane do rolnictwa. Jest to niezbędne powierzchnia do sadzenia roślin. Jest tworzona gdy motyka jest użyta na ziemi lub podobnym bloku. Rośliny mogą rosnąć na polu uprawnym, ale powoli. Pola uprawne zamienią się w nawodnione pola uprawne (na których rośliny rosną szybciej) kiedy spadnie deszcz lub źródło wody jest w pobliżu. Ten blok zamieni się w ziemię gdy stały blok pojawi się nad nim, lub ramię tłoku będzie nad nim wysunięte. -Hydrated Farmland=Nawodnione pole uprawne -Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Nawodnione pole uprawne jest używane w rolnictwie, do sadzenia roślin. Jest utworzone gdy na pole uprawne spadnie deszcz lub w pobliżu jest woda. Bez wody blok ten wyschnie po jakimś czasie. Ten blok zamieni się w ziemię gdy stały blok pojawi się nad nim, lub ramię tłoku będzie nad nim wysunięte. -Wheat Seeds=Nasiona zboża -Grows into a wheat plant. Chickens like wheat seeds.=Wyrasta w zboże. Kurczaki lubią nasiona zboża. -Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.=Postaw nasiona zboża na polu uprawnym (możesz zaorać ziemię motyką) aby zasadzić zboże. Wyrasta ono w słońcu i rośnie szybciej na nawodnionym polu uprawnym. Kliknij prawym przyciskiem na zwierzę, aby je nakarmić. -Premature Wheat Plant=Niedojrzałe zboże -Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.=Zboże rośnie w słońcu na polu uprawnym w 8 etapach. Na nawodnionym polu rośnie nieco szybciej. Może być zebrane w dowolnym momencie ale będzie to zyskowne tylko jeśli jest dojrzałe. -Premature Wheat Plant (Stage @1)=Niedojrzałe zboże (etap @1) -Mature Wheat Plant=Dojrzałe zboże -Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.=Dojrzałe zboże jest gotowe by zostać zebrane w celu pozyskania nasion zboża. Nie urośnie ono więcej. -Wheat=Zboże -Wheat is used in crafting. Some animals like wheat.=Zboże jest używane do wytwarzania. Niektóre zwierzęta lubią zboże. -Cookie=Ciastko -Bread=Chleb -Hay Bale=Bela siana -Hay bales are decorative blocks made from wheat.=Bele siana są blokami dekoracyjnymi wytwarzanymi ze zboża. -To carve a face into the pumpkin, use the shears on the side you want to carve.=Aby wyrzeźbić twarz w dyni, użyj nożyc na boku w którym chcesz wyrzeźbić. -Use the “Place” key on an animal to try to feed it wheat.=Użyj przycisku "Umieść" na zwierzęciu, aby spróbować je nakarmić. -Grows on farmland=Rośnie na polu uprawnym -Turns block into farmland=Zamienia blok w pole uprawne -60% chance of poisoning=60% szans na zatrucie -Surface for crops=Podłoże pod uprawy -Can become wet=Może się zmoczyć -Uses: @1=Wykorzystuje: @1 diff --git a/mods/ITEMS/mcl_farming/locale/mcl_farming.ru.tr b/mods/ITEMS/mcl_farming/locale/mcl_farming.ru.tr deleted file mode 100644 index f587fb943..000000000 --- a/mods/ITEMS/mcl_farming/locale/mcl_farming.ru.tr +++ /dev/null @@ -1,99 +0,0 @@ -# textdomain: mcl_farming -Beetroot Seeds=Семена свёклы -Grows into a beetroot plant. Chickens like beetroot seeds.=Вырастают на свёкле. Куры обожают свекольные семена. -Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.=Положите семена свёклы на грядку (которую можно создать при помощи мотыги), чтобы посадить свёклу. Они прорастают при солнечном свете и растут быстрее на увлажнённой почке. Кликните правой по животному, чтобы накормить его семенами свёклы. -Premature Beetroot Plant (Stage 1)=Рассада молодой свёклы (стадия 1) -Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Свёкла растёт в 4 стадии на грядках под действием солнечного света. На увлажнённой грядке процесс пойдёт чуть быстрее. Собирать урожай можно на любой стадии, но выгода будет только при сборе созревших экземпляров. -Premature Beetroot Plant=Рассада молодой свёклы -Premature Beetroot Plant (Stage 2)=Рассада молодой свёклы (стадия 2) -Premature Beetroot Plant (Stage 3)=Рассада молодой свёклы (стадия 3) -Mature Beetroot Plant=Созревшая свёкла -A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.=Созревшая свёкла это культивируемое растение, с которого уже можно собирать урожай свёклы и некоторое количество свекольных семян. Дальше расти она уже не будет. -Beetroot=Свёкла -Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.=Свёкла это еда и ингредиент для красителя. Свёклу также очень любят свиньи. -Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.=Чтобы съесть, кликните правой, держа её в руке. Или кликните правой по животному, чтобы покормить его. -Beetroot Soup=Борщ -Beetroot soup is a food item.=Борщ можно есть, он съедобен. -Premature Carrot Plant=Рассада молодой моркови -Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Морковь растёт в 8 стадий на грядках под действием солнечного света, но визуально различить можно только 4 стадии. На увлажнённой грядке рост идёт чуть быстрее. Собирать урожай можно на любой стадии, но выгода будет только при сборе созревших экземпляров. -Premature Carrot Plant (Stage @1)=Рассада молодой моркови (стадия @1) -Mature Carrot Plant=Созревшая морковь -Mature carrot plants are ready to be harvested for carrots. They won't grow any further.=Созревшая морковь готова к сбору. Дальше расти она уже не будет. -Carrot=Морковь -Carrots can be eaten and planted. Pigs and rabbits like carrots.=Морковь можно есть и садить. Свиньи и кролики очень любят морковь. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Чтобы съесть, кликните правой, держа её в руке. Или поместите её на грядку, чтобы посадить морковь. Она растёт под действием солнечного света, на влажных грядках процесс идёт быстрее. Или кликните правой по животному, чтобы покормить его. -Golden Carrot=Золотая морковь -A golden carrot is a precious food item which can be eaten. It is really, really filling!=Золотая морковь это изысканный продуктовый предмет, которые можно есть. Она отлично, отлично утоляет голод! -Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.=Мотыга это инструмент, необходимый для выращивания урожая. Она используется для создания грядок, на которые потом можно высадить семена. В случае необходимости мотыгу можно использовать и в качестве слабого оружия. -Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.=Примените мотыгу к культивируемому блоку (кликнув правой по нему), чтобы превратить его в грядку. Грязь, травяные блоки и тропинки это культивируемые блоки. Разрыхлив мотыгой грубую грязь, вы получите из её обыкновенную грязь. -Wood Hoe=Деревянная мотыга -Stone Hoe=Каменная мотыга -Iron Hoe=Железная мотыга -Golden Hoe=Золотая мотыга -Diamond Hoe=Алмазная мотыга -Melon Seeds=Семена дыни -Grows into a melon stem which in turn grows melons. Chickens like melon seeds.=Из них вырастают дыневые стебли, из которых, в свою очередь, вырастают дыни. Семена дыни любят куры. -Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.=Положите семена дыни на грядку (которую можно создать при помощи мотыги), чтобы посадить дыню. Дыневые стебли прорастают при солнечном свете, они растут быстрее на увлажнённой почке. На боку вызревшего стебля будет пытаться расти дыня. Кликните правой по животному, чтобы накормить его дыневыми семенами. -Melon=Дыня -A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.=Дыня это блок, который может расти на дыневом стебле, выросшем из семян дыни. -Premature Melon Stem=Созревший дыневый стебель -Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.=Стебель дыни растёт на грядке в 8 стадий. На увлажнённой грядке рост происходит немного быстрее. На созревших стеблях могут расти дыни. -Premature Melon Stem (Stage @1)=Молодой стебель дыни (стадия @1) -Mature Melon Stem=Созревший дыневый стебель -A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.=Зрелый стебель дыни пытается вырастить дыню на одном из четырех соседних блоков. Дыня может расти только на грядках, грязи или на травяном блоке. Когда дыня находится рядом со стеблем, он сразу же изгибается и соединяется с ней. При этом стебель не может выращивать другую дыню. И только когда все дыни вокруг стебля убраны, он будет готов вырастить другую дыню. -Melon Slice=Кусок дыни -This is a food item which can be eaten.=Это продуктовый предмет, его можно есть. -Premature Potato Plant=Молодой картофель -Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=Картофель растёт в 8 стадий на грядках под действием солнечного света, но визуально различить можно только 4 стадии. На увлажнённой грядке рост идёт чуть быстрее. Собирать урожай можно на любой стадии, но выгода будет только при сборе созревших экземпляров. -Premature Potato Plant (Stage @1)=Саженец молодого картофеля (стадия @1) -Mature Potato Plant=Созревший картофель -Mature potato plants are ready to be harvested for potatoes. They won't grow any further.=Созревший картофель готов к сбору. Дальше расти он уже не будет. -Potato=Картофель -Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.=Картофель это продуктовый предмет, его можно есть, готовить в печи, а также садить. Картофель любят свиньи. -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=Чтобы съесть, кликните правой, держа его в руке. Или поместите его на грядку, чтобы посадить картофель. Он растёт под действием солнечного света, на влажных грядках процесс идёт быстрее. Или кликните правой по животному, чтобы покормить его. -Baked Potato=Печёный картофель -Baked potatoes are food items which are more filling than the unbaked ones.=Печёный картофель это продуктовый предмет, который насыщает лучше, чем сырой картофель. -Poisonous Potato=Ядовитый картофель -This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.=Этот картофель вреден для здоровья. Его можно есть для восстановления очков голода, но с вероятностью 60% он вас ненадолго отравит. -Pumpkin Seeds=Семена тыквы -Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.=Из них вырастают тыквенный стебель, на котором, в свою очередь, растут тыквы. -Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.=Положите семена тыквы на грядку (которую можно создать при помощи мотыги), чтобы посадить тыкву. Тыквенные стебли прорастают при солнечном свете, они растут быстрее на увлажнённой почке. Когда стебель созреет, то попытается вырастить тыкву рядом с собой. Кликните правой по животному, чтобы накормить его тыквенными семенами. -Premature Pumpkin Stem=Созревший тыквенный стебель -Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.=Стебель тыквы растёт на грядке в 8 стадий. На увлажнённой грядке рост происходит немного быстрее. На созревших стеблях могут расти тыквы. -Premature Pumpkin Stem (Stage @1)=Молодой стебель тыквы (стадия @1) -Mature Pumpkin Stem=Созревший тыквенный стебель -A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.=Зрелый стебель тыквы пытается вырастить тыкву на одном из четырех соседних блоков. Тыква может расти только на грядках, грязи или на травяном блоке. Когда тыква находится рядом со стеблем, он сразу же изгибается и соединяется с ней. При этом стебель не может выращивать другую тыкву. И только когда все тыквы вокруг стебля убраны, он будет готов вырастить другую тыкву. -Faceless Pumpkin=Безликая тыква -A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=Безликая тыква это декоративный блок. Его можно разрезать ножницами для получения семян тыквы. -Pumpkin=Тыква -A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=Тыкву можно носить как шлем. Тыквы растут из тыквенных стеблей, которые растут из семян тыквы. -Jack o'Lantern=Светильник Джека -A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=Светильник Джека это традиционное украшение на Хеллоуин, изготавливаемое из тыквы. Он ярко светит. -Pumpkin Pie=Тыквенный пирог -A pumpkin pie is a tasty food item which can be eaten.=Тыквенный пирог это вкусный продуктовый предмет, который можно съесть. -Farmland=Грядка -Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Грядка нужна для земледелия, она представляет собой поверхность для высадки культур. Он создается при применении мотыги к грязи и тому подобным блокам. Растения могут расти на грядках, но медленно. Грядки превратятся в увлажнённые грядки, если пойдёт дождь, либо если поблизости есть источник воды. Этот блок превратится обратно в грязь, если поместить на него твёрдый блок, а также под действием поршневого рычага. -Hydrated Farmland=Увлажнённая грядка -Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=Увлажнённая грядка нужна для земледелия, на ней вы можете выращивать некоторые растения. Она создается, когда обыкновенная грядка попадает под дождь, либо рядом есть источник воды. Без воды этот блок рано или поздно высохнет. Увлажнённая грядка превратится обратно в грязь, если поместить на неё твёрдый блок, либо она попадёт под действие поршневого рычага. -Wheat Seeds=Семена пшеницы -Grows into a wheat plant. Chickens like wheat seeds.=Вырастают в пшеницу. Семена пшеницы любят куры. -Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.=Положите семена пшеницы на грядку (которую можно создать при помощи мотыги), чтобы посадить пшеницу. Семена растут при солнечном свете, их рост происходит быстрее на увлажнённой почке. Кликните правой по животному, чтобы накормить его семенами пшеницы. -Premature Wheat Plant=Ростки молодой пшеницы -Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.=Молодая пшеница растёт на грядке под действием солнечного света за 8 стадий. На увлажнённой грядке она растёт быстрее. Собирать урожай можно на любой стадии, но выгода будет только при сборе созревших экземпляров. -Premature Wheat Plant (Stage @1)=Ростки молодой пшеницы (стадия @1) -Mature Wheat Plant=Зрелая пшеница -Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.=Зрелая пшеница готова к сбору сена и семян, дальше расти она уже не будет. -Wheat=Пшеница -Wheat is used in crafting. Some animals like wheat.=Пшеницы используется для крафтинга. Некоторые животные любят пшеницу. -Cookie=Печенье -Bread=Хлеб -Hay Bale=Стог сена -Hay bales are decorative blocks made from wheat.=Стог сена - декоративный блок, сделанный из пшеницы. -To carve a face into the pumpkin, use the shears on the side you want to carve.=Чтобы вырезать лицо на тыкве, примените ножницы к выбранной стороне тыквы. -Use the “Place” key on an animal to try to feed it wheat.=Нажмите клавишу “Разместить” на животном, чтобы попытаться покормить его пшеницей. -Grows on farmland=Прорастает(ют) на грядке -Turns block into farmland=Превращает блоки в грядки -60% chance of poisoning=Вероятность отравления: 60% -Surface for crops=Поверхность для культур -Can become wet=Может намокать -Uses: @1=Выдерживает: @1 использований(е,я) diff --git a/mods/ITEMS/mcl_farming/locale/mcl_farming.zh_TW.tr b/mods/ITEMS/mcl_farming/locale/mcl_farming.zh_TW.tr deleted file mode 100644 index 7017f7852..000000000 --- a/mods/ITEMS/mcl_farming/locale/mcl_farming.zh_TW.tr +++ /dev/null @@ -1,99 +0,0 @@ -# textdomain: mcl_farming -Beetroot Seeds=甜菜種子 -Grows into a beetroot plant. Chickens like beetroot seeds.=長成甜菜根。雞喜歡甜菜種子。 -Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.=將甜菜種子放在農田上(可以用鋤頭創造)種植甜菜。它們在陽光下生長,在有水分的農田上生長更快。右鍵點擊一個動物來餵牠甜菜種子。 -Premature Beetroot Plant (Stage 1)=未熟的甜菜植物(第1階段) -Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=甜菜根植物是在農田裡陽光下生長的植物,分為4個階段。在有水分的農田裡,它們生長得更快一些。它們可以在任何時候被收割,但只有在成熟時才會產生利潤。 -Premature Beetroot Plant=未熟的甜菜 -Premature Beetroot Plant (Stage 2)=未熟的甜菜(第2階段) -Premature Beetroot Plant (Stage 3)=未熟的甜菜(第3階段) -Mature Beetroot Plant=成熟的甜菜 -A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.=成熟的甜菜是一種隨時可以收穫甜菜根和一些甜菜種子的植物。它不會再增長了。 -Beetroot=甜菜根 -Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.=甜菜根既用作食品又用作染料成分。豬也喜歡甜菜根。 -Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.=把它拿在手裡,右鍵點擊以吃掉它。右鍵點擊一個動物來餵牠。 -Beetroot Soup=甜菜根湯 -Beetroot soup is a food item.=甜菜根湯是一種食物。 -Premature Carrot Plant=成長中的胡蘿蔔 -Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=胡蘿蔔是在農田中陽光下生長的植物,分為8個階段,但只有4個階段可以從視覺上區​​分。在水分充足的農田裡,它們生長得更快一些。它們可以在任何時候收割,但只有在成熟時才會有收益。 -Premature Carrot Plant (Stage @1)=成長中的胡蘿蔔(第@1階段) -Mature Carrot Plant=成熟的胡蘿蔔 -Mature carrot plants are ready to be harvested for carrots. They won't grow any further.=成熟的胡蘿蔔是一種隨時可以收穫胡蘿蔔的植物。它不會再增長了。 -Carrot=胡蘿蔔 -Carrots can be eaten and planted. Pigs and rabbits like carrots.=胡蘿蔔既可以吃又可以種植。豬和兔子都喜款胡蘿蔔。 -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=把它拿在手裡,右鍵點擊以吃掉它;把它放置在農田上種植它。在水分充足的農田裡,它們生長得更快一些。右鍵點擊一個動物來餵牠。 -Golden Carrot=金胡蘿蔔 -A golden carrot is a precious food item which can be eaten. It is really, really filling!=金胡蘿蔔是一種可以吃的珍貴食品。它真的非常、非常的有營養! -Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.=鋤頭是種植農作物的基本工具。它們被用來開闢農田,以便在上面種植種子。在緊要關頭,鋤頭也可以作為非常薄弱的​​武器使用。 -Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.=在可耕地塊上使用鋤頭(通過右鍵點擊),將其變成農田。泥土、草塊和草路都是可耕地塊。在粗泥上使用鋤頭可以將其變成泥土。 -Wood Hoe=木鋤 -Stone Hoe=石鋤 -Iron Hoe=鐵鋤 -Golden Hoe=金鋤 -Diamond Hoe=鑽石鋤 -Melon Seeds=西瓜種子 -Grows into a melon stem which in turn grows melons. Chickens like melon seeds.=長成可長出西瓜的瓜莖。雞喜歡西瓜種子。 -Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.=將西瓜種子放在農田上(可以用鋤頭打造)以種植西瓜莖。瓜莖在陽光下生長,在水分充足的農田上生長更快。成熟後,莖會試圖在邊上長出一個西瓜。右鍵點擊動物以餵食西瓜種子。 -Melon=西瓜 -A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.=西瓜是一種方塊,可以從西瓜莖中生長出來,而西瓜莖又是從西瓜種子中生長出來的。它可以收穫西瓜片。 -Premature Melon Stem=成長中的西瓜莖 -Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.=西瓜莖是在農田中陽光下生長的植物,分為8個階段。在水分充足的農田裡,它們生長得更快一些。成熟的西瓜莖能夠長出西瓜。 -Premature Melon Stem (Stage @1)=成長中的西瓜莖(第@1階段) -Mature Melon Stem=成熟的西瓜莖 -A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.=一個成熟的西瓜莖試圖在其四個相鄰的區塊中的一個長出西瓜。西瓜只能在農田、泥土或草塊上面生長。當西瓜挨著西瓜莖時,西瓜莖會立即彎曲並與該西瓜連接。在連接時,瓜莖不能再長出另一個西瓜。一旦西瓜莖周圍的所有西瓜都被移走,它就失去了連接,並準備好長出另一個西瓜。 -Melon Slice=西瓜片 -This is a food item which can be eaten.=這是一種可以吃的食物 -Premature Potato Plant=成長中的馬鈴薯 -Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=馬鈴薯是在農田中陽光下生長的植物,分為8個階段,但只有4個階段可以從視覺上區​​分。在水分充足的農田裡,它們生長得更快一些。它們可以在任何時候收割,但只有在成熟時才會有收益。 -Premature Potato Plant (Stage @1)=成長中的馬鈴薯(第@1階段) -Mature Potato Plant=成熟的馬鈴薯 -Mature potato plants are ready to be harvested for potatoes. They won't grow any further.=成熟的馬鈴薯是一種隨時可以收穫馬鈴薯的植物。它不會再增長了。 -Potato=馬鈴薯 -Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.=馬鈴薯是可以食用、在熔爐中烹調和種植的食品。豬喜歡馬鈴薯。 -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=把它拿在手裡,點擊右鍵就可以吃掉它。把它放在農田上面來種植。它在陽光下生長,在有水分的農田上生長得更快。右鍵點擊一個動物來餵牠。 -Baked Potato=烤馬鈴薯 -Baked potatoes are food items which are more filling than the unbaked ones.=烤馬鈴薯是比未烤過的馬鈴薯更有營養的食物。 -Poisonous Potato=毒馬鈴薯 -This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.=這個馬鈴薯看起來不是很健康。你可以吃它來恢復飢餓值,但有60%的可能性會讓你短暫中毒。 -Pumpkin Seeds=南瓜種子 -Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.=長成可以長出南瓜的南瓜莖。雞喜歡南瓜種子。 -Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.=將南瓜種子放在農田上(可以用鋤頭打造)以種植南瓜莖。南瓜莖在陽光下生長,在水分充足的農田裡生長得更快。成熟後,莖會試圖在它旁邊長出一個南瓜。右鍵點擊動物以給它餵食南瓜種子。 -Premature Pumpkin Stem=成長中的南瓜莖 -Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.=南瓜莖在農田上的生長分為8個階段,在水分充足的農田裡生長得更快。成熟的南瓜莖能夠長出南瓜。 -Premature Pumpkin Stem (Stage @1)=成長中的南瓜莖(第@1階段) -Mature Pumpkin Stem=成熟的南瓜莖 -A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.=一個成熟的南瓜莖試圖在其四個相鄰的區塊之一長出一個南瓜。南瓜只能生長在農田、泥土或草塊的上面。當南瓜挨著南瓜莖時,南瓜莖會立即彎曲並連接到該南瓜上。連接的南瓜莖不能再長出另一個南瓜。只要南瓜莖周圍的所有南瓜都被移走,它就失去了連接,可以再長出一個南瓜。 -Faceless Pumpkin=南瓜 -A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=南瓜是一種裝飾方塊。它可以用剪刀進行雕刻,以獲得南瓜種子。 -Pumpkin=雕刻過的南瓜 -A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=南瓜可以作為頭盔佩戴。南瓜由南瓜莖生長,而南瓜莖又由南瓜種子生長。 -Jack o'Lantern=南瓜燈 -A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=南瓜燈是由南瓜製成的傳統萬聖節裝飾。它發出明亮的光芒。 -Pumpkin Pie=南瓜派 -A pumpkin pie is a tasty food item which can be eaten.=南瓜派是可以吃的美味食品。 -Farmland=農田 -Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=農田用於耕作,是種植農作物的必要表面。它是在泥土類方塊上使用鋤頭時形成的。植物能夠在農田上生長,但速度很慢。當下雨或附近有水源時,農田會變成濕潤的耕地(植物在上面生長更快)。當上面出現固體方塊或活塞臂延伸到上面時,這個方塊會變回泥土。 -Hydrated Farmland=濕潤的耕地 -Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=濕潤的耕地用於耕作,這是你可以種植和生長一些植物的地方。它是在農田被雨水沖刷或靠近水的情況下形成的。如果沒有水,這個方塊最終會變乾。當上面出現固體方塊或活塞臂延伸到上面時,這個方塊會變回泥土。 -Wheat Seeds=小麥種子 -Grows into a wheat plant. Chickens like wheat seeds.=長成小麥。雞喜歡小麥種子。 -Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.=將小麥種子放在農田上(可以用鋤頭製造)以種植一株小麥。它們在陽光下生長,在有水的農田裡生長得更快。右鍵點擊一個動物以給它餵食小麥種子。 -Premature Wheat Plant=成長中的小麥 -Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.=小麥是在農田中陽光下生長的植物,分為8個階段。在水分充足的農田裡,它們生長得更快一些。它們可以在任何時候收割,但只有在成熟時才會有收益。 -Premature Wheat Plant (Stage @1)=成長中的小麥(第@1階段) -Mature Wheat Plant=成熟的小麥 -Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.=成熟的小麥是一種隨時可以收穫小麥的植物。它不會再增長了。 -Wheat=小麥 -Wheat is used in crafting. Some animals like wheat.=小麥主要用於合成。有些動物喜歡小麥。 -Cookie=餅乾 -Bread=面包 -Hay Bale=乾草捆 -Hay bales are decorative blocks made from wheat.=乾草捆是用小麥製成的裝飾方塊。 -To carve a face into the pumpkin, use the shears on the side you want to carve.=要在南瓜上雕刻,請將剪刀放在你要雕刻的一側。 -Use the “Place” key on an animal to try to feed it wheat.=在動物身上使用「放置」鍵以嘗試給它餵食小麥。 -Grows on farmland=在農田上生長 -Turns block into farmland=把方塊變成農田 -60% chance of poisoning=有60%的可能性會讓你中毒 -Surface for crops=種植農作物的表面 -Can become wet=可以變溼 -Uses: @1=使用:@1 diff --git a/mods/ITEMS/mcl_farming/locale/template.txt b/mods/ITEMS/mcl_farming/locale/template.txt deleted file mode 100644 index 7359fefa6..000000000 --- a/mods/ITEMS/mcl_farming/locale/template.txt +++ /dev/null @@ -1,99 +0,0 @@ -# textdomain: mcl_farming -Beetroot Seeds= -Grows into a beetroot plant. Chickens like beetroot seeds.= -Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.= -Premature Beetroot Plant (Stage 1)= -Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.= -Premature Beetroot Plant= -Premature Beetroot Plant (Stage 2)= -Premature Beetroot Plant (Stage 3)= -Mature Beetroot Plant= -A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.= -Beetroot= -Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.= -Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.= -Beetroot Soup= -Beetroot soup is a food item.= -Premature Carrot Plant= -Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.= -Premature Carrot Plant (Stage @1)= -Mature Carrot Plant= -Mature carrot plants are ready to be harvested for carrots. They won't grow any further.= -Carrot= -Carrots can be eaten and planted. Pigs and rabbits like carrots.= -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.= -Golden Carrot= -A golden carrot is a precious food item which can be eaten. It is really, really filling!= -Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.= -Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.= -Wood Hoe= -Stone Hoe= -Iron Hoe= -Golden Hoe= -Diamond Hoe= -Melon Seeds= -Grows into a melon stem which in turn grows melons. Chickens like melon seeds.= -Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.= -Melon= -A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.= -Premature Melon Stem= -Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.= -Premature Melon Stem (Stage @1)= -Mature Melon Stem= -A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.= -Melon Slice= -This is a food item which can be eaten.= -Premature Potato Plant= -Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.= -Premature Potato Plant (Stage @1)= -Mature Potato Plant= -Mature potato plants are ready to be harvested for potatoes. They won't grow any further.= -Potato= -Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.= -Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.= -Baked Potato= -Baked potatoes are food items which are more filling than the unbaked ones.= -Poisonous Potato= -This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.= -Pumpkin Seeds= -Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.= -Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.= -Premature Pumpkin Stem= -Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.= -Premature Pumpkin Stem (Stage @1)= -Mature Pumpkin Stem= -A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.= -Faceless Pumpkin= -A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.= -Pumpkin= -A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.= -Jack o'Lantern= -A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.= -Pumpkin Pie= -A pumpkin pie is a tasty food item which can be eaten.= -Farmland= -Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.= -Hydrated Farmland= -Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.= -Wheat Seeds= -Grows into a wheat plant. Chickens like wheat seeds.= -Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.= -Premature Wheat Plant= -Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.= -Premature Wheat Plant (Stage @1)= -Mature Wheat Plant= -Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.= -Wheat= -Wheat is used in crafting. Some animals like wheat.= -Cookie= -Bread= -Hay Bale= -Hay bales are decorative blocks made from wheat.= -To carve a face into the pumpkin, use the shears on the side you want to carve.= -Use the “Place” key on an animal to try to feed it wheat.= -Grows on farmland= -Turns block into farmland= -60% chance of poisoning= -Surface for crops= -Can become wet= -Uses: @1= diff --git a/mods/ITEMS/mcl_farming/melon.lua b/mods/ITEMS/mcl_farming/melon.lua deleted file mode 100644 index 6bbc507ec..000000000 --- a/mods/ITEMS/mcl_farming/melon.lua +++ /dev/null @@ -1,162 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Seeds -minetest.register_craftitem("mcl_farming:melon_seeds", { - description = S("Melon Seeds"), - _tt_help = S("Grows on farmland"), - _doc_items_longdesc = S("Grows into a melon stem which in turn grows melons. Chickens like melon seeds."), - _doc_items_usagehelp = S("Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds."), - stack_max = 64, - groups = {craftitem = 1, compostability = 30}, - inventory_image = "mcl_farming_melon_seeds.png", - on_place = function(itemstack, placer, pointed_thing) - return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:melontige_1") - end, -}) - --- Melon template (will be fed into mcl_farming.register_gourd - -local melon_base_def = { - description = S("Melon"), - _doc_items_longdesc = S("A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices."), - stack_max = 64, - tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png", "farming_melon_side.png", "farming_melon_side.png", "farming_melon_side.png"}, - groups = { - handy = 1, axey = 1, plant = 1, building_block = 1, dig_by_piston = 1, - enderman_takable = 1, compostability = 65 - }, - drop = { - max_items = 1, - items = { - { items = {"mcl_farming:melon_item 7"}, rarity = 14 }, - { items = {"mcl_farming:melon_item 6"}, rarity = 10 }, - { items = {"mcl_farming:melon_item 5"}, rarity = 5 }, - { items = {"mcl_farming:melon_item 4"}, rarity = 2 }, - { items = {"mcl_farming:melon_item 3"} }, - } - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mcl_farming:melon_item"}, - min_count = 3, - max_count = 7, - cap = 9, - } -} - --- Drop proabilities for melon stem -local stem_drop = { - max_items = 1, - -- The probabilities are slightly off from the original. - -- Update this drop list when the Minetest drop probability system - -- is more powerful. - items = { - -- 1 seed: Approximation to 20/125 chance - -- 20/125 = 0.16 - -- Approximation: 1/6 = ca. 0.166666666666667 - { items = {"mcl_farming:melon_seeds 1"}, rarity = 6 }, - - -- 2 seeds: Approximation to 4/125 chance - -- 4/125 = 0.032 - -- Approximation: 1/31 = ca. 0.032258064516129 - { items = {"mcl_farming:melon_seeds 2"}, rarity = 31 }, - - -- 3 seeds: 1/125 chance - { items = {"mcl_farming:melon_seeds 3"}, rarity = 125 }, - }, -} - --- Growing unconnected stems - - -local startcolor = { r = 0x2E , g = 0x9D, b = 0x2E } -local endcolor = { r = 0xFF , g = 0xA8, b = 0x00 } - - -for s=1,7 do - local h = s / 8 - local doc = s == 1 - local longdesc, entry_name - if doc then - entry_name = S("Premature Melon Stem") - longdesc = S("Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.") - end - local colorstring = mcl_farming:stem_color(startcolor, endcolor, s, 8) - local texture = "([combine:16x16:0,"..((8-s)*2).."=mcl_farming_melon_stem_disconnected.png)^[colorize:"..colorstring..":127" - minetest.register_node("mcl_farming:melontige_"..s, { - description = S("Premature Melon Stem (Stage @1)", s), - _doc_items_create_entry = doc, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - paramtype = "light", - walkable = false, - drawtype = "plantlike", - sunlight_propagates = true, - drop = stem_drop, - tiles = {texture}, - wield_image = texture, - inventory_image = texture, - selection_box = { - type = "fixed", - fixed = { - {-0.15, -0.5, -0.15, 0.15, -0.5+h, 0.15} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1, plant_melon_stem=s}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, - }) -end - --- Full melon stem, able to spawn melons -local stem_def = { - description = S("Mature Melon Stem"), - _doc_items_create_entry = true, - _doc_items_longdesc = S("A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon."), - tiles = {"mcl_farming_melon_stem_disconnected.png^[colorize:#FFA800:127"}, - wield_image = "mcl_farming_melon_stem_disconnected.png^[colorize:#FFA800:127", - inventory_image = "mcl_farming_melon_stem_disconnected.png^[colorize:#FFA800:127", -} - --- Register stem growth -mcl_farming:add_plant("plant_melon_stem", "mcl_farming:melontige_unconnect", {"mcl_farming:melontige_1", "mcl_farming:melontige_2", "mcl_farming:melontige_3", "mcl_farming:melontige_4", "mcl_farming:melontige_5", "mcl_farming:melontige_6", "mcl_farming:melontige_7"}, 30, 5) - --- Register actual melon, connected stems and stem-to-melon growth -mcl_farming:add_gourd("mcl_farming:melontige_unconnect", "mcl_farming:melontige_linked", "mcl_farming:melontige_unconnect", stem_def, stem_drop, "mcl_farming:melon", melon_base_def, 25, 15, "mcl_farming_melon_stem_connected.png^[colorize:#FFA800:127") - --- Items and crafting -minetest.register_craftitem("mcl_farming:melon_item", { - -- Original name: “Melon” - description = S("Melon Slice"), - _doc_items_longdesc = S("This is a food item which can be eaten."), - stack_max = 64, - inventory_image = "farming_melon.png", - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), - groups = {food = 2, eatable = 2, compostability = 50}, - _mcl_saturation = 1.2, -}) - -minetest.register_craft({ - output = "mcl_farming:melon_seeds", - recipe = {{"mcl_farming:melon_item"}} -}) - -minetest.register_craft({ - output = "mcl_farming:melon", - recipe = { - {"mcl_farming:melon_item", "mcl_farming:melon_item", "mcl_farming:melon_item"}, - {"mcl_farming:melon_item", "mcl_farming:melon_item", "mcl_farming:melon_item"}, - {"mcl_farming:melon_item", "mcl_farming:melon_item", "mcl_farming:melon_item"}, - } -}) - -if minetest.get_modpath("doc") then - for i=2,8 do - doc.add_entry_alias("nodes", "mcl_farming:melontige_1", "nodes", "mcl_farming:melontige_"..i) - end -end diff --git a/mods/ITEMS/mcl_farming/mod.conf b/mods/ITEMS/mcl_farming/mod.conf deleted file mode 100644 index fe4bc1564..000000000 --- a/mods/ITEMS/mcl_farming/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_farming -depends = mcl_core, mcl_sounds, mcl_wool, mcl_torches, mcl_weather, mobs_mc, mcl_colors, mcl_init -optional_depends = mcl_armor, doc diff --git a/mods/ITEMS/mcl_farming/potatoes.lua b/mods/ITEMS/mcl_farming/potatoes.lua deleted file mode 100644 index 04a971de8..000000000 --- a/mods/ITEMS/mcl_farming/potatoes.lua +++ /dev/null @@ -1,149 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Premature potato plants - -for i=1, 7 do - local texture, selbox - if i < 3 then - texture = "mcl_farming_potatoes_stage_0.png" - selbox = { -0.5, -0.5, -0.5, 0.5, -5/16, 0.5 } - elseif i < 5 then - texture = "mcl_farming_potatoes_stage_1.png" - selbox = { -0.5, -0.5, -0.5, 0.5, -2/16, 0.5 } - else - texture = "mcl_farming_potatoes_stage_2.png" - selbox = { -0.5, -0.5, -0.5, 0.5, 2/16, 0.5 } - end - - local create, name, longdesc - if i==1 then - create = true - name = S("Premature Potato Plant") - longdesc = S("Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.") - else - create = false - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_farming:potato_1", "nodes", "mcl_farming:potato_"..i) - end - end - - minetest.register_node("mcl_farming:potato_"..i, { - description = S("Premature Potato Plant (Stage @1)", i), - _doc_items_create_entry = create, - _doc_items_entry_name = name, - _doc_items_longdesc = longdesc, - paramtype = "light", - paramtype2 = "meshoptions", - sunlight_propagates = true, - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_farming:potato_item", - tiles = { texture }, - inventory_image = texture, - wield_image = texture, - selection_box = { - type = "fixed", - fixed = { selbox }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, - }) -end - --- Mature plant -minetest.register_node("mcl_farming:potato", { - description = S("Mature Potato Plant"), - _doc_items_longdesc = S("Mature potato plants are ready to be harvested for potatoes. They won't grow any further."), - paramtype = "light", - paramtype2 = "meshoptions", - sunlight_propagates = true, - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - tiles = {"mcl_farming_potatoes_stage_3.png"}, - wield_image = "mcl_farming_potatoes_stage_3.png", - inventory_image = "mcl_farming_potatoes_stage_3.png", - drop = { - items = { - { items = {"mcl_farming:potato_item 1"} }, - { items = {"mcl_farming:potato_item 1"}, rarity = 2 }, - { items = {"mcl_farming:potato_item 1"}, rarity = 2 }, - { items = {"mcl_farming:potato_item 1"}, rarity = 2 }, - { items = {"mcl_farming:potato_item_poison 1"}, rarity = 50 } - } - }, - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 1/16, 0.5 } - } - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_craftitem("mcl_farming:potato_item", { - description = S("Potato"), - _tt_help = S("Grows on farmland"), - _doc_items_longdesc = S("Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes."), - _doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."), - inventory_image = "farming_potato.png", - groups = {food = 2, eatable = 1, compostability = 65}, - _mcl_saturation = 0.6, - stack_max = 64, - on_secondary_use = minetest.item_eat(1), - on_place = function(itemstack, placer, pointed_thing) - local new = mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:potato_1") - if new then - return new - else - return minetest.do_item_eat(1, nil, itemstack, placer, pointed_thing) - end - end, -}) - -minetest.register_craftitem("mcl_farming:potato_item_baked", { - description = S("Baked Potato"), - _doc_items_longdesc = S("Baked potatoes are food items which are more filling than the unbaked ones."), - stack_max = 64, - inventory_image = "farming_potato_baked.png", - on_place = minetest.item_eat(5), - on_secondary_use = minetest.item_eat(5), - groups = {food = 2, eatable = 5, compostability = 85}, - _mcl_saturation = 6.0, -}) - -minetest.register_craftitem("mcl_farming:potato_item_poison", { - description = S("Poisonous Potato"), - _tt_help = minetest.colorize(mcl_colors.YELLOW, S("60% chance of poisoning")), - _doc_items_longdesc = S("This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly."), - stack_max = 64, - inventory_image = "farming_potato_poison.png", - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), - groups = { food = 2, eatable = 2 }, - _mcl_saturation = 1.2, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_farming:potato_item_baked", - recipe = "mcl_farming:potato_item", - cooktime = 10, -}) - -mcl_farming:add_plant("plant_potato", "mcl_farming:potato", {"mcl_farming:potato_1", "mcl_farming:potato_2", "mcl_farming:potato_3", "mcl_farming:potato_4", "mcl_farming:potato_5", "mcl_farming:potato_6", "mcl_farming:potato_7"}, 19.75, 20) - -minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, user, pointed_thing) - - -- 60% chance of poisoning with poisonous potato - if itemstack:get_name() == "mcl_farming:potato_item_poison" then - if math.random(1,10) >= 6 then - mcl_potions.poison_func(user, 1, 5) - end - end - -end ) diff --git a/mods/ITEMS/mcl_farming/pumpkin.lua b/mods/ITEMS/mcl_farming/pumpkin.lua deleted file mode 100644 index f235baaf3..000000000 --- a/mods/ITEMS/mcl_farming/pumpkin.lua +++ /dev/null @@ -1,250 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_screwdriver = minetest.get_modpath("screwdriver") - -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_simple -end - --- Seeds -minetest.register_craftitem("mcl_farming:pumpkin_seeds", { - description = S("Pumpkin Seeds"), - _tt_help = S("Grows on farmland"), - _doc_items_longdesc = S("Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds."), - _doc_items_usagehelp = S("Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds."), - stack_max = 64, - inventory_image = "mcl_farming_pumpkin_seeds.png", - groups = {craftitem=1, compostability = 30}, - on_place = function(itemstack, placer, pointed_thing) - return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:pumpkin_1") - end -}) - -local stem_drop = { - max_items = 1, - -- The probabilities are slightly off from the original. - -- Update this drop list when the Minetest drop probability system - -- is more powerful. - items = { - -- 1 seed: Approximation to 20/125 chance - -- 20/125 = 0.16 - -- Approximation: 1/6 = ca. 0.166666666666667 - { items = {"mcl_farming:pumpkin_seeds 1"}, rarity = 6 }, - - -- 2 seeds: Approximation to 4/125 chance - -- 4/125 = 0.032 - -- Approximation: 1/31 = ca. 0.032258064516129 - { items = {"mcl_farming:pumpkin_seeds 2"}, rarity = 31 }, - - -- 3 seeds: 1/125 chance - { items = {"mcl_farming:pumkin_seeds 3"}, rarity = 125 }, - }, -} - --- Unconnected immature stem - -local startcolor = { r = 0x2E , g = 0x9D, b = 0x2E } -local endcolor = { r = 0xFF , g = 0xA8, b = 0x00 } - -for s=1,7 do - local h = s / 8 - local doc = s == 1 - local longdesc, entry_name - if doc then - entry_name = S("Premature Pumpkin Stem") - longdesc = S("Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.") - end - local colorstring = mcl_farming:stem_color(startcolor, endcolor, s, 8) - local texture = "([combine:16x16:0,"..((8-s)*2).."=mcl_farming_pumpkin_stem_disconnected.png)^[colorize:"..colorstring..":127" - minetest.register_node("mcl_farming:pumpkin_"..s, { - description = S("Premature Pumpkin Stem (Stage @1)", s), - _doc_items_entry_name = entry_name, - _doc_items_create_entry = doc, - _doc_items_longdesc = longdesc, - paramtype = "light", - walkable = false, - drawtype = "plantlike", - sunlight_propagates = true, - drop = stem_drop, - tiles = {texture}, - inventory_image = texture, - wield_image = texture, - selection_box = { - type = "fixed", - fixed = { - {-0.15, -0.5, -0.15, 0.15, -0.5+h, 0.15} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1,}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, - }) -end - --- Full stem (not connected) -local stem_def = { - description = S("Mature Pumpkin Stem"), - _doc_items_longdesc = S("A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin."), - tiles = {"mcl_farming_pumpkin_stem_disconnected.png^[colorize:#FFA800:127"}, - wield_image = "mcl_farming_pumpkin_stem_disconnected.png^[colorize:#FFA800:127", - inventory_image = "mcl_farming_pumpkin_stem_disconnected.png^[colorize:#FFA800:127", -} - --- Template for pumpkin -local pumpkin_base_def = { - description = S("Faceless Pumpkin"), - _doc_items_longdesc = S("A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds."), - _doc_items_usagehelp = S("To carve a face into the pumpkin, use the shears on the side you want to carve."), - stack_max = 64, - paramtype2 = "facedir", - tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png"}, - groups = { - handy = 1, axey = 1, plant = 1, building_block = 1, dig_by_piston = 1, - enderman_takable = 1, compostability = 65 - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 1, - _mcl_hardness = 1, -} - -local pumpkin_face_base_def = table.copy(pumpkin_base_def) -pumpkin_face_base_def.description = S("Pumpkin") -pumpkin_face_base_def._doc_items_longdesc = S("A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.") -pumpkin_face_base_def._doc_items_usagehelp = nil -pumpkin_face_base_def.tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face.png"} -pumpkin_face_base_def.groups.armor=1 -pumpkin_face_base_def.groups.non_combat_armor=1 -pumpkin_face_base_def.groups.armor_head=1 -pumpkin_face_base_def.groups.non_combat_armor_head=1 -pumpkin_face_base_def._mcl_armor_mob_range_factor = 0 -pumpkin_face_base_def._mcl_armor_mob_range_mob = "mobs_mc:enderman" - -pumpkin_face_base_def._mcl_armor_element = "head" -pumpkin_face_base_def._mcl_armor_texture = "mcl_farming_pumpkin_face.png" - -pumpkin_face_base_def.on_construct = function(pos) - -- Attempt to spawn iron golem or snow golem - mobs_mc.check_iron_golem_summon(pos) - mobs_mc.check_snow_golem_summon(pos) -end - -if minetest.get_modpath("mcl_armor") then - local pumpkin_hud = {} - local function add_pumpkin_hud(player) - pumpkin_hud[player] = { - pumpkin_blur = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -101, y = -101}, - text = "mcl_farming_pumpkin_hud.png", - z_index = -200 - }), - --this is a fake crosshair, because hotbar and crosshair doesn't support z_index - --TODO: remove this and add correct z_index values - fake_crosshair = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = 1, y = 1}, - text = "crosshair.png", - z_index = -100 - }) - } - end - local function remove_pumpkin_hud(player) - if pumpkin_hud[player] then - player:hud_remove(pumpkin_hud[player].pumpkin_blur) - player:hud_remove(pumpkin_hud[player].fake_crosshair) - pumpkin_hud[player] = nil - end - end - - pumpkin_face_base_def.on_secondary_use = mcl_armor.equip_on_use - pumpkin_face_base_def._on_equip = add_pumpkin_hud - pumpkin_face_base_def._on_unequip = remove_pumpkin_hud - - minetest.register_on_joinplayer(function(player) - if player:get_inventory():get_stack("armor", 2):get_name() == "mcl_farming:pumpkin_face" then - add_pumpkin_hud(player) - end - end) - minetest.register_on_dieplayer(function(player) - if not minetest.settings:get_bool("mcl_keepInventory") then - remove_pumpkin_hud(player) - end - end) - minetest.register_on_leaveplayer(function(player) - pumpkin_hud[player] = nil - end) -end - --- Register stem growth -mcl_farming:add_plant("plant_pumpkin_stem", "mcl_farming:pumpkintige_unconnect", {"mcl_farming:pumpkin_1", "mcl_farming:pumpkin_2", "mcl_farming:pumpkin_3", "mcl_farming:pumpkin_4", "mcl_farming:pumpkin_5", "mcl_farming:pumpkin_6", "mcl_farming:pumpkin_7"}, 30, 5) - --- Register actual pumpkin, connected stems and stem-to-pumpkin growth -mcl_farming:add_gourd("mcl_farming:pumpkintige_unconnect", "mcl_farming:pumpkintige_linked", "mcl_farming:pumpkintige_unconnect", stem_def, stem_drop, "mcl_farming:pumpkin", pumpkin_base_def, 30, 15, "mcl_farming_pumpkin_stem_connected.png^[colorize:#FFA800:127") - --- Steal function to properly disconnect a carved pumpkin -pumpkin_face_base_def.after_destruct = minetest.registered_nodes["mcl_farming:pumpkin"].after_destruct -minetest.register_node("mcl_farming:pumpkin_face", pumpkin_face_base_def) - --- Jack o'Lantern -minetest.register_node("mcl_farming:pumpkin_face_light", { - description = S("Jack o'Lantern"), - _doc_items_longdesc = S("A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly."), - is_ground_content = false, - stack_max = 64, - paramtype = "light", - paramtype2 = "facedir", - light_source = minetest.LIGHT_MAX, - tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face_light.png"}, - groups = {handy=1,axey=1, building_block=1, dig_by_piston=1 }, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - -- Attempt to spawn iron golem or snow golem - mobs_mc.check_iron_golem_summon(pos) - mobs_mc.check_snow_golem_summon(pos) - end, - on_rotate = on_rotate, - _mcl_blast_resistance = 1, - _mcl_hardness = 1, -}) - --- Crafting - -minetest.register_craft({ - output = "mcl_farming:pumpkin_face_light", - recipe = {{"mcl_farming:pumpkin_face"}, - {"mcl_torches:torch"}} -}) - -minetest.register_craft({ - output = "mcl_farming:pumpkin_seeds 4", - recipe = {{"mcl_farming:pumpkin"}} -}) - -minetest.register_craftitem("mcl_farming:pumpkin_pie", { - description = S("Pumpkin Pie"), - _doc_items_longdesc = S("A pumpkin pie is a tasty food item which can be eaten."), - stack_max = 64, - inventory_image = "mcl_farming_pumpkin_pie.png", - wield_image = "mcl_farming_pumpkin_pie.png", - on_place = minetest.item_eat(8), - on_secondary_use = minetest.item_eat(8), - groups = {food = 2, eatable = 8, compostability = 100}, - _mcl_saturation = 4.8, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_farming:pumpkin_pie", - recipe = {"mcl_farming:pumpkin", "mcl_core:sugar", "mcl_throwing:egg"}, -}) - - -if minetest.get_modpath("doc") then - for i=2,8 do - doc.add_entry_alias("nodes", "mcl_farming:pumpkin_1", "nodes", "mcl_farming:pumpkin_"..i) - end -end diff --git a/mods/ITEMS/mcl_farming/shared_functions.lua b/mods/ITEMS/mcl_farming/shared_functions.lua deleted file mode 100644 index 7b9784503..000000000 --- a/mods/ITEMS/mcl_farming/shared_functions.lua +++ /dev/null @@ -1,477 +0,0 @@ -local math = math -local tostring = tostring - -mcl_farming.plant_lists = {} - -local plant_lists = {} - -local plant_nodename_to_id_list = {} - -local function get_intervals_counter(pos, interval, chance) - local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get("time_speed") or 72) - local current_game_time - if time_speed == nil then - return 1 - end - if (time_speed < 0.1) then - return 1 - end - local time_multiplier = 86400 / time_speed - current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - - local approx_interval = math.max(interval, 1) * math.max(chance, 1) - - local last_game_time = meta:get_string("last_gametime") - if last_game_time then - last_game_time = tonumber(last_game_time) - end - if not last_game_time or last_game_time < 1 then - last_game_time = current_game_time - approx_interval / 10 - elseif last_game_time == current_game_time then - current_game_time = current_game_time + approx_interval - end - - local elapsed_game_time = .0 + current_game_time - last_game_time - - meta:set_string("last_gametime", tostring(current_game_time)) - - return elapsed_game_time / approx_interval -end - -local function get_avg_light_level(pos) - local node_light = tonumber(minetest.get_node_light(pos) or 0) - local meta = minetest.get_meta(pos) - local counter = meta:get_int("avg_light_count") - local summary = meta:get_int("avg_light_summary") - if counter > 99 then - counter = 51 - summary = math.ceil((summary + 0.0) / 2.0) - else - counter = counter + 1 - end - summary = summary + node_light - meta:set_int("avg_light_count", counter) - meta:set_int("avg_light_summary", summary) - return math.ceil((summary + 0.0) / counter) -end - -function mcl_farming:add_plant(identifier, full_grown, names, interval, chance) - mcl_farming.plant_lists[identifier] = {} - mcl_farming.plant_lists[identifier].full_grown = full_grown - mcl_farming.plant_lists[identifier].names = names - mcl_farming.plant_lists[identifier].interval = interval - mcl_farming.plant_lists[identifier].chance = chance - plant_lists = mcl_farming.plant_lists --provide local copy of plant lists (performances) - minetest.register_abm({ - label = string.format("Farming plant growth (%s)", identifier), - nodenames = names, - interval = interval, - chance = chance, - action = function(pos, node) - local low_speed = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name ~= "mcl_farming:soil_wet" - mcl_farming:grow_plant(identifier, pos, node, false, false, low_speed) - end, - }) - for _, nodename in pairs(names) do - plant_nodename_to_id_list[nodename] = identifier - end -end - --- Attempts to advance a plant at pos by one or more growth stages (if possible) --- identifier: Identifier of plant as defined by mcl_farming:add_plant --- pos: Position --- node: Node table --- stages: Number of stages to advance (optional, defaults to 1) --- ignore_light: if true, ignore light requirements for growing - --- Returns true if plant has been grown by 1 or more stages. --- Returns false if nothing changed. -function mcl_farming:grow_plant(identifier, pos, node, stages, ignore_light, low_speed) - local average_light_level = get_avg_light_level(pos) - local plant_info = plant_lists[identifier] - local intervals_counter = get_intervals_counter(pos, plant_info.interval, plant_info.chance) - local low_speed = low_speed or false - if low_speed then - if intervals_counter < 1.01 and math.random(0, 9) > 0 then - return - else - intervals_counter = intervals_counter / 10 - end - end - if not minetest.get_node_light(pos) and not ignore_light and intervals_counter < 1.5 then - return false - end - if minetest.get_node_light(pos) < 10 and not ignore_light and intervals_counter < 1.5 then - return false - end - - if intervals_counter >= 1.5 then - if average_light_level < 0.1 then - return false - end - if average_light_level < 10 then - intervals_counter = intervals_counter * average_light_level / 10 - end - end - - local step = nil - - for i, name in ipairs(plant_info.names) do - if name == node.name then - step = i - break - end - end - if step == nil then - return false - end - if not stages then - stages = 1 - end - stages = stages + math.ceil(intervals_counter) - local new_node = {name = plant_info.names[step+stages]} - if new_node.name == nil then - new_node.name = plant_info.full_grown - end - new_node.param = node.param - new_node.param2 = node.param2 - minetest.set_node(pos, new_node) - return true -end - -function mcl_farming:place_seed(itemstack, placer, pointed_thing, plantname) - local pt = pointed_thing - if not pt then - return - end - if pt.type ~= "node" then - return - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pt.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pt.under, node, placer, itemstack) or itemstack - end - end - - local pos = {x=pt.above.x, y=pt.above.y-1, z=pt.above.z} - local farmland = minetest.get_node(pos) - pos= {x=pt.above.x, y=pt.above.y, z=pt.above.z} - local place_s = minetest.get_node(pos) - - if string.find(farmland.name, "mcl_farming:soil") and string.find(place_s.name, "air") then - minetest.sound_play(minetest.registered_nodes[plantname].sounds.place, {pos = pos}, true) - minetest.add_node(pos, {name=plantname, param2 = minetest.registered_nodes[plantname].place_param2}) - --local intervals_counter = get_intervals_counter(pos, 1, 1) - else - return - end - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack -end - - ---[[ Helper function to create a gourd (e.g. melon, pumpkin), the connected stem nodes as - -- full_unconnected_stem: itemstring of the full-grown but unconnceted stem node. This node must already be done -- connected_stem_basename: prefix of the itemstrings used for the 4 connected stem nodes to create -- stem_itemstring: Desired itemstring of the fully-grown unconnected stem node -- stem_def: Partial node definition of the fully-grown unconnected stem node. Many fields are already defined. You need to add `tiles` and `description` at minimum. Don't define on_construct without good reason -- stem_drop: Drop probability table for all stem -- gourd_itemstring: Desired itemstring of the full gourd node -- gourd_def: (almost) full definition of the gourd node. This function will add on_construct and after_destruct to the definition for unconnecting any connected stems -- grow_interval: Will attempt to grow a gourd periodically at this interval in seconds -- grow_chance: Chance of 1/grow_chance to grow a gourd next to the full unconnected stem after grow_interval has passed. Must be a natural number -- connected_stem_texture: Texture of the connected stem -- gourd_on_construct_extra: Custom on_construct extra function for the gourd. Will be called after the stem check code -]] - -function mcl_farming:add_gourd(full_unconnected_stem, connected_stem_basename, stem_itemstring, stem_def, stem_drop, gourd_itemstring, gourd_def, grow_interval, grow_chance, connected_stem_texture, gourd_on_construct_extra) - - local connected_stem_names = { - connected_stem_basename .. "_r", - connected_stem_basename .. "_l", - connected_stem_basename .. "_t", - connected_stem_basename .. "_b", - } - - local neighbors = { - { x=-1, y=0, z=0 }, - { x=1, y=0, z=0 }, - { x=0, y=0, z=-1 }, - { x=0, y=0, z=1 }, - } - - -- Connect the stem at stempos to the first neighboring gourd block. - -- No-op if not a stem or no gourd block found - local function try_connect_stem(stempos) - local stem = minetest.get_node(stempos) - if stem.name ~= full_unconnected_stem then - return false - end - for n=1, #neighbors do - local offset = neighbors[n] - local blockpos = vector.add(stempos, offset) - local block = minetest.get_node(blockpos) - if block.name == gourd_itemstring then - if offset.x == 1 then - minetest.set_node(stempos, {name=connected_stem_names[1]}) - elseif offset.x == -1 then - minetest.set_node(stempos, {name=connected_stem_names[2]}) - elseif offset.z == 1 then - minetest.set_node(stempos, {name=connected_stem_names[3]}) - elseif offset.z == -1 then - minetest.set_node(stempos, {name=connected_stem_names[4]}) - end - return true - end - end - end - - -- Register gourd - if not gourd_def.after_destruct then - gourd_def.after_destruct = function(blockpos, oldnode) - -- Disconnect any connected stems, turning them back to normal stems - for n=1, #neighbors do - local offset = neighbors[n] - local expected_stem = connected_stem_names[n] - local stempos = vector.add(blockpos, offset) - local stem = minetest.get_node(stempos) - if stem.name == expected_stem then - minetest.add_node(stempos, {name=full_unconnected_stem}) - try_connect_stem(stempos) - end - end - end - end - if not gourd_def.on_construct then - function gourd_def.on_construct(blockpos) - -- Connect all unconnected stems at full size - for n=1, #neighbors do - local stempos = vector.add(blockpos, neighbors[n]) - try_connect_stem(stempos) - end - -- Call custom on_construct - if gourd_on_construct_extra then - gourd_on_construct_extra(blockpos) - end - end - end - minetest.register_node(gourd_itemstring, gourd_def) - - -- Register unconnected stem - - -- Default values for the stem definition - if not stem_def.selection_box then - stem_def.selection_box = { - type = "fixed", - fixed = { - {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15} - }, - } - end - if not stem_def.paramtype then - stem_def.paramtype = "light" - end - if not stem_def.drawtype then - stem_def.drawtype = "plantlike" - end - if stem_def.walkable == nil then - stem_def.walkable = false - end - if stem_def.sunlight_propagates == nil then - stem_def.sunlight_propagates = true - end - if stem_def.drop == nil then - stem_def.drop = stem_drop - end - if stem_def.groups == nil then - stem_def.groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1,} - end - if stem_def.sounds == nil then - stem_def.sounds = mcl_sounds.node_sound_leaves_defaults() - end - - if not stem_def.on_construct then - function stem_def.on_construct(stempos) - -- Connect stem to gourd (if possible) - try_connect_stem(stempos) - end - end - minetest.register_node(stem_itemstring, stem_def) - - -- Register connected stems - - local connected_stem_tiles = { - { "blank.png", --top - "blank.png", -- bottom - "blank.png", -- right - "blank.png", -- left - connected_stem_texture, -- back - connected_stem_texture.."^[transformFX90" --front - }, - { "blank.png", --top - "blank.png", -- bottom - "blank.png", -- right - "blank.png", -- left - connected_stem_texture.."^[transformFX90", --back - connected_stem_texture, -- front - }, - { "blank.png", --top - "blank.png", -- bottom - connected_stem_texture.."^[transformFX90", -- right - connected_stem_texture, -- left - "blank.png", --back - "blank.png", -- front - }, - { "blank.png", --top - "blank.png", -- bottom - connected_stem_texture, -- right - connected_stem_texture.."^[transformFX90", -- left - "blank.png", --back - "blank.png", -- front - } - } - local connected_stem_nodebox = { - {-0.5, -0.5, 0, 0.5, 0.5, 0}, - {-0.5, -0.5, 0, 0.5, 0.5, 0}, - {0, -0.5, -0.5, 0, 0.5, 0.5}, - {0, -0.5, -0.5, 0, 0.5, 0.5}, - } - local connected_stem_selectionbox = { - {-0.1, -0.5, -0.1, 0.5, 0.2, 0.1}, - {-0.5, -0.5, -0.1, 0.1, 0.2, 0.1}, - {-0.1, -0.5, -0.1, 0.1, 0.2, 0.5}, - {-0.1, -0.5, -0.5, 0.1, 0.2, 0.1}, - } - - for i=1, 4 do - minetest.register_node(connected_stem_names[i], { - _doc_items_create_entry = false, - paramtype = "light", - sunlight_propagates = true, - walkable = false, - drop = stem_drop, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = connected_stem_nodebox[i] - }, - selection_box = { - type = "fixed", - fixed = connected_stem_selectionbox[i] - }, - tiles = connected_stem_tiles[i], - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1,}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", full_unconnected_stem, "nodes", connected_stem_names[i]) - end - end - - minetest.register_abm({ - label = "Grow gourd stem to gourd ("..full_unconnected_stem.." → "..gourd_itemstring..")", - nodenames = {full_unconnected_stem}, - neighbors = {"air"}, - interval = grow_interval, - chance = grow_chance, - action = function(stempos) - local light = minetest.get_node_light(stempos) - if light and light > 10 then - -- Check the four neighbors and filter out neighbors where gourds can't grow - local neighbors = { - { x=-1, y=0, z=0 }, - { x=1, y=0, z=0 }, - { x=0, y=0, z=-1 }, - { x=0, y=0, z=1 }, - } - local floorpos, floor - for n=#neighbors, 1, -1 do - local offset = neighbors[n] - local blockpos = vector.add(stempos, offset) - floorpos = { x=blockpos.x, y=blockpos.y-1, z=blockpos.z } - floor = minetest.get_node(floorpos) - local block = minetest.get_node(blockpos) - local soilgroup = minetest.get_item_group(floor.name, "soil") - if not ((minetest.get_item_group(floor.name, "grass_block") == 1 or floor.name=="mcl_core:dirt" or soilgroup == 2 or soilgroup == 3) and block.name == "air") then - table.remove(neighbors, n) - end - end - - -- Gourd needs at least 1 free neighbor to grow - if #neighbors > 0 then - -- From the remaining neighbors, grow randomly - local r = math.random(1, #neighbors) - local offset = neighbors[r] - local blockpos = vector.add(stempos, offset) - local p2 - if offset.x == 1 then - minetest.set_node(stempos, {name=connected_stem_names[1]}) - p2 = 3 - elseif offset.x == -1 then - minetest.set_node(stempos, {name=connected_stem_names[2]}) - p2 = 1 - elseif offset.z == 1 then - minetest.set_node(stempos, {name=connected_stem_names[3]}) - p2 = 2 - elseif offset.z == -1 then - minetest.set_node(stempos, {name=connected_stem_names[4]}) - p2 = 0 - end - -- Place the gourd - if gourd_def.paramtype2 == "facedir" then - minetest.add_node(blockpos, {name=gourd_itemstring, param2=p2}) - else - minetest.add_node(blockpos, {name=gourd_itemstring}) - end - -- Reset farmland, etc. to dirt when the gourd grows on top - if minetest.get_item_group(floor.name, "dirtifies_below_solid") == 1 then - minetest.set_node(floorpos, {name = "mcl_core:dirt"}) - end - end - end - end, - }) -end - --- Used for growing gourd stems. Returns the intermediate color between startcolor and endcolor at a step --- * startcolor: ColorSpec in table form for the stem in its lowest growing stage --- * endcolor: ColorSpec in table form for the stem in its final growing stage --- * step: The nth growth step. Counting starts at 1 --- * step_count: The number of total growth steps -function mcl_farming:stem_color(startcolor, endcolor, step, step_count) - local color = {} - local function get_component(startt, endd, step, step_count) - return math.floor(math.max(0, math.min(255, (startt + (((step-1)/step_count) * endd))))) - end - color.r = get_component(startcolor.r, endcolor.r, step, step_count) - color.g = get_component(startcolor.g, endcolor.g, step, step_count) - color.b = get_component(startcolor.b, endcolor.b, step, step_count) - local colorstring = string.format("#%02X%02X%02X", color.r, color.g, color.b) - return colorstring -end - -minetest.register_lbm({ - label = "Add growth for unloaded farming plants", - name = "mcl_farming:growth", - nodenames = {"group:plant"}, - run_at_every_load = true, - action = function(pos, node) - local identifier = plant_nodename_to_id_list[node.name] - if not identifier then - return - end - local low_speed = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name ~= "mcl_farming:soil_wet" - mcl_farming:grow_plant(identifier, pos, node, false, false, low_speed) - end, -}) diff --git a/mods/ITEMS/mcl_farming/soil.lua b/mods/ITEMS/mcl_farming/soil.lua deleted file mode 100644 index 8b31d888f..000000000 --- a/mods/ITEMS/mcl_farming/soil.lua +++ /dev/null @@ -1,126 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_node("mcl_farming:soil", { - tiles = {"mcl_farming_farmland_dry.png", "default_dirt.png"}, - description = S("Farmland"), - _tt_help = S("Surface for crops").."\n"..S("Can become wet"), - _doc_items_longdesc = S("Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it."), - drop = "mcl_core:dirt", - drawtype = "nodebox", - paramtype = "light", - node_box = { - type = "fixed", - fixed = { - -- 15/16 of the normal height - {-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5}, - } - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("wet", 0) - end, - groups = {handy=1,shovely=1, dirtifies_below_solid=1, dirtifier=1, soil=2, soil_sapling=1, deco_block=1 }, - sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.6, -}) - -minetest.register_node("mcl_farming:soil_wet", { - tiles = {"mcl_farming_farmland_wet.png", "default_dirt.png"}, - description = S("Hydrated Farmland"), - _doc_items_longdesc = S("Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it."), - drop = "mcl_core:dirt", - drawtype = "nodebox", - paramtype = "light", - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5}, - } - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("wet", 7) - end, - groups = {handy=1,shovely=1, not_in_creative_inventory=1, dirtifies_below_solid=1, dirtifier=1, soil=3, soil_sapling=1 }, - sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.6, -}) - -minetest.register_abm({ - label = "Farmland hydration", - nodenames = {"mcl_farming:soil", "mcl_farming:soil_wet"}, - interval = 15, - chance = 4, - action = function(pos, node) - -- Get wetness value - local meta = minetest.get_meta(pos) - local wet = meta:get_int("wet") - if not wet then - if node.name == "mcl_farming:soil" then - wet = 0 - else - wet = 7 - end - end - - -- Turn back into dirt when covered by solid node - local above_node = minetest.get_node_or_nil({x=pos.x,y=pos.y+1,z=pos.z}) - if above_node then - if minetest.get_item_group(above_node.name, "solid") ~= 0 then - node.name = "mcl_core:dirt" - minetest.set_node(pos, node) - return - end - end - - -- Check an area of 9×2×9 around the node for nodename (9×9 on same level and 9×9 below) - local function check_surroundings(pos, nodename) - local nodes = minetest.find_nodes_in_area({x=pos.x-4,y=pos.y,z=pos.z-4}, {x=pos.x+4,y=pos.y+1,z=pos.z+4}, {nodename}) - return #nodes > 0 - end - - if check_surroundings(pos, "group:water") then - if node.name ~= "mcl_farming:soil_wet" then - -- Make it wet - node.name = "mcl_farming:soil_wet" - minetest.set_node(pos, node) - end - else -- No water nearby. - -- The decay branch (make farmland dry or turn back to dirt) - - -- Don't decay while it's raining - if mcl_weather.rain.raining then - if mcl_weather.is_outdoor(pos) then - return - end - end - -- No decay near unloaded areas since these might include water. - if not check_surroundings(pos, "ignore") then - if wet <= 0 then - --local n_def = minetest.registered_nodes[node.name] or nil - local nn = minetest.get_node_or_nil({x=pos.x,y=pos.y+1,z=pos.z}) - if not nn or not nn.name then - return - end - local nn_def = minetest.registered_nodes[nn.name] or nil - - if nn_def and minetest.get_item_group(nn.name, "plant") == 0 then - node.name = "mcl_core:dirt" - minetest.set_node(pos, node) - return - end - else - if wet == 7 then - node.name = "mcl_farming:soil" - minetest.swap_node(pos, node) - end - -- Slowly count down wetness - meta:set_int("wet", wet-1) - end - end - end - end, -}) - diff --git a/mods/ITEMS/mcl_farming/textures/farming_bread.png b/mods/ITEMS/mcl_farming/textures/farming_bread.png deleted file mode 100644 index 2793fcd14..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_bread.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_carrot.png b/mods/ITEMS/mcl_farming/textures/farming_carrot.png deleted file mode 100644 index 7c916fce4..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_carrot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_carrot_1.png b/mods/ITEMS/mcl_farming/textures/farming_carrot_1.png deleted file mode 100644 index c10faffbc..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_carrot_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_carrot_2.png b/mods/ITEMS/mcl_farming/textures/farming_carrot_2.png deleted file mode 100644 index d4f3bd292..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_carrot_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_carrot_3.png b/mods/ITEMS/mcl_farming/textures/farming_carrot_3.png deleted file mode 100644 index 80089fc3c..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_carrot_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_carrot_4.png b/mods/ITEMS/mcl_farming/textures/farming_carrot_4.png deleted file mode 100644 index d1017eee1..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_carrot_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_carrot_gold.png b/mods/ITEMS/mcl_farming/textures/farming_carrot_gold.png deleted file mode 100644 index febaa87ae..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_carrot_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_cookie.png b/mods/ITEMS/mcl_farming/textures/farming_cookie.png deleted file mode 100644 index 38f8f4b54..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_cookie.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_melon.png b/mods/ITEMS/mcl_farming/textures/farming_melon.png deleted file mode 100644 index cbd946144..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_melon.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_melon_side.png b/mods/ITEMS/mcl_farming/textures/farming_melon_side.png deleted file mode 100644 index 6630ce52b..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_melon_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_melon_top.png b/mods/ITEMS/mcl_farming/textures/farming_melon_top.png deleted file mode 100644 index 770871c92..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_melon_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_potato.png b/mods/ITEMS/mcl_farming/textures/farming_potato.png deleted file mode 100644 index 6614adcb2..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_potato.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_potato_baked.png b/mods/ITEMS/mcl_farming/textures/farming_potato_baked.png deleted file mode 100644 index 9921da97d..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_potato_baked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_potato_poison.png b/mods/ITEMS/mcl_farming/textures/farming_potato_poison.png deleted file mode 100644 index 68e8ad153..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_potato_poison.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_face.png b/mods/ITEMS/mcl_farming/textures/farming_pumpkin_face.png deleted file mode 100644 index 4cc15ddc2..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_face.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_face_light.png b/mods/ITEMS/mcl_farming/textures/farming_pumpkin_face_light.png deleted file mode 100644 index a47c72e80..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_face_light.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_side.png b/mods/ITEMS/mcl_farming/textures/farming_pumpkin_side.png deleted file mode 100644 index 9ed67ca23..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_top.png b/mods/ITEMS/mcl_farming/textures/farming_pumpkin_top.png deleted file mode 100644 index 73d1ef540..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_pumpkin_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_tool_diamondhoe.png b/mods/ITEMS/mcl_farming/textures/farming_tool_diamondhoe.png deleted file mode 100644 index 0adc102ac..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_tool_diamondhoe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_tool_goldhoe.png b/mods/ITEMS/mcl_farming/textures/farming_tool_goldhoe.png deleted file mode 100644 index 2038ca362..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_tool_goldhoe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_tool_steelhoe.png b/mods/ITEMS/mcl_farming/textures/farming_tool_steelhoe.png deleted file mode 100644 index e3cc7bc79..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_tool_steelhoe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_tool_stonehoe.png b/mods/ITEMS/mcl_farming/textures/farming_tool_stonehoe.png deleted file mode 100644 index 49fc89bad..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_tool_stonehoe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_tool_woodhoe.png b/mods/ITEMS/mcl_farming/textures/farming_tool_woodhoe.png deleted file mode 100644 index 118f7650f..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_tool_woodhoe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/farming_wheat_harvested.png b/mods/ITEMS/mcl_farming/textures/farming_wheat_harvested.png deleted file mode 100644 index 32acfd609..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/farming_wheat_harvested.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot.png deleted file mode 100644 index 680b72704..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_0.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_0.png deleted file mode 100644 index 52dd1dabe..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_1.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_1.png deleted file mode 100644 index 6b47963b0..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_2.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_2.png deleted file mode 100644 index f2bc171d4..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_3.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_3.png deleted file mode 100644 index c3edf2896..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_seeds.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_seeds.png deleted file mode 100644 index 31670d7dd..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_seeds.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_soup.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_soup.png deleted file mode 100644 index b82fa6a40..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_beetroot_soup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_farmland_dry.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_farmland_dry.png deleted file mode 100644 index 4606f6fa3..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_farmland_dry.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_farmland_wet.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_farmland_wet.png deleted file mode 100644 index bad8fb002..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_farmland_wet.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_hayblock_side.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_hayblock_side.png deleted file mode 100644 index ec51c0d74..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_hayblock_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_hayblock_top.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_hayblock_top.png deleted file mode 100644 index 24dd63ef0..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_hayblock_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_seeds.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_seeds.png deleted file mode 100644 index 66025d253..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_seeds.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_stem_connected.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_stem_connected.png deleted file mode 100644 index c71ebc4ef..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_stem_connected.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_stem_disconnected.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_stem_disconnected.png deleted file mode 100644 index e48e1367f..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_melon_stem_disconnected.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_0.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_0.png deleted file mode 100644 index 8f021b1ec..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_1.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_1.png deleted file mode 100644 index 8d4d1abca..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_2.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_2.png deleted file mode 100644 index 828ff7d91..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_3.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_3.png deleted file mode 100644 index 635248530..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_potatoes_stage_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_face.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_face.png deleted file mode 100644 index 095b90cc6..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_face.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_hud.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_hud.png deleted file mode 100644 index 48f47253b..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_hud.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_pie.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_pie.png deleted file mode 100644 index f366baabb..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_pie.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_seeds.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_seeds.png deleted file mode 100644 index 52c239c7f..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_seeds.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_stem_connected.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_stem_connected.png deleted file mode 100644 index c71ebc4ef..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_stem_connected.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_stem_disconnected.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_stem_disconnected.png deleted file mode 100644 index 2de1ce4f7..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_stem_disconnected.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_seeds.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_seeds.png deleted file mode 100644 index dcd6901a8..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_seeds.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_0.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_0.png deleted file mode 100644 index 67114bdae..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_1.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_1.png deleted file mode 100644 index 448f047e4..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_2.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_2.png deleted file mode 100644 index 3788a40da..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_3.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_3.png deleted file mode 100644 index 889a56d63..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_4.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_4.png deleted file mode 100644 index 91bdd2b32..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_5.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_5.png deleted file mode 100644 index fb5493614..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_5.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_6.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_6.png deleted file mode 100644 index 6b2b23078..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_6.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_7.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_7.png deleted file mode 100644 index 83d259274..000000000 Binary files a/mods/ITEMS/mcl_farming/textures/mcl_farming_wheat_stage_7.png and /dev/null differ diff --git a/mods/ITEMS/mcl_farming/wheat.lua b/mods/ITEMS/mcl_farming/wheat.lua deleted file mode 100644 index a254ed36c..000000000 --- a/mods/ITEMS/mcl_farming/wheat.lua +++ /dev/null @@ -1,190 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_craftitem("mcl_farming:wheat_seeds", { - -- Original Minecraft name: “Seeds” - description = S("Wheat Seeds"), - _tt_help = S("Grows on farmland"), - _doc_items_longdesc = S("Grows into a wheat plant. Chickens like wheat seeds."), - _doc_items_usagehelp = S([[ - Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. - They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds. - ]]), - groups = {craftitem = 1, compostability = 30}, - inventory_image = "mcl_farming_wheat_seeds.png", - on_place = function(itemstack, placer, pointed_thing) - return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:wheat_1") - end -}) - -local sel_heights = { - -5/16, - -2/16, - 0, - 3/16, - 5/16, - 6/16, - 7/16, -} - -for i=1,7 do - local create, name, longdesc - if i == 1 then - create = true - name = S("Premature Wheat Plant") - longdesc = S([[ - Premature wheat plants grow on farmland under sunlight in 8 stages. - On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature. - ]]) - else - create = false - end - - minetest.register_node("mcl_farming:wheat_"..i, { - description = S("Premature Wheat Plant (Stage @1)", i), - _doc_items_create_entry = create, - _doc_items_entry_name = name, - _doc_items_longdesc = longdesc, - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - sunlight_propagates = true, - walkable = false, - drawtype = "plantlike", - drop = "mcl_farming:wheat_seeds", - tiles = {"mcl_farming_wheat_stage_"..(i-1)..".png"}, - inventory_image = "mcl_farming_wheat_stage_"..(i-1)..".png", - wield_image = "mcl_farming_wheat_stage_"..(i-1)..".png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, sel_heights[i], 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, - dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, - }) -end - -minetest.register_node("mcl_farming:wheat", { - description = S("Mature Wheat Plant"), - _doc_items_longdesc = S([[ - Mature wheat plants are ready to be harvested for wheat and wheat seeds. - They won't grow any further. - ]]), - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - tiles = {"mcl_farming_wheat_stage_7.png"}, - inventory_image = "mcl_farming_wheat_stage_7.png", - wield_image = "mcl_farming_wheat_stage_7.png", - drop = { - max_items = 4, - items = { - { items = {"mcl_farming:wheat_seeds"} }, - { items = {"mcl_farming:wheat_seeds"}, rarity = 2}, - { items = {"mcl_farming:wheat_seeds"}, rarity = 5}, - { items = {"mcl_farming:wheat_item"} } - } - }, - groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1, attached_node=1, - dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_blast_resistance = 0, -}) - -mcl_farming:add_plant("plant_wheat", "mcl_farming:wheat", {"mcl_farming:wheat_1", "mcl_farming:wheat_2", "mcl_farming:wheat_3", "mcl_farming:wheat_4", "mcl_farming:wheat_5", "mcl_farming:wheat_6", "mcl_farming:wheat_7"}, 25, 20) - -minetest.register_craftitem("mcl_farming:wheat_item", { - description = S("Wheat"), - _doc_items_longdesc = S("Wheat is used in crafting. Some animals like wheat."), - _doc_items_usagehelp = S("Use the “Place” key on an animal to try to feed it wheat."), - inventory_image = "farming_wheat_harvested.png", - groups = {craftitem = 1, compostability = 65}, -}) - -minetest.register_craft({ - output = "mcl_farming:bread", - recipe = { - {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, - } -}) - -minetest.register_craft({ - output = "mcl_farming:cookie 8", - recipe = { - {"mcl_farming:wheat_item", "mcl_dye:brown", "mcl_farming:wheat_item"}, - } -}) - -minetest.register_craftitem("mcl_farming:cookie", { - description = S("Cookie"), - _doc_items_longdesc = S("This is a food item which can be eaten."), - inventory_image = "farming_cookie.png", - groups = {food = 2, eatable = 2, compostability = 85}, - _mcl_saturation = 0.4, - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), -}) - - -minetest.register_craftitem("mcl_farming:bread", { - description = S("Bread"), - _doc_items_longdesc = S("This is a food item which can be eaten."), - inventory_image = "farming_bread.png", - groups = {food = 2, eatable = 5, compostability = 85}, - _mcl_saturation = 6.0, - on_place = minetest.item_eat(5), - on_secondary_use = minetest.item_eat(5), -}) - -local mod_screwdriver = minetest.get_modpath("screwdriver") -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - -minetest.register_node("mcl_farming:hay_block", { - description = S("Hay Bale"), - _doc_items_longdesc = S("Hay bales are decorative blocks made from wheat."), - tiles = {"mcl_farming_hayblock_top.png", "mcl_farming_hayblock_top.png", "mcl_farming_hayblock_side.png"}, - is_ground_content = false, - stack_max = 64, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - groups = { - handy = 1, hoey = 1, building_block = 1, fall_damage_add_percent = -80, - flammable = 2, fire_encouragement = 60, fire_flammability = 20, - compostability = 85 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_craft({ - output = "mcl_farming:hay_block", - recipe = { - {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, - {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, - {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, - } -}) - -minetest.register_craft({ - output = "mcl_farming:wheat_item 9", - recipe = { - {"mcl_farming:hay_block"}, - } -}) - -if minetest.get_modpath("doc") then - for i=2,7 do - doc.add_entry_alias("nodes", "mcl_farming:wheat_1", "nodes", "mcl_farming:wheat_"..i) - end -end diff --git a/mods/ITEMS/mcl_fences/API.md b/mods/ITEMS/mcl_fences/API.md deleted file mode 100644 index 39ba314f2..000000000 --- a/mods/ITEMS/mcl_fences/API.md +++ /dev/null @@ -1,71 +0,0 @@ -# API for adding MineClone 2 fences -This API allows you to add fences and fence gates. -The recommended function is `mcl_fences.register_fence_and_fence_gate`. - -## ` mcl_fences.register_fence = function(id, fence_name, texture, groups, connects_to, sounds)` -Adds a fence without crafting recipe. A single node is created. - -### Parameter -* `id`: A part of the itemstring of the node to create. The node name will be “`:`” -* `fence_name`: User-visible name (`description`) -* `texture`: Texture to apply on the fence (all sides) -* `groups`: Table of groups to which the fence belongs to -* `hardness`: Hardness (if unsure, pick the hardness of the material node) -* `blast_resistance`: Blast resistance (if unsure, pick the blast resistance of the material node) -* `connects_to`: Table of nodes (itemstrings) to which the fence will connect to. Use `group:` for all members of the group `` -* `sounds`: Node sound table for the fence - -### Return value -The full itemstring of the new fence node. - -Notes: Fences will always have the group `fence=1`. They will always connect to solid nodes (group `solid=1`). - -## `mcl_fences.register_fence_gate = function(id, fence_gate_name, texture, groups, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)` -Adds a fence gate without crafting recipe. This will create 2 nodes. - -### Parameters -* `id`: A part of the itemstring of the nodes to create. The node names will be “`:_gate`” and “`:_gate_open`” -* `fence_gate_name`: User-visible name (`description`) -* `texture`: Texture to apply on the fence gate (all sides) -* `groups`: Table of groups to which the fence gate belongs to -* `hardness`: Hardness (if unsure, pick the hardness of the material node) -* `blast_resistance`: Blast resistance (if unsure, pick the blast resistance of the material node) -* `sounds`: Node sound table for the fence gate -* `sound_open`: Sound to play when opening fence gate (optional, default is wooden sound) -* `sound_close`: Sound to play when closing fence gate (optional, default is wooden sound) -* `sound_gain_open`: Gain (0.0-1.0) of the opening fence gate sound (optional, default is 0.3) -* `sound_gain_close`: Gain (0.0-1.0) of the closing fence gate sound (optional, default is 0.3) - -Notes: Fence gates will always have the group `fence_gate=1`. The open fence gate will always have the group `not_in_creative_inventory=1`. - -### Return value -This function returns 2 values, in the following order: - -1. Itemstring of the closed fence gate -2. Itemstring of the open fence gate - -## `mcl_fences.register_fence_and_fence_gate = function(id, fence_name, fence_gate_name, texture, groups, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)` -Registers a fence and fence gate. This is basically a combination of the two functions above. This is the recommended way to add a fence / fence gate pair. -This will register 3 nodes in total without crafting recipes. - -* `id`: A part of the itemstring of the nodes to create. -* `fence_name`: User-visible name (`description`) of the fence -* `fence_gate_name`: User-visible name (`description`) of the fence gate -* `texture`: Texture to apply on the fence and fence gate (all sides) -* `groups`: Table of groups to which the fence and fence gate belong to -* `hardness`: Hardness (if unsure, pick the hardness of the material node) -* `blast_resistance`: Blast resistance (if unsure, pick the blast resistance of the material node) -* `connects_to`: Table of nodes (itemstrings) to which the fence will connect to. Use `group:` for all members of the group `` -* `sounds`: Node sound table for the fence and the fence gate -* `sound_open`: Sound to play when opening fence gate (optional, default is wooden sound) -* `sound_close`: Sound to play when closing fence gate (optional, default is wooden sound) -* `sound_gain_open`: Gain (0.0-1.0) of the opening fence gate sound (optional, default is 0.3) -* `sound_gain_close`: Gain (0.0-1.0) of the closing fence gate sound (optional, default is 0.3) - -### Return value -This function returns 3 values, in this order: - -1. Itemstring of the fence -2. Itemstring of the closed fence gate -3. Itemstring of the open fence gate - diff --git a/mods/ITEMS/mcl_fences/README.txt b/mods/ITEMS/mcl_fences/README.txt deleted file mode 100644 index 91d5902fa..000000000 --- a/mods/ITEMS/mcl_fences/README.txt +++ /dev/null @@ -1,22 +0,0 @@ -This mod adds fences and fence gates. - -License of source code and textures: ------------------------------------- -Written 2013 by BlockMen - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - - -License and source of sounds: ------------------------------ -doors_fencegate_open.ogg: - http://www.freesound.org/people/mhtaylor67/sounds/126041/ - (CC0 1.0) -doors_fencegate_close.ogg: - http://www.freesound.org/people/BarkersPinhead/sounds/274807/ - (CC-BY-3.0) - http://www.freesound.org/people/rivernile7/sounds/249573/ - (CC-BY-3.0) - - diff --git a/mods/ITEMS/mcl_fences/init.lua b/mods/ITEMS/mcl_fences/init.lua deleted file mode 100644 index b14d103d2..000000000 --- a/mods/ITEMS/mcl_fences/init.lua +++ /dev/null @@ -1,306 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Node box -local p = {-2/16, -0.5, -2/16, 2/16, 0.5, 2/16} -local x1 = {-0.5, 4/16, -1/16, -2/16, 7/16, 1/16} --oben(quer) -x -local x12 = {-0.5, -2/16, -1/16, -2/16, 1/16, 1/16} --unten(quer) -x -local x2 = {2/16, 4/16, -1/16, 0.5, 7/16, 1/16} --oben(quer) x -local x22 = {2/16, -2/16, -1/16, 0.5, 1/16, 1/16} --unten(quer) x -local z1 = {-1/16, 4/16, -0.5, 1/16, 7/16, -2/16} --oben(quer) -z -local z12 = {-1/16, -2/16, -0.5, 1/16, 1/16, -2/16} --unten(quer) -z -local z2 = {-1/16, 4/16, 2/16, 1/16, 7/16, 0.5} --oben(quer) z -local z22 = {-1/16, -2/16, 2/16, 1/16, 1/16, 0.5} --unten(quer) z - --- Collision box -local cp = {-2/16, -0.5, -2/16, 2/16, 1.01, 2/16} -local cx1 = {-0.5, -0.5, -2/16, -2/16, 1.01, 2/16} --unten(quer) -x -local cx2 = {2/16, -0.5, -2/16, 0.5, 1.01, 2/16} --unten(quer) x -local cz1 = {-2/16, -0.5, -0.5, 2/16, 1.01, -2/16} --unten(quer) -z -local cz2 = {-2/16, -0.5, 2/16, 2/16, 1.01, 0.5} --unten(quer) z - -mcl_fences = {} - -function mcl_fences.register_fence(id, fence_name, texture, groups, hardness, blast_resistance, connects_to, sounds) - local cgroups = table.copy(groups) - if cgroups == nil then cgroups = {} end - cgroups.fence = 1 - cgroups.deco_block = 1 - if connects_to == nil then - connects_to = {} - else - connects_to = table.copy(connects_to) - end - local fence_id = minetest.get_current_modname()..":"..id - table.insert(connects_to, "group:solid") - table.insert(connects_to, "group:fence_gate") - table.insert(connects_to, fence_id) - minetest.register_node(fence_id, { - description = fence_name, - _doc_items_longdesc = S("Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump."), - tiles = {texture}, - inventory_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126", - wield_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126", - paramtype = "light", - is_ground_content = false, - groups = cgroups, - stack_max = 64, - sunlight_propagates = true, - drawtype = "nodebox", - connect_sides = { "front", "back", "left", "right" }, - connects_to = connects_to, - node_box = { - type = "connected", - fixed = {p}, - connect_front = {z1,z12}, - connect_back = {z2,z22,}, - connect_left = {x1,x12}, - connect_right = {x2,x22}, - }, - collision_box = { - type = "connected", - fixed = {cp}, - connect_front = {cz1}, - connect_back = {cz2,}, - connect_left = {cx1}, - connect_right = {cx2}, - }, - sounds = sounds, - _mcl_blast_resistance = blast_resistance, - _mcl_hardness = hardness, - }) - - return fence_id -end - -function mcl_fences.register_fence_gate(id, fence_gate_name, texture, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close) - local meta2 - local state2 = 0 - - local function update_gate(pos, node) - minetest.set_node(pos, node) - end - - local gate_id = minetest.get_current_modname()..":"..id.."_gate" - local open_gate_id = gate_id .. "_open" - if not sound_open then - sound_open = "doors_fencegate_open" - end - if not sound_close then - sound_close = "doors_fencegate_close" - end - if not sound_gain_open then - sound_gain_open = 0.3 - end - if not sound_gain_close then - sound_gain_close = 0.3 - end - local function punch_gate(pos, node) - meta2 = minetest.get_meta(pos) - state2 = meta2:get_int("state") - local tmp_node2 - if state2 == 1 then - state2 = 0 - minetest.sound_play(sound_close, {gain = sound_gain_close, max_hear_distance = 10, pos = pos}, true) - tmp_node2 = {name=gate_id, param1=node.param1, param2=node.param2} - else - state2 = 1 - minetest.sound_play(sound_open, {gain = sound_gain_open, max_hear_distance = 10, pos = pos}, true) - tmp_node2 = {name=open_gate_id, param1=node.param1, param2=node.param2} - end - update_gate(pos, tmp_node2) - meta2:set_int("state", state2) - end - - local on_rotate - if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple - end - - local cgroups = table.copy(groups) - if cgroups == nil then cgroups = {} end - cgroups.fence_gate = 1 - cgroups.deco_block = 1 - - cgroups.mesecon_ignore_opaque_dig = 1 - cgroups.mesecon_effector_on = 1 - cgroups.fence_gate = 1 - minetest.register_node(open_gate_id, { - tiles = {texture}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - groups = cgroups, - drop = gate_id, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss - {6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss - {-0.5, 4/16, 1/16, -6/16, 7/16, 6/16}, --oben-links(quer) x - {-0.5, -2/16, 1/16, -6/16, 1/16, 6/16}, --unten-links(quer) x - {6/16, 4/16, 1/16, 0.5, 7/16, 0.5}, --oben-rechts(quer) x - {6/16, -2/16, 1/16, 0.5, 1/16, 0.5}, --unten-rechts(quer) x - {-0.5, -2/16, 6/16, -6/16, 7/16, 0.5}, --mitte links - {6/16, 1/16, 0.5, 0.5, 4/16, 6/16}, --mitte rechts - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate - } - }, - on_rightclick = function(pos, node, clicker) - punch_gate(pos, node) - end, - mesecons = {effector = { - action_off = (function(pos, node) - punch_gate(pos, node) - end), - }}, - on_rotate = on_rotate, - sounds = sounds, - _mcl_blast_resistance = blast_resistance, - _mcl_hardness = hardness, - }) - - local cgroups_closed = table.copy(cgroups) - cgroups_closed.mesecon_effector_on = nil - cgroups_closed.mesecon_effector_off = nil - minetest.register_node(gate_id, { - description = fence_gate_name, - _tt_help = S("Openable by players and redstone power"), - _doc_items_longdesc = S("Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates."), - _doc_items_usagehelp = S("Right-click the fence gate to open or close it."), - tiles = {texture}, - inventory_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126", - wield_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126", - paramtype = "light", - is_ground_content = false, - stack_max = 64, - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = true, - groups = cgroups_closed, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss - {6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss - {-2/16, -2/16, -1/16, 0, 7/16, 1/16}, --mitte links - {0, -2/16, -1/16, 2/16, 7/16, 1/16}, --mitte rechts - {-0.5, 4/16, -1/16, -2/16, 7/16, 1/16}, --oben(quer) -z - {-0.5, -2/16, -1/16, -2/16, 1/16, 1/16}, --unten(quer) -z - {2/16, 4/16, -1/16, 0.5, 7/16, 1/16}, --oben(quer) z - {2/16, -2/16, -1/16, 0.5, 1/16, 1/16}, --unten(quer) z - } - }, - collision_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -2/16, 0.5, 1, 2/16}, --gate - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate - } - }, - on_construct = function(pos) - meta2 = minetest.get_meta(pos) - meta2:set_int("state", 0) - state2 = 0 - end, - mesecons = {effector = { - action_on = (function(pos, node) - punch_gate(pos, node) - end), - }}, - on_rotate = on_rotate, - on_rightclick = function(pos, node, clicker) - punch_gate(pos, node) - end, - sounds = sounds, - _mcl_blast_resistance = blast_resistance, - _mcl_hardness = hardness, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", gate_id, "nodes", open_gate_id) - end - - return gate_id, open_gate_id -end - -function mcl_fences.register_fence_and_fence_gate(id, fence_name, fence_gate_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close, texture_fence_gate) - if texture_fence_gate == nil then - texture_fence_gate = texture_fence - end - local fence_id = mcl_fences.register_fence(id, fence_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds) - local gate_id, open_gate_id = mcl_fences.register_fence_gate(id, fence_gate_name, texture_fence_gate, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close) - return fence_id, gate_id, open_gate_id -end - -local wood_groups = {handy=1,axey=1, flammable=2,fence_wood=1, fire_encouragement=5, fire_flammability=20} -local wood_connect = {"group:fence_wood"} -local wood_sounds = mcl_sounds.node_sound_wood_defaults() - -local woods = { - {"", S("Oak Fence"), S("Oak Fence Gate"), "mcl_fences_fence_oak.png", "mcl_fences_fence_gate_oak.png", "mcl_core:wood"}, - {"spruce", S("Spruce Fence"), S("Spruce Fence Gate"), "mcl_fences_fence_spruce.png", "mcl_fences_fence_gate_spruce.png", "mcl_core:sprucewood"}, - {"birch", S("Birch Fence"), S("Birch Fence Gate"), "mcl_fences_fence_birch.png", "mcl_fences_fence_gate_birch.png", "mcl_core:birchwood"}, - {"jungle", S("Jungle Fence"), S("Jungle Fence Gate"), "mcl_fences_fence_jungle.png", "mcl_fences_fence_gate_jungle.png", "mcl_core:junglewood"}, - {"dark_oak", S("Dark Oak Fence"), S("Dark Oak Fence Gate"), "mcl_fences_fence_big_oak.png", "mcl_fences_fence_gate_big_oak.png", "mcl_core:darkwood"}, - {"acacia", S("Acacia Fence"), S("Acacia Fence Gate"), "mcl_fences_fence_acacia.png", "mcl_fences_fence_gate_acacia.png", "mcl_core:acaciawood"}, -} - -for w=1, #woods do - local wood = woods[w] - local id, id_gate - if wood[1] == "" then - id = "fence" - id_gate = "fence_gate" - else - id = wood[1].."_fence" - id_gate = wood[1].."_fence_gate" - end - mcl_fences.register_fence_and_fence_gate(id, wood[2], wood[3], wood[4], wood_groups, 2, 15, wood_connect, wood_sounds) - - minetest.register_craft({ - output = "mcl_fences:"..id.." 3", - recipe = { - {wood[6], "mcl_core:stick", wood[6]}, - {wood[6], "mcl_core:stick", wood[6]}, - } - }) - minetest.register_craft({ - output = "mcl_fences:"..id_gate, - recipe = { - {"mcl_core:stick", wood[6], "mcl_core:stick"}, - {"mcl_core:stick", wood[6], "mcl_core:stick"}, - } - }) -end - - --- Nether Brick Fence (without fence gate!) -mcl_fences.register_fence("nether_brick_fence", S("Nether Brick Fence"), "mcl_fences_fence_nether_brick.png", {pickaxey=1, deco_block=1, fence_nether_brick=1}, 2, 30, {"group:fence_nether_brick"}, mcl_sounds.node_sound_stone_defaults()) - -minetest.register_craft({ - output = "mcl_fences:nether_brick_fence 6", - recipe = { - {"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"}, - {"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:fence_wood", - burntime = 15, -}) diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr deleted file mode 100644 index e4f2a5fa6..000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Zäune sind Gebäude, die den Weg blockieren. Sie verbinden sich gegenseitig und anderen festen Blöcken. Man kann sie nicht mit normalen Sprüngen überspringen. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Zauntore können geöffnet und geschlossen werden und können nicht übersprungen werden. Zäune lassen sich gut mit Zauntoren verbinden. -Right-click the fence gate to open or close it.=Rechtsklicken Sie auf ein Zauntor, um es zu öffnen oder zu schließen. -Oak Fence=Eichenzaun -Oak Fence Gate=Eichenzauntor -Spruce Fence=Fichtenzaun -Spruce Fence Gate=Fichtenzauntor -Birch Fence=Birkenzaun -Birch Fence Gate=Birkenzauntor -Jungle Fence=Dschungelzaun -Jungle Fence Gate=Dschungelzauntor -Dark Oak Fence=Schwarzeichenzaun -Dark Oak Fence Gate=Schwarzeichenzauntor -Acacia Fence=Akazienzaun -Acacia Fence Gate=Akazienzauntor -Nether Brick Fence=Netherziegelzaun -Openable by players and redstone power=Zu öffnen von Spielern und Redstoneenergie diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.es.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.es.tr deleted file mode 100644 index 1e8c3798a..000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.es.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Las cercas son estructuras que bloquean el camino. Las cercas se conectarán entre sí y con los bloques sólidos. No se pueden saltar con un simple salto. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Las puertas de valla se pueden abrir o cerrar y no se pueden saltar. Las cercas se conectarán muy bien a las puertas de la cerca. -Right-click the fence gate to open or close it.=Haga clic derecho en la puerta de la cerca para abrirla o cerrarla. -Oak Fence=Valla de roble -Oak Fence Gate=Puerta de roble -Spruce Fence=Valla de abeto -Spruce Fence Gate=Puerta de abeto -Birch Fence=Valla de abedul -Birch Fence Gate=Puerta de abedul -Jungle Fence=Valla de la selva -Jungle Fence Gate=Puerta de valla de la selva -Dark Oak Fence=Valla de roble oscuro -Dark Oak Fence Gate=Puerta de roble oscuro -Acacia Fence=Valla de acacia -Acacia Fence Gate=Puerta de acacia -Nether Brick Fence=Valla de ladrillo abisal \ No newline at end of file diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.fr.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.fr.tr deleted file mode 100644 index ccfb86d95..000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.fr.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Les barrières sont des structures qui bloquent le chemin. Les barrières se connecteront les unes aux autres et aux blocs solides. Ils ne peuvent pas être sautés par un simple saut. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Les portillions peuvent être ouvertes ou fermées et ne peuvent pas être sautées. Les barrières se connecteront bien aux portillions. -Right-click the fence gate to open or close it.=Cliquez avec le bouton droit sur le portillion pour l'ouvrir ou la fermer. -Oak Fence=Barrière en bois de Chêne -Oak Fence Gate=Portillion en bois de Chêne -Spruce Fence=Barrière en bois de Sapin -Spruce Fence Gate=Portillion en bois de Sapin -Birch Fence=Barrière en bois de Bouleau -Birch Fence Gate=Portillion en bois de Bouleau -Jungle Fence=Barrière en bois d'Acajou -Jungle Fence Gate=Portillion en bois d'Acajou -Dark Oak Fence=Barrière en bois de Chêne Noir -Dark Oak Fence Gate=Portillion en bois de Chêne Noir -Acacia Fence=Barrière en bois d'Acacia -Acacia Fence Gate=Portillion en bois d'Acacia -Nether Brick Fence=Barrière en Brique du Nether -Openable by players and redstone power=Ouvrable par les joueurs et la puissance redstone diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr deleted file mode 100644 index 794986b58..000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Płoty są strukturami blokującymi przejścia. Nie połączą się one z innymi blokami. Nie można też nad nimi przeskoczyć pojedynczym skokiem. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Furtki mogą być otwierane i zamykane, ale nie można ich przeskoczyć. Łączą się one ładnie z płotem. -Right-click the fence gate to open or close it.=Naciśnij prawy przycisk myszy by otworzyć lub zamknąć furtkę. -Oak Fence=Dębowy płot -Oak Fence Gate=Dębowa furtka -Spruce Fence=Świerkowy płot -Spruce Fence Gate=Świerkowa furtka -Birch Fence=Brzozowy płot -Birch Fence Gate=Brzozowa furtka -Jungle Fence=Tropikalny płot -Jungle Fence Gate=Tropikalna furtka -Dark Oak Fence=Ciemno-dębowy płot -Dark Oak Fence Gate=Ciemno-dębowa furtka -Acacia Fence=Akacjowy płot -Acacia Fence Gate=Akacjowa furtka -Nether Brick Fence=Płot z Netherowych cegieł -Openable by players and redstone power=Może być otworzony przez graczy i energię czerwienitu - diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.ru.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.ru.tr deleted file mode 100644 index bafd9ba83..000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.ru.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Заборы это сооружения, преграждающие путь. Блоки заборов соединяются между собой и прикрепляются к твёрдым блокам. Через них нельзя перепрыгивать одиночным прыжком. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Калитки могут быть открытыми и закрытыми. Их нельзя перепрыгивать. -Right-click the fence gate to open or close it.=Кликните правой по калитке, чтобы открыть или закрыть её. -Oak Fence=Дубовый забор -Oak Fence Gate=Дубовая калитка -Spruce Fence=Еловый забор -Spruce Fence Gate=Еловая калитка -Birch Fence=Берёзовый забор -Birch Fence Gate=Берёзовая калитка -Jungle Fence=Забор из дерева джунглей -Jungle Fence Gate=Калитка из дерева джунглей -Dark Oak Fence=Забор из тёмного дуба -Dark Oak Fence Gate=Калитка из тёмного дуба -Acacia Fence=Забор из акации -Acacia Fence Gate=Калитка из акации -Nether Brick Fence=Забор из адского кирпича -Openable by players and redstone power=Открываются игроками и сигналами редстоуна diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.zh_TW.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.zh_TW.tr deleted file mode 100644 index 5f360245c..000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.zh_TW.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=柵欄是阻擋道路的結構。柵欄會連接到彼此和固體方塊。它們不能用簡單的跳躍方式跳過去。 -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=柵欄門可以打開或關閉,並且不能跳過。 柵欄將很好地連接到柵欄門。 -Right-click the fence gate to open or close it.=右鍵單擊柵欄門以將其打開或關閉。 -Oak Fence=橡木柵欄 -Oak Fence Gate=橡木柵欄門 -Spruce Fence=杉木柵欄 -Spruce Fence Gate=杉木柵欄門 -Birch Fence=樺木柵欄 -Birch Fence Gate=樺木柵欄門 -Jungle Fence=叢林木柵欄 -Jungle Fence Gate=叢林木柵欄門 -Dark Oak Fence=黑橡木柵欄 -Dark Oak Fence Gate=黑橡木柵欄門 -Acacia Fence=相思木柵欄 -Acacia Fence Gate=相思木柵欄門 -Nether Brick Fence=地獄磚柵欄 -Openable by players and redstone power=可被紅石或玩家打開 diff --git a/mods/ITEMS/mcl_fences/locale/template.txt b/mods/ITEMS/mcl_fences/locale/template.txt deleted file mode 100644 index a4cd1cbe7..000000000 --- a/mods/ITEMS/mcl_fences/locale/template.txt +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.= -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.= -Right-click the fence gate to open or close it.= -Oak Fence= -Oak Fence Gate= -Spruce Fence= -Spruce Fence Gate= -Birch Fence= -Birch Fence Gate= -Jungle Fence= -Jungle Fence Gate= -Dark Oak Fence= -Dark Oak Fence Gate= -Acacia Fence= -Acacia Fence Gate= -Nether Brick Fence= -Openable by players and redstone power= diff --git a/mods/ITEMS/mcl_fences/mod.conf b/mods/ITEMS/mcl_fences/mod.conf deleted file mode 100644 index 8b20dd169..000000000 --- a/mods/ITEMS/mcl_fences/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_fences -depends = mcl_core, mcl_sounds -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_close.ogg b/mods/ITEMS/mcl_fences/sounds/doors_fencegate_close.ogg deleted file mode 100644 index d42590ffb..000000000 Binary files a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_open.ogg b/mods/ITEMS/mcl_fences/sounds/doors_fencegate_open.ogg deleted file mode 100644 index f6dfd1d97..000000000 Binary files a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_acacia.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_acacia.png deleted file mode 100644 index 85dae567f..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_big_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_big_oak.png deleted file mode 100644 index de8648e8e..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_birch.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_birch.png deleted file mode 100644 index 96121e128..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_acacia.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_acacia.png deleted file mode 100644 index e18dc9cc2..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_big_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_big_oak.png deleted file mode 100644 index f7c0eccd3..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_birch.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_birch.png deleted file mode 100644 index 7d4efc7ca..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_jungle.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_jungle.png deleted file mode 100644 index 5ce39690c..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_mask.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_mask.png deleted file mode 100644 index eeefdf704..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_mask.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_oak.png deleted file mode 100644 index 348c8b24f..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_spruce.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_spruce.png deleted file mode 100644 index 5c8a0bb57..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_jungle.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_jungle.png deleted file mode 100644 index dbc5684ac..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_mask.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_mask.png deleted file mode 100644 index dfa9b34d9..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_mask.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_nether_brick.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_nether_brick.png deleted file mode 100644 index f81609032..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_oak.png deleted file mode 100644 index 6c48e53e8..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_spruce.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_spruce.png deleted file mode 100644 index 2ee52abf6..000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/README.txt b/mods/ITEMS/mcl_fire/README.txt deleted file mode 100644 index af46528a5..000000000 --- a/mods/ITEMS/mcl_fire/README.txt +++ /dev/null @@ -1,34 +0,0 @@ -mcl_fire: Fire mod for MineClone 2 -Based on fire from Minetest Game -================================== - -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) - -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 of media (sounds) --------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files ------------------------ -Muadtralk (CC BY-SA 3.0) - fire_basic_flame_animated.png - -Dynamicell (CC BY 3.0) -http://www.freesound.org/people/Dynamicell/sounds/17548/ - fire_fire.*.ogg - -Benboncan (CC BY 3.0) -https://www.freesound.org/people/Benboncan/sounds/66457/ - fire_flint_and_steel.ogg - -Other sound files by Perttu Ahola (celeron55) (CC BY-SA 3.0). diff --git a/mods/ITEMS/mcl_fire/fire_charge.lua b/mods/ITEMS/mcl_fire/fire_charge.lua deleted file mode 100644 index 4d18e44ed..000000000 --- a/mods/ITEMS/mcl_fire/fire_charge.lua +++ /dev/null @@ -1,64 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local get_node = minetest.get_node -local add_entity = minetest.add_entity - --- Fire Charge -minetest.register_craftitem("mcl_fire:fire_charge", { - description = S("Fire Charge"), - _tt_help = S("Dispenser projectile").."\n"..S("Starts fires and ignites blocks"), - _doc_items_longdesc = S("Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly."), - _doc_items_usagehelp = S("Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up."), - inventory_image = "mcl_fire_fire_charge.png", - liquids_pointable = false, - stack_max = 64, - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - - -- Check protection - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - - -- Ignite/light fire - local node = get_node(pointed_thing.under) - if pointed_thing.type == "node" then - local nodedef = minetest.registered_nodes[node.name] - if nodedef and nodedef._on_ignite then - local overwrite = nodedef._on_ignite(user, pointed_thing) - if not overwrite then - mcl_fire.set_fire(pointed_thing, user, false) - end - else - mcl_fire.set_fire(pointed_thing, user, false) - end - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item() - end - end - return itemstack - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Throw fire charge - local shootpos = vector.add(pos, vector.multiply(dropdir, 0.51)) - local fireball = add_entity(shootpos, "mobs_mc:blaze_fireball") - local ent = fireball:get_luaentity() - ent._shot_from_dispenser = true - local v = ent.velocity or 1 - fireball:set_velocity(vector.multiply(dropdir, v)) - ent.switch = 1 - stack:take_item() - end, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fire:fire_charge 3", - recipe = { "mcl_mobitems:blaze_powder", "group:coal", "mcl_mobitems:gunpowder" }, -}) diff --git a/mods/ITEMS/mcl_fire/flint_and_steel.lua b/mods/ITEMS/mcl_fire/flint_and_steel.lua deleted file mode 100644 index 39a4ce882..000000000 --- a/mods/ITEMS/mcl_fire/flint_and_steel.lua +++ /dev/null @@ -1,80 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local get_node = minetest.get_node -local add_node = minetest.add_node - --- Flint and Steel -minetest.register_tool("mcl_fire:flint_and_steel", { - description = S("Flint and Steel"), - _tt_help = S("Starts fires and ignites blocks"), - _doc_items_longdesc = S("Flint and steel is a tool to start fires and ignite blocks."), - _doc_items_usagehelp = S("Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited."), - inventory_image = "mcl_fire_flint_and_steel.png", - liquids_pointable = false, - stack_max = 1, - groups = { tool = 1, }, - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - -- Check protection - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - - local idef = itemstack:get_definition() - minetest.sound_play( - "fire_flint_and_steel", - {pos = pointed_thing.above, gain = 0.5, max_hear_distance = 8}, - true - ) - local used = false - if pointed_thing.type == "node" then - local nodedef = minetest.registered_nodes[get_node(pointed_thing.under).name] - if nodedef and nodedef._on_ignite then - local overwrite = nodedef._on_ignite(user, pointed_thing) - if not overwrite then - mcl_fire.set_fire(pointed_thing, user, false) - end - else - mcl_fire.set_fire(pointed_thing, user, false) - end - used = true - end - if itemstack:get_count() == 0 and idef.sound and idef.sound.breaks then - minetest.sound_play(idef.sound.breaks, {pos=user:get_pos(), gain=0.5}, true) - end - if (not minetest.is_creative_enabled(user:get_player_name())) and used == true then - itemstack:add_wear(65535/65) -- 65 uses - end - return itemstack - end, - _dispense_into_walkable = true, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Ignite air - if dropnode.name == "air" then - add_node(droppos, {name="mcl_fire:fire"}) - if not minetest.is_creative_enabled("") then - stack:add_wear(65535/65) -- 65 uses - end - -- Ignite TNT - elseif dropnode.name == "mcl_tnt:tnt" then - tnt.ignite(droppos) - if not minetest.is_creative_enabled("") then - stack:add_wear(65535/65) -- 65 uses - end - end - return stack - end, - sound = { breaks = "default_tool_breaks" }, - _mcl_uses = 65, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fire:flint_and_steel", - recipe = { "mcl_core:iron_ingot", "mcl_core:flint"}, -}) diff --git a/mods/ITEMS/mcl_fire/init.lua b/mods/ITEMS/mcl_fire/init.lua deleted file mode 100644 index 79b46a701..000000000 --- a/mods/ITEMS/mcl_fire/init.lua +++ /dev/null @@ -1,480 +0,0 @@ --- Global namespace for functions - -mcl_fire = {} - -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - -local has_mcl_portals = minetest.get_modpath("mcl_portals") - -local set_node = minetest.set_node -local get_node = minetest.get_node -local add_node = minetest.add_node -local remove_node = minetest.remove_node -local swap_node = minetest.swap_node -local get_node_or_nil = minetest.get_node_or_nil - -local find_nodes_in_area = minetest.find_nodes_in_area -local find_node_near = minetest.find_node_near -local get_item_group = minetest.get_item_group - -local get_connected_players = minetest.get_connected_players - -local vector = vector -local math = math - -local adjacents = { - { x =-1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 1, z = 0 }, - { x = 0, y =-1, z = 0 }, - { x = 0, y = 0, z =-1 }, - { x = 0, y = 0, z = 1 }, -} - -local function shuffle_table(t) - for i = #t, 1, -1 do - local r = math.random(i) - t[i], t[r] = t[r], t[i] - end -end -shuffle_table(adjacents) - -local function has_flammable(pos) - for k,v in pairs(adjacents) do - local p=vector.add(pos,v) - local n=minetest.get_node_or_nil(p) - if n and minetest.get_item_group(n.name, "flammable") ~= 0 then - return p - end - end -end - -local smoke_pdef = { - amount = 0.009, - maxexptime = 4.0, - minvel = { x = -0.1, y = 0.3, z = -0.1 }, - maxvel = { x = 0.1, y = 1.6, z = 0.1 }, - minsize = 4.0, - maxsize = 4.5, - minrelpos = { x = -0.45, y = -0.45, z = -0.45 }, - maxrelpos = { x = 0.45, y = 0.45, z = 0.45 }, -} - --- --- Items --- - --- Flame nodes - --- Fire settings - --- When enabled, fire destroys other blocks. -local fire_enabled = minetest.settings:get_bool("enable_fire", true) - --- Enable sound -local flame_sound = minetest.settings:get_bool("flame_sound", true) - --- Help texts -local fire_help, eternal_fire_help -if fire_enabled then - fire_help = S("Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.") -else - fire_help = S("Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.") -end - -if fire_enabled then - eternal_fire_help = S("Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.") -else - eternal_fire_help = S("Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.") -end - -local function spawn_fire(pos, age) - set_node(pos, {name="mcl_fire:fire", param2 = age}) - minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z}) -end - -minetest.register_node("mcl_fire:fire", { - description = S("Fire"), - _doc_items_longdesc = fire_help, - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = minetest.LIGHT_MAX, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 1, - groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston=1, destroys_items=1, set_on_fire=8}, - floodable = true, - on_flood = function(pos, oldnode, newnode) - if get_item_group(newnode.name, "water") ~= 0 then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - end - end, - drop = "", - sounds = {}, - -- Turn into eternal fire on special blocks, light Nether portal (if possible), start burning timer - on_construct = function(pos) - local bpos = {x=pos.x, y=pos.y-1, z=pos.z} - local under = get_node(bpos).name - - local dim = mcl_worlds.pos_to_dimension(bpos) - if under == "mcl_nether:magma" or under == "mcl_nether:netherrack" or (under == "mcl_core:bedrock" and dim == "end") then - swap_node(pos, {name = "mcl_fire:eternal_fire"}) - end - - if has_mcl_portals then - mcl_portals.light_nether_portal(pos) - end - - mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - end, - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_fire:eternal_fire", { - description = S("Eternal Fire"), - _doc_items_longdesc = eternal_fire_help, - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = minetest.LIGHT_MAX, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 1, - groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston = 1, destroys_items = 1, set_on_fire=8}, - floodable = true, - on_flood = function(pos, oldnode, newnode) - if get_item_group(newnode.name, "water") ~= 0 then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - end - end, - -- Start burning timer and light Nether portal (if possible) - on_construct = function(pos) - if has_mcl_portals then --Calling directly minetest.get_modpath consumes 4x more compute time - mcl_portals.light_nether_portal(pos) - end - mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - end, - sounds = {}, - drop = "", - _mcl_blast_resistance = 0, -}) - --- --- Sound --- - -if flame_sound then - - local handles = {} - local timer = 0 - - -- Parameters - - local radius = 8 -- Flame node search radius around player - local cycle = 3 -- Cycle time for sound updates - - -- Update sound for player - - function mcl_fire.update_player_sound(player) - local player_name = player:get_player_name() - -- Search for flame nodes in radius around player - local ppos = player:get_pos() - local areamin = vector.subtract(ppos, radius) - local areamax = vector.add(ppos, radius) - local fpos, num = find_nodes_in_area( - areamin, - areamax, - {"mcl_fire:fire", "mcl_fire:eternal_fire"} - ) - -- Total number of flames in radius - local flames = (num["mcl_fire:fire"] or 0) + - (num["mcl_fire:eternal_fire"] or 0) - -- Stop previous sound - if handles[player_name] then - minetest.sound_fade(handles[player_name], -0.4, 0.0) - handles[player_name] = nil - end - -- If flames - if flames > 0 then - -- Find centre of flame positions - local fposmid = fpos[1] - -- If more than 1 flame - if #fpos > 1 then - local fposmin = areamax - local fposmax = areamin - for i = 1, #fpos do - local fposi = fpos[i] - if fposi.x > fposmax.x then - fposmax.x = fposi.x - end - if fposi.y > fposmax.y then - fposmax.y = fposi.y - end - if fposi.z > fposmax.z then - fposmax.z = fposi.z - end - if fposi.x < fposmin.x then - fposmin.x = fposi.x - end - if fposi.y < fposmin.y then - fposmin.y = fposi.y - end - if fposi.z < fposmin.z then - fposmin.z = fposi.z - end - end - fposmid = vector.divide(vector.add(fposmin, fposmax), 2) - end - -- Play sound - local handle = minetest.sound_play( - "fire_fire", - { - pos = fposmid, - to_player = player_name, - gain = math.min(0.06 * (1 + flames * 0.125), 0.18), - max_hear_distance = 32, - loop = true, -- In case of lag - } - ) - -- Store sound handle for this player - if handle then - handles[player_name] = handle - end - end - end - - -- Cycle for updating players sounds - - minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < cycle then - return - end - - timer = 0 - local players = get_connected_players() - for n = 1, #players do - mcl_fire.update_player_sound(players[n]) - end - end) - - -- Stop sound and clear handle on player leave - - minetest.register_on_leaveplayer(function(player) - local player_name = player:get_player_name() - if handles[player_name] then - minetest.sound_stop(handles[player_name]) - handles[player_name] = nil - end - end) -end - --- [...]a fire that is not adjacent to any flammable block does not spread, even to another flammable block within the normal range. --- https://minecraft.fandom.com/wiki/Fire#Spread - -local function check_aircube(p1,p2) - local nds=minetest.find_nodes_in_area(p1,p2,{"air"}) - shuffle_table(nds) - for k,v in pairs(nds) do - if has_flammable(v) then return v end - end -end - --- [...] a fire block can turn any air block that is adjacent to a flammable block into a fire block. This can happen at a distance of up to one block downward, one block sideways (including diagonals), and four blocks upward of the original fire block (not the block the fire is on/next to). -local function get_ignitable(pos) - return check_aircube(vector.add(pos,vector.new(-1,-1,-1)),vector.add(pos,vector.new(1,4,1))) -end --- Fire spreads from a still lava block similarly: any air block one above and up to one block sideways (including diagonals) or two above and two blocks sideways (including diagonals) that is adjacent to a flammable block may be turned into a fire block. -local function get_ignitable_by_lava(pos) - return check_aircube(vector.add(pos,vector.new(-1,1,-1)),vector.add(pos,vector.new(1,1,1))) or check_aircube(vector.add(pos,vector.new(-2,2,-2)),vector.add(pos,vector.new(2,2,2))) or nil -end - --- --- ABMs --- - --- Extinguish all flames quickly with water and such - -minetest.register_abm({ - label = "Extinguish fire", - nodenames = {"mcl_fire:fire", "mcl_fire:eternal_fire"}, - neighbors = {"group:puts_out_fire"}, - interval = 3, - chance = 1, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - minetest.remove_node(pos) - minetest.sound_play("fire_extinguish_flame", - {pos = pos, max_hear_distance = 16, gain = 0.15}, true) - end, -}) - --- Enable the following ABMs according to 'enable fire' setting -if not fire_enabled then - - -- Occasionally remove fire if fire disabled - -- NOTE: Fire is normally extinguished in timer function - minetest.register_abm({ - label = "Remove disabled fire", - nodenames = {"mcl_fire:fire"}, - interval = 10, - chance = 10, - catch_up = false, - action = minetest.remove_node, - }) - -else -- Fire enabled - - -- Fire Spread - minetest.register_abm({ - label = "Ignite flame", - nodenames ={"mcl_fire:fire","mcl_fire:eternal_fire"}, - interval = 7, - chance = 12, - catch_up = false, - action = function(pos) - local p = get_ignitable(pos) - if p then - spawn_fire(p) - shuffle_table(adjacents) - end - end - }) - - --lava fire spread - minetest.register_abm({ - label = "Ignite fire by lava", - nodenames = {"mcl_core:lava_source","mcl_nether:nether_lava_source"}, - neighbors = {"air","group:flammable"}, - interval = 7, - chance = 3, - catch_up = false, - action = function(pos) - local p=get_ignitable_by_lava(pos) - if p then - spawn_fire(p) - end - end, - }) - - minetest.register_abm({ - label = "Remove fires", - nodenames = {"mcl_fire:fire"}, - interval = 7, - chance = 3, - catch_up = false, - action = function(pos) - local p=has_flammable(pos) - if p then - local n=minetest.get_node_or_nil(p) - if n and minetest.get_item_group(n.name, "flammable") < 1 then - minetest.remove_node(pos) - end - else - minetest.remove_node(pos) - end - end, - }) - - -- Remove flammable nodes around basic flame - minetest.register_abm({ - label = "Remove flammable nodes", - nodenames = {"mcl_fire:fire","mcl_fire:eternal_fire"}, - neighbors = {"group:flammable"}, - interval = 5, - chance = 18, - catch_up = false, - action = function(pos) - local p = has_flammable(pos) - if not p then - return - end - - local nn = minetest.get_node(p).name - local def = minetest.registered_nodes[nn] - local fgroup = minetest.get_item_group(nn, "flammable") - - if def and def._on_burn then - def._on_burn(p) - elseif fgroup ~= -1 then - spawn_fire(p) - minetest.check_for_falling(p) - end - end - }) -end - --- Set pointed_thing on (normal) fire. --- * pointed_thing: Pointed thing to ignite --- * player: Player who sets fire or nil if nobody --- * allow_on_fire: If false, can't ignite fire on fire (default: true) -function mcl_fire.set_fire(pointed_thing, player, allow_on_fire) - local pname - if player == nil then - pname = "" - else - pname = player:get_player_name() - end - local n = get_node(pointed_thing.above) - local nu = get_node(pointed_thing.under) - if allow_on_fire == false and get_item_group(nu.name, "fire") ~= 0 then - return - end - if minetest.is_protected(pointed_thing.above, pname) then - minetest.record_protection_violation(pointed_thing.above, pname) - return - end - if n.name == "air" then - add_node(pointed_thing.above, {name="mcl_fire:fire"}) - end -end - -minetest.register_lbm({ - label = "Smoke particles from fire", - name = "mcl_fire:smoke", - nodenames = {"group:fire"}, - run_at_every_load = true, - action = function(pos, node) - mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) - end, -}) - -minetest.register_alias("mcl_fire:basic_flame", "mcl_fire:fire") -minetest.register_alias("fire:basic_flame", "mcl_fire:fire") -minetest.register_alias("fire:permanent_flame", "mcl_fire:eternal_fire") - -dofile(modpath.."/flint_and_steel.lua") -dofile(modpath.."/fire_charge.lua") diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.de.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.de.tr deleted file mode 100644 index e3c308804..000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.de.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Feuerkugel -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Feuerkugeln sind hauptsächlich Projektile, die von Werfern geworfen werden können, sie werden in einer geraden Linie fliegen und gehen beim Einschlag in Flammen auf. Alternativ können sie benutzt werden, um direkt ein Feuer zu entfachen. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Legen Sie die Feuerkugel in den Werfer und versorgen Sie ihn mit Redstone-Energie, um sie abzufeuern. Um ein Feuer zu entfachen, platzieren Sie die Feuerkugel auf den Boden, was die Kugel verbraucht. -Flint and Steel=Feuerzeug -Flint and steel is a tool to start fires and ignite blocks.=Ein Feuerzeug ist ein Werkzeug, um Feuer zu entfachen und Blöcke anzuzünden. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Rechtsklicken Sie auf die Oberfläche eines Blocks, um zu versuchen, ein Feuer auf ihm zu entfachen, oder den Block selbst anzuzünden. Ein paar Blocke reagieren besonders, wenn sie angezündet werden. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Feuer ist ein schädlicher und destruktiver aber kurzlebiger Block. Es wird sich zu entzündlichen Blöcken ausbreiten und sie zerstören, aber Feuer wird verschwinden, wenn es nichts brennbares mehr gibt. Es wird von Wasser und Regen gelöscht. Feuer kann sicher mit einem Schlag zerstört werden, aber es tut weh, wenn man direkt in ihm steht. Wird ein Feuer über Netherrack oder einem Magmablock entfacht, wird er sich sofort zu einem ewigen Feuer verwandeln. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Feuer ist ein schädlicher aber nicht-destruktiver kurzlebiger Block. Es wird verschwinden, wenn sich keine entzündlichen Blöcke in der Nähe befinden. Feuer breitet sich nicht aus und zerstört keine Blöcke, zumindest nicht in dieser Welt. Es wird von Wasser und Regen gelöscht. Feuer kann sicher mit einem Schlag zerstört werden, aber es tut weh, wenn man direkt in ihm steht. Wird ein Feuer über Netherrack oder einem Magmablock entfacht, wird er sich sofort zu einem ewigen Feuer verwandeln. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Ewiges Feuer ist ein schädlicher Block, der mehr Feuer machen kann. Er wird um sich Feuer machen, wenn entflammbare Blöcke in der Nähe sind. Ewiges Feuer kann von Schlägen und Wasserblöcken in der Nähe gelöscht werden. Anders als (normales) Feuer geht ein ewiges Feuer nicht von alleine aus, auch nicht unter Regen. Es ist sicher, ein ewiges Feuer zu schlagen, aber es tut weh, wenn man direkt in einem steht. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Ewiges Feuer ist ein schädlicher Block. Ewiges Feuer kann von Schlägen und Wasserblöcken in der Nähe gelöscht werden. Anders als (normales) Feuer geht ein ewiges Feuer nicht von alleine aus, auch nicht unter Regen. Es ist sicher, ein ewiges Feuer zu schlagen, aber es tut weh, wenn man direkt in einem steht. -@1 has been cooked crisp.=@1 wurde knusprig gebraten. -@1 felt the burn.=@1 ist völlig verbrannt. -@1 died in the flames.=@1 starb in den Flammen. -@1 died in a fire.=@1 starb in einem Feuer. -Fire=Feuer -Eternal Fire=Ewiges Feuer -Dispenser projectile=Werferprojektil -Starts fires and ignites blocks=Entfacht Feuer und zündet Blöcke an diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.es.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.es.tr deleted file mode 100644 index 6f36b293c..000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.es.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Carga de fuego -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Las cargas de fuego son principalmente proyectiles que se pueden lanzar desde dispensadores, volarán en línea recta y estallarán en un incendio al impactar. Alternativamente, se pueden usar para encender incendios directamente. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Ponga la carga de fuego en un dispensador y suminístrele poder de redstone para lanzarlo. Para encender un fuego directamente, simplemente coloque la carga de fuego en el suelo, que la usa. -Flint and Steel=Mechero -Flint and steel is a tool to start fires and ignite blocks.=El mechero es una herramienta para iniciar incendios y encender bloques. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Haga clic derecho en la superficie de un bloque para intentar encender un fuego frente a él o encender el bloque. Unos pocos bloques tienen una reacción única cuando se encienden. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=El fuego es un tipo de bloque dañino y destructivo pero de corta duración. Destruirá y se extenderá hacia bloques casi inflamables, pero el fuego desaparecerá cuando no quede nada para quemar. Se extinguirá por el agua y la lluvia cercanas. El fuego puede destruirse de manera segura golpeándolo, pero es doloroso si te paras directamente en él. Si se inicia un fuego por encima de la base o un bloque de magma, se convertirá inmediatamente en un fuego eterno. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=El fuego es un tipo de bloque dañino pero no destructivo de corta duración. Desaparecerá cuando no haya un bloque inflamable alrededor. El fuego no destruye bloques, al menos no en este mundo. Se extinguirá por el agua y la lluvia cercanas. El fuego puede destruirse de manera segura golpeándolo, pero es doloroso si te paras directamente en él. Si se inicia un fuego por encima de la base o un bloque de magma, se convertirá inmediatamente en un fuego eterno. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=El fuego eterno es un bloque dañino que podría crear más fuego. Creará fuego alrededor cuando haya bloques inflamables cerca. El fuego eterno se puede extinguir con golpes y bloques de agua cercanos. Aparte del fuego (normal), el fuego eterno no se extingue por sí solo y también continúa ardiendo bajo la lluvia. Golpear el fuego eterno es seguro, pero duele si te paras dentro. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=El fuego eterno es un bloque dañino. El fuego eterno se puede extinguir con golpes y bloques de agua cercanos. Aparte del fuego (normal), el fuego eterno no se extingue por sí solo y también continúa ardiendo bajo la lluvia. Golpear el fuego eterno es seguro, pero duele si te paras dentro. -@1 has been cooked crisp.=@1 se ha cocinado crujientemente. -@1 felt the burn.=@1 sintió la quemadura. -@1 died in the flames.=@1 murió en las llamas. -@1 died in a fire.=@ 1 murió en un incendio. -Fire=Fuego -Eternal Fire=Fuego eterno diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.fr.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.fr.tr deleted file mode 100644 index 60b6ffd0e..000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.fr.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Boule de Feu -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Les boules de feu sont principalement des projectiles qui peuvent être lancés à partir de distributeurs, ils voleront en ligne droite et éclateront en feu à l'impact. Alternativement, ils peuvent être utilisés pour allumer des incendies directement. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Mettez la boule de feu dans un distributeur et alimentez-la en redstone pour la lancer. Pour allumer un feu directement, placez simplement la charge de feu sur le sol, et utiliser le. -Flint and Steel=Briquet -Flint and steel is a tool to start fires and ignite blocks.=Le Briquet est uo outil pour allumer un feu ou allumer des blocs. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Cliquez avec le bouton droit sur la surface d'un bloc pour tenter d'allumer un feu devant lui ou d'allumer le bloc. Quelques blocs ont une réaction unique lorsqu'ils sont enflammés. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Le feu est un type de bloc dommageable et destructeur mais de courte durée. Il se détruira et se propagera vers des blocs proches de produits inflammables, mais le feu disparaîtra lorsqu'il n'y aura plus rien à brûler. Il sera éteint par l'eau et la pluie à proximité. Le feu peut être détruit en toute sécurité en le frappant, mais il est blessant si vous vous tenez directement dedans. Si un feu est déclenché au-dessus d'un netherrack ou d'un bloc de magma, il se transformera immédiatement en un feu éternel. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Le feu est un type de bloc éphémère mais non destructif de courte durée. Il disparaîtra en l'absence de bloc inflammable. Le feu ne détruit pas les blocs, du moins pas dans ce monde. Il sera éteint par l'eau et la pluie à proximité. Le feu peut être détruit en toute sécurité en le frappant, mais il est blessant si vous vous tenez directement dedans. Si un feu est déclenché au-dessus d'un netherrack ou d'un bloc de magma, il se transformera immédiatement en un feu éternel. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Le feu éternel est un bloc endommageant qui pourrait créer plus de feu. Il créera du feu autour de lui lorsque des blocs inflammables sont à proximité. Le feu éternel peut être éteint par des coups de poing et des blocs d'eau à proximité. À part le feu (normal), le feu éternel ne s'éteint pas tout seul et continue de brûler sous la pluie. Frapper le feu éternel est sûr, mais ça fait mal si vous vous tenez à l'intérieur. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Le feu éternel est un bloc dommageable. Le feu éternel peut être éteint par des coups de poing et des blocs d'eau à proximité. À part le feu (normal), le feu éternel ne s'éteint pas tout seul et continue de brûler sous la pluie. Frapper le feu éternel est sûr, mais ça fait mal si vous vous tenez à l'intérieur. -@1 has been cooked crisp.=@1 a été cuit croustillant. -@1 felt the burn.=@1 sent le brûler. -@1 died in the flames.=@1 est mort dans les flammes. -@1 died in a fire.=@1 est mort dans un incendie. -Fire=Feu -Eternal Fire=Feu Eternel -Dispenser projectile=Distributeur de Projectile -Starts fires and ignites blocks=Démarre les incendies et allume les blocs diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr deleted file mode 100644 index ba55cc31e..000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Ładunek ognia -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Ładunki ognia są pociskami, którymi można strzelać z dozowników. Lecą one w linii prostej a po zderzeniu zamieniają się w ogień. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Włóż ładunek ognia do dozownika i dostarcz energię z czerwienitu aby wystrzelić. Aby bezpośrednio zapalić ładunek postaw go na ziemi co go wykorzystuje. -Flint and Steel=Krzesiwo -Flint and steel is a tool to start fires and ignite blocks.=Krzesiwo jest narzędziem do rozpalania ognia i podpalania bloków. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Kliknij prawym przyciskiem na powierzchni bloku, ab spróbować rozpalić na nim ogień lub go podpalić. Niektóre bloki reagują na podpalenie w specjalny sposób. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Ogień jest raniącym i niszczącym, ale krótko żyjącym blokiem. Zniszczy on i będzie się rozprzestrzeniał na inne łatwopalne bloki, ale zniknie on gdy nie zostanie nic więcej do spalenia. Zostanie zgaszony przez pobliską wodę lub deszcz. Jeśli ogień jest zapalony na skale Netheru lub bloku magmy, natychmiast zamieni się on w wieczny ogień. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Ogień jest raniącym, ale nie niszczącym i krótko żyjącym blokiem. Zniknie gdy w pobliżu nie będzie łatwopalnych bloków. Ogień nie niszczy bloków, przynajmniej nie w tym świecie. Może być zgaszony przez pobliską wodę i deszcz. Może być bezpiecznie zniszczony przez uderzenie go, ale jest raniący gdy stanie się wewnątrz. Jeśli ogień jest zapalony nad skałą Netheru lub bloku magmy, natychmiast zamieni się w wieczny ogień. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Wieczny ogień jest niszczącym blokiem, który może tworzyć więcej ognia. Będzie on tworzył ogień wokół gdy w pobliżu są łatwopalne bloki. Wieczny ogień można ugasić uderzeniem i blokami wody. W przeciwieństwie do (zwykłego) ognia, wieczny ogień nie gasi się sam z siebie i będzie nadal płonął w deszczu. Uderzanie wiecznego ognia jest bezpieczne, ale jest raniący gdy stoi się wewnątrz. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Wieczny ogień jest raniącym blokiem. Może on być zgaszony przez uderzenie i bloki wody. W przeciwieństwie do (zwykłego) ognia, wieczny ogień nie zgaśnie sam z siebie i będzie nadal płonął w deszczu. Uderzanie wiecznego ognia jest bezpieczne, ale jest raniący gdy stoi się wewnątrz. -@1 has been cooked crisp.=@1 została usmażona na chrupko. -@1 felt the burn.=@1 poczuła oparzenie. -@1 died in the flames.=@1 zginęła w płomieniach. -@1 died in a fire.=@1 zginęła w ogniu. -Fire=Ogień -Eternal Fire=Wieczny ogień -Dispenser projectile=Pocisk do dozownika -Starts fires and ignites blocks=Rozpala ogień i podpala bloki diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.ru.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.ru.tr deleted file mode 100644 index 941a73aaa..000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.ru.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Огненный шар -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Огненные шары это прежде всего снаряды, которые могут быть выпущены из диспенсеров, они полетят по прямой линии и превратятся в огонь при ударе. Они также могут быть использованы для непосредственного поджигания блоков. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Положите огненный шар в диспенсер и подайте на него энергию редстоуна для запуска. Чтобы непосредственно поджигать блоки, просто поместите его на поверхность. -Flint and Steel=Огниво -Flint and steel is a tool to start fires and ignite blocks.=Огниво это инструмент для добывания огня. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Кликните правой по поверхности блока, чтобы попытаться зажечь огонь перед ней либо поджечь блок. Некоторые блоки реагируют на поджигание индивидуально. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Огонь - это повреждающий и разрушающий, но недолговечный блок. Он будет уничтожать и переходить на соседние легковоспламенимые блоки, но исчезнет, когда больше будет нечему гореть. Он будет погашен близлежащей водой или дождем. Его можно безопасно убрать, стукнув по нему, но если вы стоите прямо в нём, это причинит вам вред. Если огонь зажжён над адским камнем или блоком магмы, он мгновенно превращается в вечный огонь. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Огонь - это повреждающий, но не разрушающий и недолговечный блок. Он исчезнет, когда вокруг не останется легковоспламенимых блоков. Огонь не уничтожает блоки, по крайней мере, в этом мире. Он будет погашен близлежащей водой или дождем. Его можно безопасно убрать, стукнув по нему, но если вы стоите прямо в нём, это причинит вам вред. Если огонь зажжён над адским камнем или блоком магмы, он мгновенно превращается в вечный огонь. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Вечный огонь - это повреждающий блок, который может создать больше огня. Он будет создавать огонь вокруг себя, если поблизости окажутся легковоспламенимые блоки. Вечный огонь можно потушить ударами и находящимися рядом водными блоками. В отличие от (обычного) огня, вечный огонь не гаснет сам по себе и также продолжает гореть под дождем. Бить вечный огонь безопасно, но он причиняет боль, если вы стоите внутри. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Вечный огонь - это повреждающий блок. Вечный огонь можно потушить ударами и находящимися рядом водными блоками. В отличие от (обычного) огня, вечный огонь не гаснет сам по себе и также продолжает гореть под дождем. Бить вечный огонь безопасно, но он причиняет боль, если вы стоите внутри. -@1 has been cooked crisp.=@1 был(а) заживо приготовлен(а). -@1 felt the burn.=@1 испытал(а) ожог. -@1 died in the flames.=@1 умер(ла) в пламени. -@1 died in a fire.=@1 умер(ла) в огне. -Fire=Огонь -Eternal Fire=Вечный огонь -Dispenser projectile=Диспенсер снаряда -Starts fires and ignites blocks=Высекает огонь, поджигает блоки diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.zh_TW.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.zh_TW.tr deleted file mode 100644 index 74394be6d..000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.zh_TW.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=火焰彈 -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=火焰彈主要是可以從發射器中發射的投射物,它們會沿直線飛行,並在撞擊時爆裂成火。另外,它們也可以用來直接點燃火焰。 -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=將火藥放入發射器中,並為其提供紅石動力以發射火藥。要直接點火,只需將火藥放在地上,這樣就能用完。 -Flint and Steel=打火機 -Flint and steel is a tool to start fires and ignite blocks.=燧石和鋼是一種用來起火和點燃木塊的工具。 -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=右鍵點擊方塊的表面,可以在它面前點火或點燃方塊。有幾種方塊在被點燃時會有獨特的反應。 -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=火是一種具有傷害性和破壞性的方塊,但持續時間很短。它將破壞並向附近的易燃區塊蔓延,但當沒有什麼可燃燒的東西時,火就會消失。它將被附近的水和雨所熄滅。火可以通過打它來安全地摧毀,但如果你直接站在它裡面,它是有傷害的。如果火是在地獄石或岩漿塊上面點燃的,它將立即變成永恆的火。 -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=火是一種具有傷害性但無破壞性的短命方塊。當周圍沒有可燃方塊的時候,它就會消失。火不會破壞方塊,至少在這個世界上不會。它將被附近的水和雨所熄滅。火可以通過打它來安全地摧毀,但如果你直接站在它裡面,它是有傷害的。如果火是在地獄石或岩漿塊上面點燃的,它將立即變成永恆的火。 -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=永恆之火是一個具有破壞性的方塊,可能會產生更多的火。當附近有易燃塊方塊時,它將在周圍產生火焰。永恆之火可以被拳頭和附近的水所熄滅。和(普通)火不同,永恆之火不會自行熄滅,而且在雨中也會繼續燃燒。擊打永恆之火是安全的,但如果你站在裡面就會受傷。 -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=永恆之火是一種破壞性的方塊。永恆之火可以被拳頭和附近的水塊所熄滅。和(普通)火不同,永恆之火不會自行熄滅,而且在雨中也會繼續燃燒。擊打永恆之火是安全的,但如果你站在裡面就會受傷。 -@1 has been cooked crisp.=@1 被燒死了 -@1 felt the burn.=@1 被燒死了 -@1 died in the flames.=@1 在火焰中昇天 -@1 died in a fire.=@1 在火焰中昇天 -Fire=火 -Eternal Fire=永恆之火 -Dispenser projectile=發射器投射物 -Starts fires and ignites blocks=點火和點燃方塊 diff --git a/mods/ITEMS/mcl_fire/locale/template.txt b/mods/ITEMS/mcl_fire/locale/template.txt deleted file mode 100644 index 0bc7d2540..000000000 --- a/mods/ITEMS/mcl_fire/locale/template.txt +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge= -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.= -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.= -Flint and Steel= -Flint and steel is a tool to start fires and ignite blocks.= -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.= -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.= -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.= -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.= -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.= -@1 has been cooked crisp.= -@1 felt the burn.= -@1 died in the flames.= -@1 died in a fire.= -Fire= -Eternal Fire= -Dispenser projectile= -Starts fires and ignites blocks= diff --git a/mods/ITEMS/mcl_fire/mod.conf b/mods/ITEMS/mcl_fire/mod.conf deleted file mode 100644 index 4a1d52ee2..000000000 --- a/mods/ITEMS/mcl_fire/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_fire -depends = mcl_core, mcl_worlds, mcl_sounds, mcl_particles, mcl_util -optional_depends = mcl_portals \ No newline at end of file diff --git a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.1.ogg b/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.1.ogg deleted file mode 100644 index 42506ddff..000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.2.ogg b/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.2.ogg deleted file mode 100644 index 2747ab81c..000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.3.ogg b/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.3.ogg deleted file mode 100644 index 8baeac32e..000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_fire.1.ogg b/mods/ITEMS/mcl_fire/sounds/fire_fire.1.ogg deleted file mode 100644 index cbfee4c65..000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_fire.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_fire.2.ogg b/mods/ITEMS/mcl_fire/sounds/fire_fire.2.ogg deleted file mode 100644 index e8d0eb135..000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_fire.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_fire.3.ogg b/mods/ITEMS/mcl_fire/sounds/fire_fire.3.ogg deleted file mode 100644 index 5cad3d9b8..000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_fire.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_flint_and_steel.ogg b/mods/ITEMS/mcl_fire/sounds/fire_flint_and_steel.ogg deleted file mode 100644 index 6996e16fc..000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_flint_and_steel.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/fire_basic_flame.png b/mods/ITEMS/mcl_fire/textures/fire_basic_flame.png deleted file mode 100644 index 5ed32ec0e..000000000 Binary files a/mods/ITEMS/mcl_fire/textures/fire_basic_flame.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/fire_basic_flame_animated.png b/mods/ITEMS/mcl_fire/textures/fire_basic_flame_animated.png deleted file mode 100644 index 434bdffdd..000000000 Binary files a/mods/ITEMS/mcl_fire/textures/fire_basic_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_burning_entity_flame_animated.png b/mods/ITEMS/mcl_fire/textures/mcl_burning_entity_flame_animated.png deleted file mode 100644 index 434bdffdd..000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_burning_entity_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_burning_hud_flame_animated.png b/mods/ITEMS/mcl_fire/textures/mcl_burning_hud_flame_animated.png deleted file mode 100644 index 434bdffdd..000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_burning_hud_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_fire_fire_charge.png b/mods/ITEMS/mcl_fire/textures/mcl_fire_fire_charge.png deleted file mode 100644 index 1d60f4544..000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_fire_fire_charge.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_fire_flint_and_steel.png b/mods/ITEMS/mcl_fire/textures/mcl_fire_flint_and_steel.png deleted file mode 100644 index a7c66b8f0..000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_fire_flint_and_steel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fireworks/README.txt b/mods/ITEMS/mcl_fireworks/README.txt deleted file mode 100644 index 4cf71fc9b..000000000 --- a/mods/ITEMS/mcl_fireworks/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -Firework mod for Mineclone 2 - -by NO11 and and some parts by j45 - -Sound credits: - -* mcl_firework_rocket.ogg (tnt_ignite.ogg): Own derivate work of sound by Ned Bouhalassa (CC0) created in 2005, source: diff --git a/mods/ITEMS/mcl_fireworks/crafting.lua b/mods/ITEMS/mcl_fireworks/crafting.lua deleted file mode 100644 index a9e156aa6..000000000 --- a/mods/ITEMS/mcl_fireworks/crafting.lua +++ /dev/null @@ -1,17 +0,0 @@ -minetest.register_craft({ - type = "shapeless", - output = "mcl_fireworks:rocket_1 3", - recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fireworks:rocket_2 3", - recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fireworks:rocket_3 3", - recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder"}, -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/init.lua b/mods/ITEMS/mcl_fireworks/init.lua deleted file mode 100644 index cd1922580..000000000 --- a/mods/ITEMS/mcl_fireworks/init.lua +++ /dev/null @@ -1,4 +0,0 @@ -local path = minetest.get_modpath("mcl_fireworks") - -dofile(path .. "/register.lua") -dofile(path .. "/crafting.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr deleted file mode 100644 index 9f9098103..000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket=Feuerwerksrakete -Flight Duration:=Flugdauer: \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr deleted file mode 100644 index e66eb06a5..000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket= -Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr deleted file mode 100644 index b02faa428..000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket=Fusée -Flight Duration:=Durée de vol : \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr deleted file mode 100644 index d7d6db185..000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket=Fajerwerkowa rakieta -Flight Duration:=Czas lotu: - diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr deleted file mode 100644 index e66eb06a5..000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket= -Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/template.txt b/mods/ITEMS/mcl_fireworks/locale/template.txt deleted file mode 100644 index e66eb06a5..000000000 --- a/mods/ITEMS/mcl_fireworks/locale/template.txt +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket= -Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/mod.conf b/mods/ITEMS/mcl_fireworks/mod.conf deleted file mode 100644 index cf9e34e91..000000000 --- a/mods/ITEMS/mcl_fireworks/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_fireworks -description = Adds fun fireworks to the game which players can use. \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/register.lua b/mods/ITEMS/mcl_fireworks/register.lua deleted file mode 100644 index 23066b663..000000000 --- a/mods/ITEMS/mcl_fireworks/register.lua +++ /dev/null @@ -1,28 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local tt_help = S("Flight Duration:") -local description = S("Firework Rocket") - -local function register_rocket(n, duration, force) - minetest.register_craftitem("mcl_fireworks:rocket_" .. n, { - description = description, - _tt_help = tt_help .. " " .. duration, - inventory_image = "mcl_fireworks_rocket.png", - stack_max = 64, - on_use = function(itemstack, user, pointed_thing) - local elytra = mcl_playerplus.elytra[user] - if elytra.active and elytra.rocketing <= 0 then - elytra.rocketing = duration - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item() - end - minetest.sound_play("mcl_fireworks_rocket", {pos = user:get_pos()}) - end - return itemstack - end, - }) -end - -register_rocket(1, 2.2, 10) -register_rocket(2, 4.5, 20) -register_rocket(3, 6, 30) diff --git a/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg b/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg deleted file mode 100644 index aa232f0de..000000000 Binary files a/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png b/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png deleted file mode 100644 index 682a8c40d..000000000 Binary files a/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/init.lua b/mods/ITEMS/mcl_fishing/init.lua deleted file mode 100644 index 1d8f24fb3..000000000 --- a/mods/ITEMS/mcl_fishing/init.lua +++ /dev/null @@ -1,513 +0,0 @@ ---Fishing Rod, Bobber, and Flying Bobber mechanics and Bobber artwork by Rootyjr. - -local S = minetest.get_translator(minetest.get_current_modname()) - -local bobber_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_fishing_bobber.png"}, - visual_size = {x=0.5, y=0.5}, - collisionbox = {0.45,0.45,0.45,0.45,0.45,0.45}, - pointable = false, - static_save = false, - - _lastpos={}, - _dive = false, - _waittime = nil, - _time = 0, - player=nil, - _oldy = nil, - objtype="fishing", -} - -local fish = function(itemstack, player, pointed_thing) - if pointed_thing and pointed_thing.type == "node" then - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if player and not player:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, player, itemstack) or itemstack - end - end - end - - local pos = player:get_pos() - - local objs = minetest.get_objects_inside_radius(pos, 125) - local num = 0 - local ent = nil - local noent = true - - local durability = 65 - local unbreaking = mcl_enchanting.get_enchantment(itemstack, "unbreaking") - if unbreaking > 0 then - durability = durability * (unbreaking + 1) - end - - --Check for bobber if so handle. - for n = 1, #objs do - ent = objs[n]:get_luaentity() - if ent then - if ent.player and ent.objtype=="fishing" then - if (player:get_player_name() == ent.player) then - noent = false - if ent._dive == true then - local itemname - local items - local itemcount = 1 - local pr = PseudoRandom(os.time() * math.random(1, 100)) - local r = pr:next(1, 100) - local fish_values = {85, 84.8, 84.7, 84.5} - local junk_values = {10, 8.1, 6.1, 4.2} - local luck_of_the_sea = math.min(mcl_enchanting.get_enchantment(itemstack, "luck_of_the_sea"), 3) - local index = luck_of_the_sea + 1 - local fish_value = fish_values[index] - local junk_value = junk_values[index] + fish_value - if r <= fish_value then - -- Fish - items = mcl_loot.get_loot({ - items = { - { itemstring = "mcl_fishing:fish_raw", weight = 60 }, - { itemstring = "mcl_fishing:salmon_raw", weight = 25 }, - { itemstring = "mcl_fishing:clownfish_raw", weight = 2 }, - { itemstring = "mcl_fishing:pufferfish_raw", weight = 13 }, - }, - stacks_min = 1, - stacks_max = 1, - }, pr) - elseif r <= junk_value then - -- Junk - items = mcl_loot.get_loot({ - items = { - { itemstring = "mcl_core:bowl", weight = 10 }, - { itemstring = "mcl_fishing:fishing_rod", weight = 2, wear_min = 6554, wear_max = 65535 }, -- 10%-100% damage - { itemstring = "mcl_mobitems:leather", weight = 10 }, - { itemstring = "mcl_armor:boots_leather", weight = 10, wear_min = 6554, wear_max = 65535 }, -- 10%-100% damage - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10 }, - { itemstring = "mcl_core:stick", weight = 5 }, - { itemstring = "mcl_mobitems:string", weight = 5 }, - { itemstring = "mcl_potions:water", weight = 10 }, - { itemstring = "mcl_mobitems:bone", weight = 10 }, - { itemstring = "mcl_dye:black", weight = 1, amount_min = 10, amount_max = 10 }, - { itemstring = "mcl_mobitems:string", weight = 10 }, -- TODO: Tripwire Hook - }, - stacks_min = 1, - stacks_max = 1, - }, pr) - else - -- Treasure - items = mcl_loot.get_loot({ - items = { - { itemstring = "mcl_bows:bow", wear_min = 49144, wear_max = 65535, func = function(stack, pr) - mcl_enchanting.enchant_randomly(stack, 30, true, false, false, pr) - end }, -- 75%-100% damage - { itemstring = "mcl_books:book", func = function(stack, pr) - mcl_enchanting.enchant_randomly(stack, 30, true, true, false, pr) - end }, - { itemstring = "mcl_fishing:fishing_rod", wear_min = 49144, wear_max = 65535, func = function(stack, pr) - mcl_enchanting.enchant_randomly(stack, 30, true, false, false, pr) - end }, -- 75%-100% damage - { itemstring = "mcl_mobs:nametag", }, - { itemstring = "mcl_mobitems:saddle", }, - { itemstring = "mcl_flowers:waterlily", }, - }, - stacks_min = 1, - stacks_max = 1, - }, pr) - end - local item - if #items >= 1 then - item = ItemStack(items[1]) - else - item = ItemStack() - end - local inv = player:get_inventory() - if inv:room_for_item("main", item) then - inv:add_item("main", item) - else - minetest.add_item(pos, item) - end - if mcl_experience.throw_xp then - mcl_experience.throw_xp(pos, math.random(1,6)) - end - - if not minetest.is_creative_enabled(player:get_player_name()) then - local idef = itemstack:get_definition() - itemstack:add_wear(65535/durability) -- 65 uses - if itemstack:get_count() == 0 and idef.sound and idef.sound.breaks then - minetest.sound_play(idef.sound.breaks, {pos=player:get_pos(), gain=0.5}, true) - end - end - end - --Check if object is on land. - local epos = ent.object:get_pos() - epos.y = math.floor(epos.y) - local node = minetest.get_node(epos) - local def = minetest.registered_nodes[node.name] - if def.walkable then - if not minetest.is_creative_enabled(player:get_player_name()) then - local idef = itemstack:get_definition() - itemstack:add_wear((65535/durability)*2) -- if so and not creative then wear double like in MC. - if itemstack:get_count() == 0 and idef.sound and idef.sound.breaks then - minetest.sound_play(idef.sound.breaks, {pos=player:get_pos(), gain=0.5}, true) - end - end - end - --Destroy bobber. - ent.object:remove() - return itemstack - end - end - end - end - --Check for flying bobber. - for n = 1, #objs do - ent = objs[n]:get_luaentity() - if ent then - if ent._thrower and ent.objtype=="fishing" then - if player:get_player_name() == ent._thrower then - noent = false - break - end - end - end - end - --If no bobber or flying_bobber exists then throw bobber. - if noent == true then - local playerpos = player:get_pos() - local dir = player:get_look_dir() - mcl_throwing.throw("mcl_fishing:flying_bobber", {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, 15, player:get_player_name()) - end -end - --- Movement function of bobber -local bobber_on_step = function(self, dtime) - self.timer=self.timer+dtime - local epos = self.object:get_pos() - epos.y = math.floor(epos.y) - local node = minetest.get_node(epos) - local def = minetest.registered_nodes[node.name] - - --If we have no player, remove self. - if self.player == nil or self.player == "" then - self.object:remove() - return - end - local player = minetest.get_player_by_name(self.player) - if not player then - self.object:remove() - return - end - local wield = player:get_wielded_item() - --Check if player is nearby - if self.player and player then - --Destroy bobber if item not wielded. - if ((not wield) or (minetest.get_item_group(wield:get_name(), "fishing_rod") <= 0)) then - self.object:remove() - return - end - - --Destroy bobber if player is too far away. - local objpos = self.object:get_pos() - local playerpos = player:get_pos() - if (((playerpos.y - objpos.y) >= 33) or ((playerpos.y - objpos.y) <= -33)) then - self.object:remove() - return - elseif (((playerpos.x - objpos.x) >= 33) or ((playerpos.x - objpos.x) <= -33)) then - self.object:remove() - return - elseif (((playerpos.z - objpos.z) >= 33) or ((playerpos.z - objpos.z) <= -33)) then - self.object:remove() - return - elseif ((((playerpos.z + playerpos.x) - (objpos.z + objpos.x)) >= 33) or ((playerpos.z + playerpos.x) - (objpos.z + objpos.x)) <= -33) then - self.object:remove() - return - elseif ((((playerpos.y + playerpos.x) - (objpos.y + objpos.x)) >= 33) or ((playerpos.y + playerpos.x) - (objpos.y + objpos.x)) <= -33) then - self.object:remove() - return - elseif ((((playerpos.z + playerpos.y) - (objpos.z + objpos.y)) >= 33) or ((playerpos.z + playerpos.y) - (objpos.z + objpos.y)) <= -33) then - self.object:remove() - return - end - - end - -- If in water, then bob. - if def.liquidtype == "source" and minetest.get_item_group(def.name, "water") ~= 0 then - if self._oldy == nil then - self.object:set_pos({x=self.object:get_pos().x,y=math.floor(self.object:get_pos().y)+.5,z=self.object:get_pos().z}) - self._oldy = self.object:get_pos().y - end - -- reset to original position after dive. - if self.object:get_pos().y > self._oldy then - self.object:set_pos({x=self.object:get_pos().x,y=self._oldy,z=self.object:get_pos().z}) - self.object:set_velocity({x=0,y=0,z=0}) - self.object:set_acceleration({x=0,y=0,z=0}) - end - if self._dive then - for i=1,2 do - -- Spray bubbles when there's a fish. - minetest.add_particle({ - pos = {x=epos["x"]+math.random(-1,1)*math.random()/2,y=epos["y"]+0.1,z=epos["z"]+math.random(-1,1)*math.random()/2}, - velocity = {x=0, y=4, z=0}, - acceleration = {x=0, y=-5, z=0}, - expirationtime = math.random() * 0.5, - size = math.random(), - collisiondetection = true, - vertical = false, - texture = "mcl_particles_bubble.png", - }) - end - if self._time < self._waittime then - self._time = self._time + dtime - else - self._waittime = 0 - self._time = 0 - self._dive = false - end - else if not self._waittime or self._waittime <= 0 then - -- wait for random number of ticks. - local lure_enchantment = wield and mcl_enchanting.get_enchantment(wield, "lure") or 0 - local reduced = lure_enchantment * 5 - self._waittime = math.random(math.max(0, 5 - reduced), 30 - reduced) - else - if self._time < self._waittime then - self._time = self._time + dtime - else - -- wait time is over time to dive. - self._dive = true - self.object:set_velocity({x=0,y=-2,z=0}) - self.object:set_acceleration({x=0,y=5,z=0}) - self._waittime = 0.8 - self._time = 0 - end - end - end -end - - -- TODO: Destroy when hitting a solid node - --if self._lastpos.x~=nil then - -- if (def and def.walkable) or not def then - --self.object:remove() - -- return - -- end - --end - --self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node -end - -bobber_ENTITY.on_step = bobber_on_step - -minetest.register_entity("mcl_fishing:bobber_entity", bobber_ENTITY) - -local flying_bobber_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_fishing_bobber.png"}, --FIXME: Replace with correct texture. - visual_size = {x=0.5, y=0.5}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = mcl_throwing.get_staticdata, - on_activate = mcl_throwing.on_activate, - - _lastpos={}, - _thrower = nil, - objtype="fishing", -} - --- Movement function of flying bobber -local function flying_bobber_on_step(self, dtime) - self.timer=self.timer+dtime - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] - --local player = minetest.get_player_by_name(self._thrower) - - -- Destroy when hitting a solid node - if self._lastpos.x~=nil then - if (def and (def.walkable or def.liquidtype == "flowing" or def.liquidtype == "source")) or not def then - local ent = minetest.add_entity(self._lastpos, "mcl_fishing:bobber_entity"):get_luaentity() - ent.player = self._thrower - ent.child = true - self.object:remove() - return - end - end - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node -end - -flying_bobber_ENTITY.on_step = flying_bobber_on_step - -minetest.register_entity("mcl_fishing:flying_bobber_entity", flying_bobber_ENTITY) - -mcl_throwing.register_throwable_object("mcl_fishing:flying_bobber", "mcl_fishing:flying_bobber_entity", 5) - --- If player leaves area, remove bobber. -minetest.register_on_leaveplayer(function(player) - local objs = minetest.get_objects_inside_radius(player:get_pos(), 250) - local ent = nil - local noent = true - for n = 1, #objs do - ent = objs[n]:get_luaentity() - if ent then - if ent.player and ent.objtype=="fishing" then - ent.object:remove() - elseif ent._thrower and ent.objtype=="fishing" then - ent.object:remove() - end - end - end -end) - --- If player dies, remove bobber. -minetest.register_on_dieplayer(function(player) - local objs = minetest.get_objects_inside_radius(player:get_pos(), 250) - local num = 0 - local ent = nil - local noent = true - - for n = 1, #objs do - ent = objs[n]:get_luaentity() - if ent then - if ent.player and ent.objtype=="fishing" then - ent.object:remove() - elseif ent._thrower and ent.objtype=="fishing" then - ent.object:remove() - end - end - end -end) - --- Fishing Rod -minetest.register_tool("mcl_fishing:fishing_rod", { - description = S("Fishing Rod"), - _tt_help = S("Catches fish in water"), - _doc_items_longdesc = S("Fishing rods can be used to catch fish."), - _doc_items_usagehelp = S("Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?"), - groups = { tool=1, fishing_rod=1, enchantability=1 }, - inventory_image = "mcl_fishing_fishing_rod.png", - wield_image = "mcl_fishing_fishing_rod.png^[transformR270", - wield_scale = { x = 1.5, y = 1.5, z = 1 }, - stack_max = 1, - on_place = fish, - on_secondary_use = fish, - sound = { breaks = "default_tool_breaks" }, - _mcl_uses = 65, - _mcl_toollike_wield = true, -}) - -minetest.register_craft({ - output = "mcl_fishing:fishing_rod", - recipe = { - {"","","mcl_core:stick"}, - {"","mcl_core:stick","mcl_mobitems:string"}, - {"mcl_core:stick","","mcl_mobitems:string"}, - } -}) -minetest.register_craft({ - output = "mcl_fishing:fishing_rod", - recipe = { - {"mcl_core:stick", "", ""}, - {"mcl_mobitems:string", "mcl_core:stick", ""}, - {"mcl_mobitems:string","","mcl_core:stick"}, - } -}) -minetest.register_craft({ - type = "fuel", - recipe = "group:fishing_rod", - burntime = 15, -}) - - --- Fish -minetest.register_craftitem("mcl_fishing:fish_raw", { - description = S("Raw Fish"), - _doc_items_longdesc = S("Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value."), - inventory_image = "mcl_fishing_fish_raw.png", - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), - stack_max = 64, - groups = { food=2, eatable = 2, smoker_cookable = 1 }, - _mcl_saturation = 0.4, -}) - -minetest.register_craftitem("mcl_fishing:fish_cooked", { - description = S("Cooked Fish"), - _doc_items_longdesc = S("Mmh, fish! This is a healthy food item."), - inventory_image = "mcl_fishing_fish_cooked.png", - on_place = minetest.item_eat(5), - on_secondary_use = minetest.item_eat(5), - stack_max = 64, - groups = { food=2, eatable=5 }, - _mcl_saturation = 6, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_fishing:fish_cooked", - recipe = "mcl_fishing:fish_raw", - cooktime = 10, -}) - --- Salmon -minetest.register_craftitem("mcl_fishing:salmon_raw", { - description = S("Raw Salmon"), - _doc_items_longdesc = S("Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value."), - inventory_image = "mcl_fishing_salmon_raw.png", - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), - stack_max = 64, - groups = { food=2, eatable = 2, smoker_cookable = 1 }, - _mcl_saturation = 0.4, -}) - -minetest.register_craftitem("mcl_fishing:salmon_cooked", { - description = S("Cooked Salmon"), - _doc_items_longdesc = S("This is a healthy food item which can be eaten."), - inventory_image = "mcl_fishing_salmon_cooked.png", - on_place = minetest.item_eat(6), - on_secondary_use = minetest.item_eat(6), - stack_max = 64, - groups = { food=2, eatable=6 }, - _mcl_saturation = 9.6, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_fishing:salmon_cooked", - recipe = "mcl_fishing:salmon_raw", - cooktime = 10, -}) - --- Clownfish -minetest.register_craftitem("mcl_fishing:clownfish_raw", { - description = S("Clownfish"), - _doc_items_longdesc = S("Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely."), - inventory_image = "mcl_fishing_clownfish_raw.png", - on_place = minetest.item_eat(1), - on_secondary_use = minetest.item_eat(1), - stack_max = 64, - groups = { food=2, eatable = 1 }, - _mcl_saturation = 0.2, -}) - - -minetest.register_craftitem("mcl_fishing:pufferfish_raw", { - description = S("Pufferfish"), - _tt_help = minetest.colorize(mcl_colors.YELLOW, S("Very poisonous")), - _doc_items_longdesc = S("Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger)."), - inventory_image = "mcl_fishing_pufferfish_raw.png", - on_place = minetest.item_eat(1), - on_secondary_use = minetest.item_eat(1), - stack_max = 64, - groups = { food=2, eatable=1, brewitem = 1 }, - -- _mcl_saturation = 0.2, -}) - - -minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, user, pointed_thing) - - if itemstack:get_name() == "mcl_fishing:pufferfish_raw" then - mcl_potions.poison_func(user, 1/3, 60) - end - -end ) diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.de.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.de.tr deleted file mode 100644 index b80c186c1..000000000 --- a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.de.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fishing -Fishing Rod=Angel -Fishing rods can be used to catch fish.=Mit Angeln fängt man Fische. -Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=Rechtsklicken, um den Schwimmer auszuwerfen. Wenn er sinkt, erneut rechtsklicken, um etwas zu fangen. Wer weiß, was Sie fangen werden? -Raw Fish=Roher Fisch -Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Rohen Fisch kann man mit Angeln fangen. Er ist ein Lebensmittel, den man sicher verzehren kann. Er kann gekocht werden, um seinen Nährwert zu erhöhen. -Cooked Fish=Gekochter Fisch -Mmh, fish! This is a healthy food item.=Mhh, Fisch! Ein gesundes Lebensmittel. -Raw Salmon=Roher Lachs -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Rohen Lachs erhält man beim Angeln. Er ist ein Lebensmittel, das sicher verzehrt werden kann. -Cooked Salmon=Gekochter Lachs -This is a healthy food item which can be eaten.=Ein gesundes essbares Lebensmittel. -Clownfish=Clownfisch -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=Einen Clownfisch kann man beim Angeln mit etwas Glück fangen. Er ist ein Lebensmittel, das sicher verzehrt werden kann. -Pufferfish=Kugelfisch -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=Kugelfische sind eine verbreitete Fischart, die geangelt werden kann. Sie können theoretisch gegessen werden, aber sie sind sehr schlecht für Menschen. Es gibt nur 1 Hungerpunkt und es wird Sie schwer vergiften (was Ihre Gesundheit verringert, aber nicht bis zum Tod) und Ihr Hungerpegel wird aufgrund der schweren Lebensmittelvergiftung stark ansteigen. -Catches fish in water=Fängt Fische im Wasser -Very poisonous=Sehr giftig diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.es.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.es.tr deleted file mode 100644 index 27972dcef..000000000 --- a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.es.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_fishing -Fishing Rod=Caña de pescar -Fishing rods can be used to catch fish.=Las cañas de pescar se pueden utilizar para pescar. -Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=Haga clic derecho para iniciar el bobber. Cuando se hunda, haga clic derecho nuevamente para enrollar un elemento. ¿Quién sabe lo que vas a atrapar? -Raw Fish=Bacalao crudo -Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=El bacalao crudo se obtiene pescando y es un alimento que se puede comer de forma segura. Cocinarlo mejora su valor nutricional. -Cooked Fish=Bacalao cocinado -Mmh, fish! This is a healthy food item.=Mmh, ¡pez! Este es un alimento saludable. -Raw Salmon=Salmón crudo -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=El salmón crudo se obtiene pescando y es un alimento que se puede comer de manera segura. Cocinarlo mejora su valor nutricional. -Cooked Salmon=Salmón cocinado -This is a healthy food item which can be eaten.=Este es un alimento saludable que se puede comer. -Clownfish=Pez tropical -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=El pez tropical se puede obtener pescando (y por suerte) y es un alimento que se puede comer de forma segura. -Pufferfish=Pez globo -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=El pez globo es una especie común de pescado y se puede obtener mediante la pesca. Técnicamente se pueden comer, pero son muy malos para los humanos. Comer un pez globo solo restaura 1 punto de hambre y te envenena mucho (lo que drena tu salud de manera no fatal) y causa una intoxicación alimentaria grave (lo que aumenta tu hambre). diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.fr.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.fr.tr deleted file mode 100644 index 2bac42bbd..000000000 --- a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.fr.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fishing -Fishing Rod=Canne à pêche -Fishing rods can be used to catch fish.=Les cannes à pêche peuvent être utilisées pour attraper du poisson. -Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=Clic droit pour lancer le bouchon. Lorsqu'il s'enfonce, cliquez de nouveau avec le bouton droit pour rembobiner. Qui sait ce que tu vas attraper? -Raw Fish=Poisson Cru -Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Le poisson cru est obtenu par la pêche et est un aliment qui peut être mangé en toute sécurité. La cuisson améliore sa valeur nutritive. -Cooked Fish=Poisson cuit -Mmh, fish! This is a healthy food item.=Mmh, poisson! Il s'agit d'un aliment sain. -Raw Salmon=Saumon cru -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Le saumon cru est obtenu par la pêche et est un aliment qui peut être consommé en toute sécurité. La cuisson améliore sa valeur nutritive. -Cooked Salmon=Saumon cuit -This is a healthy food item which can be eaten.=Il s'agit d'un aliment sain qui peut être consommé. -Clownfish=Poisson-Clown -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=Le poisson-clown peut être obtenu par la pêche (et la chance) et est un aliment qui peut être mangé en toute sécurité. -Pufferfish=Poisson-Globe -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=Le poisson-globe est une espèce de poisson commune et peut être obtenu par la pêche. Ils peuvent techniquement être mangés, mais ils sont très mauvais pour les humains. Manger un poisson-globe ne restaure que 1 point de faim et vous empoisonnera fortement (ce qui draine votre santé de manière non fatale) et provoque une grave intoxication alimentaire (qui augmente votre faim). -Catches fish in water=Attrape les poissons dans l'eau -Very poisonous=Très toxique diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.pl.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.pl.tr deleted file mode 100644 index cc35096cd..000000000 --- a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.pl.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fishing -Fishing Rod=Wędka -Fishing rods can be used to catch fish.=Wędki są wykorzystywane do łowienia ryb. -Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=Kliknij prawym przyciskiem aby wyrzucić spławik. Gdy zejdzie pod wodę, kliknij prawym aby go wciągnąć razem z przedmiotem. Kto wie co uda ci się złapać? -Raw Fish=Surowa ryba -Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Surowa ryba jest możliwa do zdobycia poprzez łowienie i można go bezpiecznie zjeść. Upieczenie jej znacząco zwiększa wartości odżywcze. -Cooked Fish=Upieczona ryba -Mmh, fish! This is a healthy food item.=Mm, ryba! Jest to zdrowy i pożywny posiłek. -Raw Salmon=Surowy łosoś -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Surowy łosoś można zdobyć poprzez łowienie i można go bezpiecznie zjeść. Upieczenie jej znacząco zwiększa wartości odżywcze. -Cooked Salmon=Upieczony łosoś -This is a healthy food item which can be eaten.=Jest to zdrowy i pożywny posiłek. -Clownfish=Błazenek -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=Błazenek -Pufferfish=Rozdymka -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=Rozdymki są powszechnym gatunkiem ryby, który można zdobyć poprzez łowienie. Technicznie rzecz biorąc można je zjeść, jednak są bardzo niezdrowe dla ludzi. Zjedzenie rozdymki przywraca tylko 1 punkt głodu, ale powoduje zatrucie (co zabiera twoje zdrowie, ale nie zabija) oraz zatrucie pokarmowe (co zwiększa twój głód). -Catches fish in water=Łowi ryby z wody -Very poisonous=Bardzo trujące diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.ru.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.ru.tr deleted file mode 100644 index 9ed0e4f8d..000000000 --- a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.ru.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fishing -Fishing Rod=Удочка -Fishing rods can be used to catch fish.=Удочка используется при ловле рыбы. -Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=Кликните правой для запуска поплавка. Когда он потонет, кликните снова, чтобы вытащить ваш улов. Кстати, что вы собираетесь поймать? -Raw Fish=Сырая рыба -Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Сырая рыба добывается при помощи удочки и это продукт, который можно безопасно есть. При приготовлении её питательная ценность растёт. -Cooked Fish=Приготовленная рыба -Mmh, fish! This is a healthy food item.=Ммм, рыба! Это продуктовый предмет здорового питания. -Raw Salmon=Сырой лосось -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Сырой лосось добывается при помощи удочки и это продукт, который можно безопасно есть. При приготовлении его питательная ценность растёт. -Cooked Salmon=Приготовленный лосось -This is a healthy food item which can be eaten.=Это продуктовый предмет здорового питания. -Clownfish=Тропическая рыба -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=Тропическая рыба добывается при помощи удочки (и удачи) и это продукт, который можно безопасно есть. -Pufferfish=Иглобрюх -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=Иглобрюхи - распространенный вид рыбы и могут быть пойманы на удочку. Технически их можно есть, но они очень вредны для людей. Употребление иглобрюха в пищу восстанавливает всего 1 очко голода, но отравит вас очень тяжело (несмертельно уменьшит ваше здоровье), вы получите серьёзное пищевое отравление (которое увеличивает голод). -Catches fish in water=Ловит рыбу в воде -Very poisonous=Очень ядовит diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.zh_TW.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.zh_TW.tr deleted file mode 100644 index a0710f3ab..000000000 --- a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.zh_TW.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fishing -Fishing Rod=釣竿 -Fishing rods can be used to catch fish.=釣竿是用來取得魚的工具。 -Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=右鍵單擊以啟動浮標。當它下沉時,再次點擊右鍵來釣起一個物品。誰知道你會抓到什麼? -Raw Fish=生鱈魚 -Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=生鱈魚是通過捕魚獲得的,是一種可以安全食用的食品。烹飪可以提高其營養價值。 -Cooked Fish=熟鱈魚 -Mmh, fish! This is a healthy food item.=嗯,魚! 這是一種健康的食品。 -Raw Salmon=生鮭魚 -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=生鮭魚是通過捕魚獲得的,是一種可以安全食用的食品。烹飪可以提高其營養價值。 -Cooked Salmon=熟鮭魚 -This is a healthy food item which can be eaten.=這是一種健康的可食用食品。 -Clownfish=熱帶魚 -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=熱帶魚可以通過釣魚(和運氣)獲得,是一種可以安全食用的食物。 -Pufferfish=河豚 -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=河豚是一種常見的魚種,可以通過釣魚獲得。嚴格來說,它們可以被吃掉,但對人類非常不利。吃了河豚只能恢復1點飢餓感,而且會讓你中毒非常嚴重(非致命性地消耗你的健康),並導致嚴重的食物中毒(會增加你的飢餓感)。 -Catches fish in water=在水中取得魚 -Very poisonous=有劇毒 diff --git a/mods/ITEMS/mcl_fishing/locale/template.txt b/mods/ITEMS/mcl_fishing/locale/template.txt deleted file mode 100644 index a1544666b..000000000 --- a/mods/ITEMS/mcl_fishing/locale/template.txt +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fishing -Fishing Rod= -Fishing rods can be used to catch fish.= -Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?= -Raw Fish= -Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.= -Cooked Fish= -Mmh, fish! This is a healthy food item.= -Raw Salmon= -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.= -Cooked Salmon= -This is a healthy food item which can be eaten.= -Clownfish= -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.= -Pufferfish= -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).= -Catches fish in water= -Very poisonous= diff --git a/mods/ITEMS/mcl_fishing/mod.conf b/mods/ITEMS/mcl_fishing/mod.conf deleted file mode 100644 index c4e5f5f2e..000000000 --- a/mods/ITEMS/mcl_fishing/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_fishing -description = Adds fish and fishing poles to go fishing. -depends = mcl_core, mcl_sounds, mcl_loot, mcl_mobs, mcl_enchanting, mcl_throwing, mcl_colors diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_bobber.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_bobber.png deleted file mode 100644 index 0c93fd4f9..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_bobber.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_clownfish_raw.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_clownfish_raw.png deleted file mode 100644 index 5681bd6e8..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_clownfish_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fish_cooked.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fish_cooked.png deleted file mode 100644 index 8bede675b..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fish_cooked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fish_raw.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fish_raw.png deleted file mode 100644 index eeac24b77..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fish_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fishing_rod.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fishing_rod.png deleted file mode 100644 index 2fbcc7344..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_fishing_rod.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_pufferfish_raw.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_pufferfish_raw.png deleted file mode 100644 index 1d6b7aa7a..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_pufferfish_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_salmon_cooked.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_salmon_cooked.png deleted file mode 100644 index 08d64a259..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_salmon_cooked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_salmon_raw.png b/mods/ITEMS/mcl_fishing/textures/mcl_fishing_salmon_raw.png deleted file mode 100644 index 4c9cb771c..000000000 Binary files a/mods/ITEMS/mcl_fishing/textures/mcl_fishing_salmon_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fletching_table/README.md b/mods/ITEMS/mcl_fletching_table/README.md deleted file mode 100644 index af0b88185..000000000 --- a/mods/ITEMS/mcl_fletching_table/README.md +++ /dev/null @@ -1,13 +0,0 @@ -mcl_fletching_table -------------------- -Fletching Tables, by PrairieWind - -Adds Fletching Tables to MineClone 2/5. - -License of source code ----------------------- -LGPLv2.1 - -License of media ----------------- -See the main MineClone 2 README.md file. \ No newline at end of file diff --git a/mods/ITEMS/mcl_fletching_table/init.lua b/mods/ITEMS/mcl_fletching_table/init.lua deleted file mode 100644 index 5fc7556b8..000000000 --- a/mods/ITEMS/mcl_fletching_table/init.lua +++ /dev/null @@ -1,25 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) --- Fletching Table Code. No use as of current Minecraft Updates. Basically a decor block. As of now, this is complete. -minetest.register_node("mcl_fletching_table:fletching_table", { - description = S("Fletching Table"), - _tt_help = S("A fletching table"), - _doc_items_longdesc = S("This is the fletcher villager's work station. It currently has no use beyond decoration."), - tiles = { - "fletching_table_top.png", "fletching_table_top.png", - "fletching_table_side.png", "fletching_table_side.png", - "fletching_table_front.png", "fletching_table_front.png" - }, - paramtype2 = "facedir", - groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5 - }) - -minetest.register_craft({ - output = "mcl_fletching_table:fletching_table", - recipe = { - { "mcl_core:flint", "mcl_core:flint", "" }, - { "group:wood", "group:wood", "" }, - { "group:wood", "group:wood", "" }, - } -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_fletching_table/mod.conf b/mods/ITEMS/mcl_fletching_table/mod.conf deleted file mode 100644 index 5a4e9a900..000000000 --- a/mods/ITEMS/mcl_fletching_table/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_fletching_table -author = PrairieWind -description = Adds the fletching table villager workstation to MineClone 2/5. diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png deleted file mode 100644 index da2eb3519..000000000 Binary files a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_side.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_side.png deleted file mode 100644 index c79454afe..000000000 Binary files a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_top.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_top.png deleted file mode 100644 index 0ecead696..000000000 Binary files a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowerpots/credits.txt b/mods/ITEMS/mcl_flowerpots/credits.txt deleted file mode 100644 index 88393eaac..000000000 --- a/mods/ITEMS/mcl_flowerpots/credits.txt +++ /dev/null @@ -1,5 +0,0 @@ -All models are made by tobyplowy(aka toby109tt) and code is by D00med and tobyplowy (aka toby109tt), modified by Wuzzy. -Textures come from the Faithful 1.11 Minecraft resource pack (by Vattic, xMrVizzy and many others). -The cactus flower pot textures were manually created by Wuzzy, based on Faithful 1.11. - -Please give credit if used! diff --git a/mods/ITEMS/mcl_flowerpots/init.lua b/mods/ITEMS/mcl_flowerpots/init.lua deleted file mode 100644 index 578553b31..000000000 --- a/mods/ITEMS/mcl_flowerpots/init.lua +++ /dev/null @@ -1,216 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local has_doc = minetest.get_modpath("doc") - -mcl_flowerpots = {} -mcl_flowerpots.registered_pots = {} - -minetest.register_node("mcl_flowerpots:flower_pot", { - description = S("Flower Pot"), - _tt_help = S("Can hold a small flower or plant"), - _doc_items_longdesc = S("Flower pots are decorative blocks in which flowers and other small plants can be placed."), - _doc_items_usagehelp = S("Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant."), - drawtype = "mesh", - mesh = "flowerpot.obj", - tiles = { - "mcl_flowerpots_flowerpot.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - visual_scale = 0.5, - wield_image = "mcl_flowerpots_flowerpot_inventory.png", - wield_scale = {x=1.0, y=1.0, z=1.0}, - paramtype = "light", - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - collision_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - is_ground_content = false, - inventory_image = "mcl_flowerpots_flowerpot_inventory.png", - groups = {dig_immediate=3, deco_block=1, attached_node=1, dig_by_piston=1, flower_pot=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rightclick = function(pos, node, clicker, itemstack) - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - local item = clicker:get_wielded_item():get_name() - if mcl_flowerpots.registered_pots[item] then - minetest.swap_node(pos, {name="mcl_flowerpots:flower_pot_"..mcl_flowerpots.registered_pots[item]}) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - itemstack:take_item() - end - end - end, -}) - -minetest.register_craft({ - output = "mcl_flowerpots:flower_pot", - recipe = { - {"mcl_core:brick", "", "mcl_core:brick"}, - {"", "mcl_core:brick", ""}, - {"", "", ""}, - } -}) - -function mcl_flowerpots.register_potted_flower(name, def) - mcl_flowerpots.registered_pots[name] = def.name - minetest.register_node(":mcl_flowerpots:flower_pot_"..def.name, { - description = def.desc.." "..S("Flower Pot"), - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "flowerpot.obj", - tiles = { - "[combine:32x32:0,0=mcl_flowerpots_flowerpot.png:0,0="..def.image, - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - visual_scale = 0.5, - wield_scale = {x=1.0, y=1.0, z=1.0}, - paramtype = "light", - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - collision_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - is_ground_content = false, - groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rightclick = function(pos, item, clicker) - local player_name = clicker:get_player_name() - if minetest.is_protected(pos, player_name) then - minetest.record_protection_violation(pos, player_name) - return - end - minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, name) - minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) - end, - drop = { - items = { - { items = { "mcl_flowerpots:flower_pot", name } } - } - }, - }) - -- Add entry alias for the Help - if has_doc then - doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..name) - end -end - -function mcl_flowerpots.register_potted_cube(name, def) - mcl_flowerpots.registered_pots[name] = def.name - minetest.register_node(":mcl_flowerpots:flower_pot_"..def.name, { - description = def.desc.." "..S("Flower Pot"), - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "flowerpot_with_long_cube.obj", - tiles = { - def.image, - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - visual_scale = 0.5, - wield_scale = {x=1.0, y=1.0, z=1.0}, - paramtype = "light", - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - collision_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - is_ground_content = false, - groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rightclick = function(pos, item, clicker) - local player_name = "" - if clicker:is_player() then - player_name = clicker:get_player_name() - end - if minetest.is_protected(pos, player_name) then - minetest.record_protection_violation(pos, player_name) - return - end - minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, name) - minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) - end, - drop = { - items = { - { items = { "mcl_flowerpots:flower_pot", name } } - } - }, - }) - -- Add entry alias for the Help - if has_doc then - doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..def.name) - end -end - ---forced because hard dependency to mcl_core -mcl_flowerpots.register_potted_cube("mcl_core:cactus", { - name = "cactus", - desc = S("Cactus"), - image = "mcl_flowerpots_cactus.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_mushrooms:mushroom_brown", { - name = "mushroom_brown", - desc = S("Brown Mushroom"), - image = "farming_mushroom_brown.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_mushrooms:mushroom_red", { - name = "mushroom_red", - desc = S("Red Mushroom"), - image = "farming_mushroom_red.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_core:sapling", { - name = "sapling", - desc = S("Oak Sapling"), - image = "default_sapling.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_core:acaciasapling", { - name = "acaciasapling", - desc = S("Acacia Sapling"), - image = "default_acacia_sapling.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_core:junglesapling", { - name = "junglesapling", - desc = S("Jungle Sapling"), - image = "default_junglesapling.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_core:darksapling", { - name = "darksapling", - desc = S("Dark Oak Sapling"), - image = "mcl_core_sapling_big_oak.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_core:sprucesapling", { - name = "sprucesapling", - desc = S("Spruce Sapling"), - image = "mcl_core_sapling_spruce.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_core:birchsapling", { - name = "birchsapling", - desc = S("Birch Sapling"), - image = "mcl_core_sapling_birch.png", -}) - -mcl_flowerpots.register_potted_flower("mcl_core:deadbush", { - name = "deadbush", - desc = S("Dead Bush"), - image = "default_dry_shrub.png", -}) diff --git a/mods/ITEMS/mcl_flowerpots/license.txt b/mods/ITEMS/mcl_flowerpots/license.txt deleted file mode 100644 index cd80afbab..000000000 --- a/mods/ITEMS/mcl_flowerpots/license.txt +++ /dev/null @@ -1,30 +0,0 @@ -License for code ----------------- -Copyright (C) 2017 D00Med and toby109tt(aka tobyplowy) - -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. - -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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -License for models ---------------------------------------- -All models are made by tobyplowy (aka toby109tt). - -Licenes: CC BY-SA 3.0 Unported - -License for textures ---------------------------------------- -Textures come from the Faithful 1.11 Minecraft resource pack (by Vattic, xMrVizzy and many others). -The cactus flower pot textures were partially created by Wuzzy, based on Faithful 1.11. - -License: MIT License diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.de.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.de.tr deleted file mode 100644 index a110d5ffc..000000000 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.de.tr +++ /dev/null @@ -1,26 +0,0 @@ -# textdomain: mcl_flowerpots -Dandelion Flower Pot=Blumentopf mit Löwenzahn -Poppy Flower Pot=Blumentopf mit Mohn -Blue Orchid Flower Pot=Blumentopf mit blauer Orchidee -Allium Flower Pot=Blumentopf mit Sternlauch -Azure Bluet Flower Pot=Blumentopf mit Porzellansternchen -Red Tulip Flower Pot=Blumentopf mit roter Tulpe -Pink Tulip Flower Pot=Blumentopf mit rosa Tulpe -White Tulip Flower Pot=Blumentopf mit weißer Tulpe -Orange Tulip Flower Pot=Blumentopf mit orange Tulpe -Oxeye Daisy Flower Pot=Bluemtopf mit Margerite -Brown Mushroom Flower Pot=Blumentopf mit braunem Pilz -Red Mushroom Flower Pot=Blumentopf mit rotem Pilz -Oak Sapling Flower Pot=Blumentopf mit Eichensetzling -Acacia Sapling Flower Pot=Blumentopf mit Akaziensetzling -Jungle Sapling Flower Pot=Blumentopf mit Dschungelsetzling -Dark Oak Sapling Flower Pot=Blumentopf mit Schwarzeichensetzling -Spruce Sapling Flower Pot=Blumentopf mit Fichtensetzling -Birch Sapling Flower Pot=Blumentopf mit Birkensetzling -Dead Bush Flower Pot=Blumentopf mit totem Busch -Fern Flower Pot=Blumentopf mit Farn -Cactus Flower Pot=Blumentopf mit Kaktus -Flower Pot=Blumentopf -Flower pots are decorative blocks in which flowers and other small plants can be placed.=Blumentöpfe sind dekorative Blöcke, in die Blumen und andere kleine Pflanzen platziert werden können. -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Platzieren Sie einfach eine Pflanze auf den Blumentopf. Blumentöpfe können kleine Blumen (nicht höher als 1 Block), Setzlinge, Farne, tote Büsche, Pilze und Kakteen halten. Rechtsklicken Sie auf eine Topfpflanze, um sie zurück zu erhalten. -Can hold a small flower or plant=Hält eine kleine Blume oder Pflanze diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.es.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.es.tr deleted file mode 100644 index fd12b1b4f..000000000 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.es.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_flowerpots -Dandelion Flower Pot=Maceta con diente de león -Poppy Flower Pot=Maceta con amapola -Blue Orchid Flower Pot=Maceta con orquídeas azules -Allium Flower Pot=Maceta con puerro -Azure Bluet Flower Pot=Maceta con flor azul celeste -Red Tulip Flower Pot=Maceta con tulipán rojo -Pink Tulip Flower Pot=Maceta con tulipán rosa -White Tulip Flower Pot=Maceta con tulipán blanco -Orange Tulip Flower Pot=Maceta con tulipán naranja -Oxeye Daisy Flower Pot=Maceta con margarita -Brown Mushroom Flower Pot=Maceta con seta marrón -Red Mushroom Flower Pot=Maceta con seta roja -Oak Sapling Flower Pot=Maceta con roble joven -Acacia Sapling Flower Pot=Maceta con acacia -Jungle Sapling Flower Pot=Maceta con la jungla -Dark Oak Sapling Flower Pot=Maceta con roble oscuro -Spruce Sapling Flower Pot=Maceta con abeto -Birch Sapling Flower Pot=Maceta con abedul -Dead Bush Flower Pot=Maceta con arbusto muerto -Fern Flower Pot=Maceta con helecho -Cactus Flower Pot=Maceta con cactus -Flower Pot=Maceta -Flower pots are decorative blocks in which flowers and other small plants can be placed.=Las macetas son bloques decorativos en los que se pueden colocar flores y otras plantas pequeñas. -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Simplemente coloque una planta en la maceta. Las macetas pueden contener flores pequeñas (no más de 1 bloque), árboles jóvenes, helechos, arbustos muertos, hongos y cactus. Haga clic derecho en una planta en maceta para recuperar la planta. diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.fr.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.fr.tr deleted file mode 100644 index d80497117..000000000 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.fr.tr +++ /dev/null @@ -1,26 +0,0 @@ -# textdomain: mcl_flowerpots -Dandelion Flower Pot=Pissenlit en Pot -Poppy Flower Pot=Coquelicot en Pot -Blue Orchid Flower Pot=Orchidée Bleue en Pot -Allium Flower Pot=Allium en Pot -Azure Bluet Flower Pot=Houstonie Bleue en Pot -Red Tulip Flower Pot=Tulipe Rouge en Pot -Pink Tulip Flower Pot=Tulipe Rose en Pot -White Tulip Flower Pot=Tulipe Blanche en Pot -Orange Tulip Flower Pot=Tulipe Orange en Pot -Oxeye Daisy Flower Pot=Marguerite en Pot -Brown Mushroom Flower Pot=Champignon Marron en Pot -Red Mushroom Flower Pot=Champignon Rouge en Pot -Oak Sapling Flower Pot=Pousse de Chêne en Pot -Acacia Sapling Flower Pot=Pousse d'Acacia en Pot -Jungle Sapling Flower Pot=Pousse d'Acajou en Pot -Dark Oak Sapling Flower Pot=Pousse de Chêne Noir en Pot -Spruce Sapling Flower Pot=Pousse de Sapin en Pot -Birch Sapling Flower Pot=Pousse de Bouleau en Pot -Dead Bush Flower Pot=Arbuste Mort en Pot -Fern Flower Pot=Fougère en Pot -Cactus Flower Pot=Cactus en Pot -Flower Pot=Pot de Fleurs -Flower pots are decorative blocks in which flowers and other small plants can be placed.=Les pots de fleurs sont des blocs décoratifs dans lesquels des fleurs et d'autres petites plantes peuvent être placées. -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Placez simplement une plante sur le pot de fleurs. Les pots de fleurs peuvent contenir de petites fleurs (pas plus d'un bloc), des pousses, des fougères, des buissons morts, des champignons et des cactus. Cliquez avec le bouton droit sur une plante en pot pour récupérer la plante. -Can hold a small flower or plant=Peut contenir une petite fleur ou plante diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.pl.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.pl.tr deleted file mode 100644 index 4bc5e282a..000000000 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.pl.tr +++ /dev/null @@ -1,27 +0,0 @@ -# textdomain: mcl_flowerpots -Dandelion Flower Pot=Doniczka z mleczem -Poppy Flower Pot=Doniczka z makiem -Blue Orchid Flower Pot=Doniczka z niebieską orchideą -Allium Flower Pot=Doniczka z czosnkiem -Azure Bluet Flower Pot=Doniczka z houstonią błękitną -Red Tulip Flower Pot=Doniczka z czerwonym tulipanem -Pink Tulip Flower Pot=Doniczka z różowym tulipanem -White Tulip Flower Pot=Doniczka z białym tulipanem -Orange Tulip Flower Pot=Doniczka z pomarańczowym tulipanem -Oxeye Daisy Flower Pot=Doniczka ze stokrotką -Brown Mushroom Flower Pot=Doniczka z brązowym grzybem -Red Mushroom Flower Pot=Doniczka z czerwonym grzybem -Oak Sapling Flower Pot=Doniczka z sadzonką dębu -Acacia Sapling Flower Pot=Doniczka z sadzonką akacji -Jungle Sapling Flower Pot=Doniczka z tropikalną sadzonką -Dark Oak Sapling Flower Pot=Doniczka z sadzonką ciemnego dębu -Spruce Sapling Flower Pot=Doniczka z sadzonką świerku -Birch Sapling Flower Pot=Doniczka z sadzonką brzozy -Dead Bush Flower Pot=Doniczka z martwym buszem -Fern Flower Pot=Doniczka z paprocią -Cactus Flower Pot=Doniczka z kaktusem -Flower Pot=Doniczka -Flower pots are decorative blocks in which flowers and other small plants can be placed.=Doniczki są dekoracyjnymi blokami w których mogą zostać postawione kwiaty i inne małe rośliny. -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Po prostu umieść roślinę w doniczce. Mogę one przechowywać małe kwiaty (nie większe niż 1 blok), sadzonki, paprocie, martwe busze, grzyby i kaktusy. Kliknij prawym przyciskiem w doniczkę aby odzyskać roślinę. -Can hold a small flower or plant=Może przechowywać mały kwiat lub roślinę - diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.ru.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.ru.tr deleted file mode 100644 index 6bb6be923..000000000 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.ru.tr +++ /dev/null @@ -1,26 +0,0 @@ -# textdomain: mcl_flowerpots -Dandelion Flower Pot=Одуванчик в горшке -Poppy Flower Pot=Мак в горшке -Blue Orchid Flower Pot=Голубая орхидея в горшке -Allium Flower Pot=Лук в горшке -Azure Bluet Flower Pot=Хоустония Альба в горшке -Red Tulip Flower Pot=Красный тюльпан в горшке -Pink Tulip Flower Pot=Розовый тюльпан в горшке -White Tulip Flower Pot=Белый тюльпан в горшке -Orange Tulip Flower Pot=Оранжевый тюльпан в горшке -Oxeye Daisy Flower Pot=Нивяник обыкновенный в горшке -Brown Mushroom Flower Pot=Коричневый гриб в горшке -Red Mushroom Flower Pot=Красный гриб в горшке -Oak Sapling Flower Pot=Саженец дуба в горшке -Acacia Sapling Flower Pot=Саженец акации в горшке -Jungle Sapling Flower Pot=Саженец дерева джунглей в горшке -Dark Oak Sapling Flower Pot=Саженец тёмного дуба в горшке -Spruce Sapling Flower Pot=Саженец ели в горшке -Birch Sapling Flower Pot=Саженец берёзы в горшке -Dead Bush Flower Pot=Мёртвый куст в горшке -Fern Flower Pot=Цветок папоротника в горшке -Cactus Flower Pot=Кактус в горшке -Flower Pot=Цветочный горшок -Flower pots are decorative blocks in which flowers and other small plants can be placed.=Цветочные горшки это декоративные блоки, в которые можно посадить цветы и другие небольшие растения. -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Просто поместите растение в цветочный горшок. Цветочные горшки могут выдержать небольшие цветы (не выше 1 блока), саженцы, папоротники, мёртвые кусты, грибы и кактусы. Кликните правой по горшёчному растению, чтобы вытащить его из горшка. -Can hold a small flower or plant=Можно использовать для высадки небольшого растения или цветка diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.zh_TW.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.zh_TW.tr deleted file mode 100644 index 78ee96e8a..000000000 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.zh_TW.tr +++ /dev/null @@ -1,26 +0,0 @@ -# textdomain: mcl_flowerpots -Dandelion Flower Pot=蒲公英盆栽 -Poppy Flower Pot=罌粟盆栽 -Blue Orchid Flower Pot=藍色蝴蝶蘭盆栽 -Allium Flower Pot=紫紅球花盆栽 -Azure Bluet Flower Pot=雛草盆栽 -Red Tulip Flower Pot=紅色鬱金香盆栽 -Pink Tulip Flower Pot=粉色鬱金香盆栽 -White Tulip Flower Pot=白色鬱金香盆栽 -Orange Tulip Flower Pot=橙色鬱金香盆栽 -Oxeye Daisy Flower Pot=雛菊盆栽 -Brown Mushroom Flower Pot=棕色蘑菇盆栽 -Red Mushroom Flower Pot=紅色蘑菇盆栽 -Oak Sapling Flower Pot=橡木樹苗盆栽 -Acacia Sapling Flower Pot=相思木樹苗盆栽 -Jungle Sapling Flower Pot=叢林木樹苗盆栽 -Dark Oak Sapling Flower Pot=黑橡木樹苗盆栽 -Spruce Sapling Flower Pot=杉木樹苗盆栽 -Birch Sapling Flower Pot=樺木樹苗盆栽 -Dead Bush Flower Pot=枯灌木盆栽 -Fern Flower Pot=蕨盆栽 -Cactus Flower Pot=仙人掌盆栽 -Flower Pot=花盆 -Flower pots are decorative blocks in which flowers and other small plants can be placed.=花盆是可以放置鮮花和其他小植物的裝飾方塊。 -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=只需在花盆上放置一株植物即可。花盆可以放置小花(不高於1格)、樹苗、蕨類植物、枯樹叢、蘑菇和仙人掌。右鍵點擊盆栽即可取回植物。 -Can hold a small flower or plant=放置鮮花和其他小植物 diff --git a/mods/ITEMS/mcl_flowerpots/locale/template.txt b/mods/ITEMS/mcl_flowerpots/locale/template.txt deleted file mode 100644 index fcdf7d21e..000000000 --- a/mods/ITEMS/mcl_flowerpots/locale/template.txt +++ /dev/null @@ -1,26 +0,0 @@ -# textdomain: mcl_flowerpots -Dandelion Flower Pot= -Poppy Flower Pot= -Blue Orchid Flower Pot= -Allium Flower Pot= -Azure Bluet Flower Pot= -Red Tulip Flower Pot= -Pink Tulip Flower Pot= -White Tulip Flower Pot= -Orange Tulip Flower Pot= -Oxeye Daisy Flower Pot= -Brown Mushroom Flower Pot= -Red Mushroom Flower Pot= -Oak Sapling Flower Pot= -Acacia Sapling Flower Pot= -Jungle Sapling Flower Pot= -Dark Oak Sapling Flower Pot= -Spruce Sapling Flower Pot= -Birch Sapling Flower Pot= -Dead Bush Flower Pot= -Fern Flower Pot= -Cactus Flower Pot= -Flower Pot= -Flower pots are decorative blocks in which flowers and other small plants can be placed.= -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.= -Can hold a small flower or plant= diff --git a/mods/ITEMS/mcl_flowerpots/mod.conf b/mods/ITEMS/mcl_flowerpots/mod.conf deleted file mode 100644 index e6a71c4da..000000000 --- a/mods/ITEMS/mcl_flowerpots/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name=mcl_flowerpots -depends=mcl_core, mcl_sounds, mcl_farming -optional_depends=doc \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowerpots/models/flowerpot.obj b/mods/ITEMS/mcl_flowerpots/models/flowerpot.obj deleted file mode 100644 index 5921a5b9f..000000000 --- a/mods/ITEMS/mcl_flowerpots/models/flowerpot.obj +++ /dev/null @@ -1,74 +0,0 @@ -# Blender v2.72 (sub 0) OBJ File: 'flowerpot.blend' -# www.blender.org -mtllib flowerpot.mtl -o Cube_Cube.001 -v -0.376261 -1.015969 0.376261 -v -0.376261 -0.263447 0.376261 -v -0.376261 -1.015969 -0.376261 -v -0.376261 -0.263447 -0.376261 -v 0.376261 -1.015969 0.376261 -v 0.376261 -0.263447 0.376261 -v 0.376261 -1.015969 -0.376261 -v 0.376261 -0.263447 -0.376261 -v -0.250727 -0.559166 0.250727 -v -0.250727 -0.263549 0.250727 -v -0.250727 -0.559166 -0.250727 -v -0.250727 -0.263549 -0.250727 -v 0.250727 -0.559166 0.250727 -v 0.250727 -0.263549 0.250727 -v 0.250727 -0.559166 -0.250727 -v 0.250727 -0.263549 -0.250727 -v 0.678334 1.490754 0.678334 -v 0.678334 -0.569152 0.678334 -v -0.678334 1.490754 -0.678334 -v -0.678334 -0.569152 -0.678334 -v -0.678334 1.490754 0.678334 -v -0.678334 -0.569152 0.678334 -v 0.678334 1.490754 -0.678334 -v 0.678334 -0.569152 -0.678334 -vt 0.562500 0.187500 -vt 0.562500 0.375000 -vt 0.375000 0.375000 -vt 0.375000 0.187500 -vt 0.187500 0.375000 -vt 0.187500 0.187500 -vt 0.000000 0.375000 -vt 0.000000 0.187500 -vt 0.750000 0.187500 -vt 0.750000 0.375000 -vt 0.687500 0.000000 -vt 0.875000 0.000000 -vt 0.875000 0.187500 -vt 0.687500 0.187500 -vt 0.500000 0.000000 -vt 0.500000 0.187500 -vt 0.375000 0.000000 -vt 0.250000 0.000000 -vt 0.250000 0.062500 -vt 0.375000 0.062500 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.000000 -vt 0.000000 0.062500 -vt 0.500000 0.062500 -vt 0.125000 0.187500 -vt 0.250000 0.187500 -vt 0.000000 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.000000 0.500000 -usemtl None -s off -f 1/1 2/2 4/3 3/4 -f 3/4 4/3 8/5 7/6 -f 7/6 8/5 6/7 5/8 -f 5/9 6/10 2/2 1/1 -f 3/11 7/12 5/13 1/14 -f 8/15 4/11 2/14 6/16 -f 9/17 11/18 12/19 10/20 -f 11/18 15/21 16/22 12/19 -f 15/21 13/23 14/24 16/22 -f 13/15 9/17 10/20 14/25 -f 11/22 9/26 13/27 15/19 -f 17/28 19/29 20/30 18/31 -f 21/28 23/29 24/30 22/31 diff --git a/mods/ITEMS/mcl_flowerpots/models/flowerpot_with_Xflower.obj b/mods/ITEMS/mcl_flowerpots/models/flowerpot_with_Xflower.obj deleted file mode 100644 index d2127236c..000000000 --- a/mods/ITEMS/mcl_flowerpots/models/flowerpot_with_Xflower.obj +++ /dev/null @@ -1,90 +0,0 @@ -# Blender v2.78 (sub 0) OBJ File: '' -# www.blender.org -mtllib flowerpot_with_Xflower.mtl -o Cube_Cube.001 -v -0.376017 -1.015283 0.376017 -v -0.376017 -0.263249 0.376017 -v -0.376017 -0.263249 -0.376017 -v -0.376017 -1.015283 -0.376017 -v 0.376017 -0.263249 -0.376017 -v 0.376017 -1.015283 -0.376017 -v 0.376017 -0.263249 0.376017 -v 0.376017 -1.015283 0.376017 -v -0.250565 -0.558776 0.250565 -v -0.250565 -0.558776 -0.250565 -v -0.250565 -0.263350 -0.250565 -v -0.250565 -0.263350 0.250565 -v 0.250565 -0.558776 -0.250565 -v 0.250565 -0.263350 -0.250565 -v 0.250565 -0.558776 0.250565 -v 0.250565 -0.263350 0.250565 -v -0.677552 -0.564356 0.677766 -v -0.677552 1.848188 0.677767 -v 0.677280 -0.564356 -0.677066 -v 0.677280 1.848188 -0.677066 -v 0.677280 -0.564356 0.677767 -v 0.677280 1.848188 0.677767 -v -0.677552 -0.564356 -0.677066 -v -0.677552 1.848188 -0.677066 -vt 1.0000 0.0000 -vt 1.0000 0.6250 -vt 0.5000 0.6250 -vt 0.5000 -0.0000 -vt 1.0000 0.0000 -vt 1.0000 0.6250 -vt 0.5000 0.6250 -vt 0.5000 -0.0000 -vt 0.5625 0.6250 -vt 0.5625 0.8125 -vt 0.3750 0.8125 -vt 0.3750 0.6250 -vt 0.1875 0.8125 -vt 0.1875 0.6250 -vt -0.0000 0.8125 -vt 0.0000 0.6250 -vt 0.7500 0.6250 -vt 0.7500 0.8125 -vt 0.3750 0.8125 -vt 0.5625 0.8125 -vt 0.5625 1.0000 -vt 0.3750 1.0000 -vt 0.3750 1.0000 -vt 0.1875 1.0000 -vt 0.3750 0.4375 -vt 0.2500 0.4375 -vt 0.2500 0.5000 -vt 0.3750 0.5000 -vt 0.1250 0.4375 -vt 0.1250 0.5000 -vt -0.0000 0.4375 -vt -0.0000 0.5000 -vt 0.5000 0.4375 -vt 0.5000 0.5000 -vt 0.1250 0.5000 -vt 0.1250 0.6250 -vt 0.2500 0.6250 -vt 0.2500 0.5000 -vn -0.7071 0.0000 -0.7071 -vn -0.7071 0.0000 0.7071 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 -0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 17/1/1 18/2/1 20/3/1 19/4/1 -f 21/5/2 22/6/2 24/7/2 23/8/2 -s 1 -f 1/9/3 2/10/3 3/11/3 4/12/3 -f 4/12/4 3/11/4 5/13/4 6/14/4 -f 6/14/5 5/13/5 7/15/5 8/16/5 -f 8/17/6 7/18/6 2/10/6 1/9/6 -f 4/19/7 6/20/7 8/21/7 1/22/7 -f 5/13/8 3/11/8 2/23/8 7/24/8 -f 9/25/5 10/26/5 11/27/5 12/28/5 -f 10/26/6 13/29/6 14/30/6 11/27/6 -f 13/29/3 15/31/3 16/32/3 14/30/3 -f 15/33/4 9/25/4 12/28/4 16/34/4 -f 10/35/8 9/36/8 15/37/8 13/38/8 diff --git a/mods/ITEMS/mcl_flowerpots/models/flowerpot_with_long_cube.obj b/mods/ITEMS/mcl_flowerpots/models/flowerpot_with_long_cube.obj deleted file mode 100644 index 0b7f58da1..000000000 --- a/mods/ITEMS/mcl_flowerpots/models/flowerpot_with_long_cube.obj +++ /dev/null @@ -1,150 +0,0 @@ -# Blender v2.78 (sub 0) OBJ File: '' -# www.blender.org -mtllib flowerpot_with_long_cube.mtl -o Cube_Cube.001 -v 0.256212 -0.267479 0.256212 -v 0.256212 1.081644 0.256212 -v 0.256212 -0.267479 -0.256212 -v 0.256212 1.081644 -0.256212 -v -0.256212 -0.267479 -0.256212 -v -0.256212 1.081644 -0.256212 -v -0.256212 1.081644 0.256212 -v -0.256212 -0.267479 0.256212 -v -0.376017 -1.015283 0.376017 -v -0.376017 -0.263249 0.376017 -v -0.376017 -0.263249 -0.376017 -v -0.376017 -1.015283 -0.376017 -v 0.376017 -0.263249 -0.376017 -v 0.376017 -1.015283 -0.376017 -v 0.376017 -0.263249 0.376017 -v 0.376017 -1.015283 0.376017 -v -0.250565 -0.558776 0.250565 -v -0.250565 -0.558776 -0.250565 -v -0.250565 -0.263350 -0.250565 -v -0.250565 -0.263350 0.250565 -v 0.250565 -0.558776 -0.250565 -v 0.250565 -0.263350 -0.250565 -v 0.250565 -0.558776 0.250565 -v 0.250565 -0.263350 0.250565 -v 0.685750 -0.738264 0.685751 -v 0.685751 1.201331 0.685750 -v -0.685750 -0.738264 -0.685750 -v -0.685750 1.201331 -0.685751 -v -0.685750 -0.738264 0.685750 -v -0.685750 1.201331 0.685751 -v 0.685751 -0.738264 -0.685751 -v 0.685751 1.201331 -0.685750 -v 0.130337 -0.351889 0.130337 -v 0.130337 0.272653 0.130337 -v 0.130337 -0.351888 -0.130337 -v 0.130337 0.272653 -0.130337 -v -0.130337 -0.351888 -0.130337 -v -0.130337 0.272653 -0.130337 -v -0.130337 0.272653 0.130337 -v -0.130337 -0.351889 0.130337 -vt 1.0000 0.0000 -vt 1.0000 0.5000 -vt 0.5000 0.5000 -vt 0.5000 0.0000 -vt 1.0000 0.0000 -vt 1.0000 0.5000 -vt 0.5000 0.5000 -vt 0.5000 0.0000 -vt 0.2500 0.0000 -vt 0.2500 0.3125 -vt 0.1250 0.3125 -vt 0.1250 -0.0000 -vt 0.3750 0.0000 -vt 0.3750 0.3125 -vt 0.5625 0.6250 -vt 0.5625 0.8125 -vt 0.3750 0.8125 -vt 0.3750 0.6250 -vt 0.1875 0.8125 -vt 0.1875 0.6250 -vt -0.0000 0.8125 -vt 0.0000 0.6250 -vt 0.7500 0.6250 -vt 0.7500 0.8125 -vt 0.3750 0.8125 -vt 0.5625 0.8125 -vt 0.5625 1.0000 -vt 0.3750 1.0000 -vt 0.3750 1.0000 -vt 0.1875 1.0000 -vt 0.3750 0.4375 -vt 0.2500 0.4375 -vt 0.2500 0.5000 -vt 0.3750 0.5000 -vt 0.1250 0.4375 -vt 0.1250 0.5000 -vt -0.0000 0.4375 -vt -0.0000 0.5000 -vt 0.5000 0.4375 -vt 0.5000 0.5000 -vt 0.1250 0.5000 -vt 0.1250 0.6250 -vt 0.2500 0.6250 -vt 0.2500 0.5000 -vt 0.0000 0.3125 -vt -0.0000 -0.0000 -vt 0.5000 -0.0000 -vt 0.5000 0.3125 -vt 0.2500 0.3125 -vt 0.3750 0.3125 -vt 0.3750 0.4375 -vt 0.2500 0.4375 -vt 0.2500 0.4375 -vt 0.1250 0.4375 -vt 0.8750 0.6250 -vt 0.8750 0.7188 -vt 0.8125 0.7188 -vt 0.8125 0.6250 -vt 0.9375 0.6250 -vt 0.9375 0.7188 -vt 0.7500 0.7188 -vt 0.7500 0.6250 -vt 1.0000 0.6250 -vt 1.0000 0.7188 -vt 0.8750 0.7188 -vt 0.9375 0.7188 -vt 0.9375 0.7812 -vt 0.8750 0.7812 -vt 0.8750 0.7812 -vt 0.8125 0.7812 -vn -0.7071 0.0000 0.7071 -vn -0.7071 0.0000 -0.7071 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 -0.0000 0.0000 -vn 1.0000 -0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 25/1/1 26/2/1 28/3/1 27/4/1 -f 29/5/2 30/6/2 32/7/2 31/8/2 -s 1 -f 5/9/3 6/10/3 4/11/3 3/12/3 -f 8/13/4 7/14/4 6/10/4 5/9/4 -f 9/15/4 10/16/4 11/17/4 12/18/4 -f 12/18/3 11/17/3 13/19/3 14/20/3 -f 14/20/5 13/19/5 15/21/5 16/22/5 -f 16/23/6 15/24/6 10/16/6 9/15/6 -f 12/25/7 14/26/7 16/27/7 9/28/7 -f 13/19/8 11/17/8 10/29/8 15/30/8 -f 17/31/5 18/32/5 19/33/5 20/34/5 -f 18/32/6 21/35/6 22/36/6 19/33/6 -f 21/35/4 23/37/4 24/38/4 22/36/4 -f 23/39/3 17/31/3 20/34/3 24/40/3 -f 18/41/8 17/42/8 23/43/8 21/44/8 -f 3/12/5 4/11/5 2/45/5 1/46/5 -f 1/47/6 2/48/6 7/14/6 8/13/6 -f 5/49/7 3/50/7 1/51/7 8/52/7 -f 4/11/8 6/10/8 7/53/8 2/54/8 -f 37/55/3 38/56/3 36/57/3 35/58/3 -f 40/59/4 39/60/4 38/56/4 37/55/4 -f 35/58/5 36/57/5 34/61/5 33/62/5 -f 33/63/6 34/64/6 39/60/6 40/59/6 -f 37/65/7 35/66/7 33/67/7 40/68/7 -f 36/57/8 38/56/8 39/69/8 34/70/8 diff --git a/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_cactus.png b/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_cactus.png deleted file mode 100644 index 6c40875ef..000000000 Binary files a/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_cactus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_flowerpot.png b/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_flowerpot.png deleted file mode 100644 index a07dd788a..000000000 Binary files a/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_flowerpot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_flowerpot_inventory.png b/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_flowerpot_inventory.png deleted file mode 100644 index 5d6a6a244..000000000 Binary files a/mods/ITEMS/mcl_flowerpots/textures/mcl_flowerpots_flowerpot_inventory.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/API.md b/mods/ITEMS/mcl_flowers/API.md deleted file mode 100644 index f3dc87725..000000000 --- a/mods/ITEMS/mcl_flowers/API.md +++ /dev/null @@ -1,9 +0,0 @@ -# API -Flower mod for mcl2 -# Functions -## mcl_flowers.register_simple_flower(name, desc, image, simple_selection_box) -Register a simple flower: -* name: legacity name eg: "my_super_flower" -* desc: description eg: "My Super Flower" -* image: texture -* simple_selection_box: nodebox of the flower \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/README.txt b/mods/ITEMS/mcl_flowers/README.txt deleted file mode 100644 index baee0ef4f..000000000 --- a/mods/ITEMS/mcl_flowers/README.txt +++ /dev/null @@ -1,12 +0,0 @@ -Minetest 0.4 mod: flowers -========================= - -License of source code: ------------------------ -Copyright (C) 2012-2013 Ironzorg, VanessaE - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. diff --git a/mods/ITEMS/mcl_flowers/credit.txt b/mods/ITEMS/mcl_flowers/credit.txt deleted file mode 100644 index f57fe1797..000000000 --- a/mods/ITEMS/mcl_flowers/credit.txt +++ /dev/null @@ -1,8 +0,0 @@ -Credit to people who made things. - -jojoa1997: --edited all of it --flower pot - -VanessaE: --waterlily diff --git a/mods/ITEMS/mcl_flowers/init.lua b/mods/ITEMS/mcl_flowers/init.lua deleted file mode 100644 index 33ea531c5..000000000 --- a/mods/ITEMS/mcl_flowers/init.lua +++ /dev/null @@ -1,521 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - -local mod_screwdriver = minetest.get_modpath("screwdriver") -local has_mcl_flowerpots = minetest.get_modpath("mcl_flowerpots") - -mcl_flowers = {} -mcl_flowers.registered_simple_flowers = {} --- Simple flower template -local smallflowerlongdesc = S("This is a small flower. Small flowers are mainly used for dye production and can also be potted.") -local plant_usage_help = S("It can only be placed on a block on which it would also survive.") - -local get_palette_color_from_pos = function(pos) - local biome_data = minetest.get_biome_data(pos) - local index = 0 - if biome_data then - local biome = biome_data.biome - local biome_name = minetest.get_biome_name(biome) - local reg_biome = minetest.registered_biomes[biome_name] - if reg_biome then - index = reg_biome._mcl_palette_index - end - end - return index -end - --- on_place function for flowers -local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos, node, itemstack) - local below = {x=pos.x, y=pos.y-1, z=pos.z} - local soil_node = minetest.get_node_or_nil(below) - if not soil_node then return false end - - local has_palette = minetest.registered_nodes[itemstack:get_name()].palette ~= nil - local colorize - if has_palette then - colorize = get_palette_color_from_pos(pos) - end - if not colorize then - colorize = 0 - end - ---[[ Placement requirements: - * Dirt or grass block - * If not flower, also allowed on podzol and coarse dirt - * Light level >= 8 at any time or exposed to sunlight at day -]] - local light_night = minetest.get_node_light(pos, 0.0) - local light_day = minetest.get_node_light(pos, 0.5) - local light_ok = false - if (light_night and light_night >= 8) or (light_day and light_day >= minetest.LIGHT_MAX) then - light_ok = true - end - local is_flower = minetest.get_item_group(itemstack:get_name(), "flower") == 1 - local ok = (soil_node.name == "mcl_core:dirt" or minetest.get_item_group(soil_node.name, "grass_block") == 1 or (not is_flower and (soil_node.name == "mcl_core:coarse_dirt" or soil_node.name == "mcl_core:podzol" or soil_node.name == "mcl_core:podzol_snow"))) and light_ok - return ok, colorize -end) - -function mcl_flowers.register_simple_flower(name, def) - local newname = "mcl_flowers:"..name - if not def._mcl_silk_touch_drop then def._mcl_silk_touch_drop = nil end - if not def.drop then def.drop = newname end - mcl_flowers.registered_simple_flowers[newname] = { - name=name, - desc=def.desc, - image=def.image, - simple_selection_box=def.simple_selection_box, - } - minetest.register_node(newname, { - description = def.desc, - _doc_items_longdesc = smallflowerlongdesc, - _doc_items_usagehelp = plant_usage_help, - drawtype = "plantlike", - waving = 1, - tiles = { def.image }, - inventory_image = def.image, - wield_image = def.image, - sunlight_propagates = true, - paramtype = "light", - walkable = false, - stack_max = 64, - drop = def.drop, - groups = { - attached_node = 1, deco_block = 1, dig_by_piston = 1, dig_immediate = 3, - dig_by_water = 1, destroy_by_lava_flow = 1, enderman_takable = 1, - plant = 1, flower = 1, place_flowerlike = 1, non_mycelium_plant = 1, - flammable = 2, fire_encouragement = 60, fire_flammability = 100, - compostability = 65 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - node_placement_prediction = "", - on_place = on_place_flower, - selection_box = { - type = "fixed", - fixed = def.selection_box, - }, - _mcl_silk_touch_drop = def._mcl_silk_touch_drop, - }) - if def.potted and has_mcl_flowerpots then - mcl_flowerpots.register_potted_flower(newname, { - name = name, - desc = def.desc, - image = def.image, - }) - end -end - -local wheat_seed_drop = { - max_items = 1, - items = { - { - items = {"mcl_farming:wheat_seeds"}, - rarity = 8, - }, - }, -} - -local fortune_wheat_seed_drop = { - discrete_uniform_distribution = true, - items = {"mcl_farming:wheat_seeds"}, - chance = 1 / 8, - min_count = 1, - max_count = 1, - factor = 2, - overwrite = true, -} - --- CHECKME: How does tall grass behave when pushed by a piston? - ---- Tall Grass --- -local def_tallgrass = { - description = S("Tall Grass"), - drawtype = "plantlike", - _doc_items_longdesc = S("Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high."), - _doc_items_usagehelp = plant_usage_help, - _doc_items_hidden = false, - waving = 1, - tiles = {"mcl_flowers_tallgrass.png"}, - inventory_image = "mcl_flowers_tallgrass_inv.png", - wield_image = "mcl_flowers_tallgrass_inv.png", - selection_box = { - type = "fixed", - fixed = {{ -6/16, -8/16, -6/16, 6/16, 4/16, 6/16 }}, - }, - paramtype = "light", - paramtype2 = "color", - palette = "mcl_core_palette_grass.png", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - is_ground_content = true, - groups = { - handy = 1, shearsy = 1, attached_node = 1, deco_block = 1, - plant = 1, place_flowerlike = 2, non_mycelium_plant = 1, - flammable = 3, fire_encouragement = 60, fire_flammability = 100, - dig_by_water = 1, destroy_by_lava_flow = 1, compostability = 30 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - drop = wheat_seed_drop, - _mcl_shears_drop = true, - _mcl_fortune_drop = fortune_wheat_seed_drop, - node_placement_prediction = "", - on_place = on_place_flower, - _mcl_blast_resistance = 0, - _mcl_hardness = 0, -} -minetest.register_node("mcl_flowers:tallgrass", def_tallgrass) - ---- Fern --- --- The fern is very similar to tall grass, so we can copy a lot from it. -local def_fern = table.copy(def_tallgrass) -def_fern.description = S("Fern") -def_fern._doc_items_longdesc = S("Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.") -def_fern.tiles = { "mcl_flowers_fern.png" } -def_fern.inventory_image = "mcl_flowers_fern_inv.png" -def_fern.wield_image = "mcl_flowers_fern_inv.png" -def_fern.selection_box = { - type = "fixed", - fixed = { -6/16, -0.5, -6/16, 6/16, 5/16, 6/16 }, -} -def_fern.groups.compostability = 65 - -minetest.register_node("mcl_flowers:fern", def_fern) - -if has_mcl_flowerpots then - mcl_flowerpots.register_potted_flower("mcl_flowers:fern", { - name = "fern", - desc = S("Fern"), - image = "mcl_flowers_fern_inv.png", - }) -end - -local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_img, selbox_radius, selbox_top_height, drop, shears_drop, is_flower, grass_color, fortune_drop) - if not inv_img then - inv_img = top_img - end - local create_entry, paramtype2, palette - if is_flower == nil then - is_flower = true - end - - local bottom_groups = { - attached_node = 1, deco_block = 1, - dig_by_water = 1, destroy_by_lava_flow = 1, dig_by_piston = 1, - flammable = 2, fire_encouragement = 60, fire_flammability = 100, - plant = 1, double_plant = 1, non_mycelium_plant = 1, compostability = 65 - } - if name == "double_grass" then - bottom_groups.compostability = 50 - end - if is_flower then - bottom_groups.flower = 1 - bottom_groups.place_flowerlike = 1 - bottom_groups.dig_immediate = 3 - else - bottom_groups.place_flowerlike = 2 - bottom_groups.handy = 1 - bottom_groups.shearsy = 1 - end - if grass_color then - paramtype2 = "color" - palette = "mcl_core_palette_grass.png" - end - if longdesc == nil then - bottom_groups.not_in_creative_inventory = 1 - create_entry = false - end - -- Drop itself by default - local drop_bottom, drop_top - if not drop then - drop_top = "mcl_flowers:"..name - else - drop_top = drop - drop_bottom = drop - end - minetest.register_node("mcl_flowers:"..name, { - description = desc, - _doc_items_create_entry = create_entry, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = plant_usage_help, - drawtype = "plantlike", - tiles = { bottom_img }, - inventory_image = inv_img, - wield_image = inv_img, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = paramtype2, - palette = palette, - walkable = false, - buildable_to = true, - drop = drop_bottom, - _mcl_shears_drop = shears_drop, - _mcl_fortune_drop = fortune_drop, - node_placement_prediction = "", - selection_box = { - type = "fixed", - fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, 0.5, selbox_radius }, - }, - on_place = function(itemstack, placer, pointed_thing) - -- We can only place on nodes - if pointed_thing.type ~= "node" then - return - end - - local itemstring = "mcl_flowers:"..name - - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - -- Check for a floor and a space of 1×2×1 - local ptu_node = minetest.get_node(pointed_thing.under) - local bottom - if not minetest.registered_nodes[ptu_node.name] then - return itemstack - end - if minetest.registered_nodes[ptu_node.name].buildable_to then - bottom = pointed_thing.under - else - bottom = pointed_thing.above - end - if not minetest.registered_nodes[minetest.get_node(bottom).name] then - return itemstack - end - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - local bottom_buildable = minetest.registered_nodes[minetest.get_node(bottom).name].buildable_to - local top_buildable = minetest.registered_nodes[minetest.get_node(top).name].buildable_to - local floor = minetest.get_node({x=bottom.x, y=bottom.y-1, z=bottom.z}) - if not minetest.registered_nodes[floor.name] then - return itemstack - end - - local light_night = minetest.get_node_light(bottom, 0.0) - local light_day = minetest.get_node_light(bottom, 0.5) - local light_ok = false - if (light_night and light_night >= 8) or (light_day and light_day >= minetest.LIGHT_MAX) then - light_ok = true - end - - -- Placement rules: - -- * Allowed on dirt or grass block - -- * If not a flower, also allowed on podzol and coarse dirt - -- * Only with light level >= 8 - -- * Only if two enough space - if (floor.name == "mcl_core:dirt" or minetest.get_item_group(floor.name, "grass_block") == 1 or (not is_flower and (floor.name == "mcl_core:coarse_dirt" or floor.name == "mcl_core:podzol" or floor.name == "mcl_core:podzol_snow"))) and bottom_buildable and top_buildable and light_ok then - local param2 - if grass_color then - param2 = get_palette_color_from_pos(bottom) - end - -- Success! We can now place the flower - minetest.sound_play(minetest.registered_nodes[itemstring].sounds.place, {pos = bottom, gain=1}, true) - minetest.set_node(bottom, {name=itemstring, param2=param2}) - minetest.set_node(top, {name=itemstring.."_top", param2=param2}) - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - end - return itemstack - end, - after_destruct = function(pos, oldnode) - -- Remove top half of flower (if it exists) - local bottom = pos - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - if minetest.get_node(bottom).name ~= "mcl_flowers:"..name and minetest.get_node(top).name == "mcl_flowers:"..name.."_top" then - minetest.remove_node(top) - end - end, - groups = bottom_groups, - sounds = mcl_sounds.node_sound_leaves_defaults(), - }) - - local top_groups = table.copy(bottom_groups) - top_groups.not_in_creative_inventory=1 - top_groups.double_plant=2 - top_groups.attached_node=nil - - -- Top - minetest.register_node("mcl_flowers:"..name.."_top", { - description = desc.." " .. S("(Top Part)"), - _doc_items_create_entry = false, - drawtype = "plantlike", - tiles = { top_img }, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = paramtype2, - palette = palette, - walkable = false, - buildable_to = true, - selection_box = { - type = "fixed", - fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, selbox_top_height, selbox_radius }, - }, - drop = drop_top, - _mcl_shears_drop = shears_drop, - _mcl_fortune_drop = fortune_drop, - after_destruct = function(pos, oldnode) - -- Remove bottom half of flower (if it exists) - local top = pos - local bottom = { x = top.x, y = top.y - 1, z = top.z } - if minetest.get_node(top).name ~= "mcl_flowers:"..name.."_top" and minetest.get_node(bottom).name == "mcl_flowers:"..name then - minetest.remove_node(bottom) - end - end, - groups = top_groups, - sounds = mcl_sounds.node_sound_leaves_defaults(), - }) - - if minetest.get_modpath("doc") and longdesc then - doc.add_entry_alias("nodes", "mcl_flowers:"..name, "nodes", "mcl_flowers:"..name.."_top") - -- If no longdesc, help alias must be added manually - end - -end - -add_large_plant("peony", S("Peony"), S("A peony is a large plant which occupies two blocks. It is mainly used in dye production."), "mcl_flowers_double_plant_paeonia_bottom.png", "mcl_flowers_double_plant_paeonia_top.png", nil, 5/16, 6/16) -add_large_plant("rose_bush", S("Rose Bush"), S("A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production."), "mcl_flowers_double_plant_rose_bottom.png", "mcl_flowers_double_plant_rose_top.png", nil, 5/16, 1/16) -add_large_plant("lilac", S("Lilac"), S("A lilac is a large plant which occupies two blocks. It is mainly used in dye production."), "mcl_flowers_double_plant_syringa_bottom.png", "mcl_flowers_double_plant_syringa_top.png", nil, 5/16, 6/16) - --- TODO: Make the sunflower face East. Requires a mesh for the top node. -add_large_plant("sunflower", S("Sunflower"), S("A sunflower is a large plant which occupies two blocks. It is mainly used in dye production."), "mcl_flowers_double_plant_sunflower_bottom.png", "mcl_flowers_double_plant_sunflower_top.png^mcl_flowers_double_plant_sunflower_front.png", "mcl_flowers_double_plant_sunflower_front.png", 6/16, 6/16) - -local longdesc_grass = S("Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.") -local longdesc_fern = S("Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.") - -add_large_plant("double_grass", S("Double Tallgrass"), longdesc_grass, "mcl_flowers_double_plant_grass_bottom.png", "mcl_flowers_double_plant_grass_top.png", "mcl_flowers_double_plant_grass_inv.png", 6/16, 4/16, wheat_seed_drop, {"mcl_flowers:tallgrass 2"}, false, true, fortune_wheat_seed_drop) -add_large_plant("double_fern", S("Large Fern"), longdesc_fern, "mcl_flowers_double_plant_fern_bottom.png", "mcl_flowers_double_plant_fern_top.png", "mcl_flowers_double_plant_fern_inv.png", 5/16, 5/16, wheat_seed_drop, {"mcl_flowers:fern 2"}, false, true, fortune_wheat_seed_drop) - -minetest.register_abm({ - label = "Pop out flowers", - nodenames = {"group:flower"}, - interval = 12, - chance = 2, - action = function(pos, node) - -- Ignore the upper part of double plants - if minetest.get_item_group(node.name, "double_plant") == 2 then - return - end - local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z}) - if not below then - return - end - -- Pop out flower if not on dirt, grass block or too low brightness - if (below.name ~= "mcl_core:dirt" and minetest.get_item_group(below.name, "grass_block") ~= 1) or (minetest.get_node_light(pos, 0.5) < 8) then - minetest.dig_node(pos) - return - end - end, -}) - -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_simple -end - --- Lily Pad -minetest.register_node("mcl_flowers:waterlily", { - description = S("Lily Pad"), - _doc_items_longdesc = S("A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice."), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"flowers_waterlily.png", "flowers_waterlily.png^[transformFY"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - inventory_image = "flowers_waterlily.png", - wield_image = "flowers_waterlily.png", - liquids_pointable = true, - walkable = true, - sunlight_propagates = true, - groups = { - deco_block = 1, plant = 1, compostability = 65, destroy_by_lava_flow = 1, - dig_immediate = 3, dig_by_water = 1, dig_by_piston = 1, dig_by_boat = 1, - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - node_placement_prediction = "", - node_box = { - type = "fixed", - fixed = {-0.5, -31/64, -0.5, 0.5, -15/32, 0.5} - }, - selection_box = { - type = "fixed", - fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, -15 / 32, 7 / 16} - }, - - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - local node = minetest.get_node(pointed_thing.under) - local nodename = node.name - local def = minetest.registered_nodes[nodename] - local node_above = minetest.get_node(pointed_thing.above).name - local def_above = minetest.registered_nodes[node_above] - local player_name = placer:get_player_name() - - if def then - -- Use pointed node's on_rightclick function first, if present - if placer and not placer:get_player_control().sneak then - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - if (pointed_thing.under.x == pointed_thing.above.x and pointed_thing.under.z == pointed_thing.above.z) and - ((def.liquidtype == "source" and minetest.get_item_group(nodename, "water") > 0) or - (nodename == "mcl_core:ice") or - (minetest.get_item_group(nodename, "frosted_ice") > 0)) and - (def_above.buildable_to and minetest.get_item_group(node_above, "liquid") == 0) then - if not minetest.is_protected(pos, player_name) then - minetest.set_node(pos, {name = "mcl_flowers:waterlily", param2 = math.random(0, 3)}) - local idef = itemstack:get_definition() - - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=pointed_thing.above, gain=1}, true) - end - - if not minetest.is_creative_enabled(player_name) then - itemstack:take_item() - end - else - minetest.record_protection_violation(pos, player_name) - end - end - end - return itemstack - end, - on_rotate = on_rotate, -}) - --- Legacy support -minetest.register_alias("mcl_core:tallgrass", "mcl_flowers:tallgrass") - --- mcimport support: re-adds missing double_plant tops in mcimported worlds. -local mg_name = minetest.get_mapgen_setting("mg_name") -local mod_mcimport = minetest.get_modpath("mcimport") - -local fix_doubleplants = minetest.settings:get_bool("fix_doubleplants", true) - -if mod_mcimport and mg_name == "singlenode" and fix_doubleplants == true then - local flowernames = { "peony", "rose_bush", "lilac", "sunflower", "double_fern", "double_grass" } - - minetest.register_lbm({ - label = "Add double plant tops.", - name = "mcl_flowers:double_plant_topper", - run_at_every_load = true, - nodenames = { "mcl_flowers:peony", "mcl_flowers:rose_bush", "mcl_flowers:lilac", "mcl_flowers:sunflower", "mcl_flowers:double_fern", "mcl_flowers:double_grass" }, - action = function(pos, node) - for c = 1, 6 do - local flowername = flowernames[c] - local bottom = pos - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - if node.name == "mcl_flowers:"..flowername then - minetest.set_node(top, {name = "mcl_flowers:"..flowername.."_top"}) - end - end - end, - }) -end - -dofile(modpath.."/register.lua") diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.de.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.de.tr deleted file mode 100644 index 0e1262e3c..000000000 --- a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.de.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_flowers -This is a small flower. Small flowers are mainly used for dye production and can also be potted.=Dies ist eine kleine Blume. Kleine Blumen werden hauptsächlich in der Farbenproduktion benutzt, können aber auch in Blumentöpfen platziert werden. -It can only be placed on a block on which it would also survive.=Diese Pflanze kann nur auf einem Block platziert werden, auf dem sie auch überleben würde. -Poppy=Mohn -Dandelion=Löwenzahn -Oxeye Daisy=Margerite -Orange Tulip=Orange Tulpe -Pink Tulip=Rosa Tulpe -Red Tulip=Rote Tulpe -White Tulip=Weiße Tulpe -Allium=Sternlauch -Azure Bluet=Porzellansternchen -Blue Orchid=Blaue Orchidee -Tall Grass=Hohes Gras -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=Hohes Gras ist eine kleine Pflanze, die oft auf Wiesenflächen wächst. Es kann für Weizensamen abgeerntet werden. Mit Knochenmehl lässt sich hohes Gras zu doppelhohem Gras verwandeln. -Fern=Farn -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Farne sind kleine Pflanzen, die oft in Dschungeln und Taigas vorkommen. Sie können für Weizensamen abgeerntet werden. Mit Knochenmehl lässt sich ein Farn zu einem großen Farn, der zwei Blöcke hoch ist, verwandeln. -(Top Part)=(Oberseite) -Peony=Pfingstrose -A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Eine Pfingstrose ist eine große Pflanze, die zwei Blöcke hoch ist. Sie wird hauptsächlich für die Farbenproduktion gebraucht. -Rose Bush=Rosenbusch -A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=Ein Rosenbusch ist eine große Pflanze, die zwei Blöcke hoch ist. Es ist sicher, durch ihn hindurch zu gehen. Er wird hauptsächlich für die Farbenproduktion gebraucht. -Lilac=Flieder -A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=Ein Flieder ist eine große Pflanze, die zwei Blöcke hoch ist. Er wird hauptsächlich für die Farbenproduktion gebraucht. -Sunflower=Sonnenblume -A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=Eine Sonnenblume ist eine große Pflanze, die zwei Blöcke hoch ist. Sie wird hauptsächlich für die Farbenproduktion gebraucht. -Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=Doppelhohes Gras ist eine Variante von hohem Gras und nimmt zwei Blöcke an Platz ein. Er kann für Weizensamen abgeerntet werden. -Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=Ein großer Farn ist eine Variante von Farn und nimmt zwei Blöcke an Platz ein. Er kann für Weizensamen abgeerntet werden. -Double Tallgrass=Doppelhohes Gras -Large Fern=Großer Farn -Lily Pad=Seerosenblatt -A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=Ein Seerosenblatt ist eine flache Pflanze, die eine stabile begehbare Oberfläche ist. Sie kann auf Wasserquellen, auf Eis und brüchigem Eis platziert werden. diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.es.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.es.tr deleted file mode 100644 index fbad0c2b1..000000000 --- a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.es.tr +++ /dev/null @@ -1,34 +0,0 @@ -# textdomain: mcl_flowers -This is a small flower. Small flowers are mainly used for dye production and can also be potted.=Esta es una pequeña flor. Las flores pequeñas se utilizan principalmente para la producción de tinte y también se pueden macetas. -It can only be placed on a block on which it would also survive.=Solo se puede colocar en un bloque en el que también sobreviviría. -Poppy=Amapola -Dandelion=Diente de león -Oxeye Daisy=Margarita -Orange Tulip=Tulipán naranja -Pink Tulip=Tulipán rosa -Red Tulip=Tulipán rojo -White Tulip=Tulipán blanco -Allium=Allium -Azure Bluet=Azul celeste -Blue Orchid=Orquídea azul -Tall Grass=Cesped alto -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=El cesped alto es una planta pequeña que a menudo se encuentra en la superficie de los pastizales. Se puede cosechar para semillas de trigo. Mediante el uso de harina de hueso, la hierba alta se puede convertir en hierba alta doble que tiene dos bloques de altura. -Fern=Helecho -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Los helechos son plantas pequeñas que se producen naturalmente en las selvas y taigas. Se pueden cosechar para semillas de trigo. Al usar harina de hueso, un helecho se puede convertir en un helecho grande que tiene dos bloques de altura. -(Top Part)=(Parte superior) -Peony=Peonía -A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Una peonía es una planta grande que ocupa dos bloques. Se utiliza principalmente en la protección del tinte. -# ^^^ OLD TRANSLATION FOR ABOVE: Una peonía es una planta grande que ocupa dos bloques. Se utiliza principalmente en la protección del tinte. -Rose Bush=Rosal -A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.= -# ^^^ OLD TRANSLATION FOR ABOVE: Un rosal es una planta grande que ocupa dos bloques. Es seguro tocarlo. Los rosales se utilizan principalmente en la protección del tinte. -Lilac=Lila -A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=Una lila es una planta grande que ocupa dos bloques. Se utiliza principalmente en la producción de tintes. -Sunflower=Girasol -A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=Un girasol es una planta grande que ocupa dos bloques. Se utiliza principalmente en la producción de tintes. -Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=Doble hierba alta una variante de hierba alta y ocupa dos bloques. Se puede cosechar para semillas de trigo. -Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=El helecho grande es una variante del helecho y ocupa dos bloques. Se puede cosechar para semillas de trigo. -Double Tallgrass=Doble hierba alta -Large Fern=Helecho grande -Lily Pad=Nenúfar -A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=Un nenúfar es un bloque de planta plano sobre el que se puede caminar. Se pueden colocar en fuentes de agua y hielo. diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.fr.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.fr.tr deleted file mode 100644 index 945a799e2..000000000 --- a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.fr.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_flowers -This is a small flower. Small flowers are mainly used for dye production and can also be potted.=Ceci est une petite fleur. Les petites fleurs sont principalement utilisées pour la production de teintures et peuvent également être mises en pot. -It can only be placed on a block on which it would also survive.=Elles ne peuvent être placées que sur un bloc sur lequel elles survivraient également. -Poppy=Coquelicot -Dandelion=Pisselit -Oxeye Daisy=Marguerite -Orange Tulip=Tulipe Orange -Pink Tulip=Tulipe Rose -Red Tulip=Tulipe Rouge -White Tulip=Tulipe Blanche -Allium=Allium -Azure Bluet=Houstonie Bleue -Blue Orchid=Orchidée Bleue -Tall Grass=Hautes herbes -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=L'herbe haute est une petite plante qui se rencontre souvent à la surface des prairies. Il peut être récolté pour les graines de blé. En utilisant de la farine d'os, les hautes herbes peuvent être transformées en herbes hautes doubles de deux blocs de hauteur. -Fern=Fougère -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Les fougères sont de petites plantes qui se produisent naturellement dans les jungles et les taigas. Ils peuvent être récoltés pour les graines de blé. En utilisant de la farine d'os, une fougère peut être transformée en une grande fougère haute de deux blocs. -(Top Part)=(Partie supérieure) -Peony=Pivoine -A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Une pivoine est une grande plante qui occupe deux blocs. Principalement utilisé dans la production de colorants. -Rose Bush=Rosier -A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=Un rosier est une grande plante qui occupe deux blocs. Il n'y a rien a craindre à le toucher. Les rosiers sont principalement utilisés dans la production de teinture. -Lilac=Lilas -A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=Un lilas est une grande plante qui occupe deux blocs. Il est principalement utilisé dans la production de colorants. -Sunflower=Tournesol -A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=Un tournesol est une grande plante qui occupe deux blocs. Il est principalement utilisé dans la production de colorants. -Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=La grande herbe haute une variante de l'herbe haute et occupe deux blocs. Elle peut être récoltée pour les graines de blé. -Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=La grande fougère est une variante de la fougère et occupe deux blocs. Elle peut être récoltée pour les graines de blé. -Double Tallgrass=Grande Herbe -Large Fern=Grande Fougère -Lily Pad=Nénuphar -A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=Un nénuphar est un bloc de plante plat sur lequel on peut marcher. Ils peuvent être placés sur des sources d'eau, de la glace et de la glace givrée. diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.pl.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.pl.tr deleted file mode 100644 index 828eea96a..000000000 --- a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.pl.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_flowers -This is a small flower. Small flowers are mainly used for dye production and can also be potted.=To jest mały kwiat. Małe kwiaty są głównie wykorzystywane do tworzenia farb oraz do ustawiania w doniczkach. -It can only be placed on a block on which it would also survive.=Może być postawiony tylko na blokach na których jest w stanie przeżyć. -Poppy=Mak -Dandelion=Mniszek lekarski -Oxeye Daisy=Stokrotka -Orange Tulip=Pomarańczowy tulipan -Pink Tulip=Różowy tulipan -Red Tulip=Czerwony tulipan -White Tulip=Biały tulipan -Allium=Czosnek -Azure Bluet=Houstonia błękitna -Blue Orchid=Niebieska orchidea -Tall Grass=Wysoka trawa -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=Wysoka trawa jest małą rośliną często występująca na trawiastych biomach. Mogą z nich wypaść nasiona. Używając mączki kostnej można ją zamienić w podwójnie wysoką trawę, która ma dwa bloki wysokości. -Fern=Paproć -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Paprocie to małe rośliny występujące naturalnie w tropikach i tajgach. Mogą z nich wypaść nasiona. Używając mączki kostnej można je zamienić w duże paprocie, które mają dwa bloki wysokości. -(Top Part)=(Górna część) -Peony=Piwonia -A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Piwonia jest dużą rośliną zajmującą dwa bloki. Jest głównie używana jako źródło farby. -Rose Bush=Krzew róży. -A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=Krzew róży jest dużą rośliną zajmującą dwa bloki. Można go dotykać. Jest głównie używana jako źródło farby. -Lilac=Bez -A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=Bez jest dużą rośliną zajmującą dwa bloki. Jest głównie używana jako źródło farby. -Sunflower=Słonecznik -A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=Słonecznik jest dużą rośliną zajmującą dwa bloki. Jest głównie używana jako źródło farby. -Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=Podwójna wysoka trawa jest dużą rośliną zajmującą dwa bloki. Mogą z niej wypaść nasiona zboża. -Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=Duża paproć jest dużą rośliną zajmującą dwa bloki. Mogą z niej wypaść nasiona zboża. -Double Tallgrass=Podwójnie wysoka trawa -Large Fern=Duża paproć -Lily Pad=Lilia wodna -A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=Lilia wodna jest płaską rośliną po której można chodzić. Można je stawiać na źródłach wody, lodzie i oszronionym lodzie. diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.ru.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.ru.tr deleted file mode 100644 index f5cb5e18d..000000000 --- a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.ru.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_flowers -This is a small flower. Small flowers are mainly used for dye production and can also be potted.=Это небольшой цветок. Такие цветы в основном используются для производства красителей. Их можно садить в горшки. -It can only be placed on a block on which it would also survive.=Его можно высаживать только на те блоки, на которых он может расти. -Poppy=Мак -Dandelion=Одуванчик -Oxeye Daisy=Нивяник обыкновенный -Orange Tulip=Оранжевый тюльпан -Pink Tulip=Розовый тюльпан -Red Tulip=Красный тюльпан -White Tulip=Белый тюльпан -Allium=Лук -Azure Bluet=Хоустония Альба -Blue Orchid=Голубая орхидея -Tall Grass=Высокая трава -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=Высокая трава это маленькое растение, часто встречающееся на поверхности лугов. Их можно собирать, добывая семена пшеницы. С помощью костной муки высокая трава может быть превращена в двойную высокую траву (2 блока в высоту). -Fern=Папоротник -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Папоротники - маленькие растения, встречающиеся в тайге и джунглях. Их можно собирать, добывая семена пшеницы. С помощью костной муки папоротник может быть превращён в большой папоротник высотой в два блока. -(Top Part)=(верхняя часть) -Peony=Пион -A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Пион - большое растение, занимающее два блока. В основном используется для производства красителя. -Rose Bush=Розовый куст -A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=Розовый куст - большое растение, занимающее два блока. Трогать его не опасно. В основном используется для производства красителя. -Lilac=Сирень -A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=Сирень - большое растение, занимающее два блока. В основном используется для производства красителя. -Sunflower=Подсолнух -A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=Подсолнух - большое растение, занимающее два блока. В основном используется для производства красителя. -Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=Двойная высокая трава - большое растение, занимающее два блока. Её можно собирать, добывая семена пшеницы. -Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=Большой папоротник - вид папоротника, занимающий два блока. Его можно собирать, добывая семена пшеницы. -Double Tallgrass=Двойная высокая трава -Large Fern=Большой папоротник -Lily Pad=Лилия -A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=Лилия это плоский растительный блок, по которому можно ходить. Он размещается на водных источниках, а также на льду и замороженном льду. diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.zh_TW.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.zh_TW.tr deleted file mode 100644 index b8fb0cbe4..000000000 --- a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.zh_TW.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_flowers -This is a small flower. Small flowers are mainly used for dye production and can also be potted.= -It can only be placed on a block on which it would also survive.= -Poppy=罌粟 -Dandelion=蒲公英 -Oxeye Daisy=雛菊 -Orange Tulip=橙色鬱金香 -Pink Tulip=粉紅色鬱金香 -Red Tulip=紅色鬱金香 -White Tulip=白色鬱金香 -Allium=紫紅球花 -Azure Bluet=藍花美耳草 -Blue Orchid=藍色蝴蝶蘭 -Tall Grass=草 -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=草是一種小植物,經常出現在草原的表面。它可以收穫小麥的種子。通過使用骨粉,高草可以變成兩塊高的芒草。 -Fern=蕨 -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=蕨是自然存在於叢林和台地的小型植物。它們可以被收割為小麥種子。通過使用骨粉,可以把蕨變成兩塊高的高蕨。 -(Top Part)=(上部分) -Peony=牡丹花 -A peony is a large plant which occupies two blocks. It is mainly used in dye production.=牡丹花是一種大型植物,共有兩格高。它主要用於染料生產。 -Rose Bush=玫瑰叢 -A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=玫瑰叢是一種大型植物,共有兩格高。觸摸它是安全的。玫瑰叢主要用於染料生產。 -Lilac=紫丁香 -A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=紫丁香是一種大型植物,共有兩格高。它主要用於染料生產。 -Sunflower=向日葵 -A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=向日葵是一種大型植物,共有兩格高。它主要用於染料生產。 -Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=芒草是草的兩格高變種。可以收割小麥種子。 -Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=高蕨是蕨的兩格高變種。可以收割小麥種子。 -Double Tallgrass=芒草 -Large Fern=高蕨 -Lily Pad=荷葉 -A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=荷葉是一種平坦的植物方塊,可以在上面行走。它們可以放在水源、冰面和結霜的冰面上。 diff --git a/mods/ITEMS/mcl_flowers/locale/template.txt b/mods/ITEMS/mcl_flowers/locale/template.txt deleted file mode 100644 index 53a6e7495..000000000 --- a/mods/ITEMS/mcl_flowers/locale/template.txt +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_flowers -This is a small flower. Small flowers are mainly used for dye production and can also be potted.= -It can only be placed on a block on which it would also survive.= -Poppy= -Dandelion= -Oxeye Daisy= -Orange Tulip= -Pink Tulip= -Red Tulip= -White Tulip= -Allium= -Azure Bluet= -Blue Orchid= -Tall Grass= -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.= -Fern= -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.= -(Top Part)= -Peony= -A peony is a large plant which occupies two blocks. It is mainly used in dye production.= -Rose Bush= -A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.= -Lilac= -A lilac is a large plant which occupies two blocks. It is mainly used in dye production.= -Sunflower= -A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.= -Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.= -Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.= -Double Tallgrass= -Large Fern= -Lily Pad= -A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.= diff --git a/mods/ITEMS/mcl_flowers/mod.conf b/mods/ITEMS/mcl_flowers/mod.conf deleted file mode 100644 index b309ac22e..000000000 --- a/mods/ITEMS/mcl_flowers/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name=mcl_flowers -depends=mcl_core, mcl_util, mcl_sounds -optional_depends=screwdriver, doc, mcl_flowerpots \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/register.lua b/mods/ITEMS/mcl_flowers/register.lua deleted file mode 100644 index b45f3e1ee..000000000 --- a/mods/ITEMS/mcl_flowers/register.lua +++ /dev/null @@ -1,62 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_flowers.register_simple_flower("poppy", { - desc = S("Poppy"), - image = "mcl_flowers_poppy.png", - selection_box = { -5/16, -0.5, -5/16, 5/16, 5/16, 5/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("dandelion", { - desc = S("Dandelion"), - image = "flowers_dandelion_yellow.png", - selection_box = { -4/16, -0.5, -4/16, 4/16, 3/16, 4/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("oxeye_daisy", { - desc = S("Oxeye Daisy"), - image = "mcl_flowers_oxeye_daisy.png", - selection_box = { -4/16, -0.5, -4/16, 4/16, 4/16, 4/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("tulip_orange", { - desc = S("Orange Tulip"), - image = "flowers_tulip.png", - selection_box = { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("tulip_pink", { - desc = S("Pink Tulip"), - image = "mcl_flowers_tulip_pink.png", - selection_box = { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("tulip_red", { - desc = S("Red Tulip"), - image = "mcl_flowers_tulip_red.png", - selection_box = { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("tulip_white", { - desc = S("White Tulip"), - image = "mcl_flowers_tulip_white.png", - selection_box = { -3/16, -0.5, -3/16, 3/16, 4/16, 3/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("allium", { - desc = S("Allium"), - image = "mcl_flowers_allium.png", - selection_box = { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("azure_bluet", { - desc = S("Azure Bluet"), - image = "mcl_flowers_azure_bluet.png", - selection_box = { -5/16, -0.5, -5/16, 5/16, 3/16, 5/16 }, - potted = true, -}) -mcl_flowers.register_simple_flower("blue_orchid", { - desc = S("Blue Orchid"), - image = "mcl_flowers_blue_orchid.png", - selection_box = { -5/16, -0.5, -5/16, 5/16, 7/16, 5/16 }, - potted = true, -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/textures/flowers_dandelion_yellow.png b/mods/ITEMS/mcl_flowers/textures/flowers_dandelion_yellow.png deleted file mode 100644 index 3ba281d4d..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/flowers_dandelion_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/flowers_tulip.png b/mods/ITEMS/mcl_flowers/textures/flowers_tulip.png deleted file mode 100644 index 5ea741120..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/flowers_tulip.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/flowers_waterlily.png b/mods/ITEMS/mcl_flowers/textures/flowers_waterlily.png deleted file mode 100644 index 53b13f25b..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/flowers_waterlily.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_allium.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_allium.png deleted file mode 100644 index db5f8206e..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_allium.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_azure_bluet.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_azure_bluet.png deleted file mode 100644 index e84d347e5..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_azure_bluet.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_blue_orchid.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_blue_orchid.png deleted file mode 100644 index c5ddf11cc..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_blue_orchid.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_bottom.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_bottom.png deleted file mode 100644 index 84427db2d..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_inv.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_inv.png deleted file mode 100644 index 5bc4aa795..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_top.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_top.png deleted file mode 100644 index 5d503f85b..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_fern_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_bottom.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_bottom.png deleted file mode 100644 index fc42bb20e..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_inv.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_inv.png deleted file mode 100644 index 6f53fac56..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_top.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_top.png deleted file mode 100644 index 2dbe8aa3c..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_grass_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_paeonia_bottom.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_paeonia_bottom.png deleted file mode 100644 index e942cb8b9..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_paeonia_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_paeonia_top.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_paeonia_top.png deleted file mode 100644 index 6f34148c3..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_paeonia_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_rose_bottom.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_rose_bottom.png deleted file mode 100644 index 13170e669..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_rose_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_rose_top.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_rose_top.png deleted file mode 100644 index c10d2b08c..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_rose_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_back.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_back.png deleted file mode 100644 index 3bf371775..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_bottom.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_bottom.png deleted file mode 100644 index 4f169a843..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_front.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_front.png deleted file mode 100644 index 6263dbe93..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_top.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_top.png deleted file mode 100644 index c86d84e70..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_sunflower_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_syringa_bottom.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_syringa_bottom.png deleted file mode 100644 index ac6a2146b..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_syringa_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_syringa_top.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_syringa_top.png deleted file mode 100644 index ca478a3f8..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_double_plant_syringa_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_fern.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_fern.png deleted file mode 100644 index 7850e9a81..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_fern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_fern_inv.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_fern_inv.png deleted file mode 100644 index 3041c3178..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_fern_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_oxeye_daisy.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_oxeye_daisy.png deleted file mode 100644 index 0f4759958..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_oxeye_daisy.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_poppy.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_poppy.png deleted file mode 100644 index a88cf1516..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_poppy.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tallgrass.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tallgrass.png deleted file mode 100644 index 5ab4b00f7..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tallgrass.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tallgrass_inv.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tallgrass_inv.png deleted file mode 100644 index 3481b46d4..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tallgrass_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_pink.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_pink.png deleted file mode 100644 index 4513b9952..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_red.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_red.png deleted file mode 100644 index 41d4c6643..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_white.png b/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_white.png deleted file mode 100644 index ba7e2a1b6..000000000 Binary files a/mods/ITEMS/mcl_flowers/textures/mcl_flowers_tulip_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/README.md b/mods/ITEMS/mcl_furnaces/README.md deleted file mode 100644 index c7282124b..000000000 --- a/mods/ITEMS/mcl_furnaces/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Furnaces for MineClone 2. -Heavily based on Minetest Game (default/furnace.lua). - -License of source code ----------------------- -LGPLv2.1 -Based on code from Minetest Game. -Modified by Wuzzy. - -License of media ----------------- -See the main MineClone 2 README.md file. diff --git a/mods/ITEMS/mcl_furnaces/init.lua b/mods/ITEMS/mcl_furnaces/init.lua deleted file mode 100644 index 59cfe7858..000000000 --- a/mods/ITEMS/mcl_furnaces/init.lua +++ /dev/null @@ -1,609 +0,0 @@ - -local S = minetest.get_translator(minetest.get_current_modname()) - -local LIGHT_ACTIVE_FURNACE = 13 - --- --- Formspecs --- - -local function active_formspec(fuel_percent, item_percent) - return "size[9,8.75]".. - "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]".. - "list[context;src;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;fuel;2.75,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[context;dst;5.75,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. - "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. - (100-fuel_percent)..":default_furnace_fire_fg.png]".. - "image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[lowpart:".. - (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. - -- Craft guide button temporarily removed due to Minetest bug. - -- TODO: Add it back when the Minetest bug is fixed. - --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. - --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[context;dst]".. - "listring[current_player;main]".. - "listring[context;src]".. - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[current_player;main]" -end - -local inactive_formspec = "size[9,8.75]".. - "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]".. - "list[context;src;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;fuel;2.75,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[context;dst;5.75,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. - "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. - "image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]".. - -- Craft guide button temporarily removed due to Minetest bug. - -- TODO: Add it back when the Minetest bug is fixed. - --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. - --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[context;dst]".. - "listring[current_player;main]".. - "listring[context;src]".. - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[current_player;main]" - -local receive_fields = function(pos, formname, fields, sender) - if fields.craftguide then - mcl_craftguide.show(sender:get_player_name()) - end -end - -local function give_xp(pos, player) - local meta = minetest.get_meta(pos) - local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2),-1.95) - local xp = meta:get_int("xp") - if xp > 0 then - if player then - mcl_experience.add_xp(player, xp) - else - mcl_experience.throw_xp(vector.add(pos, dir), xp) - end - meta:set_int("xp", 0) - end -end - --- --- Node callback functions that are the same for active and inactive furnace --- - -local function allow_metadata_inventory_put(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - -- Special case: empty bucket (not a fuel, but used for sponge drying) - if stack:get_name() == "mcl_buckets:bucket_empty" then - if inv:get_stack(listname, index):get_count() == 0 then - return 1 - else - return 0 - end - end - - -- Test stack with size 1 because we burn one fuel at a time - local teststack = ItemStack(stack) - teststack:set_count(1) - local output, decremented_input = minetest.get_craft_result({method="fuel", width=1, items={teststack}}) - if output.time ~= 0 then - -- Only allow to place 1 item if fuel get replaced by recipe. - -- This is the case for lava buckets. - local replace_item = decremented_input.items[1] - if replace_item:is_empty() then - -- For most fuels, just allow to place everything - return stack:get_count() - else - if inv:get_stack(listname, index):get_count() == 0 then - return 1 - else - return 0 - end - end - else - return 0 - end - elseif listname == "src" then - return stack:get_count() - elseif listname == "dst" then - return 0 - end -end - -local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local stack = inv:get_stack(from_list, from_index) - return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) -end - -local function allow_metadata_inventory_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - return stack:get_count() -end - -local function on_metadata_inventory_take(pos, listname, index, stack, player) - -- Award smelting achievements - if listname == "dst" then - if stack:get_name() == "mcl_core:iron_ingot" then - awards.unlock(player:get_player_name(), "mcl:acquireIron") - elseif stack:get_name() == "mcl_fishing:fish_cooked" then - awards.unlock(player:get_player_name(), "mcl:cookFish") - end - give_xp(pos, player) - end -end - -local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - if from_list == "dst" then - give_xp(pos, player) - end -end - -local function spawn_flames(pos, param2) - local minrelpos, maxrelpos - local dir = minetest.facedir_to_dir(param2) - if dir.x > 0 then - minrelpos = { x = -0.6, y = -0.05, z = -0.25 } - maxrelpos = { x = -0.55, y = -0.45, z = 0.25 } - elseif dir.x < 0 then - minrelpos = { x = 0.55, y = -0.05, z = -0.25 } - maxrelpos = { x = 0.6, y = -0.45, z = 0.25 } - elseif dir.z > 0 then - minrelpos = { x = -0.25, y = -0.05, z = -0.6 } - maxrelpos = { x = 0.25, y = -0.45, z = -0.55 } - elseif dir.z < 0 then - minrelpos = { x = -0.25, y = -0.05, z = 0.55 } - maxrelpos = { x = 0.25, y = -0.45, z = 0.6 } - else - return - end - mcl_particles.add_node_particlespawner(pos, { - amount = 4, - time = 0, - minpos = vector.add(pos, minrelpos), - maxpos = vector.add(pos, maxrelpos), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.4, - maxsize = 0.8, - texture = "mcl_particles_flame.png", - glow = LIGHT_ACTIVE_FURNACE, - }, "low") -end - -local function swap_node(pos, name) - local node = minetest.get_node(pos) - if node.name == name then - return - end - node.name = name - minetest.swap_node(pos, node) - if name == "mcl_furnaces:furnace_active" then - spawn_flames(pos, node.param2) - else - mcl_particles.delete_node_particlespawners(pos) - end -end - -local function furnace_reset_delta_time(pos) - local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get("time_speed") or 72) - if (time_speed < 0.1) then - return - end - local time_multiplier = 86400 / time_speed - local current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - - -- TODO: Change meta:get/set_string() to get/set_float() for "last_gametime". - -- In Windows *_float() works OK but under Linux it returns rounded unusable values like 449540.000000000 - local last_game_time = meta:get_string("last_gametime") - if last_game_time then - last_game_time = tonumber(last_game_time) - end - if not last_game_time or last_game_time < 1 or math.abs(last_game_time - current_game_time) <= 1.5 then - return - end - - meta:set_string("last_gametime", tostring(current_game_time)) -end - -local function furnace_get_delta_time(pos, elapsed) - local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get("time_speed") or 72) - local current_game_time - if (time_speed < 0.1) then - return meta, elapsed - else - local time_multiplier = 86400 / time_speed - current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - end - - local last_game_time = meta:get_string("last_gametime") - if last_game_time then - last_game_time = tonumber(last_game_time) - end - if not last_game_time or last_game_time < 1 then - last_game_time = current_game_time - 0.1 - elseif last_game_time == current_game_time then - current_game_time = current_game_time + 1.0 - end - - local elapsed_game_time = .0 + current_game_time - last_game_time - - meta:set_string("last_gametime", tostring(current_game_time)) - - return meta, elapsed_game_time -end - -local function furnace_node_timer(pos, elapsed) - -- - -- Inizialize metadata - -- - local meta, elapsed_game_time = furnace_get_delta_time(pos, elapsed) - - local fuel_time = meta:get_float("fuel_time") or 0 - local src_time = meta:get_float("src_time") or 0 - local src_item = meta:get_string("src_item") or "" - local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - - local inv = meta:get_inventory() - local srclist, fuellist - - local cookable, cooked - local active = true - local fuel - - srclist = inv:get_list("src") - fuellist = inv:get_list("fuel") - - -- Check if src item has been changed - if srclist[1]:get_name() ~= src_item then - -- Reset cooking progress in this case - src_time = 0 - src_item = srclist[1]:get_name() - end - - local update = true - while elapsed_game_time > 0.00001 and update do - -- - -- Cooking - -- - - local el = elapsed_game_time - - -- Check if we have cookable content: cookable - local aftercooked - cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - cookable = cooked.time ~= 0 - if cookable then - -- Successful cooking requires space in dst slot and time - if not inv:room_for_item("dst", cooked.item) then - cookable = false - end - end - - if cookable then -- fuel lasts long enough, adjust el to cooking duration - el = math.min(el, cooked.time - src_time) - end - - -- Check if we have enough fuel to burn - active = fuel_time < fuel_totaltime - if cookable and not active then - -- We need to get new fuel - local afterfuel - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - - if fuel.time == 0 then - -- No valid fuel in fuel list -- stop - fuel_totaltime = 0 - src_time = 0 - update = false - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - fuel_time = 0 - fuel_totaltime = fuel.time - el = math.min(el, fuel_totaltime) - active = true - fuellist = inv:get_list("fuel") - end - elseif active then - el = math.min(el, fuel_totaltime - fuel_time) - -- The furnace is currently active and has enough fuel - fuel_time = fuel_time + el - end - - -- If there is a cookable item then check if it is ready yet - if cookable and active then - src_time = src_time + el - -- Place result in dst list if done - if src_time >= cooked.time then - inv:add_item("dst", cooked.item) - inv:set_stack("src", 1, aftercooked.items[1]) - - -- Unique recipe: Pour water into empty bucket after cooking wet sponge successfully - if inv:get_stack("fuel", 1):get_name() == "mcl_buckets:bucket_empty" then - if srclist[1]:get_name() == "mcl_sponges:sponge_wet" then - inv:set_stack("fuel", 1, "mcl_buckets:bucket_water") - fuellist = inv:get_list("fuel") - -- Also for river water - elseif srclist[1]:get_name() == "mcl_sponges:sponge_wet_river_water" then - inv:set_stack("fuel", 1, "mcl_buckets:bucket_river_water") - fuellist = inv:get_list("fuel") - end - end - - srclist = inv:get_list("src") - src_time = 0 - - meta:set_int("xp", meta:get_int("xp") + 1) -- ToDo give each recipe an idividial XP count - end - end - - elapsed_game_time = elapsed_game_time - el - end - - if fuel and fuel_totaltime > fuel.time then - fuel_totaltime = fuel.time - end - if srclist and srclist[1]:is_empty() then - src_time = 0 - end - - -- - -- Update formspec and node - -- - local formspec = inactive_formspec - local item_percent = 0 - if cookable then - item_percent = math.floor(src_time / cooked.time * 100) - end - - local result = false - - if active then - local fuel_percent = 0 - if fuel_totaltime > 0 then - fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) - end - formspec = active_formspec(fuel_percent, item_percent) - swap_node(pos, "mcl_furnaces:furnace_active") - -- make sure timer restarts automatically - result = true - else - swap_node(pos, "mcl_furnaces:furnace") - -- stop timer on the inactive furnace - minetest.get_node_timer(pos):stop() - end - - -- - -- Set meta values - -- - meta:set_float("fuel_totaltime", fuel_totaltime) - meta:set_float("fuel_time", fuel_time) - meta:set_float("src_time", src_time) - if srclist then - meta:set_string("src_item", src_item) - else - meta:set_string("src_item", "") - end - meta:set_string("formspec", formspec) - - return result -end - -local on_rotate, after_rotate_active -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple - after_rotate_active = function(pos) - local node = minetest.get_node(pos) - mcl_particles.delete_node_particlespawners(pos) - if node.name == "mcl_furnaces:furnace" then - return - end - spawn_flames(pos, node.param2) - end -end - -minetest.register_node("mcl_furnaces:furnace", { - description = S("Furnace"), - _tt_help = S("Uses fuel to smelt or cook items"), - _doc_items_longdesc = S("Furnaces cook or smelt several items, using a furnace fuel, into something else."), - _doc_items_usagehelp = - S([[ - Use the furnace to open the furnace menu. - Place a furnace fuel in the lower slot and the source material in the upper slot. - The furnace will slowly use its fuel to smelt the item. - The result will be placed into the output slot at the right side. - ]]).."\n".. - S("Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn."), - _doc_items_hidden = false, - tiles = { - "default_furnace_top.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_front.png" - }, - paramtype2 = "facedir", - groups = {pickaxey=1, container=4, deco_block=1, material_stone=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - - on_timer = furnace_node_timer, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for _, listname in ipairs({"src", "dst", "fuel"}) do - local stack = inv:get_stack(listname, 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", inactive_formspec) - local inv = meta:get_inventory() - inv:set_size("src", 1) - inv:set_size("fuel", 1) - inv:set_size("dst", 1) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - give_xp(pos) - end, - - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - -- Reset accumulated game time when player works with furnace: - furnace_reset_delta_time(pos) - minetest.get_node_timer(pos):start(1.0) - - on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - end, - on_metadata_inventory_put = function(pos) - -- Reset accumulated game time when player works with furnace: - furnace_reset_delta_time(pos) - -- start timer function, it will sort out whether furnace can burn or not. - minetest.get_node_timer(pos):start(1.0) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - -- Reset accumulated game time when player works with furnace: - furnace_reset_delta_time(pos) - -- start timer function, it will helpful if player clears dst slot - minetest.get_node_timer(pos):start(1.0) - - on_metadata_inventory_take(pos, listname, index, stack, player) - end, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - on_receive_fields = receive_fields, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_furnaces:furnace_active", { - description = S("Burning Furnace"), - _doc_items_create_entry = false, - tiles = { - "default_furnace_top.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_front_active.png", - }, - paramtype2 = "facedir", - paramtype = "light", - light_source = LIGHT_ACTIVE_FURNACE, - drop = "mcl_furnaces:furnace", - groups = {pickaxey=1, container=4, deco_block=1, not_in_creative_inventory=1, material_stone=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_timer = furnace_node_timer, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for _, listname in ipairs({"src", "dst", "fuel"}) do - local stack = inv:get_stack(listname, 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2:to_table()) - end, - - on_construct = function(pos) - local node = minetest.get_node(pos) - spawn_flames(pos, node.param2) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - give_xp(pos) - end, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - on_metadata_inventory_move = on_metadata_inventory_move, - on_metadata_inventory_take = on_metadata_inventory_take, - on_receive_fields = receive_fields, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - on_rotate = on_rotate, - after_rotate = after_rotate_active, -}) - -minetest.register_craft({ - output = "mcl_furnaces:furnace", - recipe = { - { "group:cobble", "group:cobble", "group:cobble" }, - { "group:cobble", "", "group:cobble" }, - { "group:cobble", "group:cobble", "group:cobble" }, - } -}) - --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_furnaces:furnace", "nodes", "mcl_furnaces:furnace_active") -end - -minetest.register_lbm({ - label = "Active furnace flame particles", - name = "mcl_furnaces:flames", - nodenames = {"mcl_furnaces:furnace_active"}, - run_at_every_load = true, - action = function(pos, node) - spawn_flames(pos, node.param2) - end, -}) - --- Legacy -minetest.register_lbm({ - label = "Update furnace formspecs (0.60.0)", - name = "mcl_furnaces:update_formspecs_0_60_0", - -- Only update inactive furnaces because active ones should update themselves - nodenames = { "mcl_furnaces:furnace" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", inactive_formspec) - end, -}) diff --git a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.de.tr b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.de.tr deleted file mode 100644 index 5e55af7f9..000000000 --- a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_furnaces -Furnace=Ofen -Furnaces cook or smelt several items, using a furnace fuel, into something else.=Ofen kochen oder schmelzen diverse Gegenstände, unter Zuhilfenahme eines Brennstoffs, zu etwas anderem. -Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=Benutzen Sie den Ofen, um das Ofenmenü zu öffnen. Platzieren Sie einen Brennstoff in den unteren Platz und das Quellmaterial in den oberen Platz. Der Ofen wird langsam seinen Brennstoff benutzen, um den Gegenstand zu schmelzen. Das Ergebnis landet im Ausgabeplatz rechts. -Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=Benutzen Sie das Rezeptbuch, um zu sehen, was Sie schmelzen können und was Sie als Brennstoff benutzen können und wie lange dieser brennt. -Burning Furnace=Aktiver Ofen -Recipe book=Fertigungsbuch -Inventory=Inventar -Uses fuel to smelt or cook items=Benutzt Brennstoff, um Dinge zu schmelzen oder zu kochen diff --git a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.es.tr b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.es.tr deleted file mode 100644 index 10378c2da..000000000 --- a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_furnaces -Furnace=Horno -Furnaces cook or smelt several items, using a furnace fuel, into something else.=Los hornos cocinan u funden varios elementos, utilizando un combustible de horno, en otra cosa. -Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=Use el horno para abrir el menú del horno. Coloque un combustible de horno en la ranura inferior y el material de origen en la ranura superior. El horno usará lentamente su combustible para fundir el artículo. El resultado se colocará en la ranura de salida en el lado derecho. -Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=Use el libro de recetas para ver qué puede crear, qué puede usar como combustible y durante cuánto tiempo se quemará. -Burning Furnace=Horno ardiente -Recipe book=Libro de recetas -Inventory=Inventario diff --git a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.fr.tr b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.fr.tr deleted file mode 100644 index deec7981c..000000000 --- a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_furnaces -Furnace=Four -Furnaces cook or smelt several items, using a furnace fuel, into something else.=Les fours cuisent ou fondent plusieurs articles, en utilisant un combustible de four, dans quelque chose d'autre. -Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=Utilisez le four pour ouvrir le menu du four. Placez un combustible de four dans la fente inférieure et le matériau source dans la fente supérieure. Le four utilisera lentement son combustible pour fondre l'article. Le résultat sera placé dans la fente de sortie du côté droit. -Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=Utilisez le livre de recettes pour voir ce que vous pouvez cuire, ce que vous pouvez utiliser comme carburant et combien de temps il brûlera. -Burning Furnace=Four Allumé -Recipe book=Livre de Recette -Inventory=Inventaire -Uses fuel to smelt or cook items=Utilise du carburant pour fondre ou cuire des articles diff --git a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.pl.tr b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.pl.tr deleted file mode 100644 index a957155ad..000000000 --- a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_furnaces -Furnace=Piec -Furnaces cook or smelt several items, using a furnace fuel, into something else.=Piece mogą gotować lub przetapiać niektóre przedmioty, przy użyciu paliwa, w inne przedmioty. -Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=Kliknij w piec aby otworzyć jego menu. Połóż paliwo w dolnym miejscu a materiał źródłowy w górnym. Piec będzie powoli zużywał paliwo aby przetopić przedmiot. Rezultat pojawi się w miejscu po prawej. -Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=Użyj książki receptur aby dowiedzieć się co możesz przetopić, co możesz użyć jako paliwa i na jak długo wystarczy. -Burning Furnace=Palący się piec -Recipe book=Książka receptur -Inventory=Ekwipunek -Uses fuel to smelt or cook items=Zużywa paliwo aby ugotować lub stopić przedmioty diff --git a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.ru.tr b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.ru.tr deleted file mode 100644 index 1ba8732df..000000000 --- a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_furnaces -Furnace=Печь -Furnaces cook or smelt several items, using a furnace fuel, into something else.=В печи готовят или переплавляют предметы, но для этого требуется загрузить топливо. -Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=[Используйте] печь, чтобы открыть её меню. Положите печное топливо в нижний отсек, а материал-источник в верхний. Печь будет понемногу расходовать топливо для переплавки предмета. Получившийся в результате предмет будет помещён в выходной отсек справа. -Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=Используйте книгу рецептов, чтобы узнать, что вы можете переплавить в печи, что сгодится в качестве топлива и как долго будет идти процесс. -Burning Furnace=Горящая печь -Recipe book=Книга рецептов -Inventory=Инвентарь -Uses fuel to smelt or cook items=Расходует топливо для приготовления или переплавки предметов diff --git a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.zh_TW.tr b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.zh_TW.tr deleted file mode 100644 index 447fb835c..000000000 --- a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.zh_TW.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_furnaces -Furnace=熔爐 -Furnaces cook or smelt several items, using a furnace fuel, into something else.=熔爐用一種爐子燃料將幾種物品烹飪或熔煉成其他東西。 -Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=使用熔爐打開爐子菜單。將熔爐燃料放在下槽,將源材料放在上槽。熔爐將慢慢地使用它的燃料來熔煉或烹飪物品。其結果將被放入右側的輸出槽中。 -Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=使用合成教學來查看您可以冶煉的東西,可以用作燃料的物品以及可燃燒時間。 -Burning Furnace=燃燒的熔爐 -Recipe book=合成教學 -Inventory=物品欄 -Uses fuel to smelt or cook items=使用燃料來熔煉或烹飪物品 diff --git a/mods/ITEMS/mcl_furnaces/locale/template.txt b/mods/ITEMS/mcl_furnaces/locale/template.txt deleted file mode 100644 index 4f88824b0..000000000 --- a/mods/ITEMS/mcl_furnaces/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_furnaces -Furnace= -Furnaces cook or smelt several items, using a furnace fuel, into something else.= -Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.= -Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.= -Burning Furnace= -Recipe book= -Inventory= -Uses fuel to smelt or cook items= diff --git a/mods/ITEMS/mcl_furnaces/mod.conf b/mods/ITEMS/mcl_furnaces/mod.conf deleted file mode 100644 index fe0b9c208..000000000 --- a/mods/ITEMS/mcl_furnaces/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_furnaces -depends = mcl_init, mcl_formspec, mcl_core, mcl_sounds, mcl_craftguide, mcl_achievements, mcl_particles -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_furnaces/textures/default_furnace_bottom.png b/mods/ITEMS/mcl_furnaces/textures/default_furnace_bottom.png deleted file mode 100644 index 7844072d5..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/default_furnace_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/default_furnace_fire_bg.png b/mods/ITEMS/mcl_furnaces/textures/default_furnace_fire_bg.png deleted file mode 100644 index abeefc0f5..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/default_furnace_fire_bg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/default_furnace_fire_fg.png b/mods/ITEMS/mcl_furnaces/textures/default_furnace_fire_fg.png deleted file mode 100644 index e5b390966..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/default_furnace_fire_fg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/default_furnace_front.png b/mods/ITEMS/mcl_furnaces/textures/default_furnace_front.png deleted file mode 100644 index 388addd4e..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/default_furnace_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/default_furnace_front_active.png b/mods/ITEMS/mcl_furnaces/textures/default_furnace_front_active.png deleted file mode 100644 index c425604d2..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/default_furnace_front_active.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/default_furnace_side.png b/mods/ITEMS/mcl_furnaces/textures/default_furnace_side.png deleted file mode 100644 index c154414b1..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/default_furnace_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/default_furnace_top.png b/mods/ITEMS/mcl_furnaces/textures/default_furnace_top.png deleted file mode 100644 index 7844072d5..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/default_furnace_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/gui_furnace_arrow_bg.png b/mods/ITEMS/mcl_furnaces/textures/gui_furnace_arrow_bg.png deleted file mode 100644 index 2456a803e..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/gui_furnace_arrow_bg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_furnaces/textures/gui_furnace_arrow_fg.png b/mods/ITEMS/mcl_furnaces/textures/gui_furnace_arrow_fg.png deleted file mode 100644 index e1407051c..000000000 Binary files a/mods/ITEMS/mcl_furnaces/textures/gui_furnace_arrow_fg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua deleted file mode 100644 index c14079393..000000000 --- a/mods/ITEMS/mcl_heads/init.lua +++ /dev/null @@ -1,166 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_doc = minetest.get_modpath("doc") -local mod_screwdriver = minetest.get_modpath("screwdriver") - -local equip_armor -if minetest.get_modpath("mcl_armor") then - equip_armor = mcl_armor.equip_on_use -end - --- Heads system - -local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) - local on_rotate_floor, on_rotate_wall - if mod_screwdriver then - on_rotate_floor = function(pos, node, user, mode, new_param2) - if mode == screwdriver.ROTATE_AXIS then - node.name = node.name .. "_wall" - node.param2 = minetest.dir_to_wallmounted(minetest.facedir_to_dir(node.param2)) - minetest.set_node(pos, node) - return true - end - end - on_rotate_wall = function(pos, node, user, mode, new_param2) - if mode == screwdriver.ROTATE_AXIS then - node.name = string.sub(node.name, 1, string.len(node.name)-5) - node.param2 = minetest.dir_to_facedir(minetest.wallmounted_to_dir(node.param2)) - minetest.set_node(pos, node) - return true - end - end - end - - minetest.register_node("mcl_heads:"..name, { - description = desc, - _doc_items_longdesc = longdesc, - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = { - { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, - }, - }, - groups = {handy = 1, armor = 1, armor_head = 1, non_combat_armor = 1, non_combat_armor_head = 1, head = 1, deco_block = 1, dig_by_piston = 1}, - -- The head textures are based off the textures of an actual mob. - tiles = { - -- Note: bottom texture is overlaid over top texture to get rid of possible transparency. - -- This is required for skeleton skull and wither skeleton skull. - "[combine:16x16:-4,4="..texture, -- top - "([combine:16x16:-4,4="..texture..")^([combine:16x16:-12,4="..texture..")", -- bottom - "[combine:16x16:-12,0="..texture, -- left - "[combine:16x16:4,0="..texture, -- right - "[combine:16x16:-20,0="..texture, -- back - "[combine:16x16:-4,0="..texture, -- front - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - stack_max = 64, - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = true, - selection_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, - }, - sounds = mcl_sounds.node_sound_defaults({ - footstep = {name="default_hard_footstep", gain=0.3} - }), - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities, for now. - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return itemstack end - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(under, node, placer, itemstack) or itemstack - end - end - - local above = pointed_thing.above - local diff = {x = under.x - above.x, y = under.y - above.y, z = under.z - above.z} - local wdir = minetest.dir_to_wallmounted(diff) - - local itemstring = itemstack:get_name() - local fakestack = ItemStack(itemstack) - --local idef = fakestack:get_definition() - local retval - if wdir == 0 or wdir == 1 then - return minetest.item_place(itemstack, placer, pointed_thing) - else - retval = fakestack:set_name("mcl_heads:"..name.."_wall") - end - if not retval then - return itemstack - end - itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name(itemstring) - return itemstack - end, - on_secondary_use = equip_armor, - - on_rotate = on_rotate_floor, - - _mcl_armor_mob_range_mob = rangemob, - _mcl_armor_mob_range_factor = rangefactor, - _mcl_armor_element = "head", - _mcl_armor_texture = "mcl_heads_" .. name .. ".png", - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - }) - - minetest.register_node("mcl_heads:"..name.."_wall", { - _doc_items_create_entry = false, - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "wallmounted", - wall_bottom = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, - wall_top = { -0.25, 0.0, -0.25, 0.25, 0.5, 0.25, }, - wall_side = { -0.5, -0.25, -0.25, 0.0, 0.25, 0.25, }, - }, - groups = {handy=1, head=1, deco_block=1, dig_by_piston=1, not_in_creative_inventory=1}, - -- The head textures are based off the textures of an actual mob. - tiles = { - { name = "[combine:16x16:-4,-4="..texture, align_style = "world" }, -- front - { name = "[combine:16x16:-20,-4="..texture, align_style = "world" }, -- back - { name = "[combine:16x16:-8,-4="..texture, align_style = "world" }, -- left - { name = "[combine:16x16:0,-4="..texture, align_style = "world" }, -- right - { name = "([combine:16x16:-4,0="..texture..")^[transformR180", align_style = "node" }, -- top - { name = "([combine:16x16:-4,8="..texture..")^([combine:16x16:-12,8="..texture..")", align_style = "node" }, -- bottom - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - stack_max = 64, - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = true, - sounds = mcl_sounds.node_sound_defaults({ - footstep = {name="default_hard_footstep", gain=0.3} - }), - drop = "mcl_heads:"..name, - on_rotate = on_rotate_wall, - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - }) - - if mod_doc then - doc.add_entry_alias("nodes", "mcl_heads:" .. name, "nodes", "mcl_heads:" .. name .. "_wall") - end -end - --- Add heads -addhead("zombie", "mcl_heads_zombie_node.png", S("Zombie Head"), S("A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%."), "mobs_mc:zombie", 0.5) -addhead("creeper", "mcl_heads_creeper_node.png", S("Creeper Head"), S("A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%."), "mobs_mc:creeper", 0.5) --- Original Minecraft name: “Head” -addhead("steve", "mcl_heads_steve_node.png", S("Human Head"), S("A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.")) -addhead("skeleton", "mcl_heads_skeleton_node.png", S("Skeleton Skull"), S("A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%."), "mobs_mc:skeleton", 0.5) -addhead("wither_skeleton", "mcl_heads_wither_skeleton_node.png", S("Wither Skeleton Skull"), S("A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.")) diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr deleted file mode 100644 index 75e92aef9..000000000 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_heads -Zombie Head=Zombiekopf -A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Ein Zombiekopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Zombies aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Zombies um 50% verringert. -Creeper Head=Creeper-Kopf -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Ein Creeperkopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Creepers aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Creepern um 50% verringert. -Human Head=Menschenkopf -A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Ein Menschenkopf ist ein kleiner dekorativer Block, der so wie der Kopf eines Menschen (das heißt, einer Spielerfigur) aussieht. Er kann auch als Helm zum Spaß getragen werden, aber er bietet keinerlei Schutz. -Skeleton Skull=Skelettschädel -A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.=Ein Skelettschädel ist ein kleiner dekorativer Block, der so wie ein Schädel eines Skeletts aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Skeletten um 50% verringert. -Wither Skeleton Skull=Witherskelettschädel -A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=Ein Witherskelettschädel ist ein kleiner dekorativer Block, der so wie ein Schädel eines Witherskeletts aussieht. Er kann auch als Helm zum Spaß getragen werden, aber er bietet keinerlei Schutz. diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr deleted file mode 100644 index 308dd8b28..000000000 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_heads -Zombie Head=Cabeza de zombie -A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de zombie es un pequeño bloque decorativo que se asemeja a la cabeza de un zombie. También se puede usar como casco por diversión, pero no ofrece ninguna protección. -Creeper Head=Cabeza de creeper -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de creeper es un pequeño bloque decorativo que se asemeja a la cabeza de un creeper. También se puede usar como casco por diversión, pero no ofrece ninguna protección. -Human Head=Cabeza humana -A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza humana es un pequeño bloque decorativo que se asemeja a la cabeza de un humano (es decir, un personaje jugador). También se puede usar como casco por diversión, pero no ofrece ninguna protección. -Skeleton Skull=Calavera de esqueleto -A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de esqueleto es un pequeño bloque decorativo que se asemeja al cráneo de un esqueleto. También se puede usar como casco por diversión, pero no ofrece ninguna protección. -Wither Skeleton Skull=Calavera de esqueleto Wither -A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de esqueleto marchito es un pequeño bloque decorativo que se asemeja al cráneo de un esqueleto marchito. También se puede usar como casco por diversión, pero no ofrece ninguna protección. diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr deleted file mode 100644 index 56436f519..000000000 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_heads -Zombie Head=Tête de Zombie -A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Une tête de zombie est un petit bloc décoratif qui ressemble à la tête d'un zombie. Il peut également être porté comme un casque, ce qui réduit la plage de détection des zombies de 50%. -Creeper Head=Tête de Creeper -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Une tête de creepers est un petit bloc décoratif qui ressemble à la tête d'un creeper. Il peut également être porté comme un casque, ce qui réduit la plage de détection des creepers de 50%. -Human Head=Tête de Joueur -A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Une tête de joueur est un petit bloc décoratif qui ressemble à la tête d'un humain (c'est-à-dire un personnage de joueur). Il peut également être porté comme un casque pour le plaisir, mais n'offre aucune protection. -Skeleton Skull=Crâne de Squelette -A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.=Un crâne squelette est un petit bloc décoratif qui ressemble au crâne d'un squelette. Il peut également être porté comme un casque, ce qui réduit la plage de détection des squelettes de 50%. -Wither Skeleton Skull=Crâne de Squelette Wither -A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=Un crâne squelette wither est un petit bloc décoratif qui ressemble au crâne d'un squelette wither. Il peut également être porté comme un casque pour le plaisir, mais n'offre aucune protection. diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr deleted file mode 100644 index 4ed4bbbee..000000000 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_heads -Zombie Head=Głowa zombie -A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Głowa zombie jest małym blokiem dekoracyjnym i przypomina głowę zombie. Może być noszona jako hełm co zmniejsza obszar wykrycia przez zombie o 50%. -Creeper Head=Głowa creepera -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Głowa creepera jest małym blokiem dekoracyjnym i przypomina głowę creepera. Może być noszona jako hełm co zmniejsza obszar wykrycia przez creepera o 50%. -Human Head=Głowa człowieka -A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Głowa człowieka jest małym blokiem dekoracyjnym i przypomina głowę człowieka. Może być noszona jako hełm dla zabawy, ale nie zapewnia żadnej dodatkowej ochrony. -Skeleton Skull=Głowa szkieleta -A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.=Głowa szkieleta jest małym blokiem dekoracyjnym i przypomina głowę szkieleta. Może być noszona jako hełm co zmniejsza obszar wykrycia przez szkielety o 50%. -Wither Skeleton Skull=Głowa witherowego szkieleta -A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=Głowa witherowego szkieleta jest małym blokiem dekoracyjnym i przypomina głowę witherowego szkieleta. Może być noszona jako hełm dla zabawy, ale nie zapewnia żadnej dodatkowej ochrony. diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr deleted file mode 100644 index 28f2de4ff..000000000 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_heads -Zombie Head=Голова зомби -A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Голова зомби это небольшой декоративный блок, немного похожий на голову зомби. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас зомби на 50%. -Creeper Head=Голова крипера -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Голова крипера это небольшой декоративный блок, немного похожий на голову крипера. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас крипером на 50%. -Human Head=Голова человека -A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Голова человека это небольшой декоративный блок, немного похожий на голову человека (например, игрового персонажа). Его можно носить в качестве шлема просто для смеха, он не даёт никакой защиты. -Skeleton Skull=Череп скелета -A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.=Череп скелета это небольшой декоративный блок, немного похожий на череп скелета. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас скелетом на 50%. -Wither Skeleton Skull=Череп скелета-иссушителя -A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=Череп скелета-иссушителя это небольшой декоративный блок, немного похожий на череп скелета-иссушителя. Его можно носить в качестве шлема просто для смеха, он не даёт никакой защиты. diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.zh_TW.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.zh_TW.tr deleted file mode 100644 index 3164d3831..000000000 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.zh_TW.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_heads -Zombie Head=殭屍頭 -A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=殭屍頭是一個小的裝飾方塊,類似於殭屍的頭。它也可以作為頭盔佩戴,可以使殭屍的探測範圍減少50%。 -Creeper Head=苦力怕頭 -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=苦力怕頭是一個小的裝飾方塊,類似於苦力怕的頭。它也可以作為頭盔佩戴,可以使苦力怕的探測範圍減少50%。 -Human Head=玩家頭 -A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=玩家頭是一個小的裝飾塊,類似於玩家的頭部。它也可以作為頭盔戴著玩,但不提供任何保護。 -Skeleton Skull=骷髏頭 -A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.=骷髏頭是一個小的裝飾方塊,類似於骷髏的頭。它也可以作為頭盔佩戴,可以使骷髏的探測範圍減少50%。 -Wither Skeleton Skull=凋零骷髏頭 -A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=凋零骷髏頭是一個小的裝飾塊,類似於凋零骷髏的頭部。它也可以作為頭盔戴著玩,但不提供任何保護。 diff --git a/mods/ITEMS/mcl_heads/locale/template.txt b/mods/ITEMS/mcl_heads/locale/template.txt deleted file mode 100644 index 59321099a..000000000 --- a/mods/ITEMS/mcl_heads/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_heads -Zombie Head= -A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.= -Creeper Head= -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.= -Human Head= -A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.= -Skeleton Skull= -A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.= -Wither Skeleton Skull= -A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.= diff --git a/mods/ITEMS/mcl_heads/mod.conf b/mods/ITEMS/mcl_heads/mod.conf deleted file mode 100644 index e2fe34f63..000000000 --- a/mods/ITEMS/mcl_heads/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_heads -description = Small decorative head blocks. -depends = mcl_sounds -optional_depends = mcl_armor, screwdriver, doc diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper.png deleted file mode 100644 index d277746f1..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper_node.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper_node.png deleted file mode 100644 index 99b432ac6..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper_node.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton.png deleted file mode 100644 index 65c3c04aa..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton_node.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton_node.png deleted file mode 100644 index 0af86cd6a..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton_node.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_steve.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_steve.png deleted file mode 100644 index 361795a52..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_steve.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_steve_node.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_steve_node.png deleted file mode 100644 index 43c1beb5a..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_steve_node.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_wither_skeleton.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_wither_skeleton.png deleted file mode 100644 index 2e02a81a6..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_wither_skeleton.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_wither_skeleton_node.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_wither_skeleton_node.png deleted file mode 100644 index 671f40547..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_wither_skeleton_node.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_zombie.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_zombie.png deleted file mode 100644 index 251f95fec..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_zombie.png and /dev/null differ diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_zombie_node.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_zombie_node.png deleted file mode 100644 index ef85701e8..000000000 Binary files a/mods/ITEMS/mcl_heads/textures/mcl_heads_zombie_node.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/License.txt b/mods/ITEMS/mcl_hoppers/License.txt deleted file mode 100644 index 5c93f4565..000000000 --- a/mods/ITEMS/mcl_hoppers/License.txt +++ /dev/null @@ -1,13 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/ITEMS/mcl_hoppers/README.md b/mods/ITEMS/mcl_hoppers/README.md deleted file mode 100644 index 52c85a5d9..000000000 --- a/mods/ITEMS/mcl_hoppers/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Hoppers -This is the Hoppers mod for Minetest. It's just a clone of Minecraft hoppers, functions nearly identical to them minus mesecons making them stop and the way they're placed. - -## Forum Topic -- https://forum.minetest.net/viewtopic.php?f=11&t=12379 diff --git a/mods/ITEMS/mcl_hoppers/init.lua b/mods/ITEMS/mcl_hoppers/init.lua deleted file mode 100644 index 87831490f..000000000 --- a/mods/ITEMS/mcl_hoppers/init.lua +++ /dev/null @@ -1,498 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - ---[[ BEGIN OF NODE DEFINITIONS ]] - -local mcl_hoppers_formspec = - "size[9,7]".. - "label[2,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Hopper"))).."]".. - "list[context;main;2,0.5;5,1;]".. - mcl_formspec.get_itemslot_bg(2,0.5,5,1).. - "label[0,2;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,2.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,2.5,9,3).. - "list[current_player;main;0,5.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,5.74,9,1).. - "listring[context;main]".. - "listring[current_player;main]" - --- Downwards hopper (base definition) - -local def_hopper = { - inventory_image = "mcl_hoppers_item.png", - wield_image = "mcl_hoppers_item.png", - groups = {pickaxey=1, container=2,deco_block=1,hopper=1}, - drawtype = "nodebox", - paramtype = "light", - -- FIXME: mcl_hoppers_hopper_inside.png is unused by hoppers. - tiles = {"mcl_hoppers_hopper_inside.png^mcl_hoppers_hopper_top.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png"}, - node_box = { - type = "fixed", - fixed = { - --funnel walls - {-0.5, 0.0, 0.4, 0.5, 0.5, 0.5}, - {0.4, 0.0, -0.5, 0.5, 0.5, 0.5}, - {-0.5, 0.0, -0.5, -0.4, 0.5, 0.5}, - {-0.5, 0.0, -0.5, 0.5, 0.5, -0.4}, - --funnel base - {-0.5, 0.0, -0.5, 0.5, 0.1, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.1, -0.3, -0.1, 0.1, -0.5, 0.1}, - }, - }, - selection_box = { - type = "fixed", - fixed = { - --funnel - {-0.5, 0.0, -0.5, 0.5, 0.5, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.1, -0.3, -0.1, 0.1, -0.5, 0.1}, - }, - }, - is_ground_content = false, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", mcl_hoppers_formspec) - local inv = meta:get_inventory() - inv:set_size("main", 5) - end, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - sounds = mcl_sounds.node_sound_metal_defaults(), - - _mcl_blast_resistance = 4.8, - _mcl_hardness = 3, -} - --- Redstone variants (on/off) of downwards hopper. --- Note a hopper is enabled when it is *not* supplied with redstone power and disabled when it is supplied with redstone power. - --- Enabled downwards hopper -local def_hopper_enabled = table.copy(def_hopper) -def_hopper_enabled.description = S("Hopper") -def_hopper_enabled._tt_help = S("5 inventory slots").."\n"..S("Collects items from above, moves items to container below").."\n"..S("Can be disabled with redstone power") -def_hopper_enabled._doc_items_longdesc = S("Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.").."\n\n".. - -S("Hoppers interact with containers the following way:").."\n".. -S("• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot").."\n".. -S("• Ender chests: No interaction.").."\n".. -S("• Other containers: Normal interaction.").."\n\n".. - -S("Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.") -def_hopper_enabled._doc_items_usagehelp = S("To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.") -def_hopper_enabled.on_place = function(itemstack, placer, pointed_thing) - local upos = pointed_thing.under - local apos = pointed_thing.above - - local uposnode = minetest.get_node(upos) - local uposnodedef = minetest.registered_nodes[uposnode.name] - if not uposnodedef then return itemstack end - -- Use pointed node's on_rightclick function first, if present - if placer and not placer:get_player_control().sneak then - if uposnodedef and uposnodedef.on_rightclick then - return uposnodedef.on_rightclick(pointed_thing.under, uposnode, placer, itemstack) or itemstack - end - end - - local x = upos.x - apos.x - local z = upos.z - apos.z - - local fake_itemstack = ItemStack(itemstack) - local param2 - if x == -1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 0 - elseif x == 1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 2 - elseif z == -1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 3 - elseif z == 1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 1 - end - local itemstack,_ = minetest.item_place_node(fake_itemstack, placer, pointed_thing, param2) - itemstack:set_name("mcl_hoppers:hopper") - return itemstack -end -def_hopper_enabled.mesecons = { - effector = { - action_on = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper_disabled", param2=node.param2}) - end, - }, -} - -minetest.register_node("mcl_hoppers:hopper", def_hopper_enabled) - --- Disabled downwards hopper -local def_hopper_disabled = table.copy(def_hopper) -def_hopper_disabled.description = S("Disabled Hopper") -def_hopper_disabled.inventory_image = nil -def_hopper_disabled._doc_items_create_entry = false -def_hopper_disabled.groups.not_in_creative_inventory = 1 -def_hopper_disabled.drop = "mcl_hoppers:hopper" -def_hopper_disabled.mesecons = { - effector = { - action_off = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper", param2=node.param2}) - end, - }, -} - -minetest.register_node("mcl_hoppers:hopper_disabled", def_hopper_disabled) - - - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple -end - --- Sidewars hopper (base definition) -local def_hopper_side = { - _doc_items_create_entry = false, - drop = "mcl_hoppers:hopper", - groups = {pickaxey=1, container=2,not_in_creative_inventory=1,hopper=2}, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"mcl_hoppers_hopper_inside.png^mcl_hoppers_hopper_top.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png"}, - node_box = { - type = "fixed", - fixed = { - --funnel walls - {-0.5, 0.0, 0.4, 0.5, 0.5, 0.5}, - {0.4, 0.0, -0.5, 0.5, 0.5, 0.5}, - {-0.5, 0.0, -0.5, -0.4, 0.5, 0.5}, - {-0.5, 0.0, -0.5, 0.5, 0.5, -0.4}, - --funnel base - {-0.5, 0.0, -0.5, 0.5, 0.1, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.5, -0.3, -0.1, 0.1, -0.1, 0.1}, - }, - }, - selection_box = { - type = "fixed", - fixed = { - --funnel - {-0.5, 0.0, -0.5, 0.5, 0.5, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.5, -0.3, -0.1, 0.1, -0.1, 0.1}, - }, - }, - is_ground_content = false, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", mcl_hoppers_formspec) - local inv = meta:get_inventory() - inv:set_size("main", 5) - end, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2:to_table()) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_rotate = on_rotate, - sounds = mcl_sounds.node_sound_metal_defaults(), - - _mcl_blast_resistance = 4.8, - _mcl_hardness = 3, -} - -local def_hopper_side_enabled = table.copy(def_hopper_side) -def_hopper_side_enabled.description = S("Side Hopper") -def_hopper_side_enabled.mesecons = { - effector = { - action_on = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper_side_disabled", param2=node.param2}) - end, - }, -} -minetest.register_node("mcl_hoppers:hopper_side", def_hopper_side_enabled) - -local def_hopper_side_disabled = table.copy(def_hopper_side) -def_hopper_side_disabled.description = S("Disabled Side Hopper") -def_hopper_side_disabled.mesecons = { - effector = { - action_off = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper_side", param2=node.param2}) - end, - }, -} -minetest.register_node("mcl_hoppers:hopper_side_disabled", def_hopper_side_disabled) - ---[[ END OF NODE DEFINITIONS ]] - ---[[ BEGIN OF ABM DEFINITONS ]] - --- Make hoppers suck in dropped items -minetest.register_abm({ - label = "Hoppers suck in dropped items", - nodenames = {"mcl_hoppers:hopper","mcl_hoppers:hopper_side"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local abovenode = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) - if not minetest.registered_items[abovenode.name] then return end - -- Don't bother checking item enties if node above is a container (should save some CPU) - if minetest.get_item_group(abovenode.name, "container") ~= 0 then - return - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - - for _,object in pairs(minetest.get_objects_inside_radius(pos, 2)) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" and not object:get_luaentity()._removed then - if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then - -- Item must get sucked in when the item just TOUCHES the block above the hopper - -- This is the reason for the Y calculation. - -- Test: Items on farmland and slabs get sucked, but items on full blocks don't - local posob = object:get_pos() - local posob_miny = posob.y + object:get_properties().collisionbox[2] - if math.abs(posob.x-pos.x) <= 0.5 and (posob_miny-pos.y < 1.5 and posob.y-pos.y >= 0.3) then - inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) - object:get_luaentity().itemstring = "" - object:remove() - end - end - end - end - end, -}) - --- Returns true if itemstack is fuel, but not for lava bucket if destination already has one -local is_transferrable_fuel = function(itemstack, src_inventory, src_list, dst_inventory, dst_list) - if mcl_util.is_fuel(itemstack) then - if itemstack:get_name() == "mcl_buckets:bucket_lava" then - return dst_inventory:is_empty(dst_list) - else - return true - end - else - return false - end -end - - - -minetest.register_abm({ - label = "Hopper/container item exchange", - nodenames = {"mcl_hoppers:hopper"}, - neighbors = {"group:container"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Get node pos' for item transfer - local uppos = {x=pos.x,y=pos.y+1,z=pos.z} - local downpos = {x=pos.x,y=pos.y-1,z=pos.z} - - -- Suck an item from the container above into the hopper - local upnode = minetest.get_node(uppos) - if not minetest.registered_nodes[upnode.name] then return end - local g = minetest.get_item_group(upnode.name, "container") - local sucked = mcl_util.move_item_container(uppos, pos) - - -- Also suck in non-fuel items from furnace fuel slot - if not sucked and g == 4 then - local finv = minetest.get_inventory({type="node", pos=uppos}) - if finv and not mcl_util.is_fuel(finv:get_stack("fuel", 1)) then - mcl_util.move_item_container(uppos, pos, "fuel") - end - end - - -- Move an item from the hopper into container below - local downnode = minetest.get_node(downpos) - if not minetest.registered_nodes[downnode.name] then return end - mcl_util.move_item_container(pos, downpos) - end, -}) - -minetest.register_abm({ - label = "Side-hopper/container item exchange", - nodenames = {"mcl_hoppers:hopper_side"}, - neighbors = {"group:container"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Determine to which side the hopper is facing, get nodes - local face = minetest.get_node(pos).param2 - local front = {} - if face == 0 then - front = {x=pos.x-1,y=pos.y,z=pos.z} - elseif face == 1 then - front = {x=pos.x,y=pos.y,z=pos.z+1} - elseif face == 2 then - front = {x=pos.x+1,y=pos.y,z=pos.z} - elseif face == 3 then - front = {x=pos.x,y=pos.y,z=pos.z-1} - end - local above = {x=pos.x,y=pos.y+1,z=pos.z} - - local frontnode = minetest.get_node(front) - if not minetest.registered_nodes[frontnode.name] then return end - - -- Suck an item from the container above into the hopper - local abovenode = minetest.get_node(above) - if not minetest.registered_nodes[abovenode.name] then return end - local g = minetest.get_item_group(abovenode.name, "container") - local sucked = mcl_util.move_item_container(above, pos) - - -- Also suck in non-fuel items from furnace fuel slot - if not sucked and g == 4 then - local finv = minetest.get_inventory({type="node", pos=above}) - if finv and not mcl_util.is_fuel(finv:get_stack("fuel", 1)) then - mcl_util.move_item_container(above, pos, "fuel") - end - end - - -- Move an item from the hopper into the container to which the hopper points to - local g = minetest.get_item_group(frontnode.name, "container") - if g == 2 or g == 3 or g == 5 or g == 6 then - mcl_util.move_item_container(pos, front) - elseif g == 4 then - -- Put fuel into fuel slot - local sinv = minetest.get_inventory({type="node", pos = pos}) - local dinv = minetest.get_inventory({type="node", pos = front}) - local slot_id,_ = mcl_util.get_eligible_transfer_item_slot(sinv, "main", dinv, "fuel", is_transferrable_fuel) - if slot_id then - mcl_util.move_item_container(pos, front, nil, slot_id, "fuel") - end - end - end -}) - -minetest.register_craft({ - output = "mcl_hoppers:hopper", - recipe = { - {"mcl_core:iron_ingot","","mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot","mcl_chests:chest","mcl_core:iron_ingot"}, - {"","mcl_core:iron_ingot",""}, - } -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_hoppers:hopper", "nodes", "mcl_hoppers:hopper_side") -end - --- Legacy -minetest.register_alias("mcl_hoppers:hopper_item", "mcl_hoppers:hopper") - -minetest.register_lbm({ - label = "Update hopper formspecs (0.60.0", - name = "mcl_hoppers:update_formspec_0_60_0", - nodenames = { "group:hopper" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", mcl_hoppers_formspec) - end, -}) diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.de.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.de.tr deleted file mode 100644 index f0cc90d2f..000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.de.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Trichter -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Trichter sind Behälter mit 5 Inventarplätzen. Sie sammeln fallengelassene Gegenstände oberhalb auf, nehmen sich Gegenstände von einem Behälter oberhalb auf und versuchen, ihren Inhalt in einen benachbarten Behälter zu befördern. Trichter können entweder nach unten oder zur Seite zeigen. Trichter interagieren mit Truhen, Spendern, Werfern, Schulkerkisten, Öfen und Trichtern. -Hoppers interact with containers the following way:=Trichter interagieren mit Behältern auf diese Weise: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Öfen: Trichter von oberhalb werden Gegenstände in den Quellplatz befördern. Trichter von unterhalb werden Gegenstände aus dem Ausgabeplatz nehmen. Sie werden Gegenstände auch aus dem Brennstoffplatz nehmen, wenn sie als Brennstoff ungeeignet sind. Seitwärtstrichter, die zum Ofen zeigen, befördern Gegenstände in den Brennstoffplatz. -• Ender chests: No interaction.=• Endertruhen: Keine Interaktion. -• Other containers: Normal interaction.=• Andere Behälter: Normale Interaktion. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Trichter können deaktiviert werden, wenn sie mit Redstone-Energie versorgt werden. Deaktivierte Trichter bewegen keine Gegenstände. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Um einen Trichter vertikal zu platzieren, platzieren Sie ihn auf den Boden oder an die Decke. Um ihn seitwärts zu platzieren, platzieren Sie in an die Seite eines Blocks. Der Trichter wird seine Ausrichtung behalten. Benutzen Sie den Trichter, um auf sein Inventar zuzugreifen. -Disabled Hopper=Deaktivierter Trichter -Side Hopper=Seitwärtstrichter -Disabled Side Hopper=Deaktivierter Seitwärtstrichter -Inventory=Inventar -5 inventory slots=5 Inventarplätze -Collects items from above, moves items to container below=Sammelt Gegenstände von oben, legt Gegenstände in Behälter unterhalb ab -Can be disabled with redstone power=Kann mit Redstoneenergie deaktiviert werden diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.es.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.es.tr deleted file mode 100644 index 3f819ca93..000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.es.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Tolva -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Las tolvas son contenedores con 5 ranuras de inventario. Recogen los artículos que se cayeron desde arriba, toman los artículos de un contenedor de arriba e intentan colocarlos en un contenedor adyacente. Las tolvas pueden ir hacia abajo o hacia los lados. Las tolvas interactúan con cofres, goteros, dispensadores, cajas de shulker, hornos y tolvas. -Hoppers interact with containers the following way:=Las tolvas interactúan con los contenedores de la siguiente manera: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Hornos: las tolvas de arriba colocarán elementos en la ranura de origen. Las tolvas de abajo toman artículos de la ranura de salida. También toman artículos de la ranura de combustible cuando no se pueden usar como combustible. Las tolvas laterales que apuntan al horno colocan elementos en la ranura de combustible -• Ender chests: No interaction.=• Cofres Ender: Sin interacción. -• Other containers: Normal interaction.=• Otros contenedores: interacción normal. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Las tolvas se pueden desactivar cuando se les suministra energía de redstone. Las tolvas deshabilitadas no mueven artículos. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Para colocar una tolva verticalmente, colóquela en el suelo o en el techo. Para colocarlo de lado, colóquelo al lado de un bloque. Use la tolva para acceder a su inventario. -Disabled Hopper=Tolva desactivada -Side Hopper=Tolva lateral -Disabled Side Hopper=Tolva lateral desactivada -Inventory=Inventario diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.fr.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.fr.tr deleted file mode 100644 index 40795d09c..000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.fr.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Entonnoir -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Les entonoirs sont des conteneurs avec 5 emplacements d'inventaire. Ils récupèrent les objets déposés par le haut, prennent les objets d'un conteneur au-dessus et tentent de les placer dans un conteneur adjacent. Les entonnoirs peuvent aller vers le bas ou sur le côté. Les entonnoirs interagissent avec les coffres, les compte-gouttes, les distributeurs, les boites de shulker, les fours et les entonnoirs. -Hoppers interact with containers the following way:=Les entonnoirs interagissent avec les conteneurs de la manière suivante: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Fours: les entonoires d'en haut placent les objets dans l'emplacement source. Les entonoires d'en bas prennent les éléments de la fente de sortie. Ils prennent également des objets de la fente de carburant lorsqu'ils ne peuvent pas être utilisés comme carburant. Des entonaires latérales qui pointent vers le four mettent des objets dans la fente de combustible -• Ender chests: No interaction.=• Coffres Ender: Aucune interaction. -• Other containers: Normal interaction.=• Autres conteneurs: interaction normale. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Les entonoires peuvent être désactivées lorsqu'elles sont alimentées en redstone. Les trémies désactivées ne déplacent pas les objets. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Pour placer un entonoire verticalement, placez-la au sol ou au plafond. Pour le placer sur le côté, placez-le sur le côté d'un bloc. Utilisez l'entonoire pour accéder à son inventaire. -Disabled Hopper=Entonoir Désactivé -Side Hopper=Entonoir Latéral -Disabled Side Hopper=Entonoir Latéral Désactivé -Inventory=Inventaire -5 inventory slots=5 emplacements d'inventaire -Collects items from above, moves items to container below=Collecte les éléments d'en haut, déplace les éléments vers le conteneur ci-dessous -Can be disabled with redstone power=Peut être désactivé par la puissance Redstone diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.pl.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.pl.tr deleted file mode 100644 index 8ef70f4f0..000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.pl.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Lej -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Leje są pojemnikami z 5 miejscami ekwipunku. Zbierają upuszczone na nie z góry przedmioty, przedmioty z pojemników na nimi i próbują je umieścić w przyległych pojemnikach. Leje mogą być skierowane w dół bądź w bok. Leje wchodzą w interakcję ze skrzyniami, podajnikami, dozownikami, shulkerowymi skrzyniami, piecami i lejami. -Hoppers interact with containers the following way:=Leje wchodzą w interakcję z pojemnikami w następujący sposób: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=Piece: leje nad nimi będą umieszczać przedmioty w miejsce materiału źródłowego. Leje z dołu będą brały przedmioty z miejsca wyjściowego. Będą także zabierały przedmioty z miejsca na paliwo jeśli nie można ich użyć jako paliwo. Boczne leje wskazujące na piec będą wstawiać przedmioty w miejsce na paliwo. -• Ender chests: No interaction.=Skrzynie kresu: nie wchodzą w interakcję. -• Other containers: Normal interaction.=Inne pojemniki: zwykła interakcja. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Leje mogą być wyłączone sygnałem z czerwienitu. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Aby postawić lej pionowo postaw go na podłodze lub suficie. Aby postawić go bocznie ustaw go na boku bloku. Kliknij "Użyj" na leju by zarządzać jego ekwipunkiem. -Disabled Hopper=Wyłączony lej -Side Hopper=Boczny lej -Disabled Side Hopper=Wyłączony boczny lej -Inventory=Ekwipunek -5 inventory slots=5 miejsc w ekwipunku -Collects items from above, moves items to container below=Zbiera przedmioty z góry, umieszcza je w pojemniku pod spodem -Can be disabled with redstone power=Może być wyłączony czerwienitem diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.ru.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.ru.tr deleted file mode 100644 index ac7e82b17..000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.ru.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Воронка -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Воронка это контейнер с 5 отсеками инвентаря. Она может собирать предметы, брошенные сверху, брать предметы из контейнеров сверху, а также пытаться класть свои предметы в примыкающий контейнер. Воронки могут действовать вниз или вбок. Воронки взаимодействуют с сундуками, выбрасывателями, диспенсерами, ящиками шалкеров, печами и другими воронками. -Hoppers interact with containers the following way:=Воронка взаимодействует с контейнерами следующим образом: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Печи: размещённые выше воронки будут складывать предметы во входной отсек. Воронки, размещённые ниже, будут доставать предметы из выходного отсека. Они также может доставать предметы из топливного отсека, если эти предметы не могут использоваться в качестве топлива. Боковые воронки, нацеленные на печь, помещают предметы в топливный отсек. -• Ender chests: No interaction.=• Сундук Предела: не взаимодействует. -• Other containers: Normal interaction.=• Прочие контейнеры: взаимодействует обычно. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Воронки могут быть отключены, когда на них подаётся энергия редстоуна. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Чтобы установить воронку вертикально, поместите её на пол или потолок. Чтобы установить воронку по направлению в сторону, разместите её на боковой стороне блока. Нажмите [Использовать] для доступа к инвентарю воронки. -Disabled Hopper=Отключенная воронка -Side Hopper=Боковая воронка -Disabled Side Hopper=Отключенная боковая воронка -Inventory=Инвентарь -5 inventory slots=5 отсеков инвентаря -Collects items from above, moves items to container below=Собирает предметы сверху, передаёт их в контейнер ниже -Can be disabled with redstone power=Может быть отключена с помощью энергии редстоуна diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.zh_TW.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.zh_TW.tr deleted file mode 100644 index f3e8be8ab..000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.zh_TW.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=漏斗 -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=漏斗是有5個物品槽的容器。它們從上面收集掉落的物品,從上面的容器中取出物品,並試圖把它的物品放到鄰近的容器中。漏斗可以向下或向側面移動。漏斗與箱子、投擲器、發射器、界伏盒、熔爐和漏斗相互作用。 -Hoppers interact with containers the following way:=漏斗會對容器做以下事情: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• 熔爐:從上面的漏斗會將物品放入源料槽。下方的漏斗從輸出槽中取出物品。當物品不能作為燃料使用時,它們也會從燃料槽中取出物品。指向熔爐的側邊漏斗將物品放入燃料槽。 -• Ender chests: No interaction.=• 終界箱:不會有任何動作。 -• Other containers: Normal interaction.=• 其他容器:正常動作。 -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=供給紅石電源時,可以禁用漏斗。被禁用的漏斗不會移動物品。 -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=要垂直放置漏斗,可將其放在地板或天花板上。要想把它放在側面,就把它放在一個方塊的側面。使用漏斗來訪問其庫存。 -Disabled Hopper=被禁用的漏斗 -Side Hopper=側面漏斗 -Disabled Side Hopper=被禁用的側面漏斗 -Inventory=物品欄 -5 inventory slots=5個物品槽 -Collects items from above, moves items to container below=從上面收集物品,並把物品放到下面的容器中 -Can be disabled with redstone power=可被紅石電源禁用 diff --git a/mods/ITEMS/mcl_hoppers/locale/template.txt b/mods/ITEMS/mcl_hoppers/locale/template.txt deleted file mode 100644 index bc614d47a..000000000 --- a/mods/ITEMS/mcl_hoppers/locale/template.txt +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper= -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.= -Hoppers interact with containers the following way:= -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot= -• Ender chests: No interaction.= -• Other containers: Normal interaction.= -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.= -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.= -Disabled Hopper= -Side Hopper= -Disabled Side Hopper= -Inventory= -5 inventory slots= -Collects items from above, moves items to container below= -Can be disabled with redstone power= diff --git a/mods/ITEMS/mcl_hoppers/mod.conf b/mods/ITEMS/mcl_hoppers/mod.conf deleted file mode 100644 index c89292f6b..000000000 --- a/mods/ITEMS/mcl_hoppers/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_hoppers -description = It's just a clone of Minecraft hoppers, functions nearly identical to them minus mesecons making them stop and the way they're placed. -depends = mcl_core, mcl_formspec, mcl_sounds, mcl_util -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_inside.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_inside.png deleted file mode 100644 index 00b4f434b..000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_inside.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_outside.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_outside.png deleted file mode 100644 index f3d9b7982..000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_outside.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_top.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_top.png deleted file mode 100644 index 918e58f5d..000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_item.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_item.png deleted file mode 100644 index c78b7d5e0..000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_item.png and /dev/null differ diff --git a/mods/ITEMS/mcl_itemframes/README.txt b/mods/ITEMS/mcl_itemframes/README.txt deleted file mode 100644 index d9514a03b..000000000 --- a/mods/ITEMS/mcl_itemframes/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -This mod is originally by Zeg9, but heavily modified for MineClone 2. - -Model created by 22i, licensed under the -GNU GPLv3 . - -Source: diff --git a/mods/ITEMS/mcl_itemframes/init.lua b/mods/ITEMS/mcl_itemframes/init.lua deleted file mode 100644 index eac5b066b..000000000 --- a/mods/ITEMS/mcl_itemframes/init.lua +++ /dev/null @@ -1,346 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local VISUAL_SIZE = 0.3 - -minetest.register_entity("mcl_itemframes:item",{ - hp_max = 1, - visual = "wielditem", - visual_size = {x=VISUAL_SIZE, y=VISUAL_SIZE}, - physical = false, - pointable = false, - textures = { "blank.png" }, - _texture = "blank.png", - _scale = 1, - - on_activate = function(self, staticdata) - if staticdata and staticdata ~= "" then - local data = staticdata:split(";") - if data and data[1] and data[2] then - self._nodename = data[1] - self._texture = data[2] - if data[3] then - self._scale = data[3] - else - self._scale = 1 - end - end - end - if self._texture then - self.object:set_properties({ - textures={self._texture}, - visual_size={x=VISUAL_SIZE/self._scale, y=VISUAL_SIZE/self._scale}, - }) - end - end, - get_staticdata = function(self) - if self._nodename and self._texture then - local ret = self._nodename .. ";" .. self._texture - if self._scale then - ret = ret .. ";" .. self._scale - end - return ret - end - return "" - end, - - _update_texture = function(self) - if self._texture then - self.object:set_properties({ - textures={self._texture}, - visual_size={x=VISUAL_SIZE/self._scale, y=VISUAL_SIZE/self._scale}, - }) - end - end, -}) - -minetest.register_entity("mcl_itemframes:map", { - initial_properties = { - visual = "upright_sprite", - visual_size = {x = 1, y = 1}, - pointable = false, - physical = false, - collide_with_objects = false, - textures = {"blank.png"}, - }, - on_activate = function(self, staticdata) - self.id = staticdata - mcl_maps.load_map(self.id, function(texture) - -- will not crash even if self.object is invalid by now - self.object:set_properties({textures = {texture}}) - end) - end, - get_staticdata = function(self) - return self.id - end, -}) - - -local facedir = {} -facedir[0] = {x=0,y=0,z=1} -facedir[1] = {x=1,y=0,z=0} -facedir[2] = {x=0,y=0,z=-1} -facedir[3] = {x=-1,y=0,z=0} - -local remove_item_entity = function(pos, node) - if node.name == "mcl_itemframes:item_frame" then - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.5)) do - local entity = obj:get_luaentity() - if entity and (entity.name == "mcl_itemframes:item" or entity.name == "mcl_itemframes:map") then - obj:remove() - end - end - end -end - -local update_item_entity = function(pos, node, param2) - remove_item_entity(pos, node) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local item = inv:get_stack("main", 1) - if not item:is_empty() then - if not param2 then - param2 = node.param2 - end - if node.name == "mcl_itemframes:item_frame" then - local posad = facedir[param2] - pos.x = pos.x + posad.x*6.5/16 - pos.y = pos.y + posad.y*6.5/16 - pos.z = pos.z + posad.z*6.5/16 - end - local yaw = math.pi*2 - param2 * math.pi/2 - local map_id = item:get_meta():get_string("mcl_maps:id") - if map_id == "" then - local e = minetest.add_entity(pos, "mcl_itemframes:item") - local lua = e:get_luaentity() - lua._nodename = node.name - local itemname = item:get_name() - if itemname == "" or itemname == nil then - lua._texture = "blank.png" - lua._scale = 1 - else - lua._texture = itemname - local def = minetest.registered_items[itemname] - lua._scale = def and def.wield_scale and def.wield_scale.x or 1 - end - lua:_update_texture() - if node.name == "mcl_itemframes:item_frame" then - e:set_yaw(yaw) - end - else - local e = minetest.add_entity(pos, "mcl_itemframes:map", map_id) - e:set_yaw(yaw) - end - end -end - -local drop_item = function(pos, node, meta, clicker) - local cname = "" - if clicker and clicker:is_player() then - cname = clicker:get_player_name() - end - if node.name == "mcl_itemframes:item_frame" and not minetest.is_creative_enabled(cname) then - local inv = meta:get_inventory() - local item = inv:get_stack("main", 1) - if not item:is_empty() then - minetest.add_item(pos, item) - end - end - meta:set_string("infotext", "") - remove_item_entity(pos, node) -end - -minetest.register_node("mcl_itemframes:item_frame",{ - description = S("Item Frame"), - _tt_help = S("Can hold an item"), - _doc_items_longdesc = S("Item frames are decorative blocks in which items can be placed."), - _doc_items_usagehelp = S("Just place any item on the item frame. Use the item frame again to retrieve the item."), - drawtype = "mesh", - is_ground_content = false, - mesh = "mcl_itemframes_itemframe1facedir.obj", - selection_box = { type = "fixed", fixed = {-6/16, -6/16, 7/16, 6/16, 6/16, 0.5} }, - collision_box = { type = "fixed", fixed = {-6/16, -6/16, 7/16, 6/16, 6/16, 0.5} }, - tiles = {"mcl_itemframes_itemframe_background.png", "mcl_itemframes_itemframe_background.png", "mcl_itemframes_itemframe_background.png", "mcl_itemframes_itemframe_background.png", "default_wood.png", "mcl_itemframes_itemframe_background.png"}, - inventory_image = "mcl_itemframes_item_frame.png", - wield_image = "mcl_itemframes_item_frame.png", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - groups = { dig_immediate=3,deco_block=1,dig_by_piston=1,container=7,attached_node_facedir=1 }, - sounds = mcl_sounds.node_sound_defaults(), - node_placement_prediction = "", - on_timer = function(pos) - local inv = minetest.get_meta(pos):get_inventory() - local stack = inv:get_stack("main", 1) - local itemname = stack:get_name() - if minetest.get_item_group(itemname, "clock") > 0 then - local new_name = "mcl_clock:clock_" .. (mcl_worlds.clock_works(pos) and mcl_clock.old_time or mcl_clock.random_frame) - if itemname ~= new_name then - stack:set_name(new_name) - inv:set_stack("main", 1, stack) - local node = minetest.get_node(pos) - update_item_entity(pos, node, node.param2) - end - minetest.get_node_timer(pos):start(1.0) - end - end, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - return minetest.item_place(itemstack, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("main", 1) - end, - on_rightclick = function(pos, node, clicker, itemstack) - if not itemstack then - return - end - local pname = clicker:get_player_name() - if minetest.is_protected(pos, pname) then - minetest.record_protection_violation(pos, pname) - return - end - local meta = minetest.get_meta(pos) - drop_item(pos, node, meta, clicker) - local inv = meta:get_inventory() - if itemstack:is_empty() then - remove_item_entity(pos, node) - meta:set_string("infotext", "") - inv:set_stack("main", 1, "") - return itemstack - end - local put_itemstack = ItemStack(itemstack) - put_itemstack:set_count(1) - local itemname = put_itemstack:get_name() - if minetest.get_item_group(itemname, "compass") > 0 then - put_itemstack:set_name(mcl_compass.get_compass_itemname(pos, minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2)), put_itemstack)) - end - if minetest.get_item_group(itemname, "clock") > 0 then - minetest.get_node_timer(pos):start(1.0) - end - inv:set_stack("main", 1, put_itemstack) - update_item_entity(pos, node) - -- Add node infotext when item has been named - local imeta = itemstack:get_meta() - local iname = imeta:get_string("name") - if iname then - meta:set_string("infotext", iname) - end - - if not minetest.is_creative_enabled(clicker:get_player_name()) then - itemstack:take_item() - end - return itemstack - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - on_destruct = function(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - drop_item(pos, node, meta) - end, - on_rotate = function(pos, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - -- Rotate face - --local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - - local objs = nil - if node.name == "mcl_itemframes:item_frame" then - objs = minetest.get_objects_inside_radius(pos, 0.5) - end - if objs then - for _, obj in ipairs(objs) do - if obj and obj:get_luaentity() and obj:get_luaentity().name == "mcl_itemframes:item" then - update_item_entity(pos, node, (node.param2+1) % 4) - break - end - end - end - return - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - end, -}) - -minetest.register_craft({ - output = "mcl_itemframes:item_frame", - recipe = { - {"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}, - {"mcl_core:stick", "mcl_mobitems:leather", "mcl_core:stick"}, - {"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}, - } -}) - -minetest.register_lbm({ - label = "Update legacy item frames", - name = "mcl_itemframes:update_legacy_item_frames", - nodenames = {"itemframes:frame"}, - action = function(pos, node) - -- Swap legacy node, then respawn entity - node.name = "mcl_itemframes:item_frame" - local meta = minetest.get_meta(pos) - local item = meta:get_string("item") - minetest.swap_node(pos, node) - if item ~= "" then - local itemstack = ItemStack(minetest.deserialize(meta:get_string("itemdata"))) - local inv = meta:get_inventory() - inv:set_size("main", 1) - if not itemstack:is_empty() then - inv:set_stack("main", 1, itemstack) - end - end - update_item_entity(pos, node) - end, -}) - --- FIXME: Item entities can get destroyed by /clearobjects -minetest.register_lbm({ - label = "Respawn item frame item entities", - name = "mcl_itemframes:respawn_entities", - nodenames = {"mcl_itemframes:item_frame"}, - run_at_every_load = true, - action = function(pos, node) - update_item_entity(pos, node) - end, -}) - -minetest.register_alias("itemframes:frame", "mcl_itemframes:item_frame") diff --git a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.de.tr b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.de.tr deleted file mode 100644 index 07d7812f6..000000000 --- a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_itemframes -Item Frame=Rahmen -Item frames are decorative blocks in which items can be placed.=Rahmen sind dekorative Blöcke, in denen man Gegenstände platzieren kann. -Just place any item on the item frame. Use the item frame again to retrieve the item.=Platzieren Sie einfach einen beliebigen Gegenstand in den Rahmen. Benutzen Sie den Rahmen erneut, um den Gegenstand zurück zu erhalten. -Can hold an item=Kann einen Gegenstand halten diff --git a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.es.tr b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.es.tr deleted file mode 100644 index 0803234b0..000000000 --- a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.es.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_itemframes -Item Frame=Marco -Item frames are decorative blocks in which items can be placed.=Los marcos de elementos son bloques decorativos en los que se pueden colocar elementos. -Just place any item on the item frame. Use the item frame again to retrieve the item.=Simplemente coloque cualquier artículo en el marco del artículo. Use el marco del artículo nuevamente para recuperar el artículo. - diff --git a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.fr.tr b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.fr.tr deleted file mode 100644 index 180c5555f..000000000 --- a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_itemframes -Item Frame=Cadre -Item frames are decorative blocks in which items can be placed.=Les cadres sont des blocs décoratifs dans lesquels les objets peuvent être placés. -Just place any item on the item frame. Use the item frame again to retrieve the item.=Placez simplement n'importe quel objet sur le cadre. Utilisez à nouveau le cadre décoré pour récupérer l'élément. -Can hold an item=Peut contenir un objet diff --git a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.pl.tr b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.pl.tr deleted file mode 100644 index 8de889471..000000000 --- a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_itemframes -Item Frame=Ramka na przedmiot -Item frames are decorative blocks in which items can be placed.=Ramki na przedmiot to dekoracyjne bloki w których można umieszczać przedmioty. -Just place any item on the item frame. Use the item frame again to retrieve the item.=Umieść dowolny przedmiot w ramce. Użyj ramki ponownie aby odzyskać przedmiot. -Can hold an item=Może przetrzymywać przedmiot diff --git a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.ru.tr b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.ru.tr deleted file mode 100644 index 7d3d90cc4..000000000 --- a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_itemframes -Item Frame=Рамка -Item frames are decorative blocks in which items can be placed.=Рамки это декоративные блоки, в которые можно помещать предметы. -Just place any item on the item frame. Use the item frame again to retrieve the item.=Просто поместите в рамку любой предмет. Используйте рамку вновь, чтобы заполучить из неё предмет обратно. -Can hold an item=Может хранить предмет diff --git a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.zh_TW.tr b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.zh_TW.tr deleted file mode 100644 index d45c14d74..000000000 --- a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.zh_TW.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_itemframes -Item Frame=物品展示框 -Item frames are decorative blocks in which items can be placed.=物品展示框是可以展示物品的裝飾方塊。 -Just place any item on the item frame. Use the item frame again to retrieve the item.=只需將物品放在物品展示框上即可。再次使用物品展示框來提出物品。 -Can hold an item=可以展示物品 diff --git a/mods/ITEMS/mcl_itemframes/locale/template.txt b/mods/ITEMS/mcl_itemframes/locale/template.txt deleted file mode 100644 index bacbfaa69..000000000 --- a/mods/ITEMS/mcl_itemframes/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_itemframes -Item Frame= -Item frames are decorative blocks in which items can be placed.= -Just place any item on the item frame. Use the item frame again to retrieve the item.= -Can hold an item= diff --git a/mods/ITEMS/mcl_itemframes/mod.conf b/mods/ITEMS/mcl_itemframes/mod.conf deleted file mode 100644 index ff09c3bcc..000000000 --- a/mods/ITEMS/mcl_itemframes/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_itemframes -depends = mcl_core, mcl_sounds, mcl_compass, mcl_maps -optional_depends = screwdriver diff --git a/mods/ITEMS/mcl_itemframes/models/mcl_itemframes_itemframe1facedir.obj b/mods/ITEMS/mcl_itemframes/models/mcl_itemframes_itemframe1facedir.obj deleted file mode 100644 index d0a5b0c5f..000000000 --- a/mods/ITEMS/mcl_itemframes/models/mcl_itemframes_itemframe1facedir.obj +++ /dev/null @@ -1,156 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'itemframe1facedir.blend' -# www.blender.org -mtllib itemframe1facedir.mtl -o right.frame_Cube.005 -v -0.313413 -0.313413 0.435326 -v -0.313413 0.313413 0.435326 -v -0.313413 -0.313413 0.498008 -v -0.313413 0.313413 0.498008 -v -0.376095 -0.313413 0.435326 -v -0.376095 0.313413 0.435326 -v -0.376095 -0.313413 0.498008 -v -0.376095 0.313413 0.498008 -vt 0.875000 0.812500 -vt 0.812500 0.812500 -vt 0.812500 0.187500 -vt 0.875000 0.187500 -vt 1.000000 0.812500 -vt 0.937500 0.812500 -vt 0.937500 0.187500 -vt 1.000000 0.187500 -vt -0.000000 0.937500 -vt 0.062500 0.937500 -vt 0.062500 1.000000 -vt -0.000000 1.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn -0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 -0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 2/1/1 4/2/1 3/3/1 1/4/1 -f 4/1/2 8/2/2 7/3/2 3/4/2 -f 8/5/3 6/6/3 5/7/3 7/8/3 -f 6/1/4 2/2/4 1/3/4 5/4/4 -f 1/9/5 3/10/5 7/11/5 5/12/5 -f 6/9/6 8/10/6 4/11/6 2/12/6 -o left.frame_Cube.004 -v 0.376095 -0.313413 0.435326 -v 0.376095 0.313413 0.435326 -v 0.376095 -0.313413 0.498008 -v 0.376095 0.313413 0.498008 -v 0.313413 -0.313413 0.435326 -v 0.313413 0.313413 0.435326 -v 0.313413 -0.313413 0.498008 -v 0.313413 0.313413 0.498008 -vt 0.875000 0.812500 -vt 0.812500 0.812500 -vt 0.812500 0.187500 -vt 0.875000 0.187500 -vt 1.000000 0.812500 -vt 0.937500 0.812500 -vt 0.937500 0.187500 -vt 1.000000 0.187500 -vt -0.000000 0.937500 -vt 0.062500 0.937500 -vt 0.062500 1.000000 -vt -0.000000 1.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 -0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 10/13/7 12/14/7 11/15/7 9/16/7 -f 12/13/8 16/14/8 15/15/8 11/16/8 -f 16/17/9 14/18/9 13/19/9 15/20/9 -f 14/13/10 10/14/10 9/15/10 13/16/10 -f 9/21/11 11/22/11 15/23/11 13/24/11 -f 14/21/12 16/22/12 12/23/12 10/24/12 -o lower.frame_Cube.003 -v 0.376095 -0.376095 0.435326 -v 0.376095 -0.313413 0.435326 -v 0.376095 -0.376095 0.498008 -v 0.376095 -0.313413 0.498008 -v -0.376095 -0.376095 0.435326 -v -0.376095 -0.313413 0.435326 -v -0.376095 -0.376095 0.498008 -v -0.376095 -0.313413 0.498008 -vt 0.187500 0.187500 -vt 0.125000 0.187500 -vt 0.125000 0.125000 -vt 0.187500 0.125000 -vt 0.875000 0.187500 -vt 0.875000 0.125000 -vt 0.812500 0.187500 -vt 0.812500 0.125000 -vt 0.875000 0.937500 -vt 0.875000 1.000000 -vt 0.125000 1.000000 -vt 0.125000 0.937500 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn -0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 18/25/13 20/26/13 19/27/13 17/28/13 -f 20/29/14 24/26/14 23/27/14 19/30/14 -f 24/29/15 22/31/15 21/32/15 23/30/15 -f 22/29/16 18/26/16 17/27/16 21/30/16 -f 17/33/17 19/34/17 23/35/17 21/36/17 -f 22/30/18 24/29/18 20/26/18 18/27/18 -o upper.frame_Cube.002 -v 0.376095 0.313413 0.435326 -v 0.376095 0.376095 0.435326 -v 0.376095 0.313413 0.498008 -v 0.376095 0.376095 0.498008 -v -0.376095 0.313413 0.435326 -v -0.376095 0.376095 0.435326 -v -0.376095 0.313413 0.498008 -v -0.376095 0.376095 0.498008 -vt 0.187500 0.875000 -vt 0.125000 0.875000 -vt 0.125000 0.812500 -vt 0.187500 0.812500 -vt 0.875000 0.875000 -vt 0.875000 0.812500 -vt 0.812500 0.875000 -vt 0.812500 0.812500 -vt 0.875000 0.937500 -vt 0.875000 1.000000 -vt 0.125000 1.000000 -vt 0.125000 0.937500 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn -0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 26/37/19 28/38/19 27/39/19 25/40/19 -f 28/41/20 32/38/20 31/39/20 27/42/20 -f 32/41/21 30/43/21 29/44/21 31/42/21 -f 30/41/22 26/38/22 25/39/22 29/42/22 -f 25/45/23 27/46/23 31/47/23 29/48/23 -f 30/48/24 32/38/24 28/41/24 26/45/24 -o background_Plane -v 0.313413 -0.313413 0.466667 -v -0.313413 -0.313413 0.466667 -v 0.313413 0.313413 0.466667 -v -0.313413 0.313413 0.466667 -vt 0.187500 0.187500 -vt 0.812500 0.187500 -vt 0.812500 0.812500 -vt 0.187500 0.812500 -vn -0.000000 0.000000 -1.000000 -usemtl None -s off -f 33/49/25 34/50/25 36/51/25 35/52/25 diff --git a/mods/ITEMS/mcl_itemframes/textures/mcl_itemframes_item_frame.png b/mods/ITEMS/mcl_itemframes/textures/mcl_itemframes_item_frame.png deleted file mode 100644 index 274749919..000000000 Binary files a/mods/ITEMS/mcl_itemframes/textures/mcl_itemframes_item_frame.png and /dev/null differ diff --git a/mods/ITEMS/mcl_itemframes/textures/mcl_itemframes_itemframe_background.png b/mods/ITEMS/mcl_itemframes/textures/mcl_itemframes_itemframe_background.png deleted file mode 100644 index d48cf26c5..000000000 Binary files a/mods/ITEMS/mcl_itemframes/textures/mcl_itemframes_itemframe_background.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/API.md b/mods/ITEMS/mcl_jukebox/API.md deleted file mode 100644 index 85900ede0..000000000 --- a/mods/ITEMS/mcl_jukebox/API.md +++ /dev/null @@ -1,18 +0,0 @@ -# mcl_jukebox - -## mcl_jukebox.register_record(title, author, identifier, image, sound) - -* title: title of the track -* author: author of the track -* identifier: short string used in the item registration -* image: the texture of the track -* sound: sound file of the track - -## mcl_jukebox.registered_records - -Table indexed by item name containing: -* title: title of the track -* author: author of the track -* identifier: short string used in the item registration -* image: the texture of the track -* sound: sound file of the track \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/README.md b/mods/ITEMS/mcl_jukebox/README.md deleted file mode 100644 index bc261270a..000000000 --- a/mods/ITEMS/mcl_jukebox/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Jukebox mod for MineClone 2. - -Based on the `jdukebox` mod by Jordach. This adds a jukebox block and -music disc. Just place a music disc in a jukebox and music starts -to play. And that's it! - -## Track list - -`mcl_jukebox_track_1.ogg`: “The Evil Sister (Jordach's Mix)” by SoundHelix (CC0) -`mcl_jukebox_track_2.ogg`: “The Energetic Rat (Jordach's Mix)” by SoundHelix (CC0) -`mcl_jukebox_track_3.ogg`: “Eastern Feeling” by Jordach (CC0) -`mcl_jukebox_track_4.ogg`: “Minetest” by Jordach (CC0) -`mcl_jukebox_track_5.ogg`: “Credit Roll (Jordach's HD Mix)” by Junichi Masuda (CC0) -`mcl_jukebox_track_6.ogg`: “Winter Feeling" by Tom Peter (CC BY-SA 3.0) -`mcl_jukebox_track_7.ogg`: “Synthgroove (Jordach's Mix)” by HeroOfTheWinds (CC0) -`mcl_jukebox_track_8.ogg`: “The Clueless Frog (Jordach's Mix)” by SoundHelix (CC0) - -Note: 9 tracks are included. 3 music disc textures are currently unused. - -### Sources - -* “Winter Feeling”: -* Other tracks: - -### License - -Code licenced as GPLv3. Music under individual licenses (see abbreviations -above). Texture license: See main MineClone 2 README.md file. - -See here for the full license texts: - -* CC0: -* CC BY-SA 3.0: -* GPLv3: diff --git a/mods/ITEMS/mcl_jukebox/init.lua b/mods/ITEMS/mcl_jukebox/init.lua deleted file mode 100644 index 6c51a6c94..000000000 --- a/mods/ITEMS/mcl_jukebox/init.lua +++ /dev/null @@ -1,250 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local C = minetest.colorize - -local math = math - -mcl_jukebox = {} -mcl_jukebox.registered_records = {} - --- Player name-indexed table containing the currently heard track -local active_tracks = {} - --- Player name-indexed table containing the current used HUD ID for the “Now playing” message. -local active_huds = {} - --- Player name-indexed table for the “Now playing” message. --- Used to make sure that minetest.after only applies to the latest HUD change event -local hud_sequence_numbers = {} - -function mcl_jukebox.register_record(title, author, identifier, image, sound) - mcl_jukebox.registered_records["mcl_jukebox:record_"..identifier] = {title, author, identifier, image, sound} - local entryname = S("Music Disc") - local longdesc = S("A music disc holds a single music track which can be used in a jukebox to play music.") - local usagehelp = S("Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.") - minetest.register_craftitem(":mcl_jukebox:record_"..identifier, { - description = - C(mcl_colors.AQUA, S("Music Disc")) .. "\n" .. - C(mcl_colors.GRAY, S("@1—@2", author, title)), - _doc_items_create_entry = true, - _doc_items_entry_name = entryname, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - --inventory_image = "mcl_jukebox_record_"..recorddata[r][3]..".png", - inventory_image = image, - stack_max = 1, - groups = { music_record = 1 }, - }) -end - -local function now_playing(player, name) - local playername = player:get_player_name() - local hud = active_huds[playername] - local text = S("Now playing: @1—@2", mcl_jukebox.registered_records[name][2], mcl_jukebox.registered_records[name][1]) - - if not hud_sequence_numbers[playername] then - hud_sequence_numbers[playername] = 1 - else - hud_sequence_numbers[playername] = hud_sequence_numbers[playername] + 1 - end - - local id - if hud then - id = hud - player:hud_change(id, "text", text) - else - id = player:hud_add({ - hud_elem_type = "text", - position = { x=0.5, y=0.8 }, - offset = { x=0, y = 0 }, - number = 0x55FFFF, - text = text, - z_index = 100, - }) - active_huds[playername] = id - end - minetest.after(5, function(tab) - local playername = tab[1] - local player = minetest.get_player_by_name(playername) - local id = tab[2] - local seq = tab[3] - if not player or not player:is_player() or not active_huds[playername] or not hud_sequence_numbers[playername] or seq ~= hud_sequence_numbers[playername] then - return - end - if id and id == active_huds[playername] then - player:hud_remove(active_huds[playername]) - active_huds[playername] = nil - end - end, {playername, id, hud_sequence_numbers[playername]}) -end - -minetest.register_on_leaveplayer(function(player) - active_tracks[player:get_player_name()] = nil - active_huds[player:get_player_name()] = nil - hud_sequence_numbers[player:get_player_name()] = nil -end) - --- Jukebox crafting -minetest.register_craft({ - output = "mcl_jukebox:jukebox", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "mcl_core:diamond", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -local function play_record(pos, itemstack, player) - local item_name = itemstack:get_name() - -- ensure the jukebox uses the new record names for old records - local name = minetest.registered_aliases[item_name] or item_name - if mcl_jukebox.registered_records[name] then - local cname = player:get_player_name() - if active_tracks[cname] then - minetest.sound_stop(active_tracks[cname]) - active_tracks[cname] = nil - end - active_tracks[cname] = minetest.sound_play(mcl_jukebox.registered_records[name][5], { - to_player = cname, - gain = 1, - }) - now_playing(player, name) - return true - end - return false -end - --- Jukebox -minetest.register_node("mcl_jukebox:jukebox", { - description = S("Jukebox"), - _tt_help = S("Uses music discs to play music"), - _doc_items_longdesc = S("Jukeboxes play music when they're supplied with a music disc."), - _doc_items_usagehelp = S("Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players."), - tiles = {"mcl_jukebox_top.png", "mcl_jukebox_side.png", "mcl_jukebox_side.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy=1,axey=1, container=7, deco_block=1, material_wood=1, flammable=-1}, - is_ground_content = false, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("main", 1) - end, - on_rightclick= function(pos, node, clicker, itemstack, pointed_thing) - if not clicker then return end - local cname = clicker:get_player_name() - if minetest.is_protected(pos, cname) then - minetest.record_protection_violation(pos, cname) - return - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if not inv:is_empty("main") then - -- Jukebox contains a disc: Stop music and remove disc - if active_tracks[cname] then - minetest.sound_stop(active_tracks[cname]) - end - local lx = pos.x - local ly = pos.y+1 - local lz = pos.z - local record = inv:get_stack("main", 1) - local dropped_item = minetest.add_item({x=lx, y=ly, z=lz}, record) - -- Rotate record to match with “slot” texture - dropped_item:set_yaw(math.pi/2) - inv:set_stack("main", 1, "") - if active_tracks[cname] then - minetest.sound_stop(active_tracks[cname]) - active_tracks[cname] = nil - end - if active_huds[cname] then - clicker:hud_remove(active_huds[cname]) - active_huds[cname] = nil - end - else - -- Jukebox is empty: Play track if player holds music record - local playing = play_record(pos, itemstack, clicker) - if playing then - local put_itemstack = ItemStack(itemstack) - put_itemstack:set_count(1) - inv:set_stack("main", 1, put_itemstack) - itemstack:take_item() - end - end - return itemstack - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local name = digger:get_player_name() - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - local stack = inv:get_stack("main", 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - local dropped_item = minetest.add_item(p, stack) - -- Rotate record to match with “slot” texture - dropped_item:set_yaw(math.pi/2) - if active_tracks[name] then - minetest.sound_stop(active_tracks[name]) - active_tracks[name] = nil - end - if active_huds[name] then - digger:hud_remove(active_huds[name]) - active_huds[name] = nil - end - end - meta:from_table(meta2:to_table()) - end, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_jukebox:jukebox", - burntime = 15, -}) - -mcl_jukebox.register_record("The Evil Sister (Jordach's Mix)", "SoundHelix", "13", "mcl_jukebox_record_13.png", "mcl_jukebox_track_1") -mcl_jukebox.register_record("The Energetic Rat (Jordach's Mix)", "SoundHelix", "wait", "mcl_jukebox_record_wait.png", "mcl_jukebox_track_2") -mcl_jukebox.register_record("Eastern Feeling", "Jordach", "blocks", "mcl_jukebox_record_blocks.png", "mcl_jukebox_track_3") -mcl_jukebox.register_record("Minetest", "Jordach", "far", "mcl_jukebox_record_far.png", "mcl_jukebox_track_4") -mcl_jukebox.register_record("Credit Roll (Jordach's HD Mix)", "Junichi Masuda", "chirp", "mcl_jukebox_record_chirp.png", "mcl_jukebox_track_5") -mcl_jukebox.register_record("Winter Feeling", "Tom Peter", "strad", "mcl_jukebox_record_strad.png", "mcl_jukebox_track_6") -mcl_jukebox.register_record("Synthgroove (Jordach's Mix)", "HeroOfTheWinds", "mellohi", "mcl_jukebox_record_mellohi.png", "mcl_jukebox_track_7") -mcl_jukebox.register_record("The Clueless Frog (Jordach's Mix)", "SoundHelix", "mall", "mcl_jukebox_record_mall.png", "mcl_jukebox_track_8") - ---add backward compatibility -minetest.register_alias("mcl_jukebox:record_1", "mcl_jukebox:record_13") -minetest.register_alias("mcl_jukebox:record_2", "mcl_jukebox:record_wait") -minetest.register_alias("mcl_jukebox:record_3", "mcl_jukebox:record_blocks") -minetest.register_alias("mcl_jukebox:record_4", "mcl_jukebox:record_far") -minetest.register_alias("mcl_jukebox:record_5", "mcl_jukebox:record_chirp") -minetest.register_alias("mcl_jukebox:record_6", "mcl_jukebox:record_strad") -minetest.register_alias("mcl_jukebox:record_7", "mcl_jukebox:record_mellohi") -minetest.register_alias("mcl_jukebox:record_8", "mcl_jukebox:record_mall") \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.de.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.de.tr deleted file mode 100644 index c7071f6f6..000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Musikplatte -A music disc holds a single music track which can be used in a jukebox to play music.=Eine Musikplatte enthält eine einzelnes Musikstück, die in einer Musikbox benutzt werden kann, um Musik zu spielen. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Platzieren Sie eine Musikplatte in eine leere Musikbox, um die Musik abzuspielen. Benutzen Sie die Musikbox erneut, um die Musikplatte zu erhalten. Die Musik kann nur von Ihnen gehört werden, nicht von anderen Spielern. -Music Disc=Musikplatte -@1—@2=@1 – @2 -Jukebox=Musikbox -Jukeboxes play music when they're supplied with a music disc.=Musikboxen spielen Musik, wenn man ihnen eine Musikplatte gibt. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Platzieren Sie eine Musikplatte in eine leere Musikbox, um die Musikplatte einzulegen und Musik zu spielen. Wenn die Musikbox schon eine Musikplatte hat, werden Sie zuerst diese Musikplatte erhalten. Die Musik kann nur von Ihnen gehört werden, aber nicht von anderen Spielern. -Now playing: @1—@2=Sie hören: @1 – @2 -Uses music discs to play music=Benutzt Musikplatten, um Musik zu spielen diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.es.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.es.tr deleted file mode 100644 index 14373c964..000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Disco de música -A music disc holds a single music track which can be used in a jukebox to play music.=Un disco de música contiene una sola pista que se puede usar en una máquina de discos para reproducirla. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Coloque un disco de música en una máquina de discos vacía para reproducir la música. Use la máquina de discos nuevamente para recuperar el disco de música. La música solo puede ser escuchada por ti, no por otros jugadores. -Music Disc=Disco de música -@1—@2=@1 – @2 -Jukebox=Tocadiscos -Jukeboxes play music when they're supplied with a music disc.=Los tocadiscos reproducen música cuando se les inserta un disco de música. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Coloque un disco de música en una máquina de discos vacía para insertar el disco de música y reproducir música. Si el jukebox ya tiene un disco de música, primero recuperará este disco de música. La música solo puede ser escuchada por ti, no por otros jugadores. -Now playing: @1—@2=Reproduciendo actualmente: @1 – @2 diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.fr.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.fr.tr deleted file mode 100644 index f89510fa6..000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Disque de musique -A music disc holds a single music track which can be used in a jukebox to play music.=Un disque de musique contient une seule piste musicale qui peut être utilisée dans un juke-box pour lire de la musique. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Placez un disque de musique dans un juke-box vide pour lire la musique. Utilisez à nouveau le juke-box pour récupérer le disque de musique. La musique ne peut être entendue que par vous, pas par les autres joueurs. -Music Disc=Disque de musique -@1—@2=@1—@2 -Jukebox=Juke-box -Jukeboxes play music when they're supplied with a music disc.=Les juke-box diffusent de la musique lorsqu'ils sont fournis avec un disque de musique. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Placez un disque de musique dans un juke-box vide pour insérer le disque de musique et lire de la musique. Si le juke-box possède déjà un disque de musique, vous allez d'abord récupérer ce disque de musique. La musique ne peut être entendue que par vous, pas par les autres joueurs. -Now playing: @1—@2=En cours de lecture: @1—@2 -Uses music discs to play music=Utilise des disques de musique pour lire de la musique diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr deleted file mode 100644 index a0c2eccd5..000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Płyta z muzyką -A music disc holds a single music track which can be used in a jukebox to play music.=Płyta z muzyką zawiera ścieżkę muzyczną, którą można użyć na szafie grającej aby włączyć muzykę. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Włóż płyty z muzyką do pustej szafy grającej aby włączyć muzykę. Kliknij użycie na szafie grającej ponownie, aby odzyskać płytę. Muzyka jest słyszalna tylko przez ciebie, nie przez innych graczy. -Music Disc=Płyta z muzyką -@1—@2=@1-@2 -Jukebox=Szafa grająca -Jukeboxes play music when they're supplied with a music disc.=Szafa grająca gra muzykę, gdy ma w sobie płytę z muzyką. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Włóż płytę z muzyką do szafy grającej aby muzyka zaczęła grać. Jeśli w szafie grającej jest już płyta odzyskasz najpierw tę muzykę. Muzyka będzie słyszalna tylko przez ciebie, nie przez innych graczy. -Now playing: @1—@2=Aktualna muzyka: @1—@2 -Uses music discs to play music=Używa płyt z muzyką by odtwarzać muzykę diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.ru.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.ru.tr deleted file mode 100644 index 1787ca229..000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Диск с музыкой -A music disc holds a single music track which can be used in a jukebox to play music.=Диск с музыкой содержит одну музыкальную запись, которую можно прослушивать при помощи проигрывателя. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Поместите диск в пустой проигрыватель, чтобы включить музыку. [Используйте] проигрыватель вновь, чтобы вытащить диск. Музыку слышите только вы, другие игроки не слышат. -Music Disc=Диск с музыкой -@1—@2=@1—@2 -Jukebox=Проигрыватель -Jukeboxes play music when they're supplied with a music disc.=Проигрыватель воспроизводит музыку, если снабдить его музыкальным диском. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Поместите диск в пустой проигрыватель, диск окажется в проигрывателе и заиграет музыка. Если в проигрывателе уже есть диск, вы сначала извлечёте его. Музыку можете услышать только вы, другие игроки не услышат. -Now playing: @1—@2=Сейчас звучит: @1-@2 -Uses music discs to play music=Проигрывает музыку с дисков diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.zh_TW.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.zh_TW.tr deleted file mode 100644 index ba48ae9de..000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.zh_TW.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=唱片 -A music disc holds a single music track which can be used in a jukebox to play music.=一張唱片可容納單一的音樂曲目,可在唱片機中用於播放音樂。 -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=將唱片放入空的唱片機中播放音樂。再次使用唱片機取出唱片。音樂只能由您自己聽,而不能由其他玩家聽。 -@1—@2= -Jukebox=唱片機 -Jukeboxes play music when they're supplied with a music disc.=唱片機在提供唱片的情况下播放音樂。 -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=將音樂光盤放入空的點唱機,插入音樂光盤並播放音樂。如果點唱機已經有一張音樂光盤,你要先取回這張音樂光盤。音樂只能被你聽到,不能被其他玩家聽到。 -Now playing: @1—@2=正在播放:@1—@2 -Uses music discs to play music=使用唱片播放音樂 diff --git a/mods/ITEMS/mcl_jukebox/locale/template.txt b/mods/ITEMS/mcl_jukebox/locale/template.txt deleted file mode 100644 index 67d7ac97c..000000000 --- a/mods/ITEMS/mcl_jukebox/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc= -A music disc holds a single music track which can be used in a jukebox to play music.= -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.= -Music Disc= -@1—@2= -Jukebox= -Jukeboxes play music when they're supplied with a music disc.= -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.= -Now playing: @1—@2= -Uses music discs to play music= diff --git a/mods/ITEMS/mcl_jukebox/mod.conf b/mods/ITEMS/mcl_jukebox/mod.conf deleted file mode 100644 index 9046ff7d3..000000000 --- a/mods/ITEMS/mcl_jukebox/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_jukebox -description = Jukebox and music discs are used to play background music on a per-player basis. -depends = mcl_core, mcl_sounds, mcl_colors diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_1.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_1.ogg deleted file mode 100644 index c97a77975..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_2.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_2.ogg deleted file mode 100644 index e727dc813..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_3.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_3.ogg deleted file mode 100644 index f23b01ebc..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_4.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_4.ogg deleted file mode 100644 index e6965024e..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_5.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_5.ogg deleted file mode 100644 index dcad499d9..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_5.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_6.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_6.ogg deleted file mode 100644 index 9982d2962..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_6.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_7.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_7.ogg deleted file mode 100644 index 125eff574..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_7.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_8.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_8.ogg deleted file mode 100644 index d6ad04b22..000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_8.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_11.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_11.png deleted file mode 100644 index d0ded01cd..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_11.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_13.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_13.png deleted file mode 100644 index 93431042c..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_13.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_blocks.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_blocks.png deleted file mode 100644 index 6f0607fba..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_blocks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_cat.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_cat.png deleted file mode 100644 index 7fcbaca4f..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_cat.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_chirp.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_chirp.png deleted file mode 100644 index d54390bde..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_chirp.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_far.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_far.png deleted file mode 100644 index 5669cd546..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_far.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mall.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mall.png deleted file mode 100644 index 9be084985..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mall.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mellohi.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mellohi.png deleted file mode 100644 index 60e2b3464..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mellohi.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_stal.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_stal.png deleted file mode 100644 index 24a55f755..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_stal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_strad.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_strad.png deleted file mode 100644 index 7048b4db7..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_strad.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_wait.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_wait.png deleted file mode 100644 index 627ddb200..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_wait.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_ward.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_ward.png deleted file mode 100644 index 8660a4a17..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_ward.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_side.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_side.png deleted file mode 100644 index 621979bff..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_top.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_top.png deleted file mode 100644 index 66c3332e6..000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/init.lua b/mods/ITEMS/mcl_lanterns/init.lua deleted file mode 100644 index 65faa5e8c..000000000 --- a/mods/ITEMS/mcl_lanterns/init.lua +++ /dev/null @@ -1,284 +0,0 @@ -local S = minetest.get_translator("mcl_lanterns") -local modpath = minetest.get_modpath("mcl_lanterns") - -mcl_lanterns = {} - ---[[ -TODO: -- add lantern specific sounds -- remove the hack arround walmounted nodes -]] - -local allowed_non_solid_nodes_floor = { - "mcl_core:ice", - "mcl_nether:soul_sand", - "mcl_mobspawners:spawner", - "mcl_core:barrier", - "mcl_end:chorus_flower", - "mcl_end:chorus_flower_dead", - "mcl_end:end_rod", - "mcl_end:dragon_egg", - "mcl_portals:end_portal_frame_eye", - "mcl_lanterns:chain" -} - -local allowed_non_solid_groups_floor = {"anvil", "wall", "glass", "fence", "fence_gate", "pane"} - -local allowed_non_solid_nodes_ceiling = { - "mcl_core:ice", - "mcl_nether:soul_sand", - "mcl_mobspawners:spawner", - "mcl_core:barrier", - "mcl_end:chorus_flower", - "mcl_end:chorus_flower_dead", - "mcl_end:end_rod", - "mcl_core:grass_path", - "mcl_lanterns:chain" -} - -local allowed_non_solid_groups_ceiling = {"anvil", "wall", "glass", "fence", "fence_gate", "soil", "pane", "end_portal_frame"} - -local function check_placement(node, wdir) - local nn = node.name - local def = minetest.registered_nodes[nn] - - if not def then - return false - else - --wdir: - --0: ceiling - --1: floor - if wdir == 0 then - if def.groups.solid or def.groups.opaque then - return true - else - for _,i in ipairs(allowed_non_solid_nodes_ceiling) do - if nn == i then - return true - end - end - for _,j in ipairs(allowed_non_solid_groups_ceiling) do - if def.groups[j] then - return true - end - end - return false - end - else --assuming wdir == 1 - if def.groups.solid or def.groups.opaque then - return true - else - for _,i in ipairs(allowed_non_solid_nodes_floor) do - if nn == i then - return true - end - end - for _,j in ipairs(allowed_non_solid_groups_floor) do - if def.groups[j] then - return true - end - end - return false - end - end - end -end - -function mcl_lanterns.register_lantern(name, def) - local itemstring_floor = "mcl_lanterns:"..name.."_floor" - local itemstring_ceiling = "mcl_lanterns:"..name.."_ceiling" - - local sounds = mcl_sounds.node_sound_metal_defaults() - - minetest.register_node(itemstring_floor, { - description = def.description, - _doc_items_longdesc = def.longdesc, - drawtype = "mesh", - mesh = "mcl_lanterns_lantern_floor.obj", - inventory_image = def.texture_inv, - wield_image = def.texture_inv, - tiles = { - { - name = def.texture, - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - } - }, - use_texture_alpha = "clip", - paramtype = "light", - paramtype2 = "wallmounted", - place_param2 = 1, - node_placement_prediction = "", - sunlight_propagates = true, - light_source = def.light_level, - groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1}, - selection_box = { - type = "fixed", - fixed = { - {-0.1875, -0.5, -0.1875, 0.1875, -0.0625, 0.1875}, - {-0.125, -0.0625, -0.125, 0.125, 0.0625, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625}, - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.1875, -0.5, -0.1875, 0.1875, -0.0625, 0.1875}, - {-0.125, -0.0625, -0.125, 0.125, 0.0625, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625}, - }, - }, - sounds = sounds, - on_place = function(itemstack, placer, pointed_thing) - local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing) - if new_stack then - return new_stack - end - - local under = pointed_thing.under - local above = pointed_thing.above - local node = minetest.get_node(under) - - local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) - local fakestack = itemstack - - if check_placement(node, wdir) == false then - return itemstack - end - - if wdir == 0 then - fakestack:set_name(itemstring_ceiling) - elseif wdir == 1 then - fakestack:set_name(itemstring_floor) - end - - local success - itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name(itemstring_floor) - - if success then - minetest.sound_play(sounds.place, {pos = under, gain = 1}, true) - end - - return itemstack - end, - on_rotate = false, - _mcl_hardness = 3.5, - _mcl_blast_resistance = 3.5, - }) - - minetest.register_node(itemstring_ceiling, { - description = def.description, - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "mcl_lanterns_lantern_ceiling.obj", - tiles = { - { - name = def.texture, - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - } - }, - use_texture_alpha = "clip", - paramtype = "light", - paramtype2 = "wallmounted", - place_param2 = 0, - node_placement_prediction = "", - sunlight_propagates = true, - light_source = def.light_level, - groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1, not_in_creative_inventory = 1}, - drop = itemstring_floor, - selection_box = { - type = "fixed", - fixed = { - {-0.1875, 0, -0.1875, 0.1875, 0.4375, 0.1875}, - {-0.125, -0.125, -0.125, 0.125, 0, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, -0.125, 0.0625}, - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.1875, 0, -0.1875, 0.1875, 0.4375, 0.1875}, - {-0.125, -0.125, -0.125, 0.125, 0, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, -0.125, 0.0625}, - }, - }, - sounds = sounds, - on_rotate = false, - _mcl_hardness = 3.5, - _mcl_blast_resistance = 3.5, - }) -end - -minetest.register_node("mcl_lanterns:chain", { - description = S("Chain"), - _doc_items_longdesc = S("Chains are metallic decoration blocks."), - inventory_image = "mcl_lanterns_chain_inv.png", - tiles = {"mcl_lanterns_chain.png"}, - drawtype = "mesh", - paramtype = "light", - paramtype2 = "facedir", - use_texture_alpha = "clip", - mesh = "mcl_lanterns_chain.obj", - is_ground_content = false, - sunlight_propagates = true, - collision_box = { - type = "fixed", - fixed = { - {-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, - } - }, - groups = {pickaxey = 1, deco_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:get_pos() - if placer_pos then - local dir = { - x = p1.x - placer_pos.x, - y = p1.y - placer_pos.y, - z = p1.z - placer_pos.z - } - param2 = minetest.dir_to_facedir(dir) - end - - if p0.y - 1 == p1.y then - param2 = 20 - elseif p0.x - 1 == p1.x then - param2 = 16 - elseif p0.x + 1 == p1.x then - param2 = 12 - elseif p0.z - 1 == p1.z then - param2 = 8 - elseif p0.z + 1 == p1.z then - param2 = 4 - end - - return minetest.item_place(itemstack, placer, pointed_thing, param2) - end, - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_craft({ - output = "mcl_lanterns:chain", - recipe = { - {"mcl_core:iron_nugget"}, - {"mcl_core:iron_ingot"}, - {"mcl_core:iron_nugget"}, - }, -}) - -dofile(modpath.."/register.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/locale/mcl_lanterns.fr.tr b/mods/ITEMS/mcl_lanterns/locale/mcl_lanterns.fr.tr deleted file mode 100644 index b28822b75..000000000 --- a/mods/ITEMS/mcl_lanterns/locale/mcl_lanterns.fr.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_lanterns -Lantern=Lanterne -Soul Lantern=Lanterne des âmes -Lanterns are light sources which can be placed on the top or the bottom of most blocks.=Les lanternes sont des blocs lumineux qui peuvent être placés au dessus ou en dessous de la plupart des blocs. -Chain=Chaîne -Chains are metallic decoration blocks.=La chaîne est un bloc de décoration métalique. \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/locale/template.txt b/mods/ITEMS/mcl_lanterns/locale/template.txt deleted file mode 100644 index 545118b54..000000000 --- a/mods/ITEMS/mcl_lanterns/locale/template.txt +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_lanterns -Lantern= -Soul Lantern= -Lanterns are light sources which can be placed on the top or the bottom of most blocks.= -Chain= -Chains are metallic decoration blocks.= \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/mod.conf b/mods/ITEMS/mcl_lanterns/mod.conf deleted file mode 100644 index 746ffcb15..000000000 --- a/mods/ITEMS/mcl_lanterns/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mcl_lanterns -description = Add lanterns and chains to MineClone2 -depends = mcl_sounds -optional_depends = -author = AFCMS -title = MineClone2 Lanterns \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj deleted file mode 100644 index 94a7b8971..000000000 --- a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj +++ /dev/null @@ -1,24 +0,0 @@ -# Blender v3.0.1 OBJ File: 'chain.blend' -# www.blender.org -o Plane -v 0.066291 0.500000 0.066291 -v 0.066291 -0.500000 0.066291 -v -0.066291 0.500000 -0.066291 -v -0.066291 -0.500000 -0.066291 -v -0.066291 0.500000 0.066291 -v -0.066291 -0.500000 0.066291 -v 0.066291 0.500000 -0.066291 -v 0.066291 -0.500000 -0.066291 -vt -0.000000 1.000000 -vt 0.000000 -0.000000 -vt 0.187500 0.000000 -vt 0.187500 1.000000 -vt 0.187500 1.000000 -vt 0.187500 -0.000000 -vt 0.375000 -0.000000 -vt 0.375000 1.000000 -vn 0.7071 0.0000 -0.7071 -vn 0.7071 0.0000 0.7071 -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 5/5/2 6/6/2 8/7/2 7/8/2 diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj deleted file mode 100644 index 7079aa7cb..000000000 --- a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj +++ /dev/null @@ -1,104 +0,0 @@ -# Blender v3.0.1 OBJ File: 'lantern.blend' -# www.blender.org -o Lantern_Ceiling -v 0.187500 -0.000000 0.187500 -v 0.187500 0.437500 0.187500 -v 0.187500 0.000000 -0.187500 -v 0.187500 0.437500 -0.187500 -v -0.187500 -0.000000 0.187500 -v -0.187500 0.437500 0.187500 -v -0.187500 0.000000 -0.187500 -v -0.187500 0.437500 -0.187500 -v 0.125000 -0.125000 0.125000 -v 0.125000 -0.000000 0.125000 -v 0.125000 -0.125000 -0.125000 -v 0.125000 0.000000 -0.125000 -v -0.125000 -0.125000 0.125000 -v -0.125000 -0.000000 0.125000 -v -0.125000 -0.125000 -0.125000 -v -0.125000 0.000000 -0.125000 -v 0.066291 -0.500000 -0.066291 -v 0.066291 -0.125000 -0.066291 -v -0.066291 -0.500000 0.066291 -v -0.066291 -0.125000 0.066291 -v -0.066291 -0.500000 -0.066291 -v -0.066291 -0.125000 -0.066291 -v 0.066291 -0.500000 0.066291 -v 0.066291 -0.125000 0.066291 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.062500 0.125000 -vt 0.312500 0.125000 -vt 0.312500 0.375000 -vt 0.062500 0.375000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.687500 0.625000 -vt 0.687500 0.250000 -vt 0.875000 0.250000 -vt 0.875000 0.625000 -vt 0.687500 1.000000 -vt 0.687500 0.625000 -vt 0.875000 0.625000 -vt 0.875000 1.000000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 -0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.7071 -0.0000 0.7071 -vn 0.7071 0.0000 -0.7071 -s off -f 1/1/1 5/2/1 7/3/1 3/4/1 -f 4/5/2 3/6/2 7/7/2 8/8/2 -f 8/9/3 7/10/3 5/11/3 6/12/3 -f 6/13/4 2/14/4 4/5/4 8/8/4 -f 2/15/5 1/16/5 3/17/5 4/18/5 -f 6/19/6 5/20/6 1/21/6 2/22/6 -f 9/23/1 13/24/1 15/25/1 11/26/1 -f 12/27/2 11/28/2 15/29/2 16/30/2 -f 16/31/3 15/32/3 13/33/3 14/34/3 -f 14/35/4 10/36/4 12/37/4 16/38/4 -f 10/39/5 9/40/5 11/41/5 12/42/5 -f 14/43/6 13/44/6 9/45/6 10/46/6 -f 17/47/7 18/48/7 20/49/7 19/50/7 -f 21/51/8 22/52/8 24/53/8 23/54/8 diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj deleted file mode 100644 index c90ece680..000000000 --- a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj +++ /dev/null @@ -1,104 +0,0 @@ -# Blender v3.0.1 OBJ File: 'lantern.blend' -# www.blender.org -o Lantern_Floor -v 0.187500 -0.062500 -0.187500 -v 0.187500 -0.500000 -0.187500 -v 0.187500 -0.062500 0.187500 -v 0.187500 -0.500000 0.187500 -v -0.187500 -0.062500 -0.187500 -v -0.187500 -0.500000 -0.187500 -v -0.187500 -0.062500 0.187500 -v -0.187500 -0.500000 0.187500 -v 0.125000 0.062500 -0.125000 -v 0.125000 -0.062500 -0.125000 -v 0.125000 0.062500 0.125000 -v 0.125000 -0.062500 0.125000 -v -0.125000 0.062500 -0.125000 -v -0.125000 -0.062500 -0.125000 -v -0.125000 0.062500 0.125000 -v -0.125000 -0.062500 0.125000 -v 0.066291 0.187500 0.066291 -v 0.066291 0.062500 0.066291 -v -0.066291 0.187500 -0.066291 -v -0.066291 0.062500 -0.066291 -v -0.066291 0.187500 0.066291 -v -0.066291 0.062500 0.066291 -v 0.066291 0.187500 -0.066291 -v 0.066291 0.062500 -0.066291 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.062500 0.125000 -vt 0.312500 0.125000 -vt 0.312500 0.375000 -vt 0.062500 0.375000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.687500 0.937500 -vt 0.687500 0.812500 -vt 0.875000 0.812500 -vt 0.875000 0.937500 -vt 0.687500 0.937500 -vt 0.687500 0.812500 -vt 0.875000 0.812500 -vt 0.875000 0.937500 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.7071 0.0000 -0.7071 -vn 0.7071 0.0000 0.7071 -s off -f 1/1/1 5/2/1 7/3/1 3/4/1 -f 4/5/2 3/6/2 7/7/2 8/8/2 -f 8/9/3 7/10/3 5/11/3 6/12/3 -f 6/13/4 2/14/4 4/5/4 8/8/4 -f 2/15/5 1/16/5 3/17/5 4/18/5 -f 6/19/6 5/20/6 1/21/6 2/22/6 -f 9/23/1 13/24/1 15/25/1 11/26/1 -f 12/27/2 11/28/2 15/29/2 16/30/2 -f 16/31/3 15/32/3 13/33/3 14/34/3 -f 14/35/4 10/36/4 12/37/4 16/38/4 -f 10/39/5 9/40/5 11/41/5 12/42/5 -f 14/43/6 13/44/6 9/45/6 10/46/6 -f 17/47/7 18/48/7 20/49/7 19/50/7 -f 21/51/8 22/52/8 24/53/8 23/54/8 diff --git a/mods/ITEMS/mcl_lanterns/register.lua b/mods/ITEMS/mcl_lanterns/register.lua deleted file mode 100644 index efdd1ed98..000000000 --- a/mods/ITEMS/mcl_lanterns/register.lua +++ /dev/null @@ -1,26 +0,0 @@ -local S = minetest.get_translator("mcl_lanterns") - -mcl_lanterns.register_lantern("lantern", { - description = S("Lantern"), - longdesc = S("Lanterns are light sources which can be placed on the top or the bottom of most blocks."), - texture = "mcl_lanterns_lantern.png", - texture_inv = "mcl_lanterns_lantern_inv.png", - light_level = 14, -}) - -mcl_lanterns.register_lantern("soul_lantern", { - description = S("Soul Lantern"), - longdesc = S("Lanterns are light sources which can be placed on the top or the bottom of most blocks."), - texture = "mcl_lanterns_soul_lantern.png", - texture_inv = "mcl_lanterns_soul_lantern_inv.png", - light_level = 10, -}) - -minetest.register_craft({ - output = "mcl_lanterns:lantern_floor", - recipe = { - {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_torches:torch" , "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, - }, -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png deleted file mode 100644 index 01725114a..000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png deleted file mode 100644 index a8c89dab4..000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png deleted file mode 100644 index f9936e0fb..000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png deleted file mode 100644 index 8bdc8095f..000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png deleted file mode 100644 index 6e20058ea..000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern_inv.png deleted file mode 100644 index 55624c749..000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/README.md b/mods/ITEMS/mcl_loom/README.md deleted file mode 100644 index 08ee0dea3..000000000 --- a/mods/ITEMS/mcl_loom/README.md +++ /dev/null @@ -1,13 +0,0 @@ -mcl_loom --------- -Looms, by PrairieWind - -Adds Looms to MineClone 2/5. Used to add patterns to banners. - -License of source code ----------------------- -LGPLv2.1 - -License of media ----------------- -See the main MineClone 2 README.md file. \ No newline at end of file diff --git a/mods/ITEMS/mcl_loom/init.lua b/mods/ITEMS/mcl_loom/init.lua deleted file mode 100644 index 89960e133..000000000 --- a/mods/ITEMS/mcl_loom/init.lua +++ /dev/null @@ -1,27 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) --- Loom Code. Used to craft banner designs easier. Still needs a GUI. https://minecraft.fandom.com/wiki/Loom - -minetest.register_node("mcl_loom:loom", { - description = S("Loom"), - _tt_help = S("Used to create banner designs"), - _doc_items_longdesc = S("This is the shepherd villager's work station. It is used to create banner designs."), - tiles = { - "loom_top.png", "loom_bottom.png", - "loom_side.png", "loom_side.png", - "loom_front.png", "loom_front.png" - }, - paramtype2 = "facedir", - groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5 - }) - - -minetest.register_craft({ - output = "mcl_loom:loom", - recipe = { - { "", "", "" }, - { "mcl_mobitems:string", "mcl_mobitems:string", "" }, - { "group:wood", "group:wood", "" }, - } -}) diff --git a/mods/ITEMS/mcl_loom/mod.conf b/mods/ITEMS/mcl_loom/mod.conf deleted file mode 100644 index 9ebb10ff3..000000000 --- a/mods/ITEMS/mcl_loom/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_loom -author = PrairieWind -description = Adds the loom villager workstation to MineClone 2/5. Used to add patterns to banners. \ No newline at end of file diff --git a/mods/ITEMS/mcl_loom/textures/loom_bottom.png b/mods/ITEMS/mcl_loom/textures/loom_bottom.png deleted file mode 100644 index 835d36fca..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_bottom1.png b/mods/ITEMS/mcl_loom/textures/loom_bottom1.png deleted file mode 100644 index f5dfe8189..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_bottom1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_front.png b/mods/ITEMS/mcl_loom/textures/loom_front.png deleted file mode 100644 index ba1aebc80..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_front1.png b/mods/ITEMS/mcl_loom/textures/loom_front1.png deleted file mode 100644 index 411e51891..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_front1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_side.png b/mods/ITEMS/mcl_loom/textures/loom_side.png deleted file mode 100644 index bbeaeb6d8..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_side1.png b/mods/ITEMS/mcl_loom/textures/loom_side1.png deleted file mode 100644 index baf1aed5d..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_side1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_top.png b/mods/ITEMS/mcl_loom/textures/loom_top.png deleted file mode 100644 index af980f3c1..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_top1.png b/mods/ITEMS/mcl_loom/textures/loom_top1.png deleted file mode 100644 index febcb864d..000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_top1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_maps/colors.json b/mods/ITEMS/mcl_maps/colors.json deleted file mode 100644 index b6519a9c3..000000000 --- a/mods/ITEMS/mcl_maps/colors.json +++ /dev/null @@ -1 +0,0 @@ -{"player.png": [123, 74, 62], "player_back.png": [114, 68, 56], "mcl_skins_button.png": [121, 95, 85], "mcl_skins_character_1.png": [93, 90, 77], "mcl_hunger_bar_saturation.png": [255, 255, 0], "hbhunger_bar_health_poison.png": [148, 120, 24], "mcl_hunger_bar_exhaustion.png": [255, 255, 255], "mcl_hunger_icon_exhaustion.png": [213, 213, 213], "mcl_hunger_bgicon_exhaustion.png": [25, 25, 26], "mcl_hunger_icon_foodpoison.png": [109, 106, 40], "mcl_hunger_bgicon_saturation.png": [24, 24, 26], "hbhunger_bar.png": [200, 103, 0], "hbhunger_bgicon.png": [24, 24, 26], "hbhunger_icon_health_poison.png": [69, 98, 45], "mcl_hunger_bar_foodpoison.png": [116, 132, 88], "hbhunger_icon.png": [175, 132, 97], "mcl_hunger_icon_saturation.png": [157, 140, 64], "mcl_playerplus_end_sky.png": [14, 14, 14], "mobs_mc_llama_decor_purple.png": [108, 72, 115], "mobs_mc_spawn_icon_illusioner.png": [98, 111, 155], "mobs_mc_llama_gray.png": [195, 188, 175], "mobs_mc_spawn_icon_zombie.png": [64, 136, 112], "mobs_mc_llama_decor_blue.png": [117, 121, 156], "mobs_mc_spawn_icon_skeleton.png": [146, 146, 146], "mobs_mc_shulker_blue.png": [89, 100, 126], "mobs_mc_shulker_black.png": [78, 75, 76], "mobs_mc_wolf_collar.png": [186, 186, 186], "mobs_mc_spawn_icon_bat.png": [130, 63, 13], "mobs_mc_villager_weaponsmith.png": [75, 74, 62], "mobs_mc_parrot_green.png": [47, 208, 62], "mobs_mc_llama_decor_magenta.png": [186, 84, 131], "mobs_mc_rabbit_black.png": [73, 64, 61], "mobs_mc_vindicator.png": [56, 56, 57], "mobs_mc_polarbear.png": [233, 220, 208], "mobs_mc_magmacube.png": [83, 40, 27], "mobs_mc_chicken.png": [198, 182, 176], "mobs_mc_villager_toolsmith.png": [78, 76, 64], "mobs_mc_ghast_firing.png": [198, 198, 198], "mobs_mc_spawn_icon_zombie_pigman.png": [202, 160, 135], "mobs_mc_husk.png": [98, 95, 76], "mobs_mc_villager_librarian.png": [167, 161, 151], "mobs_mc_villager_priest.png": [119, 112, 98], "mobs_mc_villager_fletcher.png": [84, 86, 52], "mobs_mc_villager_smith.png": [76, 76, 63], "mobs_mc_spawn_icon_dragon.png": [98, 47, 89], "mobs_mc_spawn_icon_donkey.png": [152, 132, 100], "mobs_mc_squid.png": [37, 52, 68], "mobs_mc_villager_farmer.png": [94, 87, 70], "mobs_mc_spawn_icon_horse_skeleton.png": [245, 204, 202], "mobs_mc_villager_sheperd.png": [97, 98, 66], "mobs_mc_horse_markings_blackdots.png": [24, 22, 22], "mobs_mc_zombie_farmer.png": [119, 99, 85], "mobs_mc_spawn_icon_vex.png": [145, 185, 185], "mobs_mc_villager_armorer.png": [86, 87, 55], "mobs_mc_parrot_blue.png": [43, 58, 148], "mobs_mc_spider_eyes.png": [174, 48, 48], "mobs_mc_zombie.png": [78, 110, 105], "mobs_mc_llama_decor_light_blue.png": [116, 200, 250], "mobs_mc_zombie_priest.png": [120, 104, 110], "mobs_mc_llama_decor_black.png": [12, 8, 24], "mobs_mc_horse_white.png": [190, 173, 154], "mobs_mc_spawn_icon_vindicator.png": [102, 103, 104], "mobs_mc_silverfish.png": [179, 164, 144], "mobs_mc_llama_decor_gray.png": [110, 110, 110], "mobs_mc_spawn_icon_guardian.png": [119, 156, 148], "mobs_mc_creeper.png": [98, 107, 71], "mobs_mc_shulker_purple.png": [135, 87, 99], "mobs_mc_spawn_icon_rabbit.png": [156, 126, 84], "mobs_mc_sheep.png": [182, 161, 149], "mobs_mc_parrot_grey.png": [33, 178, 173], "mobs_mc_wolf_icon_sit.png": [8, 88, 116], "mobs_mc_gold_horse_armor.png": [140, 106, 67], "mobs_mc_spawn_icon_witch.png": [98, 85, 68], "mobs_mc_shulker_green.png": [89, 122, 84], "mobs_mc_bat.png": [87, 63, 54], "mobs_mc_villager_cartographer.png": [164, 157, 145], "mobs_mc_horse_chestnut.png": [126, 78, 58], "mobs_mc_shulker_yellow.png": [175, 128, 69], "mobs_mc_spawn_icon_creeper.png": [115, 125, 53], "mobs_mc_slime.png": [63, 133, 78], "mobs_mc_evoker.png": [44, 48, 43], "mobs_mc_horse_skeleton.png": [163, 156, 141], "mobs_mc_spawn_icon_blaze.png": [142, 76, 49], "mobs_mc_shulker_light_blue.png": [114, 140, 158], "mobs_mc_shulker_gray.png": [106, 104, 109], "mobs_mc_horse_darkbrown.png": [69, 47, 34], "mobs_mc_stray_overlay.png": [63, 59, 65], "mobs_mc_arrow_particle.png": [218, 171, 136], "mobs_mc_spawn_icon_cat.png": [120, 66, 10], "mobs_mc_stray.png": [155, 157, 161], "mobs_mc_villager_nitwit.png": [91, 93, 60], "mobs_mc_trading_formspec_bg.png": [157, 157, 157], "mobs_mc_spawn_icon_villager.png": [134, 124, 81], "mobs_mc_pig.png": [228, 175, 165], "mobs_mc_spawn_icon_mooshroom.png": [160, 56, 55], "mobs_mc_wolf_angry.png": [187, 179, 176], "mobs_mc_cat_black.png": [206, 181, 154], "mobs_mc_vex_charging.png": [142, 153, 153], "mobs_mc_llama.png": [207, 189, 155], "mobs_mc_mushroom_brown.png": [122, 81, 58], "mobs_mc_spawn_icon_shulker.png": [170, 117, 130], "mobs_mc_wither_half_health.png": [7, 58, 91], "mobs_mc_spawn_icon_guardian_elder.png": [174, 140, 113], "mobs_mc_enderman_eyes.png": [184, 211, 242], "mobs_mc_horse_creamy.png": [146, 111, 75], "mobs_mc_spawn_icon_zombie_villager.png": [95, 110, 68], "mobs_mc_vex.png": [128, 162, 162], "mobs_mc_iron_golem.png": [47, 44, 44], "mobs_mc_cat_ocelot.png": [163, 111, 52], "mobs_mc_llama_decor_green.png": [51, 84, 27], "mobs_mc_cow.png": [94, 68, 55], "mobs_mc_llama_decor_brown.png": [85, 58, 46], "mobs_mc_villager_butcher.png": [95, 92, 79], "mobs_mc_parrot_yellow_blue.png": [98, 187, 205], "mobs_mc_zombie_pigman.png": [164, 129, 117], "mobs_mc_spawn_icon_wolf.png": [231, 218, 207], "mobs_mc_zombie_villager.png": [112, 108, 90], "mobs_mc_sheep_fur.png": [203, 186, 174], "mobs_mc_spawn_icon_horse_zombie.png": [129, 143, 66], "mobs_mc_blaze.png": [84, 63, 50], "mobs_mc_rabbit_salt.png": [122, 99, 87], "mobs_mc_rabbit_white_splotched.png": [146, 139, 135], "mobs_mc_horse_brown.png": [115, 84, 61], "mobs_mc_ghast.png": [199, 199, 199], "mobs_mc_horse_markings_white.png": [165, 149, 132], "mobs_mc_horse_markings_whitefield.png": [193, 178, 162], "mobs_mc_spawn_icon_endermite.png": [138, 67, 74], "mobs_mc_shulker_magenta.png": [143, 97, 130], "mobs_mc_snowman.png": [211, 217, 221], "mobs_mc_zombie_smith.png": [71, 59, 54], "mobs_mc_spawn_icon_squid.png": [55, 58, 103], "mobs_mc_dragon_fireball.png": [89, 66, 79], "mobs_mc_diamond_horse_armor.png": [67, 95, 112], "mobs_mc_rabbit_toast.png": [130, 123, 119], "mobs_mc_llama_white.png": [207, 199, 184], "mobs_mc_llama_creamy.png": [208, 190, 155], "mobs_mc_pig_saddle.png": [82, 63, 45], "mobs_mc_spawn_icon_cave_spider.png": [23, 43, 57], "mobs_mc_shulker_silver.png": [140, 138, 143], "mobs_mc_trading_formspec_disabled.png": [193, 26, 26], "mobs_mc_spider.png": [41, 38, 37], "mobs_mc_wither.png": [33, 33, 33], "mobs_mc_llama_decor_white.png": [231, 231, 231], "mobs_mc_witch.png": [80, 74, 67], "mobs_mc_wolf_icon_roam.png": [6, 124, 36], "mobs_mc_illusionist.png": [56, 68, 114], "mobs_mc_endermite.png": [55, 20, 65], "mobs_mc_spawn_icon_witherskeleton.png": [71, 71, 71], "mobs_mc_llama_decor_light_gray.png": [201, 201, 201], "mobs_mc_llama_decor_cyan.png": [20, 157, 160], "mobs_mc_skeleton.png": [124, 124, 124], "mobs_mc_spawn_icon_llama.png": [230, 221, 178], "mobs_mc_spawn_icon_chicken.png": [170, 160, 156], "mobs_mc_shulker_pink.png": [173, 127, 160], "mobs_mc_spawn_icon_spider.png": [53, 43, 43], "mobs_mc_shulker_red.png": [146, 77, 71], "mobs_mc_shulker_white.png": [184, 181, 186], "mobs_mc_spawn_icon_magmacube.png": [52, 33, 23], "mobs_mc_spawn_icon_ghast.png": [212, 212, 212], "mobs_mc_rabbit_brown.png": [112, 86, 73], "mobs_mc_spawn_icon_pig.png": [242, 200, 188], "mobs_mc_spawn_icon_horse.png": [44, 36, 25], "mobs_mc_cat_siamese.png": [161, 144, 133], "mobs_mc_mushroom_red.png": [176, 51, 49], "mobs_mc_shulker_brown.png": [94, 81, 70], "mobs_mc_villager_leatherworker.png": [96, 93, 58], "mobs_mc_guardian.png": [78, 116, 130], "mobs_mc_creeper_charge.png": [121, 219, 255], "mobs_mc_villager.png": [88, 91, 55], "mobs_mc_llama_decor_lime.png": [170, 214, 67], "mobs_mc_llama_brown.png": [136, 97, 52], "mobs_mc_enderman_cactus_background.png": [44, 71, 27], "mobs_mc_parrot_red_blue.png": [171, 70, 37], "mobs_mc_spawn_icon_husk.png": [174, 174, 128], "mobs_mc_rabbit_gold.png": [151, 130, 96], "mobs_mc_spawn_icon_evoker.png": [92, 103, 86], "mobs_mc_iron_horse_armor.png": [133, 119, 114], "mobs_mc_llama_decor_red.png": [215, 58, 50], "mobs_mc_enderman.png": [3, 10, 10], "mobs_mc_mooshroom_brown.png": [93, 50, 28], "mobs_mc_llama_decor_pink.png": [207, 140, 182], "mobs_mc_enderman_block.png": [46, 42, 38], "mobs_mc_mooshroom.png": [90, 42, 41], "mobs_mc_cat_red.png": [221, 163, 120], "mobs_mc_shulkerbullet.png": [216, 190, 153], "mobs_mc_horse_markings_whitedots.png": [230, 220, 207], "mobs_mc_mule.png": [108, 75, 51], "mobs_mc_spawn_icon_iron_golem.png": [122, 72, 41], "mobs_mc_zombie_butcher.png": [107, 98, 87], "mobs_mc_llama_decor_yellow.png": [218, 187, 8], "mobs_mc_wolf_tame.png": [179, 159, 154], "mobs_mc_horse_gray.png": [78, 68, 62], "mobs_mc_shulker_lime.png": [106, 132, 88], "mobs_mc_rabbit_caerbannog.png": [186, 179, 174], "mobs_mc_zombie_librarian.png": [106, 104, 104], "mobs_mc_spawn_icon_silverfish.png": [199, 168, 128], "mobs_mc_spawn_icon_stray.png": [118, 116, 118], "mobs_mc_spawn_icon_polarbear.png": [237, 235, 212], "mobs_mc_guardian_elder.png": [141, 141, 125], "mobs_mc_spawn_icon_slime.png": [76, 130, 33], "mobs_mc_cave_spider.png": [14, 28, 38], "mobs_mc_spawn_icon_cow.png": [162, 118, 72], "mobs_mc_wolf.png": [182, 165, 159], "mobs_mc_wither_skeleton.png": [50, 50, 50], "mobs_mc_endergolem.png": [135, 87, 99], "mobs_mc_spawn_icon_mule.png": [115, 82, 47], "mobs_mc_llama_decor_orange.png": [151, 80, 27], "mobs_chicken_egg.png": [199, 157, 106], "mobs_mc_rabbit_white.png": [161, 153, 149], "mobs_mc_horse_black.png": [49, 42, 39], "mobs_mc_dragon.png": [79, 54, 67], "mobs_mc_villager_fisherman.png": [98, 92, 58], "mobs_mc_spawn_icon_parrot.png": [202, 100, 54], "mobs_mc_spawn_icon_snowman.png": [216, 173, 147], "mobs_mc_donkey.png": [91, 78, 68], "mobs_mc_shulker_cyan.png": [89, 114, 128], "mobs_mc_spawn_icon_sheep.png": [209, 185, 175], "mobs_mc_TEMP_wither_projectile.png": [69, 69, 69], "mobs_mc_spawn_icon_enderman.png": [63, 82, 87], "mobs_mc_shulker_orange.png": [156, 90, 67], "mobs_mc_empty.png": [255, 255, 255], "mobs_mc_spawn_icon_wither.png": [102, 102, 102], "mcl_boats_spruce_boat.png": [72, 61, 51], "mcl_boats_jungle_boat.png": [102, 73, 58], "mcl_boats_texture_birch_boat.png": [131, 105, 83], "mcl_boats_texture_oak_boat.png": [103, 82, 65], "mcl_boats_birch_boat.png": [120, 95, 78], "mcl_boats_texture_jungle_boat.png": [109, 78, 60], "mcl_boats_oak_boat.png": [93, 76, 62], "mcl_boats_texture_acacia_boat.png": [136, 90, 64], "mcl_boats_obsidian_boat.png": [17, 15, 27], "mcl_boats_texture_obsidian_boat.png": [13, 10, 26], "mcl_boats_texture_dark_oak_boat.png": [89, 76, 64], "mcl_boats_texture_spruce_boat.png": [74, 61, 50], "mcl_boats_acacia_boat.png": [124, 82, 59], "mcl_boats_dark_oak_boat.png": [89, 76, 64], "mobs_nametag.png": [138, 114, 89], "mobs_blood.png": [27, 27, 29], "mcl_minecarts_rail_golden_curved_powered.png": [89, 71, 57], "mcl_minecarts_rail_golden_crossing.png": [83, 70, 55], "mcl_minecarts_rail_detector_curved_powered.png": [81, 68, 64], "mcl_minecarts_rail_golden_t_junction_powered.png": [82, 69, 59], "mcl_minecarts_rail_golden_t_junction.png": [80, 70, 59], "mcl_minecarts_rail_detector.png": [85, 74, 67], "mcl_minecarts_rail_detector_crossing.png": [77, 69, 65], "default_rail_t_junction.png": [79, 68, 61], "mcl_minecarts_rail_activator_crossing_powered.png": [72, 55, 51], "mcl_minecarts_minecart_hopper.png": [45, 45, 45], "mcl_minecarts_minecart_furnace.png": [66, 65, 64], "mcl_minecarts_minecart_command_block.png": [64, 62, 61], "mcl_minecarts_rail_golden.png": [92, 77, 60], "mcl_minecarts_rail_activator_t_junction_powered.png": [76, 61, 55], "default_rail_curved.png": [76, 67, 60], "mcl_minecarts_rail_activator_t_junction.png": [72, 62, 56], "mcl_minecarts_rail_golden_crossing_powered.png": [86, 70, 54], "mcl_minecarts_rail_detector_crossing_powered.png": [78, 68, 64], "mcl_minecarts_rail_detector_curved.png": [77, 70, 66], "default_rail_crossing.png": [79, 68, 59], "mcl_minecarts_rail_detector_t_junction.png": [74, 66, 61], "mcl_minecarts_minecart.png": [72, 60, 51], "mcl_minecarts_rail_golden_curved.png": [85, 73, 58], "mcl_minecarts_rail_activator.png": [78, 64, 56], "mcl_minecarts_rail_activator_powered.png": [86, 62, 54], "mcl_minecarts_rail_detector_t_junction_powered.png": [76, 66, 61], "mcl_minecarts_minecart_normal.png": [47, 45, 43], "mcl_minecarts_minecart_tnt.png": [75, 52, 52], "mcl_minecarts_rail_detector_powered.png": [87, 74, 67], "mcl_minecarts_rail_golden_powered.png": [94, 77, 60], "mcl_minecarts_rail_activator_crossing.png": [65, 56, 52], "default_rail.png": [83, 70, 61], "mcl_minecarts_rail_activator_curved_powered.png": [75, 55, 52], "mcl_minecarts_rail_activator_curved.png": [66, 56, 53], "mcl_minecarts_minecart_chest.png": [51, 48, 46], "mcl_paintings_paintings.png": [104, 99, 89], "mcl_paintings_painting.png": [139, 133, 119], "mcl_particles_totem4.png": [255, 255, 255], "mcl_particles_lava.png": [250, 150, 64], "mcl_particles_bonemeal.png": [185, 185, 185], "mcl_particles_instant_effect.png": [160, 160, 160], "mcl_particles_note.png": [41, 40, 39], "mcl_particles_bubble.png": [147, 174, 195], "mcl_particles_sponge1.png": [241, 238, 226], "mcl_particles_smoke_anim.png": [172, 172, 172], "mcl_particles_crit.png": [165, 165, 165], "mcl_particles_totem2.png": [255, 255, 255], "mcl_particles_mob_death.png": [198, 198, 198], "mcl_particles_droplet_bottle.png": [203, 203, 203], "mcl_particles_sponge4.png": [241, 238, 226], "mcl_particles_effect.png": [184, 184, 184], "mcl_particles_teleport.png": [86, 22, 128], "mcl_particles_sponge5.png": [241, 238, 226], "mcl_particles_flame.png": [244, 149, 63], "mcl_particles_sponge3.png": [241, 238, 226], "mcl_particles_sponge2.png": [241, 238, 226], "mcl_particles_totem1.png": [255, 255, 255], "mcl_particles_smoke.png": [174, 174, 174], "mcl_particles_totem3.png": [255, 255, 255], "lightning_lightning_2.png": [255, 255, 255], "lightning_lightning_3.png": [217, 217, 217], "lightning_lightning_1.png": [223, 223, 223], "weather_pack_rain_raindrop_2.png": [33, 79, 142], "weather_pack_rain_raindrop_3.png": [59, 88, 128], "mcl_particles_nether_dust3.png": [143, 105, 102], "weather_pack_rain_raindrop_1.png": [97, 137, 179], "mcl_particles_nether_dust1.png": [143, 105, 102], "weather_pack_snow_snowflake1.png": [255, 255, 255], "mcl_particles_nether_dust2.png": [143, 105, 102], "weather_pack_snow_snowflake2.png": [255, 255, 255], "mcl_moon_moon_phases.png": [80, 106, 141], "hbarmor_bgicon.png": [27, 27, 29], "hbarmor_bar.png": [175, 172, 165], "hbarmor_icon.png": [135, 131, 126], "mcl_base_textures_background9.png": [179, 179, 179], "object_crosshair.png": [255, 255, 255], "bubble.png": [69, 138, 194], "crosshair.png": [255, 255, 255], "heart.png": [137, 47, 40], "mcl_base_textures_background.png": [179, 179, 179], "crack_anylength.png": [93, 93, 93], "mcl_base_textures_button9_pressed.png": [162, 162, 162], "mcl_base_textures_button9.png": [162, 162, 162], "smoke_puff.png": [255, 255, 255], "credits_bg.png": [94, 72, 60], "mineclone2_logo.png": [75, 74, 69], "mineclone2_icon.png": [58, 74, 44], "awards_template.png": [134, 134, 134], "awards_bg_mining.png": [73, 68, 51], "awards_progress_gray.png": [157, 157, 157], "awards_ui_icon.png": [190, 34, 34], "awards_unknown.png": [134, 134, 134], "awards_progress_green.png": [0, 155, 74], "awards_bg_default.png": [38, 38, 38], "hudbars_bar_breath.png": [159, 161, 255], "hudbars_icon_health.png": [137, 47, 40], "hudbars_bar_health.png": [168, 55, 47], "hudbars_bgicon_breath.png": [0, 0, 0], "hudbars_bgicon_health.png": [27, 27, 29], "hudbars_icon_breath.png": [69, 138, 194], "hudbars_bar_background.png": [71, 71, 71], "mcl_achievements_button.png": [158, 152, 67], "mcl_inventory_hotbar.png": [81, 81, 85], "crafting_inventory_creative_survival.png": [195, 195, 195], "crafting_creative_bg_dark.png": [157, 157, 157], "mcl_inventory_empty_armor_slot_shield.png": [25, 32, 34], "crafting_formspec_bg.png": [9, 9, 9], "mcl_inventory_empty_armor_slot_helmet.png": [25, 32, 34], "mcl_inventory_hotbar_selected.png": [113, 85, 40], "crafting_creative_inactive_down.png": [151, 151, 151], "crafting_creative_active_down.png": [196, 196, 196], "crafting_creative_prev.png": [254, 254, 254], "crafting_creative_marker.png": [0, 0, 0], "mcl_inventory_button9_pressed.png": [162, 162, 162], "crafting_creative_active.png": [202, 202, 202], "mcl_inventory_button9.png": [162, 162, 162], "mcl_inventory_empty_armor_slot_chestplate.png": [0, 0, 0], "mcl_inventory_empty_armor_slot_boots.png": [0, 0, 0], "crafting_creative_bg.png": [207, 207, 207], "crafting_creative_inactive.png": [157, 157, 157], "crafting_creative_next.png": [254, 254, 254], "mcl_inventory_empty_armor_slot_leggings.png": [25, 32, 34], "crafting_inventory_creative.png": [206, 206, 206], "crafting_creative_trash.png": [144, 113, 113], "mcl_formspec_itemslot.png": [157, 157, 157], "mcl_wear_bar.png": [255, 255, 255], "mcl_offhand_slot.png": [92, 92, 94], "mcl_experience_bottle.png": [136, 174, 169], "mcl_experience_bar.png": [74, 102, 70], "mcl_experience_orb.png": [93, 174, 0], "mcl_experience_bar_background.png": [49, 46, 45], "mcl_bossbars_empty.png": [255, 255, 255], "mcl_bossbars.png": [76, 68, 75], "blast_furnace_front_on.png": [98, 88, 83], "blast_furnace_top.png": [126, 115, 110], "blast_furnace_side.png": [99, 92, 89], "blast_furnace_front.png": [93, 88, 85], "mcl_itemframes_item_frame.png": [123, 90, 63], "mcl_itemframes_itemframe_background.png": [136, 104, 75], "mcl_banners_stripe_middle.png": [255, 255, 255], "mcl_banners_skull.png": [255, 255, 255], "mcl_banners_bricks.png": [255, 255, 255], "mcl_banners_square_bottom_left.png": [255, 255, 255], "mcl_banners_gradient.png": [254, 254, 254], "mcl_banners_cross.png": [255, 255, 255], "mcl_banners_gradient_up.png": [254, 254, 254], "mcl_banners_item_overlay.png": [240, 240, 240], "mcl_banners_stripe_downright.png": [255, 255, 255], "mcl_banners_stripe_downleft.png": [255, 255, 255], "mcl_banners_fallback_wood.png": [102, 88, 74], "mcl_banners_base_inverted.png": [255, 255, 255], "mcl_banners_triangles_top.png": [255, 255, 255], "mcl_banners_banner_base.png": [215, 206, 193], "mcl_banners_curly_border.png": [254, 254, 254], "mcl_banners_thing.png": [253, 253, 253], "mcl_banners_small_stripes.png": [255, 255, 255], "mcl_banners_triangle_bottom.png": [254, 254, 254], "mcl_banners_stripe_right.png": [255, 255, 255], "mcl_banners_straight_cross.png": [255, 255, 255], "mcl_banners_triangle_top.png": [255, 255, 255], "mcl_banners_border.png": [255, 255, 255], "mcl_banners_diagonal_left.png": [255, 255, 255], "mcl_banners_diagonal_right.png": [255, 255, 255], "mcl_banners_base.png": [255, 255, 255], "mcl_banners_half_vertical.png": [255, 255, 255], "mcl_banners_circle.png": [254, 254, 254], "mcl_banners_triangles_bottom.png": [255, 255, 255], "mcl_banners_item_base.png": [103, 89, 75], "mcl_banners_stripe_left.png": [255, 255, 255], "mcl_banners_rhombus.png": [255, 255, 255], "mcl_banners_creeper.png": [255, 255, 255], "mcl_banners_flower.png": [254, 254, 254], "mcl_banners_stripe_bottom.png": [255, 255, 255], "mcl_banners_half_horizontal.png": [255, 255, 255], "mcl_banners_half_horizontal_bottom.png": [255, 255, 255], "mcl_banners_square_top_left.png": [255, 255, 255], "mcl_banners_square_top_right.png": [255, 255, 255], "mcl_banners_stripe_center.png": [255, 255, 255], "mcl_banners_diagonal_up_left.png": [255, 255, 255], "mcl_banners_stripe_top.png": [255, 255, 255], "mcl_banners_diagonal_up_right.png": [255, 255, 255], "mcl_banners_square_bottom_right.png": [255, 255, 255], "mcl_banners_half_vertical_right.png": [255, 255, 255], "mcl_doors_trapdoor_dark_oak.png": [81, 68, 56], "mcl_doors_trapdoor_acacia_side.png": [154, 102, 71], "doors_trapdoor_steel_side.png": [149, 140, 140], "mcl_doors_door_jungle_side_upper.png": [109, 75, 57], "mcl_doors_door_dark_oak_side_lower.png": [103, 90, 75], "mcl_doors_door_iron_lower.png": [157, 152, 151], "mcl_doors_door_acacia_upper.png": [152, 100, 69], "mcl_doors_door_jungle_side_lower.png": [107, 72, 55], "mcl_doors_door_wood_lower.png": [89, 70, 55], "doors_trapdoor_steel.png": [149, 140, 140], "mcl_doors_door_iron_side_upper.png": [155, 149, 148], "mcl_doors_door_acacia_side_upper.png": [133, 80, 53], "mcl_doors_door_jungle.png": [116, 83, 62], "mcl_doors_door_iron_side_lower.png": [157, 152, 151], "mcl_doors_door_birch_upper.png": [179, 158, 139], "mcl_doors_trapdoor_spruce_side.png": [73, 59, 47], "mcl_doors_door_iron_upper.png": [155, 149, 148], "mcl_doors_door_spruce_side_lower.png": [92, 79, 68], "mcl_doors_trapdoor_spruce.png": [71, 57, 46], "mcl_doors_trapdoor_birch_side.png": [147, 116, 89], "doors_trapdoor_side.png": [113, 86, 67], "mcl_doors_door_acacia_lower.png": [153, 101, 70], "mcl_doors_door_dark_oak_side_upper.png": [102, 89, 75], "mcl_doors_door_acacia_side_lower.png": [131, 78, 51], "mcl_doors_door_wood_upper.png": [92, 72, 57], "mcl_doors_trapdoor_birch.png": [173, 151, 132], "mcl_doors_door_dark_oak_upper.png": [83, 71, 59], "mcl_doors_door_acacia.png": [148, 98, 67], "mcl_doors_door_spruce.png": [67, 56, 47], "mcl_doors_door_spruce_lower.png": [71, 58, 48], "mcl_doors_door_birch_side_upper.png": [153, 121, 94], "mcl_doors_trapdoor_dark_oak_side.png": [85, 72, 60], "mcl_doors_door_wood_side_upper.png": [84, 65, 51], "mcl_doors_door_birch.png": [172, 147, 124], "mcl_doors_door_birch_lower.png": [165, 140, 119], "mcl_doors_trapdoor_jungle.png": [103, 70, 52], "doors_item_steel.png": [148, 144, 143], "doors_trapdoor.png": [98, 75, 59], "mcl_doors_door_jungle_lower.png": [116, 82, 61], "doors_item_wood.png": [88, 67, 53], "mcl_doors_door_jungle_upper.png": [113, 79, 59], "mcl_doors_door_spruce_upper.png": [71, 58, 47], "mcl_doors_door_dark_oak_lower.png": [84, 71, 59], "mcl_doors_door_dark_oak.png": [82, 69, 57], "mcl_doors_door_wood_side_lower.png": [132, 102, 81], "mcl_doors_trapdoor_jungle_side.png": [121, 87, 62], "mcl_doors_door_spruce_side_upper.png": [92, 79, 68], "mcl_doors_door_birch_side_lower.png": [152, 119, 92], "mcl_doors_trapdoor_acacia.png": [148, 96, 66], "mcl_fishing_clownfish_raw.png": [205, 127, 81], "mcl_fishing_fish_raw.png": [70, 112, 154], "mcl_fishing_salmon_raw.png": [112, 105, 102], "mcl_fishing_fish_cooked.png": [93, 84, 94], "mcl_fishing_bobber.png": [171, 117, 119], "mcl_fishing_pufferfish_raw.png": [219, 165, 77], "mcl_fishing_fishing_rod.png": [134, 116, 103], "mcl_fishing_salmon_cooked.png": [97, 91, 89], "mcl_barrels_barrel_top_open.png": [58, 43, 35], "mcl_barrels_barrel_bottom.png": [78, 61, 47], "mcl_barrels_barrel_side.png": [70, 57, 47], "mcl_barrels_barrel_top.png": [79, 61, 48], "mcl_stairs_diorite_smooth_slab.png": [156, 153, 151], "mcl_stairs_iron_block_slab.png": [166, 159, 159], "mcl_stairs_andesite_smooth_slab.png": [106, 113, 108], "mcl_stairs_gold_block_slab.png": [191, 146, 56], "mcl_stairs_granite_smooth_slab.png": [150, 121, 109], "mcl_stairs_lapis_block_slab.png": [49, 89, 158], "lantern_top.png": [65, 66, 70], "mcl_blackstone_basalt_smooth.png": [87, 86, 86], "mcl_blackstone_basalt_top_polished.png": [77, 76, 76], "mcl_backstone_quartz_bricks.png": [189, 184, 181], "soul_fire_basic_flame_animated.png": [75, 161, 161], "mcl_blackstone_basalt_side_polished.png": [64, 63, 63], "soul_torch_on_floor_animated.png": [94, 96, 84], "mcl_blackstone_chiseled_polished.png": [40, 38, 43], "lantern_bottom.png": [78, 138, 137], "lantern.png": [69, 121, 121], "soul_mcl_burning_hud_flame_animated.png": [75, 161, 161], "mcl_blackstone_basalt_side.png": [60, 59, 59], "mcl_blackstone_basalt_top.png": [68, 68, 68], "mcl_blackstone_polished.png": [43, 41, 46], "mcl_blackstone_polished_bricks.png": [41, 38, 43], "mcl_blackstone_soul_soil.png": [91, 71, 52], "soul_mcl_burning_entity_flame_animated.png": [75, 161, 161], "mcl_blackstone_chain.png": [33, 33, 33], "soul_fire_basic_flame.png": [76, 164, 164], "mcl_blackstone.png": [30, 29, 31], "soul_torch_on_floor.png": [92, 94, 83], "mcl_nether_nether_wart_block_blue.png": [72, 95, 175], "mcl_blackstone_gilded_side.png": [184, 140, 50], "mcl_fireworks_rocket.png": [155, 84, 71], "mcl_bows_arrow_inv.png": [144, 129, 121], "mcl_bows_crossbow_0.png": [95, 77, 61], "mcl_bows_rocket.png": [188, 86, 83], "mcl_bows_firework_white.png": [222, 222, 222], "mcl_bows_firework_green.png": [156, 238, 141], "mcl_bows_firework_blue.png": [141, 174, 238], "mcl_bows_firework_red.png": [238, 141, 141], "mcl_bows_arrow_overlay.png": [184, 181, 175], "mcl_bows_bow_1.png": [112, 95, 79], "mcl_bows_bow_0.png": [111, 94, 79], "mcl_bows_crossbow_2.png": [100, 82, 66], "mcl_bows_bow_2.png": [115, 98, 82], "mcl_bows_rocket_particle.png": [215, 215, 215], "mcl_bows_crossbow_3.png": [103, 87, 73], "mcl_bows_bow.png": [114, 95, 78], "mcl_bows_arrow.png": [133, 116, 108], "mcl_bows_crossbow.png": [94, 76, 60], "mcl_bows_crossbow_1.png": [97, 79, 62], "mcl_bows_arrow_front.png": [178, 175, 168], "mcl_bows_arrow_back.png": [218, 216, 213], "mcl_bows_firework_yellow.png": [238, 218, 141], "mcl_ocean_dead_bubble_coral.png": [118, 108, 126], "mcl_ocean_tube_coral.png": [57, 88, 209], "mcl_ocean_sea_pickle_2_anim.png": [95, 122, 51], "mcl_ocean_dead_horn_coral_fan.png": [150, 143, 123], "mcl_ocean_dead_bubble_coral_block.png": [114, 105, 122], "mcl_ocean_sea_pickle_3_off.png": [68, 99, 36], "mcl_ocean_dead_horn_coral_block.png": [152, 146, 125], "mcl_ocean_bubble_coral_block.png": [143, 76, 195], "mcl_ocean_horn_coral.png": [233, 195, 69], "mcl_ocean_dead_tube_coral_block.png": [99, 104, 127], "mcl_ocean_sea_pickle_item.png": [93, 120, 50], "mcl_ocean_kelp_item.png": [42, 105, 55], "mcl_ocean_dried_kelp_side.png": [71, 80, 67], "mcl_ocean_dead_tube_coral.png": [99, 105, 128], "mcl_ocean_fire_coral_block.png": [198, 74, 62], "mcl_ocean_bubble_coral.png": [149, 77, 200], "mcl_ocean_prismarine_bricks.png": [104, 112, 115], "mcl_ocean_brain_coral.png": [206, 87, 153], "mcl_ocean_dried_kelp_top.png": [56, 71, 57], "mcl_ocean_brain_coral_block.png": [200, 85, 148], "mcl_ocean_prismarine_dark.png": [77, 89, 97], "mcl_ocean_dead_fire_coral_block.png": [127, 102, 100], "mcl_ocean_prismarine_shard.png": [122, 144, 135], "mcl_ocean_sea_pickle_2_off.png": [70, 100, 36], "mcl_ocean_sea_pickle_4_anim.png": [85, 113, 46], "mcl_ocean_dead_brain_coral.png": [134, 117, 127], "mcl_ocean_tube_coral_fan.png": [59, 85, 203], "mcl_ocean_sea_pickle_4_off.png": [68, 98, 36], "mcl_ocean_sea_pickle_1_anim.png": [106, 132, 57], "mcl_ocean_fire_coral.png": [208, 78, 65], "mcl_ocean_sea_pickle_3_anim.png": [89, 116, 48], "mcl_ocean_dead_fire_coral_fan.png": [140, 113, 110], "mcl_ocean_prismarine_crystals.png": [182, 193, 190], "mcl_ocean_prismarine_anim.png": [104, 123, 122], "mcl_ocean_horn_coral_fan.png": [230, 189, 68], "mcl_ocean_dead_tube_coral_fan.png": [98, 103, 125], "mcl_ocean_sea_pickle_1_off.png": [72, 103, 37], "mcl_ocean_dead_horn_coral.png": [154, 148, 127], "mcl_ocean_dead_fire_coral.png": [133, 107, 105], "mcl_ocean_bubble_coral_fan.png": [141, 75, 192], "mcl_ocean_horn_coral_block.png": [232, 193, 69], "mcl_ocean_brain_coral_fan.png": [206, 87, 154], "mcl_ocean_sea_lantern.png": [133, 144, 145], "mcl_ocean_seagrass.png": [48, 125, 60], "mcl_ocean_dead_brain_coral_fan.png": [134, 117, 127], "mcl_ocean_dried_kelp.png": [36, 57, 40], "mcl_ocean_dead_bubble_coral_fan.png": [113, 104, 120], "mcl_ocean_dried_kelp_bottom.png": [56, 71, 57], "mcl_ocean_kelp_plant.png": [42, 105, 55], "mcl_ocean_tube_coral_block.png": [58, 88, 207], "mcl_ocean_dead_brain_coral_block.png": [130, 114, 123], "mcl_ocean_fire_coral_fan.png": [205, 77, 64], "mcl_portals_endframe_bottom.png": [109, 99, 87], "mcl_portals_particle3.png": [146, 0, 201], "mcl_portals_particle2.png": [146, 0, 201], "mcl_portals_endframe_top.png": [95, 85, 74], "mcl_portals_particle4.png": [146, 0, 201], "mcl_portals_endframe_eye.png": [135, 36, 18], "mcl_portals_end_portal.png": [14, 14, 14], "mcl_particles_nether_portal.png": [206, 0, 206], "mcl_portals_particle5.png": [189, 11, 213], "mcl_portals_endframe_side.png": [110, 99, 86], "mcl_portals_particle1.png": [173, 28, 229], "mcl_portals_portal.png": [74, 24, 172], "mcl_particles_nether_portal_t.png": [159, 0, 223], "cake_side.png": [201, 170, 155], "cake_inner.png": [185, 129, 99], "cake_bottom.png": [160, 86, 51], "cake_top.png": [241, 228, 226], "cake.png": [216, 187, 176], "mcl_cocoas_cocoa_top_stage_2.png": [138, 68, 52], "mcl_cocoas_cocoa_stage_1.png": [172, 121, 69], "mcl_cocoas_cocoa_stage_2.png": [132, 65, 50], "mcl_cocoas_cocoa_stage_0.png": [65, 77, 39], "mcl_fences_fence_red_nether_brick.png": [68, 17, 0], "mcl_fences_fence_gate_red_nether_brick.png": [64, 15, 0], "mcl_fences_fence_gate_nether_brick.png": [50, 25, 26], "mcl_mobitems_spider_eye.png": [154, 69, 60], "mcl_mobitems_leather.png": [105, 75, 45], "mcl_mobitems_feather.png": [206, 185, 183], "mcl_mobitems_string.png": [202, 186, 166], "mcl_mobitems_rabbit_foot.png": [124, 107, 97], "mcl_mobitems_saddle.png": [93, 72, 50], "mcl_mobitems_bone.png": [182, 162, 139], "mcl_mobitems_horse_armor_iron.png": [134, 123, 118], "mcl_mobitems_shulker_shell.png": [118, 68, 83], "mcl_mobitems_blaze_rod.png": [143, 64, 28], "mcl_mobitems_beef_raw.png": [147, 63, 54], "mcl_mobitems_rabbit_stew.png": [127, 98, 79], "mcl_mobitems_rotten_flesh.png": [110, 68, 45], "mcl_mobitems_horse_armor_diamond.png": [78, 110, 129], "mcl_mobitems_chicken_raw.png": [217, 178, 149], "mcl_mobitems_ghast_tear.png": [148, 160, 166], "mcl_mobitems_porkchop_raw.png": [160, 72, 69], "mcl_mobitems_horse_armor_gold.png": [143, 110, 59], "mcl_mobitems_rabbit_hide.png": [108, 85, 73], "mcl_mobitems_slimeball.png": [75, 134, 82], "mcl_mobitems_magma_cream.png": [102, 54, 34], "default_gunpowder.png": [48, 41, 36], "mcl_mobitems_chicken_cooked.png": [187, 145, 106], "mcl_mobitems_beef_cooked.png": [112, 70, 49], "mcl_mobitems_rabbit_cooked.png": [188, 155, 131], "mcl_mobitems_blaze_powder.png": [86, 50, 34], "mcl_mobitems_rabbit_raw.png": [217, 177, 157], "mcl_mobitems_carrot_on_a_stick.png": [133, 113, 93], "mcl_mobitems_mutton_cooked.png": [144, 104, 77], "mcl_mobitems_nether_star.png": [234, 189, 123], "mcl_mobitems_porkchop_cooked.png": [116, 72, 48], "mcl_mobitems_mutton_raw.png": [175, 77, 77], "mcl_mobitems_bucket_milk.png": [180, 175, 166], "mcl_farming_wheat_stage_0.png": [53, 101, 46], "farming_carrot.png": [147, 106, 63], "farming_potato_poison.png": [121, 93, 55], "mcl_farming_pumpkin_hud.png": [0, 0, 0], "farming_cookie.png": [144, 100, 61], "mcl_farming_melon_seeds.png": [100, 72, 61], "mcl_farming_potatoes_stage_1.png": [69, 113, 61], "mcl_farming_melon_stem_disconnected.png": [96, 96, 96], "farming_carrot_4.png": [93, 105, 58], "mcl_farming_wheat_stage_5.png": [101, 142, 66], "farming_tool_woodhoe.png": [120, 101, 86], "mcl_farming_potatoes_stage_0.png": [73, 119, 65], "farming_carrot_1.png": [75, 112, 61], "farming_carrot_3.png": [70, 107, 57], "farming_melon.png": [153, 84, 62], "mcl_farming_pumpkin_seeds.png": [132, 120, 87], "farming_wheat_harvested.png": [178, 134, 80], "farming_pumpkin_side.png": [186, 100, 42], "mcl_farming_pumpkin_face.png": [181, 94, 40], "mcl_farming_wheat_stage_4.png": [86, 129, 65], "mcl_farming_farmland_wet.png": [69, 55, 46], "mcl_farming_beetroot_0.png": [56, 122, 75], "mcl_farming_pumpkin_stem_connected.png": [94, 94, 94], "mcl_farming_farmland_dry.png": [101, 80, 68], "farming_tool_diamondhoe.png": [101, 104, 104], "mcl_farming_beetroot_1.png": [54, 118, 72], "mcl_farming_beetroot_2.png": [54, 119, 73], "mcl_farming_wheat_stage_7.png": [165, 116, 75], "mcl_farming_beetroot.png": [113, 69, 66], "mcl_farming_wheat_stage_6.png": [145, 145, 69], "mcl_farming_wheat_stage_3.png": [64, 113, 52], "mcl_farming_pumpkin_stem_disconnected.png": [96, 96, 96], "mcl_farming_hayblock_top.png": [154, 116, 81], "farming_pumpkin_face_light.png": [189, 100, 45], "farming_potato_baked.png": [118, 84, 45], "farming_melon_side.png": [68, 95, 37], "farming_potato.png": [107, 74, 39], "mcl_farming_wheat_stage_1.png": [49, 97, 45], "farming_pumpkin_top.png": [172, 87, 40], "farming_bread.png": [177, 133, 94], "mcl_farming_beetroot_soup.png": [120, 70, 63], "farming_melon_top.png": [58, 80, 33], "mcl_farming_potatoes_stage_3.png": [82, 106, 57], "farming_tool_stonehoe.png": [133, 122, 111], "mcl_farming_beetroot_seeds.png": [107, 104, 88], "farming_tool_goldhoe.png": [162, 131, 70], "farming_carrot_gold.png": [140, 122, 48], "farming_carrot_2.png": [72, 108, 58], "farming_pumpkin_face.png": [161, 79, 37], "mcl_farming_melon_stem_connected.png": [94, 94, 94], "mcl_farming_pumpkin_pie.png": [172, 98, 45], "mcl_farming_wheat_stage_2.png": [49, 97, 45], "farming_tool_steelhoe.png": [123, 112, 102], "mcl_farming_potatoes_stage_2.png": [72, 116, 62], "mcl_farming_beetroot_3.png": [73, 105, 71], "mcl_farming_wheat_seeds.png": [102, 87, 55], "mcl_farming_hayblock_side.png": [135, 99, 71], "mcl_raw_ores_raw_iron_block.png": [194, 172, 156], "mcl_raw_ores_raw_gold_block.png": [208, 166, 77], "mcl_raw_ores_raw_gold.png": [195, 152, 64], "mcl_raw_ores_raw_iron.png": [182, 160, 145], "mcl_end_purpur_block.png": [161, 111, 175], "mcl_end_chorus_flower_dead.png": [82, 79, 118], "mcl_end_end_stone.png": [221, 214, 130], "mcl_end_endframe_side.png": [110, 99, 86], "mcl_end_purpur_pillar.png": [157, 108, 171], "mcl_end_chorus_fruit.png": [87, 89, 121], "mcl_end_endframe_eye.png": [135, 36, 18], "mcl_end_chorus_fruit_popped.png": [70, 67, 110], "mcl_end_end_rod_top.png": [123, 75, 97], "mcl_end_endframe_top.png": [95, 85, 74], "mcl_end_purpur_pillar_top.png": [159, 110, 173], "mcl_end_chorus_flower.png": [92, 92, 125], "mcl_end_crystal_item.png": [170, 140, 162], "mcl_end_end_bricks.png": [194, 187, 123], "mcl_end_dragon_egg.png": [55, 34, 32], "mcl_end_ender_eye.png": [130, 33, 17], "mcl_end_chorus_plant.png": [78, 73, 115], "mcl_end_end_rod_bottom.png": [122, 74, 96], "mcl_end_crystal_beam.png": [195, 81, 183], "mcl_end_end_rod_side.png": [242, 202, 177], "mcl_cracked_deepslate_tiles.png": [47, 46, 46], "mcl_cracked_deepslate_bricks.png": [60, 58, 58], "mcl_deepslate_iron_ore.png": [88, 82, 79], "mcl_deepslate_bricks.png": [62, 61, 60], "mcl_deepslate_tuff.png": [98, 81, 69], "mcl_deepslate_gold_ore.png": [87, 78, 64], "mcl_chiseled_deepslate.png": [44, 43, 43], "mcl_deepslate_diamond_ore.png": [74, 92, 100], "mcl_deepslate_lapis_ore.png": [63, 74, 90], "mcl_cobbled_deepslate.png": [78, 76, 75], "mcl_deepslate_tiles.png": [49, 47, 47], "mcl_deepslate.png": [70, 68, 67], "mcl_deepslate_redstone_ore.png": [89, 61, 60], "mcl_deepslate_emerald_ore.png": [63, 81, 71], "mcl_deepslate_top.png": [75, 73, 72], "mcl_polished_deepslate.png": [68, 66, 66], "mcl_deepslate_copper_ore.png": [82, 70, 67], "mcl_deepslate_coal_ore.png": [63, 60, 59], "mcl_clock_clock_18.png": [152, 123, 81], "mcl_clock_clock_03.png": [160, 129, 88], "mcl_clock_clock_49.png": [155, 122, 79], "mcl_clock_clock_34.png": [140, 115, 76], "mcl_clock_clock_01.png": [161, 129, 88], "mcl_clock_clock_32.png": [141, 116, 77], "mcl_clock_clock_27.png": [142, 117, 78], "mcl_clock_clock_42.png": [147, 119, 79], "mcl_clock_clock_25.png": [145, 119, 78], "mcl_clock_clock_56.png": [160, 126, 81], "mcl_clock_clock_22.png": [146, 119, 79], "mcl_clock_clock_31.png": [141, 116, 76], "mcl_clock_clock_57.png": [161, 127, 83], "mcl_clock_clock_58.png": [157, 127, 86], "mcl_clock_clock_39.png": [146, 119, 79], "mcl_clock_clock_59.png": [160, 128, 86], "mcl_clock_clock_16.png": [157, 125, 80], "mcl_clock_clock_38.png": [141, 117, 78], "mcl_clock_clock_53.png": [158, 124, 80], "mcl_clock_clock_43.png": [149, 121, 80], "mcl_clock_clock_09.png": [161, 127, 81], "mcl_clock_clock_33.png": [141, 116, 76], "mcl_clock_clock_07.png": [162, 128, 83], "mcl_clock_clock_23.png": [148, 121, 80], "mcl_clock_clock_51.png": [156, 123, 80], "mcl_clock_clock_10.png": [158, 127, 85], "mcl_clock_clock_55.png": [160, 126, 81], "mcl_clock_clock_46.png": [152, 122, 81], "mcl_clock_clock_26.png": [142, 117, 79], "mcl_clock_clock_06.png": [157, 127, 86], "mcl_clock_clock_00.png": [162, 129, 87], "mcl_clock_clock_28.png": [141, 116, 77], "mcl_clock_clock_44.png": [150, 120, 79], "mcl_clock_clock_08.png": [160, 127, 81], "mcl_clock_clock_19.png": [152, 122, 80], "mcl_clock_clock_12.png": [159, 127, 83], "mcl_clock_clock_45.png": [153, 123, 81], "mcl_clock_clock_24.png": [147, 120, 80], "mcl_clock_clock_15.png": [157, 125, 81], "mcl_clock_clock_20.png": [150, 121, 79], "mcl_clock_clock_61.png": [160, 129, 88], "mcl_clock_clock_02.png": [159, 129, 89], "mcl_clock_clock_40.png": [147, 120, 79], "mcl_clock_clock_37.png": [143, 118, 79], "mcl_clock_clock_48.png": [155, 123, 79], "mcl_clock_clock_13.png": [159, 126, 82], "mcl_clock_clock_17.png": [156, 125, 81], "mcl_clock_clock_52.png": [156, 123, 80], "mcl_clock_clock_54.png": [156, 125, 84], "mcl_clock_clock_04.png": [159, 128, 87], "mcl_clock_clock_47.png": [154, 122, 80], "mcl_clock_clock_62.png": [159, 129, 89], "mcl_clock_clock_41.png": [147, 120, 79], "mcl_clock_clock_35.png": [140, 115, 76], "mcl_clock_clock_60.png": [159, 128, 87], "mcl_clock_clock_50.png": [155, 123, 80], "mcl_clock_clock_29.png": [142, 117, 78], "mcl_clock_clock_21.png": [150, 122, 81], "mcl_clock_clock_30.png": [140, 115, 76], "mcl_clock_clock_14.png": [157, 125, 81], "mcl_clock_clock_05.png": [160, 128, 85], "mcl_clock_clock_36.png": [141, 116, 77], "mcl_clock_clock_63.png": [161, 129, 88], "mcl_clock_clock_11.png": [160, 127, 82], "lodestone_side3.png": [83, 73, 69], "mcl_compass_compass_02.png": [116, 107, 104], "lodestone_bottom.png": [81, 72, 69], "mcl_compass_compass_06.png": [117, 107, 104], "mcl_compass_compass_04.png": [117, 106, 104], "mcl_compass_compass_19.png": [116, 106, 103], "mcl_compass_compass_16.png": [114, 106, 104], "lodestone_side1.png": [83, 73, 69], "mcl_compass_compass_26.png": [117, 107, 104], "lodestone_side4.png": [85, 75, 70], "mcl_compass_compass_25.png": [117, 107, 105], "mcl_compass_compass_24.png": [117, 107, 105], "mcl_compass_compass_17.png": [115, 106, 104], "lodestone_top.png": [78, 69, 66], "mcl_compass_compass_23.png": [117, 107, 105], "mcl_compass_compass_01.png": [115, 107, 104], "mcl_compass_compass_28.png": [116, 107, 104], "mcl_compass_compass_05.png": [117, 106, 104], "mcl_compass_compass_09.png": [117, 107, 104], "mcl_compass_compass_10.png": [117, 107, 105], "lodestone_side2.png": [82, 72, 68], "mcl_compass_compass_14.png": [116, 107, 105], "mcl_compass_compass_18.png": [117, 107, 104], "mcl_compass_compass_13.png": [117, 106, 104], "mcl_compass_compass_08.png": [117, 107, 104], "mcl_compass_compass_21.png": [117, 107, 104], "mcl_compass_compass_27.png": [117, 106, 104], "mcl_compass_compass_30.png": [116, 107, 104], "mcl_compass_compass_15.png": [115, 106, 104], "mcl_compass_compass_29.png": [115, 106, 104], "mcl_compass_compass_03.png": [116, 106, 104], "mcl_compass_compass_07.png": [117, 107, 104], "mcl_compass_compass_22.png": [117, 107, 105], "mcl_compass_compass_12.png": [117, 106, 104], "mcl_compass_compass_00.png": [114, 107, 104], "mcl_compass_compass_20.png": [116, 106, 104], "mcl_compass_compass_31.png": [115, 107, 104], "mcl_compass_compass_11.png": [117, 106, 104], "mcl_jukebox_record_wait.png": [39, 42, 55], "mcl_jukebox_record_cat.png": [40, 45, 51], "mcl_jukebox_record_mellohi.png": [46, 44, 59], "mcl_jukebox_record_13.png": [51, 47, 51], "mcl_jukebox_record_ward.png": [39, 43, 51], "mcl_jukebox_record_chirp.png": [49, 40, 50], "mcl_jukebox_record_blocks.png": [47, 37, 49], "mcl_jukebox_record_11.png": [41, 40, 52], "mcl_jukebox_record_mall.png": [42, 41, 62], "mcl_jukebox_top.png": [72, 56, 44], "mcl_jukebox_record_strad.png": [45, 45, 57], "mcl_jukebox_record_far.png": [47, 48, 52], "mcl_jukebox_side.png": [94, 74, 57], "mcl_jukebox_record_stal.png": [39, 38, 49], "loom_front.png": [127, 101, 84], "loom_side1.png": [130, 102, 80], "loom_bottom1.png": [163, 130, 100], "loom_top1.png": [186, 160, 137], "loom_bottom.png": [111, 84, 69], "loom_front1.png": [148, 123, 102], "loom_top.png": [134, 111, 97], "loom_side.png": [121, 91, 72], "mcl_fences_fence_acacia.png": [152, 99, 68], "mcl_fences_fence_gate_mask.png": [255, 126, 126], "mcl_fences_fence_gate_spruce.png": [85, 69, 56], "mcl_fences_fence_big_oak.png": [83, 71, 59], "mcl_fences_fence_spruce.png": [84, 67, 54], "mcl_fences_fence_gate_birch.png": [153, 121, 94], "mcl_fences_fence_gate_acacia.png": [155, 102, 70], "mcl_fences_fence_gate_big_oak.png": [85, 73, 61], "mcl_fences_fence_oak.png": [108, 83, 64], "mcl_fences_fence_gate_oak.png": [111, 85, 66], "mcl_fences_fence_jungle.png": [115, 80, 60], "mcl_fences_fence_nether_brick.png": [49, 24, 24], "mcl_fences_fence_birch.png": [151, 119, 93], "mcl_fences_fence_gate_jungle.png": [117, 82, 61], "mcl_fences_fence_mask.png": [255, 126, 126], "mcl_composter_bottom.png": [141, 111, 87], "mcl_composter_side.png": [117, 92, 74], "mcl_composter_ready.png": [109, 107, 74], "mcl_composter_compost.png": [75, 76, 41], "mcl_composter_top.png": [157, 129, 103], "mcl_core_leaves_birch.png": [28, 57, 28], "default_mossycobble.png": [100, 105, 94], "default_flint.png": [70, 67, 64], "mcl_core_bowl.png": [78, 61, 47], "mcl_core_glass_lime_detail.png": [126, 203, 24], "mcl_core_bone_block_top.png": [220, 201, 170], "default_acacia_tree.png": [105, 91, 74], "default_steel_block.png": [159, 151, 151], "mcl_core_stonebrick_mossy.png": [81, 101, 76], "default_diamond_block.png": [92, 160, 200], "mcl_core_glass_brown_detail.png": [101, 75, 50], "mcl_core_glass_blue_detail.png": [50, 75, 178], "default_leaves.png": [39, 79, 38], "mcl_core_web.png": [202, 189, 167], "mcl_core_reeds.png": [57, 100, 52], "default_gold_ingot.png": [179, 133, 47], "mcl_core_grass_path_side.png": [113, 89, 62], "mcl_core_red_sand.png": [224, 137, 111], "mcl_core_glass_black_detail.png": [24, 24, 24], "default_apple.png": [137, 57, 44], "mcl_core_log_birch_top.png": [155, 130, 112], "default_coal_block.png": [51, 49, 51], "mcl_core_andesite_smooth.png": [107, 113, 109], "mcl_core_apple_golden.png": [176, 138, 51], "mcl_core_diorite.png": [153, 149, 146], "mcl_core_granite_smooth.png": [150, 121, 110], "mcl_core_bedrock.png": [91, 77, 66], "mcl_core_planks_spruce.png": [81, 65, 54], "mcl_core_sapling_big_oak.png": [69, 92, 80], "mcl_core_emerald_ore.png": [115, 122, 103], "mcl_core_sandstone_smooth.png": [202, 155, 121], "mcl_core_glass_light_blue.png": [101, 153, 215], "default_brick.png": [139, 87, 75], "mcl_core_redstone_ore.png": [128, 91, 88], "mcl_core_cactus_top.png": [77, 99, 49], "mcl_core_frosted_ice_1.png": [147, 198, 227], "mcl_core_glass_white_detail.png": [254, 254, 254], "mcl_core_sapling_spruce.png": [55, 72, 53], "mcl_core_stripped_acacia_top.png": [157, 98, 62], "mcl_core_log_spruce_top.png": [97, 71, 57], "mcl_core_glass_lime.png": [126, 203, 24], "mcl_core_lapis_ore.png": [111, 113, 125], "default_junglesapling.png": [64, 88, 39], "default_clay_brick.png": [127, 57, 48], "default_gold_block.png": [192, 147, 59], "mcl_core_glass_green_detail.png": [101, 126, 50], "mcl_core_glass_pink_detail.png": [241, 126, 164], "default_water_source_animated.png": [37, 98, 129], "mcl_core_glass_orange_detail.png": [215, 126, 50], "mcl_core_glass_yellow.png": [228, 228, 50], "default_acacia_sapling.png": [109, 92, 59], "mcl_core_stripped_acacia_side.png": [151, 90, 57], "mcl_core_sandstone_carved.png": [199, 152, 119], "mcl_core_glass_blue.png": [50, 75, 178], "mcl_core_glass_gray_detail.png": [75, 75, 75], "mcl_core_red_sandstone_normal.png": [198, 120, 104], "mcl_core_glass_red_detail.png": [153, 50, 50], "mcl_core_glass_gray.png": [75, 75, 75], "mcl_core_leaves_spruce.png": [38, 74, 47], "mcl_core_glass_pink.png": [241, 126, 164], "mcl_core_lapis_block.png": [50, 92, 162], "mcl_core_glass_purple.png": [126, 62, 178], "mcl_core_iron_nugget.png": [156, 151, 145], "default_dry_grass.png": [100, 94, 54], "mcl_core_stripped_dark_oak_top.png": [90, 78, 68], "mcl_core_glass_silver.png": [153, 153, 153], "mcl_core_andesite.png": [104, 110, 107], "mcl_core_frosted_ice_3.png": [165, 209, 233], "mcl_core_sugar.png": [215, 215, 215], "default_acacia_wood.png": [152, 100, 69], "mcl_core_glass_black.png": [24, 24, 24], "mcl_core_iron_ore.png": [134, 123, 117], "mcl_core_stripped_birch_side.png": [179, 143, 115], "default_clay.png": [124, 124, 124], "mcl_core_stripped_jungle_side.png": [175, 117, 86], "mcl_core_glass_red.png": [153, 50, 50], "mcl_core_grass_block_top.png": [141, 130, 113], "mcl_core_planks_birch.png": [145, 113, 89], "mcl_core_glass_white.png": [254, 254, 254], "mcl_core_stripped_oak_side.png": [162, 122, 84], "mcl_core_glass_cyan.png": [75, 126, 153], "mcl_core_cactus_side.png": [88, 110, 56], "default_ladder.png": [83, 64, 50], "mcl_core_glass_silver_detail.png": [153, 153, 153], "default_dry_grass_side.png": [91, 93, 52], "mcl_core_glass_light_blue_detail.png": [101, 153, 215], "mcl_core_stripped_jungle_top.png": [170, 113, 83], "mcl_core_ice_packed.png": [165, 211, 231], "mcl_core_frosted_ice_2.png": [153, 202, 229], "default_dry_shrub.png": [118, 88, 69], "mcl_core_red_sandstone_carved.png": [202, 122, 104], "default_tree.png": [95, 75, 57], "default_clay_lump.png": [111, 111, 111], "mcl_core_red_sandstone_top.png": [212, 126, 108], "mcl_core_dirt_podzol_side.png": [101, 79, 63], "mcl_core_red_sandstone_smooth.png": [207, 124, 106], "default_jungletree_top.png": [125, 87, 67], "mcl_core_coal_ore.png": [109, 101, 99], "default_jungleleaves.png": [29, 84, 30], "mcl_core_vine.png": [21, 61, 21], "default_snow.png": [221, 229, 234], "mcl_core_leaves_big_oak.png": [21, 69, 28], "mcl_core_void.png": [59, 59, 59], "default_tree_top.png": [135, 104, 74], "mcl_core_gold_ore.png": [132, 119, 103], "default_steel_ingot.png": [142, 137, 131], "default_sapling.png": [62, 90, 45], "mcl_core_log_birch.png": [194, 184, 174], "mcl_core_glass_cyan_detail.png": [75, 126, 153], "mcl_core_glass_yellow_detail.png": [228, 228, 50], "mcl_core_stripped_spruce_top.png": [107, 79, 64], "default_water_flowing_animated.png": [38, 101, 129], "mcl_core_emerald_block.png": [44, 138, 39], "default_jungletree.png": [86, 58, 45], "mcl_core_grass_side_snowed.png": [162, 154, 150], "default_stone_brick.png": [97, 89, 86], "default_lava_flowing_animated.png": [177, 42, 16], "mcl_core_stripped_spruce_side.png": [109, 81, 67], "default_coal_lump.png": [41, 39, 41], "mcl_core_glass_purple_detail.png": [126, 62, 178], "default_sand.png": [220, 170, 127], "mcl_core_glass_green.png": [101, 126, 50], "mcl_core_glass_orange.png": [215, 126, 50], "default_acacia_tree_top.png": [130, 84, 55], "mcl_core_stripped_oak_top.png": [153, 115, 80], "mcl_core_grass_block_side_overlay.png": [153, 142, 123], "default_lava_source_animated.png": [180, 45, 17], "mcl_core_cactus_bottom.png": [169, 168, 116], "mcl_core_sandstone_bottom.png": [202, 155, 121], "default_paper.png": [213, 184, 154], "mcl_core_diamond_ore.png": [122, 124, 126], "default_ice.png": [145, 197, 226], "mcl_core_dirt_podzol_top.png": [85, 63, 42], "mcl_core_slime.png": [93, 157, 86], "mcl_core_gold_nugget.png": [213, 169, 74], "default_stick.png": [88, 70, 57], "mcl_core_emerald.png": [59, 160, 52], "default_diamond.png": [109, 179, 217], "mcl_core_mycelium_top.png": [108, 89, 117], "mcl_core_bone_block_side.png": [226, 207, 174], "mcl_core_diorite_smooth.png": [157, 154, 152], "default_obsidian.png": [13, 9, 25], "mcl_core_planks_big_oak.png": [87, 74, 62], "mcl_core_log_spruce.png": [66, 51, 44], "mcl_core_glass_magenta.png": [178, 75, 215], "mcl_core_granite.png": [153, 121, 110], "mcl_core_log_big_oak_top.png": [83, 70, 62], "default_cobble.png": [113, 106, 104], "mcl_core_red_sandstone_bottom.png": [207, 124, 106], "mcl_core_barrier.png": [138, 46, 38], "mcl_core_glass_magenta_detail.png": [178, 75, 215], "mcl_core_stripped_dark_oak_side.png": [91, 78, 70], "mcl_core_mycelium_side.png": [107, 84, 87], "mcl_core_stonebrick_cracked.png": [94, 87, 83], "mcl_core_charcoal.png": [40, 35, 32], "mcl_core_glass_brown.png": [101, 75, 50], "default_glass_detail.png": [244, 244, 250], "mcl_core_papyrus.png": [105, 105, 105], "mcl_core_stonebrick_carved.png": [97, 90, 85], "default_wood.png": [113, 87, 67], "default_dirt.png": [108, 83, 70], "mcl_core_log_big_oak.png": [74, 62, 55], "default_junglewood.png": [113, 78, 59], "mcl_core_frosted_ice_0.png": [140, 193, 224], "mcl_core_sandstone_normal.png": [195, 149, 117], "default_gravel.png": [112, 105, 99], "mcl_core_sandstone_top.png": [201, 154, 121], "default_glass.png": [213, 223, 235], "default_stone.png": [130, 122, 118], "mcl_core_sapling_birch.png": [78, 110, 74], "mcl_core_coarse_dirt.png": [117, 92, 76], "default_acacia_leaves.png": [110, 89, 45], "mcl_core_stripped_birch_top.png": [170, 135, 108], "mcl_core_grass_path_top.png": [125, 101, 50], "mcl_lanterns_chain.png": [40, 40, 40], "mcl_lanterns_soul_lantern.png": [50, 67, 68], "mcl_lanterns_lantern.png": [72, 59, 48], "mcl_lanterns_chain_inv.png": [40, 40, 40], "mcl_lanterns_lantern_inv.png": [98, 75, 53], "mcl_lanterns_soul_lantern_inv.png": [59, 90, 91], "mcl_throwing_ender_pearl.png": [78, 19, 26], "mcl_throwing_egg.png": [199, 157, 106], "mcl_throwing_snowball.png": [191, 200, 203], "mcl_flowers_tulip_red.png": [82, 57, 43], "mcl_flowers_double_plant_rose_top.png": [81, 69, 45], "mcl_flowers_double_plant_sunflower_front.png": [203, 157, 61], "mcl_flowers_tulip_white.png": [106, 122, 95], "mcl_flowers_double_plant_grass_top.png": [156, 145, 125], "mcl_flowers_azure_bluet.png": [97, 114, 98], "mcl_flowers_oxeye_daisy.png": [130, 139, 110], "mcl_flowers_poppy.png": [96, 59, 43], "mcl_flowers_double_plant_paeonia_top.png": [90, 84, 81], "mcl_flowers_double_plant_rose_bottom.png": [78, 63, 41], "mcl_flowers_tallgrass.png": [151, 141, 122], "mcl_flowers_double_plant_sunflower_bottom.png": [45, 76, 40], "mcl_flowers_fern.png": [143, 132, 115], "flowers_tulip.png": [106, 84, 51], "mcl_flowers_double_plant_syringa_bottom.png": [63, 77, 60], "mcl_flowers_double_plant_fern_bottom.png": [140, 130, 113], "flowers_dandelion_yellow.png": [111, 111, 55], "mcl_flowers_double_plant_paeonia_bottom.png": [82, 83, 73], "mcl_flowers_double_plant_sunflower_back.png": [174, 146, 57], "mcl_flowers_allium.png": [120, 116, 144], "flowers_waterlily.png": [28, 81, 29], "mcl_flowers_tulip_pink.png": [100, 99, 90], "mcl_flowers_double_plant_sunflower_top.png": [48, 81, 44], "mcl_flowers_double_plant_syringa_top.png": [95, 90, 98], "mcl_flowers_double_plant_grass_bottom.png": [151, 140, 121], "mcl_flowers_double_plant_grass_inv.png": [48, 95, 43], "mcl_flowers_fern_inv.png": [43, 86, 39], "mcl_flowers_double_plant_fern_top.png": [148, 138, 119], "mcl_flowers_tallgrass_inv.png": [47, 92, 41], "mcl_flowers_double_plant_fern_inv.png": [45, 89, 40], "mcl_flowers_blue_orchid.png": [46, 91, 86], "mcl_armor_leggings_iron.png": [132, 128, 123], "mcl_armor_inv_leggings_iron.png": [130, 125, 120], "mcl_armor_inv_helmet_gold.png": [178, 134, 51], "mcl_armor_leggings_chain.png": [64, 66, 69], "mcl_armor_inv_boots_iron.png": [134, 129, 124], "mcl_armor_inv_chestplate_chain.png": [128, 105, 96], "mcl_armor_inv_chestplate_gold.png": [171, 128, 55], "mcl_armor_inv_helmet_diamond.png": [109, 130, 142], "mcl_armor_boots_leather.png": [122, 111, 93], "mcl_armor_inv_chestplate_diamond.png": [106, 146, 168], "mcl_armor_helmet_diamond.png": [70, 85, 93], "mcl_armor_inv_chestplate_leather.png": [143, 136, 118], "mcl_armor_boots_diamond.png": [87, 132, 157], "mcl_armor_leggings_diamond.png": [78, 102, 115], "mcl_armor_chestplate_gold.png": [157, 117, 55], "mcl_armor_inv_helmet_chain.png": [140, 137, 132], "mcl_armor_inv_leggings_chain.png": [81, 81, 82], "mcl_armor_inv_helmet_iron.png": [143, 138, 133], "mcl_armor_helmet_leather.png": [130, 121, 102], "mcl_armor_chestplate_diamond.png": [110, 157, 183], "mcl_armor_leggings_leather.png": [119, 108, 91], "mcl_armor_inv_boots_gold.png": [152, 113, 44], "mcl_armor_chestplate_leather.png": [139, 132, 112], "mcl_armor_boots_iron.png": [118, 113, 109], "mcl_armor_elytra.png": [75, 121, 147], "mcl_armor_helmet_chain.png": [127, 124, 121], "mcl_armor_helmet_iron.png": [153, 149, 144], "mcl_armor_inv_boots_leather.png": [130, 121, 103], "mcl_armor_leggings_gold.png": [182, 158, 126], "mcl_armor_inv_leggings_gold.png": [175, 145, 97], "mcl_armor_chestplate_iron.png": [130, 120, 112], "mcl_armor_inv_elytra.png": [76, 122, 148], "mcl_armor_boots_chain.png": [88, 88, 88], "mcl_armor_helmet_gold.png": [178, 136, 56], "mcl_armor_inv_boots_diamond.png": [75, 121, 147], "mcl_armor_inv_chestplate_iron.png": [135, 125, 115], "mcl_armor_inv_leggings_diamond.png": [75, 93, 103], "mcl_armor_inv_leggings_leather.png": [126, 116, 98], "mcl_armor_inv_helmet_leather.png": [140, 132, 114], "mcl_armor_inv_boots_chain.png": [69, 69, 72], "mcl_armor_chestplate_chain.png": [119, 98, 93], "mcl_armor_boots_gold.png": [160, 118, 42], "cartography_table_side2.png": [91, 76, 62], "cartography_table_side1.png": [81, 65, 51], "cartography_table_side3.png": [85, 62, 47], "cartography_table_top.png": [111, 95, 80], "mcl_walls_cobble_wall_top.png": [120, 114, 112], "mcl_walls_cobble_mossy_wall_top.png": [53, 97, 61], "mcl_walls_cobble_wall_side.png": [109, 103, 101], "mcl_walls_cobble_mossy_wall_side.png": [86, 98, 83], "mcl_hoppers_item.png": [44, 44, 44], "mcl_hoppers_hopper_top.png": [43, 43, 43], "mcl_hoppers_hopper_outside.png": [44, 43, 43], "mcl_hoppers_hopper_inside.png": [50, 50, 50], "mcl_stairs_stone_slab_top.png": [127, 118, 114], "mcl_stairs_stone_slab_side.png": [127, 117, 113], "mcl_stairs_turntexture.png": [255, 0, 255], "mcl_shield_pattern_stripe_downleft.png": [255, 255, 255], "mcl_shield_pattern_diagonal_right.png": [255, 255, 255], "mcl_shield_pattern_stripe_center.png": [255, 255, 255], "mcl_shield_pattern_half_vertical_right.png": [255, 255, 255], "mcl_shield_pattern_straight_cross.png": [255, 255, 255], "mcl_shield_pattern_stripe_bottom.png": [255, 255, 255], "mcl_shield_pattern_stripe_right.png": [255, 255, 255], "mcl_shield_pattern_circle.png": [239, 239, 239], "mcl_shield_pattern_diagonal_left.png": [255, 255, 255], "mcl_shield_pattern_stripe_top.png": [255, 255, 255], "mcl_shield_pattern_diagonal_up_left.png": [255, 255, 255], "mcl_shield_pattern_creeper.png": [255, 255, 255], "mcl_shield_pattern_triangle_top.png": [255, 255, 255], "mcl_shield_item_overlay.png": [255, 255, 255], "mcl_shield_pattern_square_top_left.png": [255, 255, 255], "mcl_shield_pattern_flower.png": [255, 255, 255], "mcl_shield_pattern_half_horizontal.png": [255, 255, 255], "mcl_shield_pattern_stripe_middle.png": [255, 255, 255], "mcl_shield_pattern_half_vertical.png": [255, 255, 255], "mcl_shield_pattern_triangles_top.png": [255, 255, 255], "mcl_shield_pattern_stripe_downright.png": [255, 255, 255], "mcl_shield_pattern_skull.png": [247, 247, 247], "mcl_shield.png": [76, 61, 49], "mcl_shield_pattern_base.png": [255, 255, 255], "mcl_shield_pattern_gradient_up.png": [254, 254, 254], "mcl_shield_pattern_small_stripes.png": [255, 255, 255], "mcl_shield_pattern_square_bottom_left.png": [255, 255, 255], "mcl_shield_pattern_diagonal_up_right.png": [255, 255, 255], "mcl_shield_pattern_triangles_bottom.png": [255, 255, 255], "mcl_shield_pattern_curly_border.png": [255, 255, 255], "mcl_shield_pattern_cross.png": [255, 255, 255], "mcl_shield_pattern_stripe_left.png": [255, 255, 255], "mcl_shield_pattern_gradient.png": [254, 254, 254], "mcl_shield_pattern_square_bottom_right.png": [255, 255, 255], "mcl_shield_pattern_triangle_bottom.png": [255, 255, 255], "mcl_shield_pattern_half_horizontal_bottom.png": [255, 255, 255], "mcl_shield_pattern_bricks.png": [255, 255, 255], "mcl_shield_pattern_thing.png": [255, 255, 255], "mcl_shield_pattern_square_top_right.png": [255, 255, 255], "mcl_shield_pattern_rhombus.png": [255, 255, 255], "mcl_shield_pattern_border.png": [255, 255, 255], "mcl_shield_hud.png": [74, 58, 44], "mcl_shield_base_nopattern.png": [72, 59, 49], "mcl_brewing_bottle_bg.png": [204, 204, 204], "mcl_brewing_bubble_sprite.png": [167, 167, 167], "mcl_brewing_side.png": [175, 156, 160], "mcl_brewing_inventory.png": [168, 168, 168], "mcl_brewing_bubbles_active.png": [186, 186, 186], "mcl_brewing_fuel_bg.png": [200, 200, 200], "mcl_brewing_potion_bg.png": [204, 204, 204], "mcl_brewing_bubbles.png": [154, 154, 154], "mcl_brewing_top.png": [139, 130, 126], "mcl_brewing_base.png": [130, 122, 118], "mcl_brewing_burner.png": [183, 183, 183], "mcl_brewing_burner_active.png": [212, 161, 132], "fletching_table_front.png": [141, 115, 95], "fletching_table_side.png": [150, 117, 95], "fletching_table_top.png": [158, 129, 104], "xpanes_top_glass_cyan.png": [76, 127, 153], "xpanes_top_glass_brown.png": [102, 76, 51], "xpanes_top_glass_magenta.png": [178, 75, 215], "xpanes_top_glass_light_blue.png": [102, 153, 216], "xpanes_top_glass_blue.png": [51, 76, 178], "xpanes_top_glass_gray.png": [76, 76, 76], "xpanes_top_glass_silver.png": [153, 153, 153], "xpanes_top_iron.png": [155, 146, 146], "xpanes_top_glass_black.png": [25, 25, 25], "xpanes_top_glass_white.png": [255, 255, 255], "xpanes_top_glass_lime.png": [127, 204, 25], "xpanes_top_glass_orange.png": [216, 127, 51], "xpanes_top_glass_purple.png": [127, 63, 178], "xpanes_top_glass_red.png": [153, 51, 51], "xpanes_top_glass_natural.png": [222, 222, 239], "xpanes_top_glass_green.png": [102, 127, 51], "xpanes_top_glass_pink.png": [241, 126, 164], "xpanes_pane_iron.png": [160, 152, 152], "xpanes_top_glass_yellow.png": [229, 229, 51], "hardened_clay_stained_pink.png": [164, 79, 76], "mcl_colorblocks_glazed_terracotta_yellow.png": [232, 199, 99], "mcl_colorblocks_glazed_terracotta_orange.png": [170, 146, 81], "mcl_colorblocks_concrete_powder_lime.png": [125, 186, 42], "mcl_colorblocks_concrete_brown.png": [98, 60, 32], "mcl_colorblocks_concrete_magenta.png": [171, 49, 162], "mcl_colorblocks_glazed_terracotta_magenta.png": [210, 108, 215], "mcl_colorblocks_concrete_silver.png": [128, 129, 118], "mcl_colorblocks_glazed_terracotta_grey.png": [90, 90, 90], "mcl_colorblocks_concrete_powder_blue.png": [72, 75, 169], "mcl_colorblocks_concrete_yellow.png": [241, 177, 21], "mcl_colorblocks_concrete_red.png": [146, 34, 34], "mcl_colorblocks_glazed_terracotta_lime.png": [152, 211, 72], "mcl_colorblocks_concrete_black.png": [8, 10, 15], "mcl_colorblocks_glazed_terracotta_silver.png": [134, 151, 151], "hardened_clay_stained_white.png": [213, 197, 184], "mcl_colorblocks_glazed_terracotta_green.png": [111, 135, 50], "mcl_colorblocks_glazed_terracotta_blue.png": [34, 65, 117], "mcl_colorblocks_concrete_powder_red.png": [172, 57, 52], "mcl_colorblocks_concrete_powder_cyan.png": [38, 150, 159], "hardened_clay_stained_purple.png": [81, 71, 123], "hardened_clay_stained_brown.png": [96, 69, 61], "hardened_clay_stained_grey.png": [110, 92, 85], "mcl_colorblocks_concrete_lime.png": [96, 171, 25], "hardened_clay_stained_blue.png": [68, 91, 143], "mcl_colorblocks_concrete_powder_white.png": [224, 225, 225], "hardened_clay_stained_yellow.png": [177, 128, 51], "hardened_clay_stained_light_blue.png": [91, 128, 171], "hardened_clay.png": [143, 104, 87], "mcl_colorblocks_concrete_cyan.png": [21, 123, 140], "mcl_colorblocks_glazed_terracotta_brown.png": [108, 88, 64], "mcl_colorblocks_concrete_grey.png": [56, 59, 64], "mcl_colorblocks_concrete_powder_magenta.png": [196, 94, 189], "mcl_colorblocks_concrete_powder_black.png": [22, 26, 30], "mcl_colorblocks_concrete_pink.png": [213, 103, 144], "mcl_colorblocks_concrete_powder_orange.png": [227, 141, 38], "mcl_colorblocks_glazed_terracotta_cyan.png": [90, 131, 136], "mcl_colorblocks_glazed_terracotta_red.png": [184, 67, 53], "mcl_colorblocks_concrete_green.png": [75, 94, 37], "mcl_colorblocks_concrete_blue.png": [46, 48, 147], "mcl_colorblocks_glazed_terracotta_light_blue.png": [99, 162, 204], "hardened_clay_stained_orange.png": [156, 95, 69], "mcl_colorblocks_concrete_powder_silver.png": [160, 160, 155], "mcl_colorblocks_concrete_powder_pink.png": [224, 148, 176], "hardened_clay_stained_silver.png": [149, 129, 117], "hardened_clay_stained_red.png": [159, 81, 66], "hardened_clay_stained_magenta.png": [150, 80, 85], "mcl_colorblocks_glazed_terracotta_black.png": [38, 22, 22], "mcl_colorblocks_concrete_white.png": [208, 214, 215], "hardened_clay_stained_green.png": [74, 101, 63], "hardened_clay_stained_lime.png": [105, 134, 73], "mcl_colorblocks_concrete_powder_green.png": [104, 127, 45], "mcl_colorblocks_concrete_light_blue.png": [37, 140, 200], "mcl_colorblocks_concrete_powder_brown.png": [128, 86, 54], "mcl_colorblocks_concrete_purple.png": [103, 32, 159], "hardened_clay_stained_cyan.png": [71, 107, 123], "mcl_colorblocks_concrete_powder_purple.png": [138, 58, 180], "mcl_colorblocks_concrete_powder_yellow.png": [230, 198, 54], "mcl_colorblocks_concrete_powder_light_blue.png": [75, 181, 212], "mcl_colorblocks_glazed_terracotta_pink.png": [251, 138, 170], "mcl_colorblocks_glazed_terracotta_purple.png": [112, 49, 152], "mcl_colorblocks_concrete_orange.png": [226, 101, 1], "mcl_colorblocks_concrete_powder_grey.png": [91, 98, 103], "hardened_clay_stained_black.png": [69, 52, 46], "mcl_colorblocks_glazed_terracotta_white.png": [188, 211, 202], "fire_basic_flame_animated.png": [206, 98, 34], "mcl_burning_hud_flame_animated.png": [206, 98, 34], "mcl_fire_fire_charge.png": [95, 58, 41], "mcl_burning_entity_flame_animated.png": [206, 98, 34], "mcl_fire_flint_and_steel.png": [96, 95, 93], "fire_basic_flame.png": [207, 100, 36], "dye_red.png": [113, 74, 47], "dye_yellow.png": [123, 91, 49], "dye_violet.png": [107, 76, 57], "dye_dark_green.png": [99, 81, 47], "mcl_dye_blue.png": [58, 101, 173], "dye_cyan.png": [104, 89, 60], "mcl_dye_lime.png": [107, 91, 53], "dye_pink.png": [120, 81, 61], "mcl_dye_light_blue.png": [103, 88, 70], "dye_dark_grey.png": [108, 81, 52], "mcl_dye_white.png": [205, 193, 166], "dye_grey.png": [113, 86, 58], "dye_magenta.png": [111, 79, 59], "dye_orange.png": [122, 85, 48], "mcl_dye_brown.png": [104, 75, 56], "mcl_dye_black.png": [56, 56, 64], "default_river_water_flowing_animated.png": [38, 123, 130], "default_river_water_source_animated.png": [37, 120, 130], "3d_armor_stand_item.png": [134, 114, 98], "smoker_front_on.png": [105, 81, 68], "smoker_bottom.png": [115, 102, 97], "smoker_side.png": [105, 91, 82], "smoker_front.png": [93, 80, 71], "smoker_top.png": [110, 99, 95], "mob_spawner.png": [40, 40, 40], "mcl_nether_quartz_chiseled_side.png": [194, 186, 183], "mcl_nether_quartz_pillar_top.png": [195, 188, 185], "mcl_nether_nether_wart.png": [190, 79, 75], "mcl_nether_nether_wart_stage_1.png": [86, 54, 51], "mcl_nether_quartz_ore.png": [133, 64, 53], "mcl_nether_soul_sand.png": [90, 70, 51], "mcl_nether_nether_wart_block.png": [175, 76, 73], "mcl_nether_nether_wart_stage_0.png": [53, 41, 38], "mcl_nether_quartz_block_bottom.png": [198, 191, 187], "mcl_nether_quartz_block_top.png": [198, 190, 187], "mcl_nether_quartz.png": [152, 149, 147], "mcl_nether_quartz_pillar_side.png": [195, 188, 184], "mcl_nether_netherbrick.png": [58, 24, 20], "mcl_nether_glowstone.png": [202, 154, 96], "mcl_nether_netherrack.png": [130, 50, 39], "mcl_nether_red_nether_brick.png": [69, 17, 5], "mcl_nether_quartz_chiseled_top.png": [197, 189, 186], "mcl_nether_glowstone_dust.png": [209, 137, 67], "mcl_nether_nether_wart_stage_2.png": [106, 57, 53], "mcl_nether_quartz_block_side.png": [198, 190, 187], "mcl_nether_nether_brick.png": [49, 23, 24], "mcl_nether_magma.png": [85, 33, 27], "mcl_cauldrons_cauldron_inner.png": [24, 24, 24], "mcl_cauldrons_cauldron_top.png": [54, 54, 54], "mcl_cauldrons_cauldron_bottom.png": [50, 37, 38], "mcl_cauldrons_cauldron.png": [47, 47, 47], "mcl_cauldrons_cauldron_side.png": [43, 43, 43], "mcl_beds_bed_side_bottom_magenta.png": [127, 48, 89], "mcl_beds_bed_blue.png": [73, 78, 105], "mcl_beds_bed_side_top_r_black.png": [99, 86, 75], "mcl_beds_bed_side_bottom_r_magenta.png": [132, 46, 94], "mcl_beds_bed_side_top_brown.png": [98, 76, 59], "respawn_anchor_side2.png": [100, 76, 77], "mcl_beds_bed_lime.png": [96, 135, 66], "mcl_beds_bed_side_top_green.png": [98, 76, 59], "mcl_beds_bed_light_blue.png": [100, 107, 142], "mcl_beds_bed_pink.png": [184, 105, 115], "mcl_beds_bed_side_bottom_black.png": [66, 56, 47], "mcl_beds_bed_top_bottom_green.png": [57, 110, 29], "mcl_beds_bed_side_top_blue.png": [98, 76, 59], "mcl_beds_bed_top_top_pink.png": [217, 138, 147], "mcl_beds_bed_side_bottom_light_blue.png": [90, 94, 129], "mcl_beds_bed_side_bottom_blue.png": [63, 65, 90], "mcl_beds_bed_top_top_red.png": [173, 90, 83], "mcl_beds_bed_side_top_grey.png": [98, 76, 59], "respawn_anchor_bottom.png": [45, 26, 54], "mcl_beds_bed_top_top_white.png": [198, 190, 183], "mcl_beds_bed_top_top_black.png": [107, 100, 92], "mcl_beds_bed_top_bottom_brown.png": [101, 69, 38], "mcl_beds_bed_top_bottom_pink.png": [232, 105, 135], "mcl_beds_bed_side_bottom_r_pink.png": [183, 95, 106], "respawn_anchor_side4.png": [110, 87, 85], "mcl_beds_bed_side_bottom_r_green.png": [73, 97, 42], "mcl_beds_bed_side_bottom_r_grey.png": [86, 77, 69], "mcl_beds_bed_side_top_r_white.png": [158, 145, 134], "mcl_beds_bed_side_bottom_orange.png": [143, 84, 28], "mcl_beds_bed_side_bottom_purple.png": [105, 36, 112], "mcl_beds_bed_side_bottom_r_light_blue.png": [90, 97, 136], "mcl_beds_bed_side_top_r_magenta.png": [140, 81, 103], "mcl_beds_bed_side_bottom_r_yellow.png": [150, 131, 25], "mcl_beds_bed_side_top_r_pink.png": [176, 111, 113], "mcl_beds_bed_top_top_blue.png": [105, 112, 137], "portal.png": [102, 61, 130], "mcl_beds_bed_side_bottom_green.png": [74, 94, 43], "mcl_beds_bed_side_bottom_r_blue.png": [61, 66, 95], "mcl_beds_bed_top_top_grey.png": [129, 121, 113], "mcl_beds_bed_black.png": [76, 68, 61], "mcl_beds_bed_top_top_silver.png": [159, 151, 143], "mcl_beds_bed_white.png": [173, 165, 158], "mcl_beds_bed_top_top_cyan.png": [105, 144, 135], "mcl_beds_bed_top_bottom_orange.png": [184, 91, 0], "mcl_beds_bed_side_top_silver.png": [98, 76, 59], "mcl_beds_bed_top_top_brown.png": [143, 118, 93], "mcl_beds_bed_side_top_r_light_blue.png": [115, 111, 132], "mcl_beds_bed_side_bottom_r_lime.png": [86, 129, 53], "mcl_beds_bed_red.png": [139, 58, 51], "mcl_beds_bed_top_bottom_lime.png": [79, 163, 47], "mcl_beds_bed_side_top_r_brown.png": [121, 97, 75], "respawn_anchor_top_off.png": [80, 61, 74], "mcl_beds_bed_side_bottom_r_silver.png": [119, 109, 102], "mcl_beds_bed_yellow.png": [154, 138, 41], "mcl_beds_bed_side_top_yellow.png": [98, 76, 59], "mcl_beds_bed_top_bottom_black.png": [37, 37, 37], "mcl_beds_bed_brown.png": [110, 85, 61], "mcl_beds_bed_side_top_orange.png": [98, 76, 59], "mcl_beds_bed_side_top_red.png": [98, 76, 59], "mcl_beds_bed_top_top_purple.png": [148, 79, 161], "mcl_beds_bed_side_bottom_pink.png": [177, 93, 102], "mcl_beds_bed_side_top_r_grey.png": [112, 99, 88], "respawn_anchor_side1.png": [95, 71, 76], "mcl_beds_bed_side_top_r_blue.png": [97, 91, 104], "mcl_beds_bed_side_top_purple.png": [98, 76, 59], "mcl_beds_bed_side_top_cyan.png": [98, 76, 59], "mcl_beds_bed_top_bottom_blue.png": [32, 60, 119], "mcl_beds_bed_side_bottom_yellow.png": [143, 125, 28], "mcl_beds_bed_side_top_black.png": [98, 76, 59], "mcl_beds_bed_top_top_orange.png": [188, 130, 72], "mcl_beds_bed_top_bottom_silver.png": [129, 129, 129], "mcl_beds_bed_top_top_green.png": [117, 140, 88], "mcl_beds_bed_cyan.png": [73, 111, 103], "mcl_beds_bed_top_bottom_red.png": [157, 20, 20], "mcl_beds_bed_top_bottom_purple.png": [111, 0, 163], "mcl_beds_bed_side_top_r_silver.png": [133, 120, 109], "mcl_beds_bed_side_bottom_grey.png": [86, 76, 67], "mcl_beds_bed_grey.png": [96, 88, 81], "mcl_beds_bed_side_top_r_yellow.png": [151, 132, 62], "respawn_anchor_side0.png": [81, 64, 73], "mcl_beds_bed_side_top_r_green.png": [103, 111, 72], "mcl_beds_bed_side_bottom_brown.png": [100, 73, 48], "mcl_beds_bed_magenta.png": [138, 60, 104], "mcl_beds_bed_side_bottom_r_red.png": [134, 44, 37], "mcl_beds_bed_side_bottom_r_brown.png": [101, 73, 47], "mcl_beds_bed_side_top_lime.png": [98, 76, 59], "mcl_beds_bed_side_top_light_blue.png": [98, 76, 59], "mcl_beds_bed_side_bottom_red.png": [129, 47, 38], "mcl_beds_bed_bottom_top.png": [48, 38, 29], "mcl_beds_bed_top_bottom_grey.png": [76, 76, 76], "mcl_beds_bed_side_bottom_r_orange.png": [150, 86, 25], "mcl_beds_bed_side_bottom_r_black.png": [64, 54, 47], "mcl_beds_bed_top_bottom_cyan.png": [32, 119, 114], "mcl_beds_bed_side_bottom_silver.png": [116, 106, 97], "mcl_beds_bed_side_top_magenta.png": [98, 76, 59], "mcl_beds_bed_top_bottom_white.png": [201, 201, 201], "mcl_beds_bed_side_top_r_orange.png": [151, 105, 62], "mcl_beds_bed_top_bottom_magenta.png": [154, 23, 118], "mcl_beds_bed_side_top_r_lime.png": [110, 131, 80], "mcl_beds_bed_top_top_magenta.png": [172, 92, 137], "mcl_beds_bed_bottom_bottom.png": [48, 38, 29], "mcl_beds_bed_side_top_r_purple.png": [125, 73, 119], "mcl_beds_bed_side_top_r_cyan.png": [97, 113, 103], "mcl_beds_bed_side_top_white.png": [98, 76, 59], "mcl_beds_bed_side_bottom_r_cyan.png": [61, 101, 93], "mcl_beds_bed_side_bottom_cyan.png": [63, 97, 89], "mcl_beds_bed_side_bottom_white.png": [161, 151, 142], "mcl_beds_bed_top_bottom_yellow.png": [184, 169, 0], "respawn_anchor_side3.png": [104, 80, 79], "mcl_beds_bed_top_bottom_light_blue.png": [82, 113, 182], "mcl_beds_bed_top_top_lime.png": [130, 169, 98], "mcl_beds_bed_silver.png": [109, 100, 93], "mcl_beds_bed_purple.png": [115, 47, 128], "mcl_beds_bed_side_top_r_red.png": [141, 80, 69], "mcl_beds_bed_top_top_light_blue.png": [132, 141, 174], "mcl_beds_bed_side_bottom_r_purple.png": [107, 32, 120], "mcl_beds_bed_side_bottom_r_white.png": [161, 151, 144], "mcl_beds_bed_orange.png": [154, 96, 41], "mcl_beds_bed_top_bottom_gray.png": [57, 57, 57], "mcl_beds_bed_side_bottom_lime.png": [85, 122, 53], "mcl_beds_bed_green.png": [85, 107, 56], "mcl_beds_bed_top_top_yellow.png": [188, 172, 72], "mcl_beds_bed_side_top_pink.png": [98, 76, 59], "mcl_sponges_sponge_wet_river_water.png": [157, 141, 104], "mcl_sponges_sponge.png": [210, 177, 118], "mcl_sponges_sponge_wet.png": [156, 134, 92], "mcl_copper_exposed_cut.png": [129, 92, 82], "mcl_copper_raw.png": [133, 68, 50], "mcl_copper_block_cut.png": [148, 77, 57], "mcl_copper_oxidized_cut.png": [91, 110, 110], "mcl_copper_block.png": [147, 77, 56], "mcl_copper_oxidized.png": [90, 108, 110], "mcl_copper_block_raw.png": [168, 90, 68], "mcl_copper_ingot.png": [157, 82, 61], "mcl_copper_weathered.png": [103, 102, 100], "mcl_copper_weathered_cut.png": [107, 103, 100], "mcl_copper_anti_oxidation_particle.png": [251, 250, 247], "mcl_copper_ore.png": [127, 66, 48], "mcl_copper_exposed.png": [128, 92, 83], "farming_mushroom_red.png": [169, 59, 58], "mcl_mushrooms_mushroom_block_inside.png": [218, 175, 136], "mcl_mushrooms_mushroom_block_skin_brown.png": [131, 86, 68], "mcl_mushrooms_mushroom_block_skin_stem.png": [204, 183, 149], "mcl_mushrooms_mushroom_block_skin_red.png": [137, 39, 25], "farming_mushroom_brown.png": [121, 81, 59], "farming_mushroom_stew.png": [134, 97, 67], "mcl_bells_bell_top.png": [207, 203, 82], "mcl_bells_bell_side.png": [214, 204, 84], "mcl_bells_bell.png": [188, 143, 54], "mcl_bells_bell_bottom.png": [117, 114, 39], "default_tool_goldsword.png": [194, 154, 70], "default_tool_steelsword.png": [134, 130, 125], "default_tool_woodsword.png": [100, 82, 68], "default_tool_goldshovel.png": [167, 133, 64], "default_tool_steelpick.png": [137, 128, 119], "default_tool_woodshovel.png": [108, 90, 76], "default_tool_goldpick.png": [172, 139, 73], "default_tool_woodaxe.png": [110, 92, 77], "default_tool_diamondsword.png": [105, 133, 149], "default_tool_steelshovel.png": [125, 115, 107], "default_tool_stonesword.png": [133, 125, 118], "default_tool_woodpick.png": [110, 91, 76], "default_tool_shears.png": [139, 132, 124], "default_tool_goldaxe.png": [160, 128, 66], "default_tool_stoneshovel.png": [126, 116, 107], "default_tool_diamondaxe.png": [103, 110, 113], "default_tool_diamondshovel.png": [106, 125, 134], "default_tool_steelaxe.png": [129, 119, 110], "default_tool_stoneaxe.png": [126, 115, 104], "default_tool_diamondpick.png": [92, 105, 111], "default_tool_stonepick.png": [126, 114, 104], "mcl_chests_ender_chest_right.png": [73, 67, 64], "mcl_chests_chest_trapped_right.png": [98, 78, 62], "default_chest_front.png": [85, 70, 58], "mcl_chests_blue_shulker_box_top.png": [67, 85, 119], "mcl_chests_chest_left.png": [99, 78, 63], "mcl_chests_dark_green_shulker_box_top.png": [67, 111, 70], "mcl_chests_chest_back.png": [92, 75, 61], "mcl_chests_ender_chest_bottom.png": [61, 55, 55], "mcl_chests_ender.png": [70, 62, 58], "mcl_chests_brown_shulker_box_top.png": [73, 63, 55], "mcl_chests_chest_trapped_back.png": [92, 75, 61], "mcl_chests_chest_trapped_side_big.png": [96, 77, 62], "mcl_chests_magenta_shulker_box_top.png": [128, 81, 124], "mcl_chests_noise.png": [192, 186, 189], "mcl_chests_ender_chest_back.png": [72, 66, 64], "mcl_chests_chest_trapped_bottom.png": [118, 91, 70], "mcl_chests_chest_trapped_front.png": [86, 68, 57], "default_chest_side_big.png": [96, 77, 62], "mcl_chests_green_shulker_box_top.png": [88, 122, 75], "mcl_chests_noise_double.png": [191, 189, 189], "mcl_chests_pink_shulker_box_top.png": [163, 116, 158], "mcl_chests_trapped.png": [95, 76, 61], "mcl_chests_blank.png": [255, 255, 255], "mcl_chests_normal_double.png": [98, 78, 62], "mcl_chests_chest_trapped_top.png": [88, 73, 61], "mcl_chests_normal.png": [95, 76, 61], "default_chest_front_big.png": [93, 75, 61], "mcl_chests_ender_chest_front.png": [76, 69, 65], "mcl_chests_white_shulker_box_top.png": [176, 178, 187], "mcl_chests_cyan_shulker_box_top.png": [67, 101, 121], "mcl_chests_ender_present.png": [123, 76, 93], "mcl_chests_chest_trapped_top_big.png": [100, 80, 65], "default_chest_top_big.png": [100, 80, 65], "mcl_chests_grey_shulker_box_top.png": [126, 129, 138], "mcl_chests_normal_present.png": [181, 46, 19], "mcl_chests_red_shulker_box_top.png": [132, 58, 57], "mcl_chests_trapped_double.png": [98, 78, 62], "mcl_chests_violet_shulker_box_top.png": [120, 71, 88], "mcl_chests_chest_trapped_front_big.png": [94, 75, 61], "mcl_chests_lightblue_shulker_box_top.png": [96, 130, 155], "mcl_chests_dark_grey_shulker_box_top.png": [87, 90, 99], "mcl_chests_black_shulker_box_top.png": [56, 57, 62], "mcl_chests_chest_right.png": [98, 78, 62], "mcl_chests_yellow_shulker_box_top.png": [165, 116, 53], "mcl_chests_trapped_present.png": [73, 100, 151], "mcl_chests_chest_bottom.png": [118, 91, 70], "default_chest_top.png": [88, 73, 61], "mcl_chests_trapped_double_present.png": [143, 77, 22], "mcl_chests_normal_double_present.png": [72, 90, 12], "mcl_chests_ender_chest_top.png": [70, 64, 61], "mcl_chests_ender_chest_left.png": [73, 67, 64], "mcl_chests_chest_trapped_left.png": [99, 78, 63], "mcl_chests_orange_shulker_box_top.png": [143, 74, 51], "screwdriver.png": [132, 119, 108], "_un.png": [0, 0, 0], "_at.png": [0, 0, 0], "_s_.png": [0, 0, 0], "_sz.png": [0, 0, 0], "_q.png": [0, 0, 0], "_1.png": [0, 0, 0], "_h_.png": [0, 0, 0], "_o_tilde.png": [0, 0, 0], "_q_.png": [0, 0, 0], "_ae.png": [0, 0, 0], "_e_circumflex_.png": [0, 0, 0], "_ex.png": [0, 0, 0], "_e_.png": [0, 0, 0], "_qo.png": [0, 0, 0], "_z_.png": [0, 0, 0], "_ps.png": [0, 0, 0], "_pound.png": [0, 0, 0], "_div.png": [0, 0, 0], "_l_.png": [0, 0, 0], "_pilcrow.png": [0, 0, 0], "_3_sup.png": [0, 0, 0], "_e_acute.png": [0, 0, 0], "_9.png": [0, 0, 0], "_e_grave_.png": [0, 0, 0], "_u_acute.png": [0, 0, 0], "_a_sup.png": [0, 0, 0], "_sr.png": [0, 0, 0], "_v.png": [0, 0, 0], "_ue_.png": [0, 0, 0], "_t_.png": [0, 0, 0], "_cl.png": [0, 0, 0], "_n_tilde_.png": [0, 0, 0], "_p_.png": [0, 0, 0], "_c.png": [0, 0, 0], "_a.png": [0, 0, 0], "_a_circumflex_.png": [0, 0, 0], "_8.png": [0, 0, 0], "_s.png": [0, 0, 0], "_o_.png": [0, 0, 0], "_1_4.png": [0, 0, 0], "_e_grave.png": [0, 0, 0], "_o_dash.png": [0, 0, 0], "_5.png": [0, 0, 0], "_d_dash_.png": [0, 0, 0], "_i_grave.png": [0, 0, 0], "_vb.png": [0, 0, 0], "_sp.png": [255, 255, 255], "_a_acute_.png": [0, 0, 0], "_as.png": [0, 0, 0], "_y_acute.png": [0, 0, 0], "_3_4.png": [0, 0, 0], "_6.png": [0, 0, 0], "_7.png": [0, 0, 0], "_tl.png": [0, 0, 0], "_t.png": [0, 0, 0], "_y.png": [0, 0, 0], "_ca.png": [0, 0, 0], "_e.png": [0, 0, 0], "_hs.png": [0, 0, 0], "_copyright.png": [0, 0, 0], "_l.png": [0, 0, 0], "_h.png": [0, 0, 0], "_u_circumflex_.png": [0, 0, 0], "_i_acute_.png": [0, 0, 0], "_ha.png": [0, 0, 0], "_y_diaresis.png": [0, 0, 0], "_gt.png": [0, 0, 0], "_b.png": [0, 0, 0], "_degree.png": [0, 0, 0], "_a_tilde_.png": [0, 0, 0], "_u_.png": [0, 0, 0], "_o_sup.png": [0, 0, 0], "_m_.png": [0, 0, 0], "_c_.png": [0, 0, 0], "_cr.png": [0, 0, 0], "_3.png": [0, 0, 0], "_currency.png": [0, 0, 0], "_f.png": [0, 0, 0], "_cedille.png": [0, 0, 0], "_u_grave_.png": [0, 0, 0], "_dt.png": [0, 0, 0], "_am.png": [0, 0, 0], "_c_cedille_.png": [0, 0, 0], "_u_acute_.png": [0, 0, 0], "_bl.png": [0, 0, 0], "_registered.png": [0, 0, 0], "_i_acute.png": [0, 0, 0], "_lt.png": [0, 0, 0], "_e_acute_.png": [0, 0, 0], "_paragraph.png": [0, 0, 0], "_i_grave_.png": [0, 0, 0], "_o.png": [0, 0, 0], "_1_sup.png": [0, 0, 0], "mcl_signs_sign.png": [114, 89, 69], "_yen.png": [0, 0, 0], "_b_.png": [0, 0, 0], "_macron.png": [0, 0, 0], "_qu_inv.png": [0, 0, 0], "_o_dash_.png": [0, 0, 0], "_guill_right.png": [0, 0, 0], "_p.png": [0, 0, 0], "_thorn_.png": [0, 0, 0], "_2_sup.png": [0, 0, 0], "_pr.png": [0, 0, 0], "default_sign.png": [145, 115, 88], "_times_dot.png": [0, 0, 0], "_acute.png": [0, 0, 0], "_g_.png": [0, 0, 0], "_o_acute_.png": [0, 0, 0], "_a_tilde.png": [0, 0, 0], "_j.png": [0, 0, 0], "_k.png": [0, 0, 0], "_co.png": [0, 0, 0], "_dv.png": [0, 0, 0], "_o_circumflex.png": [0, 0, 0], "_a_ring.png": [0, 0, 0], "_br.png": [0, 0, 0], "_d.png": [0, 0, 0], "_ap.png": [0, 0, 0], "_sl.png": [0, 0, 0], "_mn.png": [0, 0, 0], "_m.png": [0, 0, 0], "_ae_lig.png": [0, 0, 0], "_thorn.png": [0, 0, 0], "_2.png": [0, 0, 0], "_gr.png": [0, 0, 0], "_i.png": [0, 0, 0], "_y_acute_.png": [0, 0, 0], "_diaresis.png": [0, 0, 0], "_oe.png": [0, 0, 0], "_mu.png": [0, 0, 0], "_guill_left.png": [0, 0, 0], "_times_cross.png": [0, 0, 0], "_ae_.png": [0, 0, 0], "_w.png": [0, 0, 0], "_u.png": [0, 0, 0], "_broken_bar.png": [0, 0, 0], "_4.png": [0, 0, 0], "_plus_minus.png": [0, 0, 0], "_1_2.png": [0, 0, 0], "_u_circumflex.png": [0, 0, 0], "_w_.png": [0, 0, 0], "_x_.png": [0, 0, 0], "_e_circumflex.png": [0, 0, 0], "_g.png": [0, 0, 0], "_o_tilde_.png": [0, 0, 0], "_ae_lig_.png": [0, 0, 0], "_v_.png": [0, 0, 0], "_dl.png": [0, 0, 0], "_a_grave.png": [0, 0, 0], "_re.png": [0, 0, 0], "_a_acute.png": [0, 0, 0], "_qu.png": [0, 0, 0], "_oe_.png": [0, 0, 0], "_n_tilde.png": [0, 0, 0], "_eq.png": [0, 0, 0], "_d_.png": [0, 0, 0], "_sm.png": [0, 0, 0], "_y_.png": [0, 0, 0], "_not.png": [0, 0, 0], "_n.png": [0, 0, 0], "_j_.png": [0, 0, 0], "_k_.png": [0, 0, 0], "_0.png": [0, 0, 0], "_o_grave_.png": [0, 0, 0], "_r_.png": [0, 0, 0], "_r.png": [0, 0, 0], "_u_grave.png": [0, 0, 0], "_ee_.png": [0, 0, 0], "_c_cedille.png": [0, 0, 0], "_ex_inv.png": [0, 0, 0], "_cm.png": [0, 0, 0], "_o_grave.png": [0, 0, 0], "_x.png": [0, 0, 0], "_i_.png": [0, 0, 0], "_n_.png": [0, 0, 0], "_rc.png": [0, 0, 0], "_a_.png": [0, 0, 0], "_a_grave_.png": [0, 0, 0], "_ee.png": [0, 0, 0], "_o_acute.png": [0, 0, 0], "_a_ring_.png": [0, 0, 0], "_i_circumflex_.png": [0, 0, 0], "_cent.png": [0, 0, 0], "_d_dash.png": [0, 0, 0], "_f_.png": [0, 0, 0], "_o_circumflex_.png": [0, 0, 0], "_ue.png": [0, 0, 0], "_a_circumflex.png": [0, 0, 0], "_i_circumflex.png": [0, 0, 0], "_z.png": [0, 0, 0], "gui_furnace_arrow_fg.png": [239, 239, 239], "default_furnace_front.png": [105, 95, 91], "default_furnace_fire_bg.png": [139, 139, 139], "default_furnace_top.png": [148, 138, 133], "default_furnace_fire_fg.png": [179, 115, 70], "default_furnace_side.png": [117, 107, 102], "gui_furnace_arrow_bg.png": [139, 139, 139], "default_furnace_front_active.png": [119, 95, 85], "default_furnace_bottom.png": [148, 138, 133], "default_torch_on_floor.png": [115, 82, 59], "default_torch_on_floor_animated.png": [116, 84, 61], "default_tnt_bottom.png": [161, 54, 58], "mcl_tnt_blink.png": [255, 255, 255], "default_tnt_top.png": [125, 54, 57], "default_tnt_side.png": [178, 105, 98], "mcl_heads_skeleton.png": [125, 125, 125], "mcl_heads_skeleton_node.png": [124, 124, 124], "mcl_heads_creeper_node.png": [98, 107, 71], "mcl_heads_zombie.png": [66, 104, 69], "mcl_heads_creeper.png": [92, 110, 68], "mcl_heads_steve_node.png": [115, 70, 58], "mcl_heads_zombie_node.png": [78, 110, 105], "mcl_heads_steve.png": [108, 76, 59], "mcl_heads_wither_skeleton_node.png": [50, 50, 50], "mcl_heads_wither_skeleton.png": [50, 50, 50], "mcl_flowerpots_cactus.png": [109, 83, 52], "mcl_flowerpots_flowerpot_inventory.png": [121, 54, 45], "mcl_flowerpots_flowerpot.png": [120, 55, 47], "bucket_lava.png": [166, 127, 113], "bucket_river_water.png": [139, 152, 155], "bucket_water.png": [139, 147, 155], "bucket.png": [147, 143, 139], "mcl_totems_totem.png": [185, 139, 52], "mcl_anvils_anvil_top_damaged_1.png": [50, 50, 50], "mcl_anvils_anvil_top_damaged_2.png": [48, 48, 48], "mcl_anvils_anvil_top_damaged_0.png": [52, 52, 52], "mcl_anvils_anvil_side.png": [45, 45, 45], "mcl_anvils_inventory.png": [157, 157, 157], "mcl_anvils_anvil_base.png": [40, 40, 40], "mcl_maps_player_arrow.png": [95, 95, 95], "mcl_maps_map_filled.png": [213, 176, 148], "mcl_maps_player_dot.png": [105, 105, 105], "mcl_maps_map_empty.png": [217, 187, 157], "mcl_maps_map_filled_markings.png": [183, 183, 183], "mcl_maps_map_background.png": [224, 196, 166], "mcl_dispensers_dispenser_front_vertical.png": [115, 104, 99], "mcl_dispensers_dispenser_front_horizontal.png": [105, 96, 92], "jeija_wall_lever.png": [95, 80, 69], "mesecons_delayer_front_locked_off.png": [97, 85, 77], "mesecons_delayer_locked_on.png": [114, 100, 95], "mesecons_delayer_sides_locked_off.png": [95, 80, 73], "mesecons_delayer_sides_on.png": [106, 71, 63], "mesecons_delayer_item.png": [100, 87, 82], "mesecons_delayer_end_locked_off.png": [97, 85, 77], "mesecons_delayer_end_locked_on.png": [101, 85, 78], "mesecons_delayer_ends_off.png": [99, 86, 80], "mesecons_delayer_front_locked_on.png": [101, 85, 77], "mesecons_delayer_ends_on.png": [105, 87, 81], "mesecons_delayer_sides_locked_on.png": [104, 81, 74], "mesecons_delayer_locked_off.png": [110, 99, 95], "mesecons_delayer_sides_off.png": [90, 69, 61], "mesecons_delayer_off.png": [112, 100, 96], "mesecons_delayer_on.png": [116, 101, 97], "redstone_redstone_dust_line0.png": [168, 168, 168], "redstone_redstone_dust.png": [81, 0, 0], "redstone_redstone_dust_dot.png": [168, 168, 168], "redstone_redstone_dust_line1.png": [173, 173, 173], "jeija_commandblock_off.png": [110, 99, 96], "jeija_commandblock_on.png": [110, 99, 96], "redstone_redstone_block.png": [128, 8, 9], "jeija_torches_on.png": [102, 68, 56], "jeija_torches_off.png": [90, 66, 54], "mesecons_button_wield_mask.png": [255, 126, 126], "mcl_droppers_dropper_front_vertical.png": [118, 108, 103], "mcl_droppers_dropper_front_horizontal.png": [110, 101, 96], "mesecons_noteblock.png": [104, 81, 63], "jeija_solar_panel_inverted.png": [100, 107, 117], "jeija_solar_panel.png": [124, 113, 101], "jeija_solar_panel_side.png": [60, 47, 36], "mcl_observers_observer_top.png": [139, 128, 123], "mcl_observers_observer_front.png": [95, 80, 84], "mcl_observers_observer_back_lit.png": [75, 67, 65], "mcl_observers_observer_back.png": [72, 67, 64], "mcl_observers_observer_side.png": [111, 103, 99], "mesecons_piston_pusher_front_sticky.png": [97, 81, 63], "mesecons_piston_pusher_top.png": [106, 83, 65], "mesecons_piston_back.png": [110, 101, 98], "mesecons_piston_on_front.png": [111, 101, 98], "mesecons_piston_pusher_back.png": [106, 83, 65], "mesecons_piston_bottom.png": [120, 107, 100], "mesecons_piston_pusher_right.png": [106, 83, 65], "mesecons_piston_pusher_bottom.png": [106, 83, 65], "mesecons_piston_pusher_front.png": [106, 83, 65], "mesecons_piston_pusher_left.png": [106, 83, 65], "jeija_lightstone_gray_on.png": [97, 56, 37], "jeija_lightstone_gray_off.png": [64, 49, 43], "mcl_target_target_side.png": [177, 117, 94], "mcl_target_target_top.png": [177, 117, 94], "mcl_comparators_sides_on.png": [105, 87, 81], "mcl_comparators_comp.png": [61, 20, 20], "mcl_comparators_on.png": [116, 102, 98], "mcl_comparators_sides_comp.png": [99, 88, 83], "mcl_comparators_off.png": [113, 102, 98], "mcl_comparators_ends_comp.png": [99, 88, 83], "mcl_comparators_ends_sub.png": [105, 88, 83], "mcl_comparators_ends_off.png": [96, 80, 74], "mcl_comparators_ends_on.png": [105, 81, 75], "mcl_comparators_sub.png": [112, 25, 25], "mcl_comparators_item.png": [98, 83, 79], "mcl_comparators_sides_off.png": [99, 86, 80], "mcl_comparators_sides_sub.png": [105, 88, 83], "default_book.png": [103, 67, 44], "default_bookshelf.png": [84, 67, 54], "mcl_books_book_written.png": [110, 74, 44], "mcl_books_book_bg.png": [203, 180, 151], "mcl_books_button9_pressed.png": [145, 112, 86], "mcl_books_button9.png": [145, 112, 86], "mcl_books_book_writable.png": [151, 122, 108], "mcl_books_bookshelf_top.png": [109, 84, 65], "wool_dark_grey.png": [96, 87, 87], "wool_grey.png": [143, 134, 134], "wool_magenta.png": [140, 85, 125], "wool_black.png": [45, 42, 42], "wool_orange.png": [188, 106, 45], "wool_blue.png": [43, 73, 125], "wool_yellow.png": [201, 163, 69], "wool_pink.png": [171, 91, 108], "wool_dark_green.png": [53, 91, 51], "wool_brown.png": [86, 57, 43], "wool_red.png": [132, 42, 45], "mcl_wool_light_blue.png": [91, 130, 180], "wool_cyan.png": [30, 94, 113], "mcl_wool_lime.png": [107, 151, 76], "wool_white.png": [212, 199, 182], "wool_violet.png": [77, 57, 102], "mcl_potions_melon_speckled.png": [170, 97, 62], "mcl_potions_effect_swift.png": [106, 96, 85], "mcl_potions_spider_eye_fermented.png": [143, 97, 62], "mcl_potions_splash_bottle.png": [168, 156, 183], "mcl_potions_effect_water_breathing.png": [59, 69, 100], "mcl_potions_effect_leaping.png": [100, 91, 86], "mcl_potions_effect_weak.png": [127, 126, 126], "mcl_potions_dragon_breath.png": [171, 137, 163], "mcl_potions_effect_food_poisoning.png": [112, 123, 89], "hudbars_icon_regenerate.png": [195, 77, 114], "mcl_potions_effect_fire_proof.png": [112, 68, 68], "mcl_potions_splash_overlay.png": [202, 202, 202], "mcl_potions_effect_invisible.png": [96, 103, 95], "hbhunger_icon_regen_poison.png": [147, 111, 115], "mcl_potions_effect_slow.png": [78, 81, 85], "mcl_potions_lingering_bottle.png": [181, 159, 192], "mcl_potions_potion_overlay.png": [201, 201, 201], "mcl_potions_effect_regenerating.png": [133, 90, 83], "mcl_potions_arrow_inv.png": [171, 165, 160], "mcl_potions_effect_night_vision.png": [86, 99, 74], "mcl_potions_potion_bottle.png": [156, 172, 203], "mcl_potions_effect_poisoned.png": [78, 110, 80], "mcl_potions_effect_strong.png": [100, 82, 97], "crafting_workbench_front.png": [120, 93, 72], "gui_crafting_arrow.png": [139, 139, 139], "crafting_workbench_side.png": [120, 93, 72], "crafting_workbench_top.png": [152, 121, 93], "mcl_amethyst_amethyst_bud_small.png": [176, 131, 203], "mcl_amethyst_amethyst_block.png": [139, 84, 172], "mcl_amethyst_amethyst_cluster.png": [161, 111, 190], "mcl_amethyst_calcite_block.png": [189, 193, 207], "mcl_amethyst_amethyst_shard.png": [163, 113, 192], "mcl_amethyst_amethyst_bud_medium.png": [184, 140, 209], "mcl_amethyst_amethyst_bud_large.png": [173, 127, 201], "mcl_amethyst_tinted_glass.png": [125, 67, 160], "mcl_amethyst_amethyst_cluster_block.png": [180, 136, 206], "mcl_amethyst_budding_amethyst.png": [134, 77, 167], "mcl_enchanting_glyph_11.png": [209, 209, 231], "mcl_enchanting_glyph_14.png": [209, 209, 231], "mcl_enchanting_glyph_6.png": [209, 209, 231], "mcl_enchanting_glyph_8.png": [209, 209, 231], "mcl_enchanting_glyph_9.png": [209, 209, 231], "mcl_enchanting_glyph_3.png": [209, 209, 231], "mcl_enchanting_number_1_off.png": [255, 255, 255], "mcl_enchanting_number_3_off.png": [255, 255, 255], "mcl_enchanting_number_3.png": [151, 47, 40], "mcl_enchanting_book_open.png": [153, 123, 99], "mcl_enchanting_button_off.png": [255, 255, 255], "mcl_enchanting_glyph_2.png": [209, 209, 231], "mcl_enchanting_glyph_1.png": [209, 209, 231], "mcl_enchanting_button.png": [255, 255, 255], "mcl_enchanting_table_side.png": [66, 58, 55], "mcl_enchanting_book_closed.png": [112, 78, 55], "mcl_enchanting_table_bottom.png": [58, 51, 52], "mcl_enchanting_glyph_15.png": [209, 209, 231], "mcl_enchanting_number_2_off.png": [255, 255, 255], "mcl_enchanting_glyph_5.png": [209, 209, 231], "mcl_enchanting_number_1.png": [149, 45, 39], "mcl_enchanting_glyph_7.png": [209, 209, 231], "mcl_enchanting_table_top.png": [88, 86, 84], "mcl_enchanting_number_2.png": [149, 46, 39], "mcl_enchanting_glyph_16.png": [209, 209, 231], "mcl_enchanting_button_hovered.png": [255, 255, 255], "mcl_enchanting_book_enchanted.png": [122, 69, 46], "mcl_enchanting_glyph_4.png": [209, 209, 231], "mcl_enchanting_glyph_10.png": [209, 209, 231], "mcl_enchanting_glyph_13.png": [209, 209, 231], "mcl_enchanting_glyph_17.png": [209, 209, 231], "mcl_enchanting_glyph_18.png": [209, 209, 231], "mcl_enchanting_lapis_background.png": [255, 255, 255], "mcl_enchanting_button_background.png": [229, 202, 171], "mcl_enchanting_glyph_12.png": [209, 209, 231], "doc_basics_gameplay_mtg_2.png": [151, 168, 207], "doc_basics_liquids_renewable_1.png": [139, 146, 159], "doc_basics_players_sam.png": [95, 133, 106], "doc_basics_players_flat.png": [127, 155, 130], "doc_basics_craft_shapeless_2.png": [52, 52, 48], "doc_basics_build.png": [84, 84, 55], "doc_basics_pointing.png": [66, 104, 32], "doc_basics_nodes.png": [108, 104, 94], "doc_basics_craft_groups_2.png": [65, 58, 52], "doc_basics_craft_groups_1.png": [57, 57, 58], "doc_basics_inventory.png": [47, 47, 45], "doc_basics_minimap_radar.png": [73, 164, 128], "doc_basics_sneak.png": [70, 69, 69], "doc_basics_camera_behind.png": [108, 144, 135], "doc_basics_craft_repair.png": [47, 46, 45], "doc_basics_hotbar_relations.png": [85, 84, 69], "doc_basics_gameplay_lott.png": [119, 122, 112], "doc_basics_tools_mining.png": [64, 62, 59], "doc_basics_players_lott.png": [180, 193, 224], "doc_basics_gameplay_outback.png": [146, 114, 109], "doc_basics_gameplay_pixture.png": [94, 120, 57], "doc_basics_craft_grid.png": [46, 46, 46], "doc_basics_craft_groups_3.png": [61, 58, 55], "doc_basics_camera_front.png": [99, 133, 110], "doc_basics_minimap_map.png": [149, 169, 183], "doc_basics_gameplay_mtg_1.png": [136, 117, 86], "doc_basics_gameplay_xtraores_xtension.png": [95, 15, 86], "doc_basics_light_torch.png": [25, 43, 14], "doc_basics_minimap_round.png": [160, 175, 189], "doc_basics_light_test.png": [133, 113, 69], "doc_basics_liquids_nonrenewable.png": [64, 87, 87], "doc_basics_gameplay_hades.png": [81, 70, 62], "doc_basics_gameplay_moontest.png": [75, 74, 79], "doc_basics_liquids_range.png": [146, 166, 179], "doc_basics_inventory_detail.png": [43, 41, 39], "doc_basics_camera_ego.png": [111, 147, 139], "doc_basics_tools.png": [46, 45, 42], "doc_basics_liquids_renewable_2.png": [136, 148, 166], "doc_basics_items_dropped.png": [195, 185, 147], "doc_basics_liquids_types.png": [146, 164, 171], "doc_basics_gameplay_carbone_ng.png": [121, 118, 89], "doc_basics_craft_shaped.png": [55, 52, 50], "doc_basics_hotbar.png": [141, 175, 226], "doc_basics_craft_shapeless_1.png": [52, 52, 48], "doc_button_icon_lores.png": [19, 143, 183], "doc_awards_icon_generic.png": [14, 125, 162], "inventory_plus_doc_inventory_plus.png": [19, 143, 183], "doc_button_icon_hires.png": [30, 149, 188], "doc_identifier_identifier.png": [172, 151, 139], "doc_identifier_identifier_liquid.png": [125, 147, 190], "craftguide_furnace.png": [119, 95, 85], "craftguide_clear_icon.png": [254, 254, 254], "craftguide_book.png": [84, 117, 39], "mcl_craftguide_fuel.png": [187, 121, 75], "craftguide_prev_icon.png": [255, 255, 255], "craftguide_zoomout_icon.png": [255, 255, 255], "craftguide_search_icon.png": [254, 254, 254], "craftguide_arrow.png": [139, 139, 139], "craftguide_zoomin_icon.png": [255, 255, 255], "craftguide_shapeless.png": [130, 130, 130], "craftguide_next_icon.png": [255, 255, 255]} \ No newline at end of file diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua deleted file mode 100644 index fb13625d5..000000000 --- a/mods/ITEMS/mcl_maps/init.lua +++ /dev/null @@ -1,371 +0,0 @@ -mcl_maps = {} - -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - -local math = math -local vector = vector -local table = table -local pairs = pairs - -local pos_to_string = minetest.pos_to_string -local string_to_pos = minetest.string_to_pos -local get_item_group = minetest.get_item_group -local dynamic_add_media = minetest.dynamic_add_media -local get_connected_players = minetest.get_connected_players - -local storage = minetest.get_mod_storage() -local worldpath = minetest.get_worldpath() -local map_textures_path = worldpath .. "/mcl_maps/" ---local last_finished_id = storage:get_int("next_id") - 1 - -minetest.mkdir(map_textures_path) - -local function load_json_file(name) - local file = assert(io.open(modpath .. "/" .. name .. ".json", "r")) - local data = minetest.parse_json(file:read()) - file:close() - return data -end - -local texture_colors = load_json_file("colors") -local palettes = load_json_file("palettes") - -local color_cache = {} - -local creating_maps = {} -local loaded_maps = {} - -local c_air = minetest.get_content_id("air") - -function mcl_maps.create_map(pos) - local minp = vector.multiply(vector.floor(vector.divide(pos, 128)), 128) - local maxp = vector.add(minp, vector.new(127, 127, 127)) - - local itemstack = ItemStack("mcl_maps:filled_map") - local meta = itemstack:get_meta() - local next_id = storage:get_int("next_id") - storage:set_int("next_id", next_id + 1) - local id = tostring(next_id) - meta:set_string("mcl_maps:id", id) - meta:set_string("mcl_maps:minp", pos_to_string(minp)) - meta:set_string("mcl_maps:maxp", pos_to_string(maxp)) - tt.reload_itemstack_description(itemstack) - - creating_maps[id] = true - minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining) - if calls_remaining > 0 then - return - end - local vm = minetest.get_voxel_manip() - local emin, emax = vm:read_from_map(minp, maxp) - local data = vm:get_data() - local param2data = vm:get_param2_data() - local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) - local pixels = {} - local last_heightmap - for x = 1, 128 do - local map_x = minp.x - 1 + x - local heightmap = {} - for z = 1, 128 do - local map_z = minp.z - 1 + z - local color, height - for map_y = maxp.y, minp.y, -1 do - local index = area:index(map_x, map_y, map_z) - local c_id = data[index] - if c_id ~= c_air then - color = color_cache[c_id] - if color == nil then - local nodename = minetest.get_name_from_content_id(c_id) - local def = minetest.registered_nodes[nodename] - if def then - local texture - if def.palette then - texture = def.palette - elseif def.tiles then - texture = def.tiles[1] - if type(texture) == "table" then - texture = texture.name - end - end - if texture then - texture = texture:match("([^=^%^]-([^.]+))$"):split("^")[1] - end - if def.palette then - local palette = palettes[texture] - color = palette and {palette = palette} - else - color = texture_colors[texture] - end - end - end - - if color and color.palette then - color = color.palette[param2data[index] + 1] - else - color_cache[c_id] = color or false - end - - if color and last_heightmap then - local last_height = last_heightmap[z] - if last_height < map_y then - color = { - math.min(255, color[1] + 16), - math.min(255, color[2] + 16), - math.min(255, color[3] + 16), - } - elseif last_height > map_y then - color = { - math.max(0, color[1] - 16), - math.max(0, color[2] - 16), - math.max(0, color[3] - 16), - } - end - end - height = map_y - break - end - end - heightmap[z] = height or minp.y - pixels[z] = pixels[z] or {} - pixels[z][x] = color or {0, 0, 0} - end - last_heightmap = heightmap - end - tga_encoder.image(pixels):save(map_textures_path .. "mcl_maps_map_texture_" .. id .. ".tga") - creating_maps[id] = nil - end) - return itemstack -end - -function mcl_maps.load_map(id, callback) - if id == "" or creating_maps[id] then - return - end - - local texture = "mcl_maps_map_texture_" .. id .. ".tga" - - if not loaded_maps[id] then - if not minetest.features.dynamic_add_media_table then - -- minetest.dynamic_add_media() blocks in - -- Minetest 5.3 and 5.4 until media loads - loaded_maps[id] = true - dynamic_add_media(map_textures_path .. texture, function() end) - if callback then callback(texture) end - else - -- minetest.dynamic_add_media() never blocks - -- in Minetest 5.5, callback runs after load - dynamic_add_media(map_textures_path .. texture, function() - loaded_maps[id] = true - if callback then callback(texture) end - end) - end - end - - if loaded_maps[id] then - if callback then callback(texture) end - return texture - end -end - -function mcl_maps.load_map_item(itemstack) - return mcl_maps.load_map(itemstack:get_meta():get_string("mcl_maps:id")) -end - -local function fill_map(itemstack, placer, pointed_thing) - local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing) - if new_stack then - return new_stack - end - - if minetest.settings:get_bool("enable_real_maps", true) then - local new_map = mcl_maps.create_map(placer:get_pos()) - itemstack:take_item() - if itemstack:is_empty() then - return new_map - else - local inv = placer:get_inventory() - if inv:room_for_item("main", new_map) then - inv:add_item("main", new_map) - else - minetest.add_item(placer:get_pos(), new_map) - end - return itemstack - end - end -end - -minetest.register_craftitem("mcl_maps:empty_map", { - description = S("Empty Map"), - _doc_items_longdesc = S("Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used."), - _doc_items_usagehelp = S("Rightclick to create a filled map (which can't be stacked anymore)."), - inventory_image = "mcl_maps_map_empty.png", - on_place = fill_map, - on_secondary_use = fill_map, - stack_max = 64, -}) - -local filled_def = { - description = S("Map"), - _tt_help = S("Shows a map image."), - _doc_items_longdesc = S("When created, the map saves the nearby area as an image that can be viewed any time by holding the map."), - _doc_items_usagehelp = S("Hold the map in your hand. This will display a map on your screen."), - inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", - stack_max = 64, - groups = {not_in_creative_inventory = 1, filled_map = 1, tool = 1}, -} - -minetest.register_craftitem("mcl_maps:filled_map", filled_def) - -local filled_wield_def = table.copy(filled_def) -filled_wield_def.use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false -filled_wield_def.visual_scale = 1 -filled_wield_def.wield_scale = {x = 1, y = 1, z = 1} -filled_wield_def.paramtype = "light" -filled_wield_def.drawtype = "mesh" -filled_wield_def.node_placement_prediction = "" -filled_wield_def.range = minetest.registered_items[""].range -filled_wield_def.on_place = mcl_util.call_on_rightclick - -for _, texture in pairs(mcl_skins.list) do - local def = table.copy(filled_wield_def) - def.tiles = {texture .. ".png"} - def.mesh = "mcl_meshhand.b3d" - def._mcl_hand_id = texture - minetest.register_node("mcl_maps:filled_map_" .. texture, def) - - local female_def = table.copy(def) - female_def.mesh = "mcl_meshhand_female.b3d" - female_def._mcl_hand_id = texture .. "_female" - minetest.register_node("mcl_maps:filled_map_" .. texture .. "_female", female_def) -end - -local old_add_item = minetest.add_item -function minetest.add_item(pos, stack) - stack = ItemStack(stack) - if get_item_group(stack:get_name(), "filled_map") > 0 then - stack:set_name("mcl_maps:filled_map") - end - return old_add_item(pos, stack) -end - -tt.register_priority_snippet(function(itemstring, _, itemstack) - if itemstack and get_item_group(itemstring, "filled_map") > 0 then - local id = itemstack:get_meta():get_string("mcl_maps:id") - if id ~= "" then - return "#" .. id, mcl_colors.GRAY - end - end -end) - -minetest.register_craft({ - output = "mcl_maps:empty_map", - recipe = { - { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper" }, - { "mcl_core:paper", "group:compass", "mcl_core:paper" }, - { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper" }, - } -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_maps:filled_map 2", - recipe = {"group:filled_map", "mcl_maps:empty_map"}, -}) - -local function on_craft(itemstack, player, old_craft_grid, craft_inv) - if itemstack:get_name() == "mcl_maps:filled_map" then - for _, stack in pairs(old_craft_grid) do - if get_item_group(stack:get_name(), "filled_map") > 0 then - itemstack:get_meta():from_table(stack:get_meta():to_table()) - return itemstack - end - end - end -end - -minetest.register_on_craft(on_craft) -minetest.register_craft_predict(on_craft) - -local maps = {} -local huds = {} - -minetest.register_on_joinplayer(function(player) - local map_def = { - hud_elem_type = "image", - text = "blank.png", - position = {x = 0.75, y = 0.8}, - alignment = {x = 0, y = -1}, - offset = {x = 0, y = 0}, - scale = {x = 2, y = 2}, - } - local marker_def = table.copy(map_def) - marker_def.alignment = {x = 0, y = 0} - huds[player] = { - map = player:hud_add(map_def), - marker = player:hud_add(marker_def), - } -end) - -minetest.register_on_leaveplayer(function(player) - maps[player] = nil - huds[player] = nil -end) - -minetest.register_globalstep(function(dtime) - for _, player in pairs(get_connected_players()) do - local wield = player:get_wielded_item() - local texture = mcl_maps.load_map_item(wield) - local hud = huds[player] - if texture then - local wield_def = wield:get_definition() - local hand_def = player:get_inventory():get_stack("hand", 1):get_definition() - - if hand_def and wield_def and hand_def._mcl_hand_id ~= wield_def._mcl_hand_id then - wield:set_name("mcl_maps:filled_map_" .. hand_def._mcl_hand_id) - player:set_wielded_item(wield) - end - - if texture ~= maps[player] then - player:hud_change(hud.map, "text", "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture) - maps[player] = texture - end - - local pos = vector.round(player:get_pos()) - local meta = wield:get_meta() - local minp = string_to_pos(meta:get_string("mcl_maps:minp")) - local maxp = string_to_pos(meta:get_string("mcl_maps:maxp")) - - local marker = "mcl_maps_player_arrow.png" - - if pos.x < minp.x then - marker = "mcl_maps_player_dot.png" - pos.x = minp.x - elseif pos.x > maxp.x then - marker = "mcl_maps_player_dot.png" - pos.x = maxp.x - end - - if pos.z < minp.z then - marker = "mcl_maps_player_dot.png" - pos.z = minp.z - elseif pos.z > maxp.z then - marker = "mcl_maps_player_dot.png" - pos.z = maxp.z - end - - if marker == "mcl_maps_player_arrow.png" then - local yaw = (math.floor(player:get_look_horizontal() * 180 / math.pi / 90 + 0.5) % 4) * 90 - marker = marker .. "^[transformR" .. yaw - end - - player:hud_change(hud.marker, "text", marker) - player:hud_change(hud.marker, "offset", {x = (6 - 140 / 2 + pos.x - minp.x) * 2, y = (6 - 140 + maxp.z - pos.z) * 2}) - elseif maps[player] then - player:hud_change(hud.map, "text", "blank.png") - player:hud_change(hud.marker, "text", "blank.png") - maps[player] = nil - end - end -end) diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr deleted file mode 100644 index d7762e512..000000000 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_maps -Empty Map=Leere Karte -Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Leere Karten sind als Karten nicht nützlich, aber sie können gestapelt werden und zu benutzbaren Karten umgewandelt werden. -Rightclick to create a filled map (which can't be stacked anymore).=Rechtsklick, um die Karte zu füllen. Sie kann dann nicht mehr gestapelt werden. -Map=Karte -Shows a map image.=Zeigt ein Kartenbild. -When created, the map saves the nearby area as an image that can be viewed any time by holding the map.=Beim Erstellen speichert die Karte die Gegend in der Nähe als ein Bild, dass jederzeit durch halten der Karte angesehen werden kann. -Hold the map in your hand. This will display a map on your screen.=Halten Sie die Karte in Ihrer Hand. Eine Karte wird auf Ihrem Bildschirm angezeigt werden. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr deleted file mode 100644 index cec96b17b..000000000 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_maps -Empty Map=Mapa vacio -Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Los mapas vacíos no son útiles como mapas, pero se pueden apilar y convertir en mapas que se pueden usar. -Rightclick to start using the map (which can't be stacked anymore).=Haga clic derecho para comenzar a usar el mapa (que ya no se puede apilar). -Map=Mapa diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr deleted file mode 100644 index 1808e839d..000000000 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_maps -Empty Map=Carte Vierge -Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Les cartes vierges ne sont pas utiles en tant que cartes, mais elles peuvent être empilées et transformées en cartes utilisables. -Rightclick to create a filled map (which can't be stacked anymore).=Clic droit pour créer une carte remplie (qui ne peut plus être empilée). -Map=Carte -Shows a map image.=Affiche une carte. -When created, the map saves the nearby area as an image that can be viewed any time by holding the map.=Lors de sa création, la carte sauvegarde le terrain proche sous forme d'image qui peut être consultée n'importe quand en tenant la carte dans la main. -Hold the map in your hand. This will display a map on your screen.=Tenez la carte dans votre main. Cela affichera la carte à l'écran. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr deleted file mode 100644 index de6ff84d6..000000000 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_maps -Empty Map=Pusta mapa -Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Puste mapy nie są tak użyteczne jak mapy ale mogą być grupowane i zamienione w mapy które już są pożyteczne. -Rightclick to create a filled map (which can't be stacked anymore).=Kliknij prawy przycisk aby stworzyć wypełnioną mapę (nie będzie już jej można grupować). -Map=Mapa -Shows a map image.=Pokazuje obraz mapy. -When created, the map saves the nearby area as an image that can be viewed any time by holding the map.=Gdy są utworzone mapy zapisują obszar okolicy jako obrazek, który może być oglądany przez trzymanie mapy w rękach. -Hold the map in your hand. This will display a map on your screen.=Weź mapę do ręki. To pokaże mapę na twoim ekranie. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr deleted file mode 100644 index 6c34007a9..000000000 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_maps -Empty Map=Пустая карта -Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Пустые карты не могут использоваться в качестве карт, но могут складываться в стопки, а также могут быть превращены в полноценные карты. -Rightclick to start using the map (which can't be stacked anymore).=Кликните правой, чтобы начать использовать карту (её больше нельзя будет уложить в стопку). -Map=Карта diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.zh_TW.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.zh_TW.tr deleted file mode 100644 index 62206306c..000000000 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.zh_TW.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_maps -Empty Map=空地圖 -Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=空的地圖作為地圖是沒有用的,但它們可以被疊加,並變成可以使用的地圖。 -Rightclick to start using the map (which can't be stacked anymore).=右鍵單擊以開始使用地圖(該地圖無法再堆疊)。 -Map=地圖 -Maps show your surroundings as you explore the world.=當您探索世界時,地圖會顯示您的周圍環境。 -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=在任何一個熱鍵槽中放置地圖。這允許你通過按小地圖鍵來訪問小地圖(見控制設置)。 -In Creative Mode, you don't need this item; the minimap is always available.=在創造模式下,您不需要此項目; 小地圖始終可用。 -Enables minimap=啓用小地圖 -Use the minimap key to show the map.=使用小地圖鍵來顯示小地圖。 diff --git a/mods/ITEMS/mcl_maps/locale/template.txt b/mods/ITEMS/mcl_maps/locale/template.txt deleted file mode 100644 index 27298d2ec..000000000 --- a/mods/ITEMS/mcl_maps/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_maps -Empty Map= -Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.= -Rightclick to create a filled map (which can't be stacked anymore).= -Map= -Shows a map image.= -When created, the map saves the nearby area as an image that can be viewed any time by holding the map.= -Hold the map in your hand. This will display a map on your screen.= diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf deleted file mode 100644 index e1f068963..000000000 --- a/mods/ITEMS/mcl_maps/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_maps -depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors, mcl_skins, mcl_util diff --git a/mods/ITEMS/mcl_maps/palettes.json b/mods/ITEMS/mcl_maps/palettes.json deleted file mode 100644 index 958882a16..000000000 --- a/mods/ITEMS/mcl_maps/palettes.json +++ /dev/null @@ -1 +0,0 @@ -{"mcl_core_palette_grass.png": [[109, 196, 117], [159, 193, 114], [118, 177, 120], [118, 177, 120], [107, 186, 107], [118, 177, 120], [92, 182, 119], [92, 182, 119], [92, 182, 119], [92, 182, 119], [118, 177, 120], [109, 196, 117], [35, 175, 105], [94, 190, 107], [94, 190, 107], [94, 190, 107], [94, 190, 107], [159, 193, 114], [76, 176, 84], [164, 150, 110], [164, 150, 110], [164, 150, 110], [164, 150, 110], [159, 193, 114], [93, 181, 76], [93, 181, 76], [93, 181, 76], [93, 181, 76], [76, 118, 60], [94, 190, 107], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117]]} \ No newline at end of file diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_background.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_background.png deleted file mode 100644 index 9eeb0ea56..000000000 Binary files a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_background.png and /dev/null differ diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_empty.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_empty.png deleted file mode 100644 index 4fe7724b4..000000000 Binary files a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_empty.png and /dev/null differ diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled.png deleted file mode 100644 index d5dc8fe27..000000000 Binary files a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled.png and /dev/null differ diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled_markings.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled_markings.png deleted file mode 100644 index c8a49891b..000000000 Binary files a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled_markings.png and /dev/null differ diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_player_arrow.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_player_arrow.png deleted file mode 100644 index 3f58f6765..000000000 Binary files a/mods/ITEMS/mcl_maps/textures/mcl_maps_player_arrow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_player_dot.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_player_dot.png deleted file mode 100644 index 391197c40..000000000 Binary files a/mods/ITEMS/mcl_maps/textures/mcl_maps_player_dot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/init.lua b/mods/ITEMS/mcl_mobitems/init.lua deleted file mode 100644 index 6b3c9bec4..000000000 --- a/mods/ITEMS/mcl_mobitems/init.lua +++ /dev/null @@ -1,489 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_craftitem("mcl_mobitems:rotten_flesh", { - description = S("Rotten Flesh"), - _tt_help = minetest.colorize(mcl_colors.YELLOW, S("80% chance of food poisoning")), - _doc_items_longdesc = S("Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while."), - inventory_image = "mcl_mobitems_rotten_flesh.png", - wield_image = "mcl_mobitems_rotten_flesh.png", - on_place = minetest.item_eat(4), - on_secondary_use = minetest.item_eat(4), - groups = { food = 2, eatable = 4 }, - _mcl_saturation = 0.8, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:mutton", { - description = S("Raw Mutton"), - _doc_items_longdesc = S("Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value."), - inventory_image = "mcl_mobitems_mutton_raw.png", - wield_image = "mcl_mobitems_mutton_raw.png", - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), - groups = { food = 2, eatable = 2, smoker_cookable = 1 }, - _mcl_saturation = 1.2, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:cooked_mutton", { - description = S("Cooked Mutton"), - _doc_items_longdesc = S("Cooked mutton is the cooked flesh from a sheep and is used as food."), - inventory_image = "mcl_mobitems_mutton_cooked.png", - wield_image = "mcl_mobitems_mutton_cooked.png", - on_place = minetest.item_eat(6), - on_secondary_use = minetest.item_eat(6), - groups = { food = 2, eatable = 6 }, - _mcl_saturation = 9.6, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:beef", { - description = S("Raw Beef"), - _doc_items_longdesc = S("Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value."), - inventory_image = "mcl_mobitems_beef_raw.png", - wield_image = "mcl_mobitems_beef_raw.png", - on_place = minetest.item_eat(3), - on_secondary_use = minetest.item_eat(3), - groups = { food = 2, eatable = 3, smoker_cookable = 1 }, - _mcl_saturation = 1.8, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:cooked_beef", { - description = S("Steak"), - _doc_items_longdesc = S("Steak is cooked beef from cows and can be eaten."), - inventory_image = "mcl_mobitems_beef_cooked.png", - wield_image = "mcl_mobitems_beef_cooked.png", - on_place = minetest.item_eat(8), - on_secondary_use = minetest.item_eat(8), - groups = { food = 2, eatable = 8 }, - _mcl_saturation = 12.8, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:chicken", { - description = S("Raw Chicken"), - _tt_help = minetest.colorize(mcl_colors.YELLOW, S("30% chance of food poisoning")), - _doc_items_longdesc = S("Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value."), - inventory_image = "mcl_mobitems_chicken_raw.png", - wield_image = "mcl_mobitems_chicken_raw.png", - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), - groups = { food = 2, eatable = 2, smoker_cookable = 1 }, - _mcl_saturation = 1.2, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:cooked_chicken", { - description = S("Cooked Chicken"), - _doc_items_longdesc = S("A cooked chicken is a healthy food item which can be eaten."), - inventory_image = "mcl_mobitems_chicken_cooked.png", - wield_image = "mcl_mobitems_chicken_cooked.png", - on_place = minetest.item_eat(6), - on_secondary_use = minetest.item_eat(6), - groups = { food = 2, eatable = 6 }, - _mcl_saturation = 7.2, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:porkchop", { - description = S("Raw Porkchop"), - _doc_items_longdesc = S("A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value."), - inventory_image = "mcl_mobitems_porkchop_raw.png", - wield_image = "mcl_mobitems_porkchop_raw.png", - on_place = minetest.item_eat(3), - on_secondary_use = minetest.item_eat(3), - groups = { food = 2, eatable = 3, smoker_cookable = 1 }, - _mcl_saturation = 1.8, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:cooked_porkchop", { - description = S("Cooked Porkchop"), - _doc_items_longdesc = S("Cooked porkchop is the cooked flesh of a pig and is used as food."), - inventory_image = "mcl_mobitems_porkchop_cooked.png", - wield_image = "mcl_mobitems_porkchop_cooked.png", - on_place = minetest.item_eat(8), - on_secondary_use = minetest.item_eat(8), - groups = { food = 2, eatable = 8 }, - _mcl_saturation = 12.8, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:rabbit", { - description = S("Raw Rabbit"), - _doc_items_longdesc = S("Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value."), - inventory_image = "mcl_mobitems_rabbit_raw.png", - wield_image = "mcl_mobitems_rabbit_raw.png", - on_place = minetest.item_eat(3), - on_secondary_use = minetest.item_eat(3), - groups = { food = 2, eatable = 3, smoker_cookable = 1 }, - _mcl_saturation = 1.8, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:cooked_rabbit", { - description = S("Cooked Rabbit"), - _doc_items_longdesc = S("This is a food item which can be eaten."), - inventory_image = "mcl_mobitems_rabbit_cooked.png", - wield_image = "mcl_mobitems_rabbit_cooked.png", - on_place = minetest.item_eat(5), - on_secondary_use = minetest.item_eat(5), - groups = { food = 2, eatable = 5 }, - _mcl_saturation = 6.0, - stack_max = 64, -}) - --- Reset food poisoning and status effects -local function drink_milk(itemstack, player, pointed_thing) - local bucket = minetest.do_item_eat(0, "mcl_buckets:bucket_empty", itemstack, player, pointed_thing) - -- Check if we were allowed to drink this (eat delay check) - if mcl_hunger.active and (bucket:get_name() ~= "mcl_mobitems:milk_bucket" or minetest.is_creative_enabled(player:get_player_name())) then - mcl_hunger.stop_poison(player) - end - mcl_potions._reset_player_effects(player) - return bucket -end - -minetest.register_craftitem("mcl_mobitems:milk_bucket", { - description = S("Milk"), - _tt_help = minetest.colorize(mcl_colors.GREEN, S("Removes all status effects")), - _doc_items_longdesc = S("Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points."), - _doc_items_usagehelp = S("Use the placement key to drink the milk."), - inventory_image = "mcl_mobitems_bucket_milk.png", - wield_image = "mcl_mobitems_bucket_milk.png", - on_place = drink_milk, - on_secondary_use = drink_milk, - stack_max = 1, - groups = { food = 3, can_eat_when_full = 1 }, -}) - -minetest.register_craftitem("mcl_mobitems:spider_eye", { - description = S("Spider Eye"), - _tt_help = minetest.colorize(mcl_colors.YELLOW, S("Poisonous")), - _doc_items_longdesc = S("Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly."), - inventory_image = "mcl_mobitems_spider_eye.png", - wield_image = "mcl_mobitems_spider_eye.png", - on_place = minetest.item_eat(2), - on_secondary_use = minetest.item_eat(2), - groups = { food = 2, eatable = 2, brewitem = 1 }, - _mcl_saturation = 3.2, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:bone", { - description = S("Bone"), - _doc_items_longdesc = S("Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient."), - _doc_items_usagehelp = S("Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it."), - inventory_image = "mcl_mobitems_bone.png", - stack_max = 64, - groups = { craftitem=1 }, - _mcl_toollike_wield = true, -}) - -minetest.register_craftitem("mcl_mobitems:string",{ - description = S("String"), - _doc_items_longdesc = S("Strings are used in crafting."), - inventory_image = "mcl_mobitems_string.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_mobitems:blaze_rod", { - description = S("Blaze Rod"), - _doc_items_longdesc = S("This is a crafting component dropped from dead blazes."), - wield_image = "mcl_mobitems_blaze_rod.png", - inventory_image = "mcl_mobitems_blaze_rod.png", - groups = { craftitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:blaze_powder", { - description = S("Blaze Powder"), - _doc_items_longdesc = S("This item is mainly used for crafting."), - wield_image = "mcl_mobitems_blaze_powder.png", - inventory_image = "mcl_mobitems_blaze_powder.png", - groups = { craftitem = 1, brewitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:magma_cream", { - description = S("Magma Cream"), - _doc_items_longdesc = S("Magma cream is a crafting component."), - wield_image = "mcl_mobitems_magma_cream.png", - inventory_image = "mcl_mobitems_magma_cream.png", - groups = { craftitem = 1, brewitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:ghast_tear", { - description = S("Ghast Tear"), - _doc_items_longdesc = S("Place this item in an item frame as decoration."), - wield_image = "mcl_mobitems_ghast_tear.png", - inventory_image = "mcl_mobitems_ghast_tear.png", - groups = { brewitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:nether_star", { - description = S("Nether Star"), - _doc_items_longdesc = S("A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration."), - wield_image = "mcl_mobitems_nether_star.png", - inventory_image = "mcl_mobitems_nether_star.png", - -- TODO: Reveal item when it's useful - groups = { craftitem = 1, not_in_creative_inventory = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:leather", { - description = S("Leather"), - _doc_items_longdesc = S("Leather is a versatile crafting component."), - wield_image = "mcl_mobitems_leather.png", - inventory_image = "mcl_mobitems_leather.png", - groups = { craftitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:feather", { - description = S("Feather"), - _doc_items_longdesc = S("Feathers are used in crafting and are dropped from chickens."), - wield_image = "mcl_mobitems_feather.png", - inventory_image = "mcl_mobitems_feather.png", - groups = { craftitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:rabbit_hide", { - description = S("Rabbit Hide"), - _doc_items_longdesc = S("Rabbit hide is used to create leather."), - wield_image = "mcl_mobitems_rabbit_hide.png", - inventory_image = "mcl_mobitems_rabbit_hide.png", - groups = { craftitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:rabbit_foot", { - description = S("Rabbit's Foot"), - _doc_items_longdesc = S("Must be your lucky day! Place this item in an item frame for decoration."), - wield_image = "mcl_mobitems_rabbit_foot.png", - inventory_image = "mcl_mobitems_rabbit_foot.png", - groups = { brewitem = 1 }, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_mobitems:saddle", { - description = S("Saddle"), - _tt_help = S("Can be placed on animals to ride them"), - _doc_items_longdesc = S("Saddles can be put on some animals in order to mount them."), - _doc_items_usagehelp = S("Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again."), - wield_image = "mcl_mobitems_saddle.png", - inventory_image = "mcl_mobitems_saddle.png", - groups = { transport = 1 }, - stack_max = 1, -}) - -minetest.register_craftitem("mcl_mobitems:rabbit_stew", { - description = S("Rabbit Stew"), - _doc_items_longdesc = S("Rabbit stew is a very nutricious food item."), - wield_image = "mcl_mobitems_rabbit_stew.png", - inventory_image = "mcl_mobitems_rabbit_stew.png", - stack_max = 1, - on_place = minetest.item_eat(10, "mcl_core:bowl"), - on_secondary_use = minetest.item_eat(10, "mcl_core:bowl"), - groups = { food = 3, eatable = 10 }, - _mcl_saturation = 12.0, -}) - -minetest.register_craftitem("mcl_mobitems:shulker_shell", { - description = S("Shulker Shell"), - _doc_items_longdesc = S("Shulker shells are used in crafting. They are dropped from dead shulkers."), - inventory_image = "mcl_mobitems_shulker_shell.png", - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_mobitems:slimeball", { - description = S("Slimeball"), - _doc_items_longdesc = S("Slimeballs are used in crafting. They are dropped from slimes."), - inventory_image = "mcl_mobitems_slimeball.png", - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_mobitems:gunpowder", { - description = S("Gunpowder"), - _doc_items_longdesc = doc.sub.items.temp.craftitem, - inventory_image = "default_gunpowder.png", - stack_max = 64, - groups = { craftitem=1, brewitem = 1 }, -}) - -minetest.register_tool("mcl_mobitems:carrot_on_a_stick", { - description = S("Carrot on a Stick"), - _tt_help = S("Lets you ride a saddled pig"), - _doc_items_longdesc = S("A carrot on a stick can be used on saddled pigs to ride them."), - _doc_items_usagehelp = S("Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick."), - wield_image = "mcl_mobitems_carrot_on_a_stick.png", - inventory_image = "mcl_mobitems_carrot_on_a_stick.png", - groups = { transport = 1 }, - _mcl_toollike_wield = true, -}) - -local horse_armor_use = S("Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.") - -minetest.register_craftitem("mcl_mobitems:iron_horse_armor", { - description = S("Iron Horse Armor"), - _doc_items_longdesc = S("Iron horse armor can be worn by horses to increase their protection from harm a bit."), - _doc_items_usagehelp = horse_armor_use, - inventory_image = "mcl_mobitems_iron_horse_armor.png", - _horse_overlay_image = "mcl_mobitems_horse_armor_iron.png", - sounds = { - _mcl_armor_equip = "mcl_armor_equip_iron", - }, - stack_max = 1, - groups = { horse_armor = 85 }, -}) - -minetest.register_craftitem("mcl_mobitems:gold_horse_armor", { - description = S("Golden Horse Armor"), - _doc_items_longdesc = S("Golden horse armor can be worn by horses to increase their protection from harm."), - _doc_items_usagehelp = horse_armor_use, - inventory_image = "mcl_mobitems_gold_horse_armor.png", - _horse_overlay_image = "mcl_mobitems_horse_armor_gold.png", - sounds = { - _mcl_armor_equip = "mcl_armor_equip_iron", - }, - stack_max = 1, - groups = { horse_armor = 60 }, -}) - -minetest.register_craftitem("mcl_mobitems:diamond_horse_armor", { - description = S("Diamond Horse Armor"), - _doc_items_longdesc = S("Diamond horse armor can be worn by horses to greatly increase their protection from harm."), - _doc_items_usagehelp = horse_armor_use, - inventory_image = "mcl_mobitems_diamond_horse_armor.png", - _horse_overlay_image = "mcl_mobitems_horse_armor_diamond.png", - sounds = { - _mcl_armor_equip = "mcl_armor_equip_diamond", - }, - stack_max = 1, - groups = { horse_armor = 45 }, -}) - -minetest.register_alias("mobs_mc:iron_horse_armor", "mcl_mobitems:iron_horse_armor") -minetest.register_alias("mobs_mc:gold_horse_armor", "mcl_mobitems:gold_horse_armor") -minetest.register_alias("mobs_mc:diamond_horse_armor", "mcl_mobitems:diamond_horse_armor") - ------------ --- Crafting ------------ - -minetest.register_craft({ - output = "mcl_mobitems:leather", - recipe = { - { "mcl_mobitems:rabbit_hide", "mcl_mobitems:rabbit_hide" }, - { "mcl_mobitems:rabbit_hide", "mcl_mobitems:rabbit_hide" }, - } -}) - -minetest.register_craft({ - output = "mcl_mobitems:blaze_powder 2", - recipe = {{"mcl_mobitems:blaze_rod"}}, -}) - -minetest.register_craft({ - output = "mcl_mobitems:rabbit_stew", - recipe = { - { "", "mcl_mobitems:cooked_rabbit", "", }, - { "group:mushroom", "mcl_farming:potato_item_baked", "mcl_farming:carrot_item", }, - { "", "mcl_core:bowl", "", }, - }, -}) - -minetest.register_craft({ - output = "mcl_mobitems:rabbit_stew", - recipe = { - { "", "mcl_mobitems:cooked_rabbit", "", }, - { "mcl_farming:carrot_item", "mcl_farming:potato_item_baked", "group:mushroom", }, - { "", "mcl_core:bowl", "", }, - }, -}) - -minetest.register_craft({ - output = "mcl_mobitems:carrot_on_a_stick", - recipe = { - { "mcl_fishing:fishing_rod", "", }, - { "", "mcl_farming:carrot_item" }, - }, -}) - -minetest.register_craft({ - output = "mcl_mobitems:carrot_on_a_stick", - recipe = { - { "", "mcl_fishing:fishing_rod", }, - { "mcl_farming:carrot_item", "" }, - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_mobitems:magma_cream", - recipe = {"mcl_mobitems:blaze_powder", "mcl_mobitems:slimeball"}, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_mobitems:cooked_mutton", - recipe = "mcl_mobitems:mutton", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_mobitems:cooked_rabbit", - recipe = "mcl_mobitems:rabbit", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_mobitems:cooked_chicken", - recipe = "mcl_mobitems:chicken", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_mobitems:cooked_beef", - recipe = "mcl_mobitems:beef", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_mobitems:cooked_porkchop", - recipe = "mcl_mobitems:porkchop", - cooktime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_mobitems:blaze_rod", - burntime = 120, -}) - -minetest.register_craft({ - output = "mcl_mobitems:slimeball 9", - recipe = {{"mcl_core:slimeblock"}}, -}) - -minetest.register_craft({ - output = "mcl_core:slimeblock", - recipe = {{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}, - {"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}, - {"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}}, -}) - -minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, user, pointed_thing) -- poisoning with spider eye - if itemstack:get_name() == "mcl_mobitems:spider_eye" then - mcl_potions.poison_func(user, 1, 4) - end -end) diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.de.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.de.tr deleted file mode 100644 index f9a0aaf50..000000000 --- a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.de.tr +++ /dev/null @@ -1,102 +0,0 @@ -# textdomain: mcl_mobitems -Rotten Flesh=Gammelfleisch -80% chance of food poisoning=80% Wahrscheinlichkeit von Lebensmittelvergiftung - -Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while.=Igitt! Dieses Stück Fleisch hat wohl bessere Tage gesehen. Wenn Sie es essen, werden Sie sofort vergiftet und erleiden einen Schaden von 4 Trefferpunkten. Aber gezähmte Wölfe können es problemlos fressen. - -Raw Mutton=Rohes Hammelfleisch - -Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.=Rohes Hammelfleisch ist das Fleisch eines Schafes und ein Lebensmittel, welches bedenkenlos verzehrt werden kann. Es kann gebraten werden, um seinen Nährwert deutlich zu erhöhen. - -Cooked Mutton=Gebratenes Hammelfleisch -Cooked mutton is the cooked flesh from a sheep and is used as food.=Gebratenes Hammelfleisch ist das gebratene Fleisch eines Schafs und dient als Lebensmittel. -Raw Beef=Rohes Rindfleisch - -Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.=Rohes Rindfleisch ist das Fleisch von Kühen und kann problemlos gegessen werden. Es kann gegart werden, um den Nährwert deutlich zu erhöhen. - -Steak=Steak -Steak is cooked beef from cows and can be eaten.=Steak ist gebratenes Rindfleisch und kann gegessen werden. -Raw Chicken=Rohes Hühnchen -30% chance of food poisoning=30% Wahrscheinlichkeit von Lebensmittelvergiftung - -Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value.=Rohes Hühnchen ist ein Lebensmittel, das nicht sicher für den Verzehr ist. Sie können es essen, um ein paar Hungerpunkte zu erhalten, aber mit einer Wahrscheinlichkeit von 30% erleiden Sie eine Lebensmittelvergiftung, die Ihre Hungerrate für eine Weile erhöht. Braten Sie ein rohes Hühnchen, um es sicher zuzubereiten und den Nährwert zu erhöhen. - -Cooked Chicken=Gebratenes Hühnchen -A cooked chicken is a healthy food item which can be eaten.=Ein gebratenes Hühnchen ist ein gesundes essbares Lebensmittel. -Raw Porkchop=Rohes Schweinefleisch - -A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Ein rohes Stück Schweinefleisch kann bedenkenlos gegessen werden. Man kann es braten, um seinen Nährwert stark zu erhöhen. - -Cooked Porkchop=Gebratenes Schweinefleisch -Cooked porkchop is the cooked flesh of a pig and is used as food.=Ein gebratenes Stück Schweinefleisch ist ein gutes Lebensmittel. -Raw Rabbit=Rohes Kaninchen - -Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.=Rohes Kaninchenfleisch ist ein Lebensmittel, welches bedenkenlos verzehrt werden kann. Es kann gebraten werden, um seinen Nährwert zu erhöhen. - -Cooked Rabbit=Gebratenes Kaninchen -This is a food item which can be eaten.=Dies ist ein essbares Lebensmittel. -Milk=Milch -Removes all status effects=Entfernt alle Statuseffekte - -Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.=Milch ist sehr erfrischend. Milch erhält man, indem man einen Eimer an einer Kuh benutzt. Wenn die Milch getrunken wird, werden alle Statuseffekte entfernt, aber es werden keine Hungerpunkte wiederhergestellt. - -Use the placement key to drink the milk.=Platzierungstaste benutzen, um Milch zu trinken. -Spider Eye=Spinnenauge -Poisonous=Giftig - -Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly.=Spinnenaugen werden hauptsächlich in der Fertigung benutzt. Wenn Sie wirklich verzweifelt sind, können sie es essen, aber das wird Sie kurz vergiften. - -Bone=Knochen - -Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.=Knochen können benutzt werden, um Wölfe zu zähmen, damit sie einen beschützen. Sie außerdem nützlich in der Fertigung. - -Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it.=Halten Sie den Knochen in der Nähe von Wölfen, um sie anzulocken. Benutzen Sie die „Platzieren“-Taste auf dem Wolf, um ihm den Knochen zu geben und ihn zu zähmen. Sie können dem gezähmten Wolf Befehle erteilen, indem Sie die „Platzieren“-Taste auf ihm benutzen. - -String=Faden -Strings are used in crafting.=Fäden sind nützlich in der Fertigung. -Blaze Rod=Lohenrute -This is a crafting component dropped from dead blazes.=Dies ist eine Fertigungskomponente, die von toten Lohen abgeworfen wird. -Blaze Powder=Lohenstaub -This item is mainly used for crafting.=Dieser Gegenstand wird hauptsächlich in der Fertigung benutzt. -Magma Cream=Magmacreme -Magma cream is a crafting component.=Magmacreme ist eine Fertigungskomponente. -Ghast Tear=Ghast-Träne -Place this item in an item frame as decoration.=Platzieren Sie diesen Gegenstand in einem Rahmen als Deko. -Nether Star=Nether-Stern - -A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.=Ein Netherstern wird abgeworfen, wenn der Wither stirbt. Platzieren Sie ihn in einen Rahmen, um der Welt zu zeigen, wie großartig Sie sind! - -Leather=Leder -Leather is a versatile crafting component.=Leder ist eine vielseitige Fertigungskomponente. -Feather=Feder -Feathers are used in crafting and are dropped from chickens.=Federn werden in der Fertigung benutzt und werden von Hühnern abgeworfen. -Rabbit Hide=Kaninchenfell -Rabbit hide is used to create leather.=Kaninchenfell wird zur Herstellung von Leder benutzt. -Rabbit's Foot=Hasenpfote -Must be your lucky day! Place this item in an item frame for decoration.=Muss wohl Ihr Glückstag sein! Platzieren Sie diesen Gegenstand in einen Rahmen zur Dekoration. -Saddle=Sattel -Can be placed on animals to ride them=Kann auf Tieren platziert werden, um sie zu reiten -Saddles can be put on some animals in order to mount them.=Sattel können auf einigen Tieren platziert werden, um sich aufzusatteln. - -Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.=Platzierungstaste benutzen, während man den Sattel in der Hand hält, um zu versuchen, den Sattel anzulegen. Sattel passen auf Pferde, Maultiere, Esel und Schweine. Pferde, Maultiere und Esel müssen zuerst gezähmt werden, sonst werden sie den Sattel abweisen. Mit der Platzierungstaste kann man aufsatteln. - -Rabbit Stew=Kaninchenragout -Rabbit stew is a very nutricious food item.=Kaninchenragout ist ein sehr nahrhaftes Lebensmittel. -Shulker Shell=Schulkerschale -Shulker shells are used in crafting. They are dropped from dead shulkers.=Schulkerschalen werden für die Fertigung verwendet. Sie werden von toten Schulkern fallen gelassen. -Slimeball=Schleimkugel -Slimeballs are used in crafting. They are dropped from slimes.=Schleimkugeln werden in der Fertigung verwendet. Sie werden von Schleimen fallen gelassen. -Gunpowder=Schießpulver -Carrot on a Stick=Karottenrute -Lets you ride a saddled pig=Um auf gesattelten Schweinen zu reiten -A carrot on a stick can be used on saddled pigs to ride them.=Eine Karottenrute kann auf gesattelten Schweinen angewendet werden, um sie zu reiten. - -Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Platzieren Sie sie auf einem Schwein mit Sattel, um sich aufzusatteln. Sie können nun das Schwein wie ein Pferd reiten. Schweine werden auch auf Sie zugehen, wenn Sie einfach nur die Karottenrute halten. - -Iron Horse Armor=Eisenpferderüstung -Iron horse armor can be worn by horses to increase their protection from harm a bit.=Eine Eisenpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden etwas zu erhöhen. -Golden Horse Armor=Goldpferderüstung -Golden horse armor can be worn by horses to increase their protection from harm.=Eine Goldpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden zu erhöhen. -Diamond Horse Armor=Diamantpferderüstung -Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Eine Diamantpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden beträchtlich zu erhöhen. -Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Platzieren Sie es auf einem Pferd, um die Pferderüstung aufzusetzen. Esel und Maultiere können keine Pferderüstung tragen. diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.es.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.es.tr deleted file mode 100644 index 9b149788a..000000000 --- a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.es.tr +++ /dev/null @@ -1,107 +0,0 @@ -# textdomain: mcl_mobitems -Rotten Flesh=Carne podrida -80% chance of food poisoning= - -Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while.=¡Qué asco! Este pedazo de carne claramente ha tenido días mejores. Si está realmente estas desesperado, puedes comerlo para restablecer algunos puntos de hambre, pero hay un 80% de posibilidades de que cause intoxicación alimentaria, lo que aumenta su hambre por un tiempo. - -Raw Mutton=Cordero crudo - -Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.=El cordero crudo es la carne de una oveja y se puede comer de manera segura. Cocinarlo aumentará en gran medida su valor nutricional. - -Cooked Mutton=Cordero cocinado -Cooked mutton is the cooked flesh from a sheep and is used as food.=El cordero cocinado es la carne cocinada de oveja y se usa como alimento. -Raw Beef=Filete crudo - -Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.=La carne cruda es la carne de las vacas y se puede comer de manera segura. Cocinarlo aumentará en gran medida su valor nutricional. - -Steak=Filete cocinado -Steak is cooked beef from cows and can be eaten.=El filete cocinado se cocina con filetes crudos de vaca y se puede comer. -Raw Chicken=Pollo crudo -30% chance of food poisoning= - -Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value.=El pollo crudo es un alimento que no es seguro consumir. Puedes comerlo para restaurar algunos puntos de hambre, pero hay un 30% de posibilidades de sufrir intoxicación alimentaria, lo que aumenta su tasa de hambre por un tiempo. Cocinar pollo crudo hará que sea seguro comerlo y aumentará su valor nutricional. - -Cooked Chicken=Pollo cocinado -A cooked chicken is a healthy food item which can be eaten.=Un pollo cocinado es un alimento saludable que se puede comer. -Raw Porkchop=Chuleta de cerdo cruda - -A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Una chuleta de cerdo cruda es la carne de un cerdo y se puede comer de manera segura. Cocinarlo aumentará en gran medida su valor nutricional. - -Cooked Porkchop=Chuleta de cerdo cocinada -Cooked porkchop is the cooked flesh of a pig and is used as food.=La chuleta de cerdo cocinada es la carne cocida de un cerdo y se usa como alimento. -Raw Rabbit=Conejo crudo - -Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.=El conejo crudo es un alimento de un conejo muerto. Se puede comer de forma segura. Cocinar aumentará su valor nutricional. - -Cooked Rabbit=Conejo cocinado -This is a food item which can be eaten.=Este es un alimento que se puede comer. -Milk=Leche -Removes all status effects= - -Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.= - -Use the placement key to drink the milk.= -Spider Eye=Ojo de araña -Poisonous= - -Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly.=Los ojos de araña se utilizan principalmente en la elaboración. Si estás realmente desesperado, puedes comerte un ojo de araña, pero te envenenará brevemente. - -Bone=Hueso - -Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.=Los huesos se pueden usar para domar a los lobos para que te protejan. También son útiles como ingrediente de elaboración. - -Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it.=Empuña el hueso cerca de los lobos para atraerlos. Usa la tecla "Colocar" en el lobo para darle un hueso y domesticarlo. Luego puede dar órdenes al lobo domesticado utilizando la tecla "Colocar". - -String=Cuerda -Strings are used in crafting.=Las cuerdas se usan en la elaboración. -Blaze Rod=Vara de blaze -This is a crafting component dropped from dead blazes.=Este es un componente de artesanía caído de llamas muertas. -Blaze Powder=Polvo de blaze -This item is mainly used for crafting.=Este artículo se usa principalmente para la elaboración. -Magma Cream=Crema de magma -Magma cream is a crafting component.=La crema de magma es un componente de elaboración. -Ghast Tear=Lágrima espectral -Place this item in an item frame as decoration.=Coloque este artículo en un marco de artículo como decoración. -Nether Star=Estrella del Nether - -A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.=Se cae una estrella cuando muere un Wither. ¡Colócalo en el marco de un objeto para mostrarle al mundo lo duro que eres! O simplemente como decoración. - -Leather=Cuero -Leather is a versatile crafting component.=El cuero es un componente de elaboración versátil. -Feather=Pluma -Feathers are used in crafting and are dropped from chickens.=Las plumas se usan en la elaboración y se sueltan de los pollos. -Rabbit Hide=Piel de conejo -Rabbit hide is used to create leather.=La piel de conejo se usa para crear cuero. -Rabbit's Foot=Pata de conejo -Must be your lucky day! Place this item in an item frame for decoration.=¡Debe ser tu día de suerte! Coloque este artículo en un marco de artículos para la decoración. -Saddle=Montura -Can be placed on animals to ride them= -Saddles can be put on some animals in order to mount them.=Se pueden poner monturas en algunos animales para montarlos. - -Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.= - -Rabbit Stew=Estofado de conejo -Rabbit stew is a very nutricious food item.=El estofado de conejo es un alimento muy nutritivo. -Shulker Shell=Caparazón de shulker -Shulker shells are used in crafting. They are dropped from dead shulkers.=Los caparazones de shulker se usan en la fabricación. Son obtenidos de shulkers muertos. -Slimeball=Bola de slime -Slimeballs are used in crafting. They are dropped from slimes.=Las bolas de slime se usan en la elaboración. Se obtienen de slimes. -Gunpowder=Pólvora -Carrot on a Stick=Caña con zanahoria -Lets you ride a saddled pig= -A carrot on a stick can be used on saddled pigs to ride them.=La caña con zanahoria se puede usar en cerdos ensillados para montarlos. - -Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Colóquelo sobre un cerdo ensillado para montarlo. Ahora puedes montar el cerdo como un caballo. Los cerdos también caminarán hacia ti cuando solo manejes la zanahoria en un palo. - -Iron Horse Armor=Armadura de hierro para caballo -Iron horse armor can be worn by horses to increase their protection from harm a bit.=Los caballos pueden usar armadura de caballo de hierro para aumentar un poco su protección contra el daño. -Golden Horse Armor=Armadura de oro para caballo -Golden horse armor can be worn by horses to increase their protection from harm.=Los caballos pueden usar armadura de caballo de oro para aumentar su protección contra el daño. -Diamond Horse Armor=Armadura de diamante para caballo -Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Los caballos pueden usar armadura de caballo de diamante para aumentar en gran medida su protección contra el daño. -Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Colóquelo en un caballo para ponerle la armadura de caballo. Los burros y las mulas no pueden usar armadura de caballo. - -##### not used anymore ##### - - -Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will cure all forms of poisoning, but restores no hunger points.=La leche es muy refrescante y se puede obtener usando un cubo en una vaca. Beberlo curará todas las formas de envenenamiento, pero no restaura los puntos de hambre. diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.fr.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.fr.tr deleted file mode 100644 index 8353054ab..000000000 --- a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.fr.tr +++ /dev/null @@ -1,102 +0,0 @@ -# textdomain: mcl_mobitems -Rotten Flesh=Chair Putréfiée -80% chance of food poisoning=80% de chances d'intoxication alimentaire - -Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while.=Beurk! Ce morceau de chair a clairement connu des jours meilleurs. Si vous êtes vraiment désespéré, vous pouvez le manger pour restaurer quelques points de faim, mais il y a 80% de chances qu'il provoque une intoxication alimentaire, ce qui augmente votre faim pendant un certain temps. - -Raw Mutton=Mouton Cru - -Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.=Le mouton cru est la chair d'un mouton et peut être mangé en toute sécurité. La cuisson augmentera considérablement sa valeur nutritive. - -Cooked Mutton=Mouton Cuit -Cooked mutton is the cooked flesh from a sheep and is used as food.=Le mouton cuit est la chair cuite d'un mouton et est utilisé comme nourriture. -Raw Beef=Boeuf Cru - -Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.=Le boeuf cru est la chair des vaches et peut être mangé en toute sécurité. La cuisson augmentera considérablement sa valeur nutritive. - -Steak=Steak -Steak is cooked beef from cows and can be eaten.=Le steak est du boeuf cuit et peut être mangé. -Raw Chicken=Poulet Cru -30% chance of food poisoning=30% de chances d'intoxication alimentaire - -Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value.=Le poulet cru est un aliment qui n'est pas sûr à consommer. Vous pouvez le manger pour restaurer quelques points de faim, mais il y a 30% de chances de souffrir d'intoxication alimentaire, ce qui augmente votre taux de faim pendant un certain temps. La cuisson du poulet cru le rendra sûr à manger et augmentera sa valeur nutritive. - -Cooked Chicken=Poulet Cuit -A cooked chicken is a healthy food item which can be eaten.=Un poulet cuit est un aliment sain qui peut être mangé. -Raw Porkchop=Porc Cru - -A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Un porc cru est la chair d'un porc et peut être mangée en toute sécurité. La cuisson augmentera considérablement sa valeur nutritive. - -Cooked Porkchop=Porc Cuit -Cooked porkchop is the cooked flesh of a pig and is used as food.=Le porc cuit est la chair cuite d'un porc et est utilisé comme aliment. -Raw Rabbit=Lapin Cru - -Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.=Le lapin cru est un aliment provenant d'un lapin mort. Il peut être mangé en toute sécurité. La cuisson augmentera sa valeur nutritive. - -Cooked Rabbit=Lapin Cuit -This is a food item which can be eaten.=Il s'agit d'un aliment qui peut être mangé. -Milk=Lait -Removes all status effects=Supprime tous les effets de statut! - -Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.=Le lait est très rafraîchissant et peut être obtenu en utilisant un seau sur une vache. Le boire supprimera tous les effets de statut, mais ne restaure aucun point de faim. - -Use the placement key to drink the milk.=Utilisez la touche de placement pour boire le lait. -Spider Eye=Oeil d'Araignée -Poisonous=Toxique - -Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly.=Les yeux d'araignée sont utilisés principalement dans l'artisanat. Si vous êtes vraiment désespéré, vous pouvez manger un œil d'araignée, mais cela vous empoisonnera brièvement. - -Bone=Os - -Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.=Les os peuvent être utilisés pour apprivoiser les loups afin de vous protéger. Ils sont également utiles comme ingrédient d'artisanat. - -Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it.=Maniez l'os près des loups pour les attirer. Utilisez la touche «Placer» sur le loup pour lui donner un os et l'apprivoiser. Vous pouvez ensuite donner des commandes au loup apprivoisé en utilisant la touche "Placer" sur celui-ci. - -String=Ficelle -Strings are used in crafting.=Les ficelles sont utilisées dans l'artisanat. -Blaze Rod=Bâton de Blaze -This is a crafting component dropped from dead blazes.=Il s'agit d'un composant d'artisanat tombé des Blazes morts. -Blaze Powder=Poudre de Blaze -This item is mainly used for crafting.=Cet objet est principalement utilisé pour l'artisanat. -Magma Cream=Crème de Magma -Magma cream is a crafting component.=La crème de magma est un composant artisanal. -Ghast Tear=Larme de Ghast -Place this item in an item frame as decoration.=Placez cet article dans un cadre d'article comme décoration. -Nether Star=Étoile du Nether - -A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.=Une étoile du Nether est lâchée lorsque le Wither meurt. Placez-le dans un cadre d'objet pour montrer au monde à quel point vous êtes génial! Ou tout simplement comme décoration. - -Leather=Cuir -Leather is a versatile crafting component.=Le cuir est un élément d'artisanat polyvalent. -Feather=Plume -Feathers are used in crafting and are dropped from chickens.=Les plumes sont utilisées dans l'artisanat et tombent des poulets. -Rabbit Hide=Peau de Lapin -Rabbit hide is used to create leather.=La peau de lapin est utilisée pour créer du cuir. -Rabbit's Foot=Patte de Lapin -Must be your lucky day! Place this item in an item frame for decoration.=Ce doit être votre jour de chance! Placez cet article dans un cadre d'article pour la décoration. -Saddle=Selle -Can be placed on animals to ride them=Peut être placé sur les animaux pour les monter -Saddles can be put on some animals in order to mount them.=Des selles peuvent être posées sur certains animaux afin de les monter. - -Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.=Utilisez la touche de placement avec la selle à la main pour essayer de mettre la selle. Les selles conviennent aux chevaux, mulets, ânes et cochons. Les chevaux, les mulets et les ânes doivent d'abord être apprivoisés, sinon ils rejetteront la selle. Les animaux sellés peuvent être montés en utilisant à nouveau la touche de placement. - -Rabbit Stew=Ragout de Lapin -Rabbit stew is a very nutricious food item.=Le ragoût de lapin est un aliment très nutritif. -Shulker Shell=Carapace de Shulker -Shulker shells are used in crafting. They are dropped from dead shulkers.=Les carapaces Shulker sont utilisés dans l'artisanat. Ils sont lâchés de shulkers morts. -Slimeball=Boule de Slime -Slimeballs are used in crafting. They are dropped from slimes.=Les boules de slime sont utilisées dans l'artisanat. Ils sont lâchés par les Slimes. -Gunpowder=Poudre à canon -Carrot on a Stick=Carotte sur un Batôn -Lets you ride a saddled pig=Vous permet de monter un cochon sellé -A carrot on a stick can be used on saddled pigs to ride them.=Une carotte sur un bâton peut être utilisée sur les porcs sellés pour les monter. - -Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Placez-le sur un cochon sellé pour le monter. Vous pouvez maintenant monter le cochon comme un cheval. Les porcs marcheront également vers vous lorsque vous brandirez la carotte sur un bâton. - -Iron Horse Armor=Armure de cheval en fer -Iron horse armor can be worn by horses to increase their protection from harm a bit.=L'armure de cheval en fer peut être portée par les chevaux pour augmenter un peu leur protection contre les dommages. -Golden Horse Armor=Armure de cheval en or -Golden horse armor can be worn by horses to increase their protection from harm.=Une armure de cheval en or peut être portée par les chevaux pour augmenter leur protection contre les dommages. -Diamond Horse Armor=Armure de cheval en diamant -Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Une armure de cheval en diament peut être portée par les chevaux pour augmenter fortement leur protection contre les dommages. -Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Placez-la sur un cheval pour mettre l'armure de cheval. Les ânes et les mules ne peuvent pas porter d'armure de cheval. diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.pl.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.pl.tr deleted file mode 100644 index dd78a692f..000000000 --- a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.pl.tr +++ /dev/null @@ -1,96 +0,0 @@ -# textdomain: mcl_mobitems -Rotten Flesh=Zgniłe mięso -80% chance of food poisoning=80% szans na zatrucie pokarmowe - -Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while.=Fuj! Ten kawał mięsa zdecydowanie widział lepsze dni. Jeśli jesteś bardzo zdesperowana, możesz je zjeść by odzyskać kilka punktów głodu, ale jest 80 % szans, że spowoduje to zatrucie pokarmowe, które zwiększa chwilowo twój głód. - -Raw Mutton=Surowa baranina - -Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.=Surowa baranina to mięso z owcy, które może być bezpiecznie zjedzone. Upieczenie go znacząco zwiększy jego wartości odżywcze. - -Cooked Mutton=Pieczona baranina -Cooked mutton is the cooked flesh from a sheep and is used as food.=Upieczona baranina jest upieczonym mięsem z owcy i używana jako jedzenie. -Raw Beef=Surowa wołowina - -Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.=Surowa wołowina jest mięsem z krowy i może być bezpiecznie zjedzone. Upieczenie go znacząco zwiększy jego wartości odżywcze. - - -Steak=Befsztyk -Steak is cooked beef from cows and can be eaten.=Befsztyk jest upieczoną wołowiną z krowy i może być zjedzony. -Raw Chicken=Surowy drób -30% chance of food poisoning=30% szans na zatrucie pokarmowe - -Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value.=Surowy drób nie jest bezpieczny do jedzenia. Można go zjeść, co przywróci kilka punktów głodu, jednak jest 30% szans, że spowoduje to zatrucie pokarmowe, które chwilowo zwiększa głód. Upieczenie surowego drobiu sprawi, że będzie on bezpieczny do jedzenia i zwiększy jego wartości odżywcze. - -Cooked Chicken=Pieczony kurczak -A cooked chicken is a healthy food item which can be eaten.=Pieczony kurczak jest zdrowym jedzeniem, które można bezpiecznie zjeść. -Raw Porkchop=Surowy schab - -A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Surowy schab jest mięsem ze świni i może zostać bezpiecznie zjedzony. Upieczenie go znacząco zwiększy jego wartości odżywcze. - -Cooked Porkchop=Pieczony schab -Cooked porkchop is the cooked flesh of a pig and is used as food.=Pieczony schab to upieczone mięso świni i jest używane jako jedzenie. -Raw Rabbit=Surowy mięso królicze - -Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.=Surowy mięso królicze jest mięsem z martwego królika. Może zostać bezpiecznie zjedzone. Upieczenie go znacząco zwiększy jego wartości odżywcze. - -Cooked Rabbit=Pieczony królik -This is a food item which can be eaten.=Ten przedmiot można bezpiecznie zjeść. -Milk=Mleko -Removes all status effects=Usuwa wszystkie statusy efektów. - -Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.=Mleko jest bardzo odświeżające i może zostać uzyskane przez użycie wiadra na krowie. Wypicie go usunie wszystkie statusy efektów, ale nie przywróci punktów głodu. - -Use the placement key to drink the milk.=Kliknij przycisk umieszczania aby wypić mleko. -Spider Eye=Oko pająka -Poisonous=Trujące - -Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly.=Oczy pająka są użyteczne przy wytwarzaniu. Jeśli jesteś zdesperowana możesz je zjeść, ale otruje cię ono chwilowo. - -Bone=Kość - -Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.=Kości mogą być użyte do oswajania wilków, aby cię broniły. Są również użyteczne jako materiały do wytwarzania. - -Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it.=Trzymaj kość w pobliżu wilków aby je zwabić. Użyj przycisku "Umieść" na wilku aby dać mu kość i go oswoić. Możesz wtedy wydawać polecenia oswojonemu wilkowi klikając przycisk "Umieść" na nim. - -String=Nić -Strings are used in crafting.=Nić jest użyteczna w wytwarzaniu. -Blaze Rod=Płomienna różdżka -This is a crafting component dropped from dead blazes.=Jest to materiał do wytwarzania wypadający z martwych płomyków. -Blaze Powder=Płomienny proszek -This item is mainly used for crafting.=Ten przedmiot jest użyteczny w wytwarzaniu. -Magma Cream=Magmowy krem -Magma cream is a crafting component.=Magmowy krem to materiał do wytwarzania. -Ghast Tear=Łza Ghasta -Place this item in an item frame as decoration.=Umieść ten item w ramce jako dekorację. -Nether Star=Gwiazda Netheru - -A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.=Gwiazda Netheru wypada gdy Wither umiera. Umieść ją w ramce by pokazać światu jak bardzo hardkorowa jesteś. - -Leather=Skóra -Leather is a versatile crafting component.=Skóra jest wszechstronnym materiałem do wytwarzania. -Feather=Pióro -Feathers are used in crafting and are dropped from chickens.=Pióra są używane w wytwarzaniu i wypadają z kurczaków. -Rabbit Hide=Królicza skóra -Rabbit hide is used to create leather.=Królicza skóra jest wykorzystywana do tworzenia skóry. -Rabbit's Foot=Królicza łapka -Must be your lucky day! Place this item in an item frame for decoration.=To musi być twój szczęśliwy dzień! Umieść ten przedmiot w ramce jako dekorację. -Saddle=Siodło -Can be placed on animals to ride them=Może być umieszczone na zwierzętach aby na nich jeździć. -Saddles can be put on some animals in order to mount them.=Siodła mogą być umieszczone na zwierzętach aby ich dosiąść. - -Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.=Użyj przycisku umieszczania z siodłem w ręku, aby założyć siodło. Siodła pasują na konie, muły, osły i świnie. Konie, muły i osły muszą być najpierw oswojone, w przeciwnym razie nie dadzą się osiodłać. Osiodłane zwierzęta można dosiąść klikając je prawym przyciskiem myszy. - -Rabbit Stew=Potrawka z królika -Rabbit stew is a very nutricious food item.=Potrawka z królika jest bardzo odżywczym posiłkiem. -Shulker Shell=Skorupa shulkera -Shulker shells are used in crafting. They are dropped from dead shulkers.=Skorupy shulkera są użyteczne w wytwarzaniu. Wypadają z martwych shulkerów. -Slimeball=Kula szlamu -Slimeballs are used in crafting. They are dropped from slimes.=Kule szlamu są użyteczne w wytwarzaniu. Wypadają z szlamów. -Gunpowder=Proch -Carrot on a Stick=Marchewka na patyku -Lets you ride a saddled pig=Pozwala prowadzić osiodłaną świnię -A carrot on a stick can be used on saddled pigs to ride them.=Marchewka na patyku może być użyta na osiodłanej świni by ją prowadzić. - -Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Użyj jej na osiodłanej skrzyni aby ją założyć. Możesz teraz jeździć na świni jak na koniu. Świnie będą także do ciebie podchodzić jeśli po prostu trzymasz marchewkę na patyku. - diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.ru.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.ru.tr deleted file mode 100644 index 64f73618c..000000000 --- a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.ru.tr +++ /dev/null @@ -1,102 +0,0 @@ -# textdomain: mcl_mobitems -Rotten Flesh=Гнилое мясо -80% chance of food poisoning=Вероятность отравления 80% - -Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while.=БУЭ! Этот кусок гнили явно знавал лучшие времена. Если вы отчаялись, то можете съесть его, восстановив несколько очков голода, но с вероятностью 80% вы получите пищевое отравление, которое усилит ваш голод на некоторое время. - -Raw Mutton=Сырая баранина - -Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.=Сырая баранина это мясо овцы, его можно безопасно есть. Приготовление значительно увеличивает его питательную ценность. - -Cooked Mutton=Жареная баранина -Cooked mutton is the cooked flesh from a sheep and is used as food.=Жареная баранина это запечённое мясо овцы, употребляемое в пищу. -Raw Beef=Сырая говядина - -Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.=Сырая говядина это мясо коровы, его можно безопасно есть. Приготовление значительно увеличивает его питательную ценность. - -Steak=Стейк -Steak is cooked beef from cows and can be eaten.=Стейк это приготовленное мясо коровы, его можно есть. -Raw Chicken=Сырая курица -30% chance of food poisoning=Вероятность отравления 30% - -Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value.=Сырая курица это продуктовый предмет, небезопасный для употребления. Вы можете его съесть для восстановления нескольких очков голода, но с вероятностью 30% вы пострадаете от пищевого отравление, которое усилит ваш голод на некоторое время. Приготовление сырой курицы сделает её безопасной для еды, значительно увеличив питательную ценность. - -Cooked Chicken=Жареный цыплёнок -A cooked chicken is a healthy food item which can be eaten.=Жареный цыплёнок это здоровый питательный продукт, его можно есть. -Raw Porkchop=Сырая свинина - -A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Сырая свинина это мясо свиньи, его можно безопасно есть. Приготовление значительно увеличивает его питательную ценность. - -Cooked Porkchop=Свиная отбивная -Cooked porkchop is the cooked flesh of a pig and is used as food.=Свиная отбивная это приготовленное мясо свиньи, его можно есть. -Raw Rabbit=Сырая крольчатина - -Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.=Сырая крольчатина это мясо кролика, его можно безопасно есть. Приготовление значительно увеличивает его питательную ценность. - -Cooked Rabbit=Приготовленный кролик -This is a food item which can be eaten.=Это пищевой продукт, его можно есть. -Milk=Молоко -Removes all status effects=Убирает все эффекты состояния - -Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.=Молоко отлично освежает, его можно получить, применив ведро к корове. Выпив молока, вы избавитесь от всех эффектов состояния, но не восстановите очков голода. - -Use the placement key to drink the milk.=Используйте клавишу размещения, чтобы выпить молоко. -Spider Eye=Паучий глаз -Poisonous=Ядовито - -Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly.=Паучьи глаза в основном используются для крафтинга. Если вы отчаялись, то можете съесть их, но они вас на некоторое время отравят. - -Bone=Кость - -Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.=Кости можно использовать для приручения волков, чтобы они защищали вас. - -Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it.=Положите кость рядом с волками, чтобы привлечь их. Используйте клавишу “Разместить” на волке, чтобы дать ему кость и приручить его. Вы можете командовать приручёнными волками с помощью клавиши “Разместить”. - -String=Нити -Strings are used in crafting.=Нити используются для крафтинга -Blaze Rod=Огненный стержень -This is a crafting component dropped from dead blazes.=Это крафтинговый ингредиент, отбрасываемый ифритом -Blaze Powder=Огненный порошок -This item is mainly used for crafting.=Этот предмет в основном используется для крафтинга. -Magma Cream=Лавовый крем -Magma cream is a crafting component.=Лавовый крем это крафтинговый компонент. -Ghast Tear=Слеза гаста -Place this item in an item frame as decoration.=Поместите это в рамку как украшение. -Nether Star=Звезда Ада - -A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.=Звезда Ада выбрасывается при смерти иссушителя. Поместите её в рамку, чтобы показать миру ваше величие! Либо просто как украшение. - -Leather=Кожа -Leather is a versatile crafting component.=Кожа это универсальный крафт-компонент. -Feather=Перо -Feathers are used in crafting and are dropped from chickens.=Перо используется для крафтинга и выпадает из кур. -Rabbit Hide=Кроличья шкурка -Rabbit hide is used to create leather.=Кроличья шкурка используется для создания кожи. -Rabbit's Foot=Кроличья лапка -Must be your lucky day! Place this item in an item frame for decoration.=У вас счастливый день! Поместите этот предмет в рамку как украшение. -Saddle=Седло -Can be placed on animals to ride them=Можно устанавливать на животных, чтобы ездить на них -Saddles can be put on some animals in order to mount them.=Седло можно поставить на некоторых животных, чтобы закрепляться на них. - -Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.=Используйте клавишу размещения, держа седло в руке, чтобы попытаться надеть его. Сёдла подходят для лошадей, мулов, осликов и свиней. Лошади, мулы и ослики должны быть предварительно приручены, иначе они откажутся от седла. На осёдланных животных можно сесть, снова нажав на них клавишу размещения. - -Rabbit Stew=Рагу из кролика -Rabbit stew is a very nutricious food item.=Рагу из кролика это очень питательный продукт. -Shulker Shell=Панцирь шалкера -Shulker shells are used in crafting. They are dropped from dead shulkers.=Панцирь шалкера используется для крафтинга. Он выпадает из мёртвого шалкера. -Slimeball=Слизь -Slimeballs are used in crafting. They are dropped from slimes.=Слизь используется для крафтинга. Она выпадает из слизняков. -Gunpowder=Порох -Carrot on a Stick=Удочка с морковью -Lets you ride a saddled pig=Позволяет вам ездить на осёдланной свинье -A carrot on a stick can be used on saddled pigs to ride them.=Удочку с морковью можно использовать, чтобы оседлать свинью и поехать на ней. - -Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Поместите это на осёдланную свинью, чтобы закрепиться на ней. Теперь вы можете ехать на ней, как на лошади. Свиньи также идут вперёд, когда вы просто держите удочку с морковью. - -Iron Horse Armor=Железные доспехи лошади -Iron horse armor can be worn by horses to increase their protection from harm a bit.=Железные доспехи лошади, надетые на лошадь, немного защищают её от вреда. -Golden Horse Armor=Золотые доспехи лошади -Golden horse armor can be worn by horses to increase their protection from harm.=Золотые доспехи лошади, надетые на лошадь, защищают её от вреда. -Diamond Horse Armor=Алмазные доспехи лошади -Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Алмазные доспехи лошади, надетые на лошадь, отлично защищают её от вреда. -Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Поместите это на лошадь, чтобы одеть лошадь в доспехи. Ослики и мулы не могут носить лошадиные доспехи. diff --git a/mods/ITEMS/mcl_mobitems/locale/template.txt b/mods/ITEMS/mcl_mobitems/locale/template.txt deleted file mode 100644 index a3066dd1b..000000000 --- a/mods/ITEMS/mcl_mobitems/locale/template.txt +++ /dev/null @@ -1,102 +0,0 @@ -# textdomain: mcl_mobitems -Rotten Flesh= -80% chance of food poisoning= - -Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while.= - -Raw Mutton= - -Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.= - -Cooked Mutton= -Cooked mutton is the cooked flesh from a sheep and is used as food.= -Raw Beef= - -Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.= - -Steak= -Steak is cooked beef from cows and can be eaten.= -Raw Chicken= -30% chance of food poisoning= - -Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value.= - -Cooked Chicken= -A cooked chicken is a healthy food item which can be eaten.= -Raw Porkchop= - -A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.= - -Cooked Porkchop= -Cooked porkchop is the cooked flesh of a pig and is used as food.= -Raw Rabbit= - -Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.= - -Cooked Rabbit= -This is a food item which can be eaten.= -Milk= -Removes all status effects= - -Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.= - -Use the placement key to drink the milk.= -Spider Eye= -Poisonous= - -Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly.= - -Bone= - -Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.= - -Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it.= - -String= -Strings are used in crafting.= -Blaze Rod= -This is a crafting component dropped from dead blazes.= -Blaze Powder= -This item is mainly used for crafting.= -Magma Cream= -Magma cream is a crafting component.= -Ghast Tear= -Place this item in an item frame as decoration.= -Nether Star= - -A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.= - -Leather= -Leather is a versatile crafting component.= -Feather= -Feathers are used in crafting and are dropped from chickens.= -Rabbit Hide= -Rabbit hide is used to create leather.= -Rabbit's Foot= -Must be your lucky day! Place this item in an item frame for decoration.= -Saddle= -Can be placed on animals to ride them= -Saddles can be put on some animals in order to mount them.= - -Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.= - -Rabbit Stew= -Rabbit stew is a very nutricious food item.= -Shulker Shell= -Shulker shells are used in crafting. They are dropped from dead shulkers.= -Slimeball= -Slimeballs are used in crafting. They are dropped from slimes.= -Gunpowder= -Carrot on a Stick= -Lets you ride a saddled pig= -A carrot on a stick can be used on saddled pigs to ride them.= - -Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.= - -Iron Horse Armor= -Iron horse armor can be worn by horses to increase their protection from harm a bit.= -Golden Horse Armor= -Golden horse armor can be worn by horses to increase their protection from harm.= -Diamond Horse Armor= -Diamond horse armor can be worn by horses to greatly increase their protection from harm.= -Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.= diff --git a/mods/ITEMS/mcl_mobitems/mod.conf b/mods/ITEMS/mcl_mobitems/mod.conf deleted file mode 100644 index e9604036e..000000000 --- a/mods/ITEMS/mcl_mobitems/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_mobitems -depends = mcl_core, mcl_hunger, mcl_colors diff --git a/mods/ITEMS/mcl_mobitems/textures/default_gunpowder.png b/mods/ITEMS/mcl_mobitems/textures/default_gunpowder.png deleted file mode 100644 index e12feafa1..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/default_gunpowder.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_beef_cooked.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_beef_cooked.png deleted file mode 100644 index f41a20ae6..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_beef_cooked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_beef_raw.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_beef_raw.png deleted file mode 100644 index 5c9586cac..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_beef_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_blaze_powder.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_blaze_powder.png deleted file mode 100644 index a54ad65d6..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_blaze_powder.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_blaze_rod.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_blaze_rod.png deleted file mode 100644 index bfca7c0f2..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_blaze_rod.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_bone.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_bone.png deleted file mode 100644 index 4c687e59f..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_bone.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_bucket_milk.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_bucket_milk.png deleted file mode 100644 index 2ba089a54..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_bucket_milk.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_carrot_on_a_stick.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_carrot_on_a_stick.png deleted file mode 100644 index ff85a30df..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_carrot_on_a_stick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_chicken_cooked.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_chicken_cooked.png deleted file mode 100644 index 78295c075..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_chicken_cooked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_chicken_raw.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_chicken_raw.png deleted file mode 100644 index 05c7246c9..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_chicken_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_diamond_horse_armor.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_diamond_horse_armor.png deleted file mode 100644 index 121be08de..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_diamond_horse_armor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_feather.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_feather.png deleted file mode 100644 index a3d0a3da5..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_feather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_ghast_tear.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_ghast_tear.png deleted file mode 100644 index ec84983ef..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_ghast_tear.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_gold_horse_armor.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_gold_horse_armor.png deleted file mode 100644 index f6b4fdfb9..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_gold_horse_armor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_diamond.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_diamond.png deleted file mode 100644 index 577eff10b..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_diamond.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_gold.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_gold.png deleted file mode 100644 index b8ebbfe85..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_iron.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_iron.png deleted file mode 100644 index 217b6c531..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_horse_armor_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_iron_horse_armor.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_iron_horse_armor.png deleted file mode 100644 index 4f078a92b..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_iron_horse_armor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_leather.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_leather.png deleted file mode 100644 index 4da2a1c82..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_leather.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_magma_cream.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_magma_cream.png deleted file mode 100644 index 5d31dde07..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_magma_cream.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_mutton_cooked.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_mutton_cooked.png deleted file mode 100644 index 49b5f0ee6..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_mutton_cooked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_mutton_raw.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_mutton_raw.png deleted file mode 100644 index 28781262a..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_mutton_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nether_star.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nether_star.png deleted file mode 100644 index 27d235906..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nether_star.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_porkchop_cooked.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_porkchop_cooked.png deleted file mode 100644 index 15683db20..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_porkchop_cooked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_porkchop_raw.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_porkchop_raw.png deleted file mode 100644 index 018702ae7..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_porkchop_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_cooked.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_cooked.png deleted file mode 100644 index 54f5758de..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_cooked.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_foot.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_foot.png deleted file mode 100644 index 293fc466b..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_foot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_hide.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_hide.png deleted file mode 100644 index 39e1f2215..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_hide.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_raw.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_raw.png deleted file mode 100644 index c281dc492..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_raw.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_stew.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_stew.png deleted file mode 100644 index ee1a6a219..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rabbit_stew.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rotten_flesh.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rotten_flesh.png deleted file mode 100644 index 58ad1a5cd..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_rotten_flesh.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_saddle.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_saddle.png deleted file mode 100644 index 60f6c959e..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_saddle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_shulker_shell.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_shulker_shell.png deleted file mode 100644 index ccaa7a082..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_shulker_shell.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_slimeball.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_slimeball.png deleted file mode 100644 index e984e9b97..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_slimeball.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_spider_eye.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_spider_eye.png deleted file mode 100644 index 08c0241ad..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_spider_eye.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_string.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_string.png deleted file mode 100644 index 214e1d75d..000000000 Binary files a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_string.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mobspawners/README.md b/mods/ITEMS/mcl_mobspawners/README.md deleted file mode 100644 index 26ac39386..000000000 --- a/mods/ITEMS/mcl_mobspawners/README.md +++ /dev/null @@ -1,17 +0,0 @@ -This mod adds a mob spawner for MineClone 2. -Monsters will appear around the mob spawner in semi-regular intervals. - -This mod is originally based on the mob spawner from Mobs Redo by TenPlus1 -but has been modified quite a lot to fit the needs of MineClone 2. - -Players can get a mob spawner by `giveme` and is initially empty after -placing. - -## Programmer notes -To set the mob spawned by a mob spawner, first place the mob spawner -(e.g. with `minetest.set_node`), then use the function -`mcl_mobspawners.setup_spawner` to set its attributes. See the comment -in `init.lua` for more info. - -## License (code and texture) -MIT License diff --git a/mods/ITEMS/mcl_mobspawners/init.lua b/mods/ITEMS/mcl_mobspawners/init.lua deleted file mode 100644 index b3cd8a67f..000000000 --- a/mods/ITEMS/mcl_mobspawners/init.lua +++ /dev/null @@ -1,389 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math -local table = table - -mcl_mobspawners = {} - -local default_mob = "mobs_mc:pig" - --- Mob spawner ---local spawner_default = default_mob.." 0 15 4 15" - -local function get_mob_textures(mob) - local list = minetest.registered_entities[mob].texture_list - if type(list[1]) == "table" then - return list[1] - else - return list - end -end - -local function find_doll(pos) - for _,obj in pairs(minetest.get_objects_inside_radius(pos, 0.5)) do - if not obj:is_player() then - if obj and obj:get_luaentity().name == "mcl_mobspawners:doll" then - return obj - end - end - end - return nil -end - -local function spawn_doll(pos) - return minetest.add_entity({x=pos.x, y=pos.y-0.3, z=pos.z}, "mcl_mobspawners:doll") -end - --- Manually set the doll sizes for large mobs --- TODO: Relocate this code to mobs_mc -local doll_size_overrides = { - ["mobs_mc:guardian"] = { x = 0.6, y = 0.6 }, - ["mobs_mc:guardian_elder"] = { x = 0.72, y = 0.72 }, - ["mobs_mc:enderman"] = { x = 0.8, y = 0.8 }, - ["mobs_mc:iron_golem"] = { x = 0.9, y = 0.9 }, - ["mobs_mc:ghast"] = { x = 1.05, y = 1.05 }, - ["mobs_mc:wither"] = { x = 1.2, y = 1.2 }, - ["mobs_mc:enderdragon"] = { x = 0.16, y = 0.16 }, - ["mobs_mc:witch"] = { x = 0.95, y = 0.95 }, -} -local spawn_count_overrides = { - ["mobs_mc:enderdragon"] = 1, - ["mobs_mc:wither"] = 1, - ["mobs_mc:ghast"] = 1, - ["mobs_mc:guardian_elder"] = 1, - ["mobs_mc:guardian"] = 2, - ["mobs_mc:iron_golem"] = 2, -} - -local function set_doll_properties(doll, mob) - local mobinfo = minetest.registered_entities[mob] - if not mobinfo then return end - local xs, ys - if doll_size_overrides[mob] then - xs = doll_size_overrides[mob].x - ys = doll_size_overrides[mob].y - else - xs = mobinfo.visual_size.x * 0.33333 - ys = mobinfo.visual_size.y * 0.33333 - end - local prop = { - mesh = mobinfo.mesh, - textures = get_mob_textures(mob), - visual_size = { - x = xs, - y = ys, - } - } - doll:set_properties(prop) - doll:get_luaentity()._mob = mob -end - -local function respawn_doll(pos) - local meta = minetest.get_meta(pos) - local mob = meta:get_string("Mob") - local doll - if mob and mob ~= "" then - doll = find_doll(pos) - if not doll then - doll = spawn_doll(pos) - set_doll_properties(doll, mob) - end - end - return doll -end - ---[[ Public function: Setup the spawner at pos. -This function blindly assumes there's actually a spawner at pos. -If not, then the results are undefined. -All the arguments are optional! - -* Mob: ID of mob to spawn (default: mobs_mc:pig) -* MinLight: Minimum light to spawn (default: 0) -* MaxLight: Maximum light to spawn (default: 15) -* MaxMobsInArea: How many mobs are allowed in the area around the spawner (default: 4) -* PlayerDistance: Spawn mobs only if a player is within this distance; 0 to disable (default: 15) -* YOffset: Y offset to spawn mobs; 0 to disable (default: 0) -]] - -function mcl_mobspawners.setup_spawner(pos, Mob, MinLight, MaxLight, MaxMobsInArea, PlayerDistance, YOffset) - -- Activate mob spawner and disable editing functionality - if Mob == nil then Mob = default_mob end - if MinLight == nil then MinLight = 0 end - if MaxLight == nil then MaxLight = 15 end - if MaxMobsInArea == nil then MaxMobsInArea = 4 end - if PlayerDistance == nil then PlayerDistance = 15 end - if YOffset == nil then YOffset = 0 end - local meta = minetest.get_meta(pos) - meta:set_string("Mob", Mob) - meta:set_int("MinLight", MinLight) - meta:set_int("MaxLight", MaxLight) - meta:set_int("MaxMobsInArea", MaxMobsInArea) - meta:set_int("PlayerDistance", PlayerDistance) - meta:set_int("YOffset", YOffset) - - -- Create doll or replace existing doll - local doll = find_doll(pos) - if not doll then - doll = spawn_doll(pos) - end - set_doll_properties(doll, Mob) - - - -- Start spawning very soon - local t = minetest.get_node_timer(pos) - t:start(2) -end - --- Spawn mobs around pos --- NOTE: The node is timer-based, rather than ABM-based. -local function spawn_mobs(pos, elapsed) - - -- get meta - local meta = minetest.get_meta(pos) - - -- get settings - local mob = meta:get_string("Mob") - local mlig = meta:get_int("MinLight") - local xlig = meta:get_int("MaxLight") - local num = meta:get_int("MaxMobsInArea") - local pla = meta:get_int("PlayerDistance") - local yof = meta:get_int("YOffset") - - -- if amount is 0 then do nothing - if num == 0 then - return - end - - -- are we spawning a registered mob? - if not mcl_mobs.spawning_mobs[mob] then - minetest.log("error", "[mcl_mobspawners] Mob Spawner: Mob doesn't exist: "..mob) - return - end - - -- check objects inside 8×8 area around spawner - local objs = minetest.get_objects_inside_radius(pos, 8) - local count = 0 - local ent - - - local timer = minetest.get_node_timer(pos) - - -- spawn mob if player detected and in range - if pla > 0 then - - local in_range = 0 - local objs = minetest.get_objects_inside_radius(pos, pla) - - for _,oir in pairs(objs) do - - if oir:is_player() then - - in_range = 1 - - break - end - end - - -- player not found - if in_range == 0 then - -- Try again quickly - timer:start(2) - return - end - end - - --[[ HACK! - The doll may not stay spawned if the mob spawner is placed far away from - players, so we will check for its existance periodically when a player is nearby. - This would happen almost always when the mob spawner is placed by the mapgen. - This is probably caused by a Minetest bug: - https://github.com/minetest/minetest/issues/4759 - FIXME: Fix this horrible hack. - ]] - local doll = find_doll(pos) - if not doll then - doll = spawn_doll(pos) - set_doll_properties(doll, mob) - end - - -- count mob objects of same type in area - for k, obj in ipairs(objs) do - - ent = obj:get_luaentity() - - if ent and ent.name and ent.name == mob then - count = count + 1 - end - end - - -- Are there too many of same type? then fail - if count >= num then - timer:start(math.random(5, 20)) - return - end - - -- find air blocks within 8×3×8 nodes of spawner - local air = minetest.find_nodes_in_area( - {x = pos.x - 4, y = pos.y - 1 + yof, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + 1 + yof, z = pos.z + 4}, - {"air"}) - - -- spawn up to 4 mobs in random air blocks - if air then - local max = 4 - if spawn_count_overrides[mob] then - max = spawn_count_overrides[mob] - end - for a=1, max do - if #air <= 0 then - -- We're out of space! Stop spawning - break - end - local air_index = math.random(#air) - local pos2 = air[air_index] - local lig = minetest.get_node_light(pos2) or 0 - - pos2.y = pos2.y + 0.5 - - -- only if light levels are within range - if lig >= mlig and lig <= xlig then - minetest.add_entity(pos2, mob) - end - table.remove(air, air_index) - end - end - - -- Spawn attempt done. Next spawn attempt much later - timer:start(math.random(10, 39.95)) - -end - --- The mob spawner node. --- PLACEMENT INSTRUCTIONS: --- If this node is placed by a player, minetest.item_place, etc. default settings are applied --- automatially. --- IF this node is placed by ANY other method (e.g. minetest.set_node, LuaVoxelManip), you --- MUST call mcl_mobspawners.setup_spawner right after the spawner has been placed. -minetest.register_node("mcl_mobspawners:spawner", { - tiles = {"mob_spawner.png"}, - drawtype = "glasslike", - paramtype = "light", - walkable = true, - description = S("Mob Spawner"), - _tt_help = S("Makes mobs appear"), - _doc_items_longdesc = S("A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light."), - _doc_items_usagehelp = S("If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level."), - groups = {pickaxey=1, material_stone=1, deco_block=1}, - is_ground_content = false, - drop = "", - - -- If placed by player, setup spawner with default settings - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local name = placer:get_player_name() - local privs = minetest.get_player_privs(name) - if not privs.maphack then - minetest.chat_send_player(name, "Placement denied. You need the “maphack” privilege to place mob spawners.") - return itemstack - end - local node_under = minetest.get_node(pointed_thing.under) - local new_itemstack, success = minetest.item_place(itemstack, placer, pointed_thing) - if success then - local placepos - if minetest.registered_nodes[node_under.name].buildable_to then - placepos = pointed_thing.under - else - placepos = pointed_thing.above - end - mcl_mobspawners.setup_spawner(placepos) - end - return new_itemstack - end, - - on_destruct = function(pos) - -- Remove doll (if any) - local obj = find_doll(pos) - if obj then - obj:remove() - end - mcl_experience.throw_xp(pos, math.random(15, 43)) - end, - - on_punch = function(pos) - respawn_doll(pos) - end, - - on_timer = spawn_mobs, - - sounds = mcl_sounds.node_sound_metal_defaults(), - - _mcl_blast_resistance = 5, - _mcl_hardness = 5, -}) - --- Mob spawner doll (rotating icon inside cage) - -local doll_def = { - hp_max = 1, - physical = false, - pointable = false, - visual = "mesh", - makes_footstep_sound = false, - timer = 0, - automatic_rotate = math.pi * 2.9, - - _mob = default_mob, -- name of the mob this doll represents -} - -doll_def.get_staticdata = function(self) - return self._mob -end - -doll_def.on_activate = function(self, staticdata, dtime_s) - local mob = staticdata - if mob == "" or mob == nil then - mob = default_mob - end - set_doll_properties(self.object, mob) - self.object:set_velocity({x=0, y=0, z=0}) - self.object:set_acceleration({x=0, y=0, z=0}) - self.object:set_armor_groups({immortal=1}) - -end - -doll_def.on_step = function(self, dtime) - -- Check if spawner is still present. If not, delete the entity - self.timer = self.timer + dtime - local n = minetest.get_node_or_nil(self.object:get_pos()) - if self.timer > 1 then - if n and n.name and n.name ~= "mcl_mobspawners:spawner" then - self.object:remove() - end - end -end - -doll_def.on_punch = function(self, hitter) end - -minetest.register_entity("mcl_mobspawners:doll", doll_def) - --- FIXME: Doll can get destroyed by /clearobjects -minetest.register_lbm({ - label = "Respawn mob spawner dolls", - name = "mcl_mobspawners:respawn_entities", - nodenames = { "mcl_mobspawners:spawner" }, - run_at_every_load = true, - action = function(pos, node) - respawn_doll(pos) - end, -}) diff --git a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.de.tr b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.de.tr deleted file mode 100644 index 315b432c2..000000000 --- a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_mobspawners -Mob Spawner=Mobspawner -A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.=Ein Mobspawner lässt regelmäßig Mobs um ihn herum auftauchen, wenn sich ein Spieler in der Nähe befindet. Einige Mobspawner werden inaktiv, wenn sie sich im Licht befinden. -If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=Wenn Sie ein Spawn-Ei haben, können Sie es benutzen, um den Mobtyp, der erzeugt wird, zu ändern. Platzieren Sie den Gegenstand einfach auf dem Mobspawner. Von Spielern manipulierte Mobspawner erzeugen immer Mobs, unabhängig von der Helligkeit. -Makes mobs appear=Lässt Mobs auftauchen diff --git a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.es.tr b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.es.tr deleted file mode 100644 index 2b6ff9776..000000000 --- a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_mobspawners -Mob Spawner=Generador de criaturas -A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.=Un generador de criaturas regularmente hace que aparezcan mobs a su alrededor mientras un jugador está cerca. Algunos reproductores de las criaturas están deshabilitados mientras están a la luz. -If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=Si tienes un huevo de desove, puedes usarlo para cambiar las criaturas a desovar. Simplemente coloque el artículo en el generador de criaturas. Los generadores de criaturas establecidos por el jugador siempre generan monstruos independientemente del nivel de luz. diff --git a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.fr.tr b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.fr.tr deleted file mode 100644 index f008ad836..000000000 --- a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_mobspawners -Mob Spawner=Générateur de Mob -A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.=Un générateur de mob fait régulièrement apparaître des mobs autour de lui tandis qu'un joueur est à proximité. Certains générateurs de mob sont désactivés lorsqu'ils sont en lumière. -If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=Si vous avez un oeuf d'apparition, vous pouvez l'utiliser pour changer le mob qui apparait. Placez simplement l'objet sur le générateur de mob. Les générateurs de mobs créés par les joueurs engendrent toujours des mobs quel que soit le niveau de lumière. -Makes mobs appear=Fait apparaître les mobs diff --git a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.pl.tr b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.pl.tr deleted file mode 100644 index 5b4a8d896..000000000 --- a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_mobspawners -Mob Spawner=Spawner mobów -A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.=Spawner mobów sprawia, że wokół niego regularnie pojawiają się moby, gdy w pobliżu jest gracz. Niektóre spawnery są wyłączone w świetle. -If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=Jeśli masz jajo spawnowania, możesz go użyć by zmienić moba, który będzie przywoływany. Aby to zrobić umieść przedmiot na spawnerze. -Makes mobs appear=Tworzy moby diff --git a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.ru.tr b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.ru.tr deleted file mode 100644 index c018167c0..000000000 --- a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_mobspawners -Mob Spawner=Спаунер (порождатель) мобов -A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.=Спаунер постоянно вызывает появление мобов вокруг себя, пока поблизости находится игрок. Некоторые спаунеры отключаются под действием света. -If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=Если у вас есть порождающее яйцо, вы можете использовать его, чтобы выбрать моба, который будет появляться. Просто поместите этот предмет на спаунер. Настроенные игроками спаунеры работают всегда, независимо от уровня освещения. -Makes mobs appear=Создаёт мобов diff --git a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.zh_TW.tr b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.zh_TW.tr deleted file mode 100644 index 09cdf6458..000000000 --- a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.zh_TW.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_mobspawners -Mob Spawner=生怪磚 -A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.= -If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=當玩家在附近時,生怪磚會定期導致生物出現在其周圍。有些生怪磚在光照下會被禁用。 -Makes mobs appear=生成生物 diff --git a/mods/ITEMS/mcl_mobspawners/locale/template.txt b/mods/ITEMS/mcl_mobspawners/locale/template.txt deleted file mode 100644 index 82357e5f0..000000000 --- a/mods/ITEMS/mcl_mobspawners/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_mobspawners -Mob Spawner= -A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.= -If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.= -Makes mobs appear= diff --git a/mods/ITEMS/mcl_mobspawners/mod.conf b/mods/ITEMS/mcl_mobspawners/mod.conf deleted file mode 100644 index 1759e3408..000000000 --- a/mods/ITEMS/mcl_mobspawners/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_mobspawners -depends = mcl_sounds, mcl_mobs diff --git a/mods/ITEMS/mcl_mobspawners/textures/mob_spawner.png b/mods/ITEMS/mcl_mobspawners/textures/mob_spawner.png deleted file mode 100644 index 8464193c1..000000000 Binary files a/mods/ITEMS/mcl_mobspawners/textures/mob_spawner.png and /dev/null differ diff --git a/mods/ITEMS/mcl_monster_eggs/init.lua b/mods/ITEMS/mcl_monster_eggs/init.lua deleted file mode 100644 index 59ab72876..000000000 --- a/mods/ITEMS/mcl_monster_eggs/init.lua +++ /dev/null @@ -1,43 +0,0 @@ --- Monster eggs! --- Blocks which spawn silverfish when destroyed. - -local S = minetest.get_translator(minetest.get_current_modname()) - -local function spawn_silverfish(pos, oldnode, oldmetadata, digger) - if not minetest.is_creative_enabled("") then - minetest.add_entity(pos, "mobs_mc:silverfish") - end -end - --- Template function for registering monster egg blocks -local function register_block(subname, description, tiles, is_ground_content) - if is_ground_content == nil then - is_ground_content = false - end - minetest.register_node("mcl_monster_eggs:monster_egg_"..subname, { - description = description, - tiles = tiles, - is_ground_content = is_ground_content, - groups = {dig_immediate = 3, spawns_silverfish = 1, deco_block = 1}, - drop = "", - sounds = mcl_sounds.node_sound_stone_defaults(), - after_dig_node = spawn_silverfish, - _tt_help = S("Hides a silverfish"), - _doc_items_longdesc = S([[ - An infested block is a block from which a silverfish will pop out when it is broken. - It looks identical to its normal counterpart. - ]]), - _mcl_hardness = 0, - _mcl_blast_resistance = 0.5, - }) -end - --- Register all the monster egg blocks -register_block("stone", S("Infested Stone"), {"default_stone.png"}, true) -register_block("cobble", S("Infested Cobblestone"), {"default_cobble.png"}) -register_block("stonebrick", S("Infested Stone Bricks"), {"default_stone_brick.png"}) -register_block("stonebrickcracked", S("Infested Cracked Stone Bricks"), {"mcl_core_stonebrick_cracked.png"}) -register_block("stonebrickmossy", S("Infested Mossy Stone Bricks"), {"mcl_core_stonebrick_mossy.png"}) -register_block("stonebrickcarved", S("Infested Chiseled Stone Bricks"), {"mcl_core_stonebrick_carved.png"}) - - diff --git a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.de.tr b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.de.tr deleted file mode 100644 index 78c26bf78..000000000 --- a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_monster_eggs -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=Ein verseuchter Block ist ein Block, aus dem ein Silberfischchen hinausfallen wird, wenn er zerbrochen wird. Er sieht identisch zu seinem normalen Pendant aus. -Infested Stone=Verseuchter Stein -Infested Cobblestone=Verseuchtes Kopfsteinpflaster -Infested Stone Bricks=Verseuchte Steinziegel -Infested Cracked Stone Bricks=Verseuchte rissige Steinziegel -Infested Mossy Stone Bricks=Verseuchte moosige Steinziegel -Infested Chiseled Stone Bricks=Verseuchte gemeißelte Steinziegel -Hides a silverfish=Verbirgt ein Silberfischchen diff --git a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.es.tr b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.es.tr deleted file mode 100644 index f35b45633..000000000 --- a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_monster_eggs -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=Un bloque infestado es un bloque del que saldrá un pez plateado cuando se rompa. Se ve idéntico a su contraparte normal. -Infested Stone=Piedra infestada -Infested Cobblestone=Roca infestada -Infested Stone Bricks=Ladrillos de piedra infestados -Infested Cracked Stone Bricks=Ladrillos de piedra agrietados infestados -Infested Mossy Stone Bricks=Ladrillos de piedra musgosos infestados -Infested Chiseled Stone Bricks=Ladrillos de piedra cincelados infestados diff --git a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.fr.tr b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.fr.tr deleted file mode 100644 index fa2d204be..000000000 --- a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_monster_eggs -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=Un bloc infesté est un bloc à partir duquel un Poisson d'Argent sortira lorsqu'il sera brisé. Il semble identique à son homologue normal. -Infested Stone=Roche Infestée -Infested Cobblestone=Pierre Infestée -Infested Stone Bricks=Pierre Taillée Infestée -Infested Cracked Stone Bricks=Pierre Taillée Craquelée Infestée -Infested Mossy Stone Bricks=Pierre Taillée Moussue Infestée -Infested Chiseled Stone Bricks=Pierre sculptée Infestée -Hides a silverfish=Cache un Poisson d'Argent diff --git a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.pl.tr b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.pl.tr deleted file mode 100644 index 2d55f713f..000000000 --- a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_monster_eggs -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=Zarobaczony blok to blok z którego po rozbiciu wypadną rybiki cukrowe. Wygląda identycznie co niezarobaczona wersja. -Infested Stone=Zarobaczony kamień -Infested Cobblestone=Zarobaczony brukowiec -Infested Stone Bricks=Zarobaczone kamienne cegły -Infested Cracked Stone Bricks=Zarobaczone popękane kamienne cegły -Infested Mossy Stone Bricks=Zarobaczone zamszone kamienne cegły -Infested Chiseled Stone Bricks=Zarobaczone wygładzone kamienne cegły -Hides a silverfish=Chowa w sobie rybika cukrowego diff --git a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.ru.tr b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.ru.tr deleted file mode 100644 index 6902b610f..000000000 --- a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_monster_eggs -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=Блок с икрой - это блок, из которого вылетает чешуйница, если его сломать. Выглядит идентично своему обычному аналогу. -Infested Stone=Камень с икрой -Infested Cobblestone=Булыжник с икрой -Infested Stone Bricks=Каменные блоки с икрой -Infested Cracked Stone Bricks=Треснутые каменные блоки с икрой -Infested Mossy Stone Bricks=Мшистый каменный блок с икрой -Infested Chiseled Stone Bricks=Точёный каменный блок с икрой -Hides a silverfish=Скрывает чешуйницу diff --git a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.zh_TW.tr b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.zh_TW.tr deleted file mode 100644 index 542c0f1b9..000000000 --- a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.zh_TW.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_monster_eggs -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=蛀蝕的方塊是一個方塊,當它被打破時,蠹魚會從裡面跳出來。它看起來與正常的方塊完全一樣。 -Infested Stone=蛀蝕的石頭 -Infested Cobblestone=蛀蝕的鵝卵石 -Infested Stone Bricks=蛀蝕的石磚 -Infested Cracked Stone Bricks=蛀蝕的裂紋石磚 -Infested Mossy Stone Bricks=蛀蝕的青苔石磚 -Infested Chiseled Stone Bricks=蛀蝕的浮雕石磚 -Hides a silverfish=包含一個蠹魚 diff --git a/mods/ITEMS/mcl_monster_eggs/locale/template.txt b/mods/ITEMS/mcl_monster_eggs/locale/template.txt deleted file mode 100644 index 8f420b617..000000000 --- a/mods/ITEMS/mcl_monster_eggs/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_monster_eggs -An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.= -Infested Stone= -Infested Cobblestone= -Infested Stone Bricks= -Infested Cracked Stone Bricks= -Infested Mossy Stone Bricks= -Infested Chiseled Stone Bricks= -Hides a silverfish= diff --git a/mods/ITEMS/mcl_monster_eggs/mod.conf b/mods/ITEMS/mcl_monster_eggs/mod.conf deleted file mode 100644 index b29601864..000000000 --- a/mods/ITEMS/mcl_monster_eggs/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_monster_eggs -description = Adds infested blocks: Blocks which which disguise themselves as stone blocks and spawn a silverfish when broken. -depends = mcl_sounds, mobs_mc diff --git a/mods/ITEMS/mcl_mushrooms/README.md b/mods/ITEMS/mcl_mushrooms/README.md deleted file mode 100644 index eefe3c3ff..000000000 --- a/mods/ITEMS/mcl_mushrooms/README.md +++ /dev/null @@ -1 +0,0 @@ -This mod adds small and huge mushrooms. Small mushrooms like to spread in darkness. diff --git a/mods/ITEMS/mcl_mushrooms/huge.lua b/mods/ITEMS/mcl_mushrooms/huge.lua deleted file mode 100644 index 0e99ae0be..000000000 --- a/mods/ITEMS/mcl_mushrooms/huge.lua +++ /dev/null @@ -1,228 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local vector = vector - -local template = { - groups = { - handy = 1, axey = 1, building_block = 1, material_wood = 1, - flammable = -1, compostability = 85 - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = true, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, - _mcl_silk_touch_drop = true, -} - -local red = table.copy(template) -red.drop = { - items = { - { items = {"mcl_mushrooms:mushroom_red"}, rarity = 2 }, - { items = {"mcl_mushrooms:mushroom_red"}, rarity = 2 }, - } -} - -local brown= table.copy(template) -brown.drop = { - items = { - { items = {"mcl_mushrooms:mushroom_brown"}, rarity = 2 }, - { items = {"mcl_mushrooms:mushroom_brown"}, rarity = 2 }, - } -} - --- Convert a number to a string with 6 binary digits -local function to_binary(num) - local binary = "" - while (num > 0) do - local remainder_binary = (num % 2) > 0 and 1 or 0 - binary = binary .. remainder_binary - num = math.floor(num/2) - end - binary = string.reverse(binary) - while (string.len(binary) < 6) do - binary = "0" .. binary - end - return binary -end - -local function register_mushroom(color, species_id, template, d_cap, d_stem, d_stem_all, longdesc_cap, longdesc_stem) - - -- Stem texture on all sides - local stem_full = table.copy(template) - stem_full.description = d_stem_all - stem_full._doc_items_longdesc = S("This decorative block is like a huge mushroom stem, but with the stem texture on all sides.") - stem_full.tiles = { "mcl_mushrooms_mushroom_block_skin_stem.png" } - stem_full.groups.huge_mushroom = species_id - stem_full.groups.huge_mushroom_stem = 2 - stem_full.groups.compostability = 65 - minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem_full", stem_full) - - -- Stem - local stem = table.copy(template) - stem.description = d_stem - stem._doc_items_longdesc = longdesc_stem - stem.tiles = { "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_skin_stem.png" } - stem.groups.huge_mushroom = species_id - stem.groups.huge_mushroom_stem = 1 - stem.groups.compostability = 65 - minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem", stem) - - -- Mushroom block (cap) - -- Each side can either be the cap or the pores texture. - -- Cubes have 6 sides, so there's a total of 2^6 = 64 combinations - for s=0,63 do - local block = table.copy(template) - local bin = to_binary(s) - if s == 63 then - -- All-faces cap. This block is exposed to the player - block.description = d_cap - block._doc_items_longdesc = longdesc_cap - block._doc_items_usagehelp = S("By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.") - block.tiles = { "mcl_mushrooms_mushroom_block_skin_"..color..".png" } - - function block.on_construct(pos) - local sides = { - { { x= 0, y= 1, z= 0 }, 2 }, - { { x= 0, y=-1, z= 0 }, 1 }, - { { x= 1, y= 0, z= 0 }, 4 }, - { { x=-1, y= 0, z= 0 }, 3 }, - { { x= 0, y= 0, z= 1 }, 6 }, - { { x= 0, y= 0, z=-1 }, 5 }, - } - - -- Replace the side of a mushroom node. Returns the new node. - -- Or nil, if unchanged. - local function replace_side(pos, node, side) - local bin = string.sub(node.name, -6) - if string.sub(bin, side, side) == "1" then - local new_bin - if side == 1 then - new_bin = "0" .. string.sub(bin, side+1, 6) - elseif side == 6 then - new_bin = string.sub(bin, 1, side-1) .. "0" - else - new_bin = string.sub(bin, 1, side-1) .. "0" .. string.sub(bin, side+1, 6) - end - - return { name = string.sub(node.name, 1, -7) .. new_bin } - end - end - - local node = minetest.get_node(pos) - local species_self = minetest.get_item_group(node.name, "huge_mushroom") - local node_update = table.copy(node) - for i=1, #sides do - local neighbor = vector.add(pos, sides[i][1]) - local neighbor_node = minetest.get_node(neighbor) - local node_set = false - if minetest.get_item_group(neighbor_node.name, "huge_mushroom_cap") ~= 0 and minetest.get_item_group(neighbor_node.name, "huge_mushroom") == species_self then - - local i2 = sides[i][2] - local node_return = replace_side(pos, node_update, i) - if node_return then - node_update = node_return - node_set = true - end - local new_neighbor = replace_side(neighbor, neighbor_node, i2) - if new_neighbor then - minetest.set_node(neighbor, new_neighbor) - end - end - if node_set then - minetest.set_node(pos, node_update) - end - end - end - else - -- Cap block with pores on at least 1 side. - -- These blocks are used internally. - block._doc_items_create_entry = false - block.groups.not_in_creative_inventory = 1 - block.groups.not_in_craft_guide = 1 - block.tiles = {} - for t=1, string.len(bin) do - if string.sub(bin, t, t) == "1" then - block.tiles[t] = "mcl_mushrooms_mushroom_block_skin_"..color..".png" - else - block.tiles[t] = "mcl_mushrooms_mushroom_block_inside.png" - end - end - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_mushrooms:"..color.."_mushroom_block_cap_111111", "nodes", "mcl_mushrooms:"..color.."_mushroom_block_cap_"..bin) - end - end - - block.groups.huge_mushroom = species_id - block.groups.huge_mushroom_cap = s - - -- bin is a binary string with 6 digits. Each digit stands for the - -- texture of one of the sides, in the same order as the tiles parameter. - -- 0 = pores; 1 = cap. - minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_cap_"..bin, block) - end - -end - - -local longdesc_red = S("Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.") -local longdesc_red_stem = S("The stem part of a huge red mushroom.") -register_mushroom("red", 1, red, S("Huge Red Mushroom Block"), S("Huge Red Mushroom Stem"), S("Huge Red Mushroom All-Faces Stem"), longdesc_red, longdesc_red_stem) - - -local longdesc_brown = S("Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.") -local longdesc_brown_stem = S("The stem part of a huge brown mushroom.") -register_mushroom("brown", 2, brown, S("Huge Brown Mushroom Block"), S("Huge Brown Mushroom Stem"), S("Huge Brown Mushroom All-Faces Stem"), longdesc_brown, longdesc_brown_stem) - -minetest.register_craft({ - type = "fuel", - recipe = "group:huge_mushroom", - burntime = 15, -}) - --- Legacy support -local colors = { "red", "brown" } -for c=1, 2 do - local color = colors[c] - minetest.register_alias("mcl_mushrooms:"..color.."_mushroom_block_cap_full", "mcl_mushrooms:"..color.."_mushroom_block_cap_111111") - minetest.register_alias("mcl_mushrooms:"..color.."_mushroom_block_cap_top", "mcl_mushrooms:"..color.."_mushroom_block_cap_100000") - minetest.register_alias("mcl_mushrooms:"..color.."_mushroom_block_pores_full", "mcl_mushrooms:"..color.."_mushroom_block_cap_000000") -end - -minetest.register_lbm({ - label = "Replace legacy mushroom cap blocks", - name = "mcl_mushrooms:replace_legacy_mushroom_caps", - nodenames = { "mcl_mushrooms:brown_mushroom_block_cap_corner", "mcl_mushrooms:brown_mushroom_block_cap_side", "mcl_mushrooms:red_mushroom_block_cap_corner", "mcl_mushrooms:red_mushroom_block_cap_side" }, - action = function(pos, node) - for c=1, 2 do - local color = colors[c] - if node.name == "mcl_mushrooms:"..color.."_mushroom_block_cap_side" then - if node.param2 == 0 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100001"}) - elseif node.param2 == 1 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100100"}) -- OK - elseif node.param2 == 2 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100010"}) - elseif node.param2 == 3 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101000"}) - else - -- Fallback - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101111"}) - end - elseif node.name == "mcl_mushrooms:"..color.."_mushroom_block_cap_corner" then - if node.param2 == 0 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101001"}) - elseif node.param2 == 1 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100101"}) -- OK - elseif node.param2 == 2 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100110"}) -- OK - elseif node.param2 == 3 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101010"}) - else - -- Fallback - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101111"}) - end - end - end - end, -}) diff --git a/mods/ITEMS/mcl_mushrooms/init.lua b/mods/ITEMS/mcl_mushrooms/init.lua deleted file mode 100644 index 1360eabe7..000000000 --- a/mods/ITEMS/mcl_mushrooms/init.lua +++ /dev/null @@ -1,6 +0,0 @@ -dofile(minetest.get_modpath("mcl_mushrooms").."/small.lua") -dofile(minetest.get_modpath("mcl_mushrooms").."/huge.lua") - --- Aliases for old MCL2 versions -minetest.register_alias("mcl_farming:mushroom_red", "mcl_mushrooms:mushroom_red") -minetest.register_alias("mcl_farming:mushroom_brown", "mcl_mushrooms:mushroom_brown") diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.de.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.de.tr deleted file mode 100644 index 55996ed45..000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.de.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Dieser dekorative Block ist wie ein Riesenpilzstängel, aber mit der Stängeltextur auf allen Seiten. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Rote Riesenpilzblöcke sind die Kappenteile von roten Riesenpilzen. Sie bestehen aus einer roten Haut und können Poren an jede ihrer Seiten haben. -The stem part of a huge red mushroom.=Der Stängelteil eines roten Riesenpilzes. -Huge Red Mushroom Block=Roter Riesenpilzblock -Huge Red Mushroom Stem=Roter Riesenpilzstängel -Huge Red Mushroom All-Faces Stem=Roter allseitiger Riesenpilzstängel -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Braune Riesenpilzblöcke sind die Kappenteile von braunen Riesenpilzen. Sie bestehen aus einer braunen Haut und können Poren an jede ihrer Seiten haben. -The stem part of a huge brown mushroom.=Der Stängelteil eines braunen Riesenpilzes. -Huge Brown Mushroom Block=Brauner Riesenpilzblock -Huge Brown Mushroom Stem=Brauner Riesenpilzstängel -Huge Brown Mushroom All-Faces Stem=Brauner allseitiger Riesenpilzstängel -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Braune Pilze wachsen und breiten sich in der Dunkelheit aus, aber sie sind lichtempfindlich. Als solche sind sie ungenießbar, aber sie können benutzt werden, um Lebensmittel herzustellen. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Rote Pilze wachsen und breiten sich in der Dunkelheit aus, aber sie sind lichtempfindlich. Als solche sind sie ungenießbar, aber sie können benutzt werden, um Lebensmittel herzustellen. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Ein einzelner Pilz dieser Art wird sich im Laufe der Zeit zu einem zufälligen festem undurchsichtigem Block mit einer Lichtstärke von 12 oder weniger in einem 3×3×3-Würfel um den Pilz hin ausbreiten. Er wird sich nicht weiter ausbreiten, wenn sich 5 oder mehr Pilze der gleichen Art innerhalb eines Bereichs von 9×3×9 Blöcken um den Pilz befinden. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Pilze werden sich bei einer Lichtstärke von mindestens 12 irgendwann selbst entwurzeln. Auf Myzel oder Podsol überleben sie und breiten sich bei jeder Lichtstärke aus. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Diser Pilz kann auf Myzel und Podsol in jeder Lichtstärke platziert werden. Er kann auch auf Blöcken platziert werden, die sowohl fest als auch undurchsichtig sind, solange die Lichtstärke des Tageslichts nicht höher als 12 ist. -Brown Mushroom=Brauner Pilz -Red Mushroom=Roter Pilz -Mushroom Stew=Pilzsuppe -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Pilzsuppe ist eine gesunde Suppe, die für ein paar Hungerpunkte konsumiert werden kann. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Wenn Riesenpilzblöcke der selben Art nebeneinander platziert werden, werden sich die Seiten, die sich berühren, dauerhaft zu Poren verwandeln. -Grows on podzol, mycelium and other blocks=Wächst auf Podsol, Myzel und anderen Blöcken -Spreads in darkness=Breitet sich in der Dunkelheit aus diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.es.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.es.tr deleted file mode 100644 index fc81adf98..000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.es.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Este bloque decorativo es como un gran tallo de hongo, pero con la textura del tallo en todos los lados. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Enormes bloques de hongos rojos son las partes de la tapa de enormes hongos rojos. Consiste en una piel roja y puede tener poros en cada uno de sus lados. -The stem part of a huge red mushroom.=La parte del tallo de un champiñón rojo enorme. -Huge Red Mushroom Block=Bloque de champiñón rojo -Huge Red Mushroom Stem=Tallo de champiñón rojo -Huge Red Mushroom All-Faces Stem=Tallo de champiñón rojo (Todas las caras) -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Braune Riesenpilzblöcke sind die Kappenteile von braunen Riesenpilzen. Sie bestehen aus einer braunen Haut und können Poren an jede ihrer Seiten haben. -The stem part of a huge brown mushroom.=Der Stängelteil eines braunen Riesenpilzes. -Huge Brown Mushroom Block=Bloque de champiñón marrón -Huge Brown Mushroom Stem=Tallo de champiñón marrón -Huge Brown Mushroom All-Faces Stem=Tallo de champiñón marrón (Todas las caras) -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Los hongos marrones son hongos que crecen y se propagan en la oscuridad, pero son sensibles a la luz. No son comestibles como tales, pero pueden usarse para fabricar alimentos. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Los hongos rojos son hongos que crecen y se propagan en la oscuridad, pero son sensibles a la luz. No son comestibles como tales, pero pueden usarse para fabricar alimentos. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Un solo hongo de esta especie se extenderá lentamente con el tiempo hacia un bloque opaco sólido aleatorio con un nivel de luz de 12 o menos en un cubo de 3 × 3 × 3 alrededor del hongo. Se detiene cuando hay 5 o más hongos de la misma especie dentro de un área de 9 × 3 × 9 bloques alrededor del hongo. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Los hongos eventualmente se desarraigarán a un nivel de luz de 12 o más. En micelio o podzol, sobreviven y se propagan a cualquier nivel de luz. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Este hongo se puede colocar sobre micelio y podzol a cualquier nivel de luz. También se puede colocar en bloques que sean sólidos y opacos, siempre que el nivel de luz durante el día no sea superior a 12. -Brown Mushroom=Champiñón marrón -Red Mushroom=Champiñón rojo -Mushroom Stew=Estofado de champiñones -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=El estofado de champiñones es una sopa saludable que se puede consumir para restaurar algunos puntos de hambre. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Al colocar enormes bloques de hongos de la misma especie uno al lado del otro, los lados que se tocan se convertirán en poros permanentemente. diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.fr.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.fr.tr deleted file mode 100644 index 647b36443..000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.fr.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Ce bloc décoratif ressemble à une tige de champignon géant, mais avec la texture de la tige de tous les côtés. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Blocs de champignons rouges géants sont les parties du chapeau d'énormes champignons rouges. Il se compose d'une peau rouge et peut avoir des pores sur chacun de ses côtés. -The stem part of a huge red mushroom.=La partie tige d'un énorme champignon rouge. -Huge Red Mushroom Block=Bloc de Champignon Rouge Géant -Huge Red Mushroom Stem=Tige de Champignon Rouge Géant -Huge Red Mushroom All-Faces Stem=Tige de Champignon Rouge Géant avec Pores -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=D'énormes blocs de champignons bruns sont les parties du chapeau d'énormes champignons bruns. Il se compose d'une peau brune et peut avoir des pores sur chacun de ses côtés. -The stem part of a huge brown mushroom.=La partie tige d'un énorme champignon brun. -Huge Brown Mushroom Block=Bloc de Champignon Marron Géant -Huge Brown Mushroom Stem=Tige de Champignon Marron Géant -Huge Brown Mushroom All-Faces Stem=Tige de Champignon Marron Géant avec Pores -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Les champignons bruns sont des champignons qui poussent et se propagent dans l'obscurité, mais sont sensibles à la lumière. Ils sont non comestibles en tant que tels, mais ils peuvent être utilisés pour fabriquer des aliments. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Les champignons rouges sont des champignons qui poussent et se propagent dans l'obscurité, mais sont sensibles à la lumière. Ils sont non comestibles en tant que tels, mais ils peuvent être utilisés pour fabriquer des aliments. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Un seul champignon de cette espèce se propagera lentement au fil du temps vers un bloc opaque solide aléatoire avec un niveau de lumière de 12 ou moins dans un cube 3×3×3 autour du champignon. Il cesse de se propager lorsqu'il y a 5 champignons ou plus de la même espèce dans une zone de 9×3×9 blocs autour du champignon. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Les champignons finiront par déraciner à un niveau de lumière de 12 ou plus. Sur le mycélium ou le podzol, ils survivent et se propagent à n'importe quel niveau de lumière. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Ce champignon peut être placé sur le mycélium et le podzol à n'importe quel niveau de lumière. Il peut également être placé sur des blocs à la fois solides et opaques, tant que le niveau de lumière pendant la journée n'est pas supérieur à 12. -Brown Mushroom=Champignon Marron -Red Mushroom=Champignon Rouge -Mushroom Stew=Ragoût de Champignon -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Le ragoût de champignons est une soupe saine qui peut être consommée pour restaurer certains points de faim. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=En plaçant d'énormes blocs de champignons de la même espèce les uns à côté des autres, les côtés qui se touchent se transformeront en pores de façon permanente. -Grows on podzol, mycelium and other blocks=Pousse sur podzol, mycélium et autres blocs -Spreads in darkness=Se propage dans l'obscurité diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr deleted file mode 100644 index 3a05b5fb0..000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Ten dekoracyjny blok jest jak łodyga grzyba, ale z teksturą łodygi na każdej stronie. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Duże czerwone bloki grzybów to część kapelusza dużych czerwonych grzybów. Składają się z czerwonej skóry i mogą mieć pory na ścianach. -The stem part of a huge red mushroom.=Część łodygi dużego czerwonego grzyba. -Huge Red Mushroom Block=Blok dużego czerwonego grzyba -Huge Red Mushroom Stem=Łodyga dużego czerwonego grzyba -Huge Red Mushroom All-Faces Stem=Łodyga dużego czerwonego grzyba (wszystkie ściany) -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Duże brązowe bloki grzybów to część kapelusza dużych brązowych grzybów. Składają się z czerwonej skóry i mogą mieć pory na ścianach. -The stem part of a huge brown mushroom.=Część łodygi dużego brązowego grzyba. -Huge Brown Mushroom Block=Blok dużego brązowego grzyba -Huge Brown Mushroom Stem=Łodyga dużego brązowego grzyba -Huge Brown Mushroom All-Faces Stem=Łodyga dużego brązowego grzyba (wszystkie ściany) -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Brązowe grzyby to grzyby rosnące i rozprzestrzeniające się w ciemności i czułe na światło. Same są niejadalne, jednak można je wykorzystać do stworzenia jedzenia. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Czerwone grzyby to grzyby rosnące i rozprzestrzeniające się w ciemności i czułe na światło. Same są niejadalne, jednak można je wykorzystać do stworzenia jedzenia. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Pojedynczy grzyb tego gatunku będzie powoli rozrastał się na losowe, nieprzezroczyste, stałe bloki z poziomem oświetlenia 12 lub niższym w sześcianie 3×3×3 wokół grzyba. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Grzyby po jakimś czasie obumrą w oświetlenie o poziomie 12 i wyższym. Na grzybni i bielicy przeżyją i będą się rozprzestrzeniać przy każdym poziomie oświetlenia. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Ten grzyb może być postawiony na grzybni oraz bielicy przy dowolnym poziomie oświetlenia. Można go również postawić na dowolnym stałym, nieprzezroczystym bloku tylko jeśli poziom oświetlenia jest nie większy niż 12. -Brown Mushroom=Brązowy grzyb -Red Mushroom=Czerwony grzyb -Mushroom Stew=Zupa grzybowa -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Zupa grzybowa jest zdrową zupą, którą można zjeść by odzyskać punkty głodu. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Kładą bloki dużych grzybów tego samego gatunku obok siebie, ich dotykające się boki zamienią się na stałe w pory. -Grows on podzol, mycelium and other blocks=Rośnie na bielicy, grzybni i innych blokach. -Spreads in darkness=Rozprzestrzenia się w ciemności diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.ru.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.ru.tr deleted file mode 100644 index ba3cb171e..000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.ru.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Этот декоративный блок похож на огромную ножку гриба, но имеет структуру ножки с каждой стороны. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Блоки огромных красных грибов это части шляпок огромных красных грибов. Они состоят из красной кожицы и могут иметь поры на каждой стороне. -The stem part of a huge red mushroom.=Часть ножки огромного красного гриба. -Huge Red Mushroom Block=Блок огромного красного гриба -Huge Red Mushroom Stem=Ножка огромного красного гриба -Huge Red Mushroom All-Faces Stem=Многоликая ножка огромного красного гриба -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Блоки огромных коричневых грибов это части шляпок огромных коричневых грибов. Они состоят из коричневой кожицы и могут иметь поры на каждой стороне. -The stem part of a huge brown mushroom.=Часть ножки огромного коричневого гриба. -Huge Brown Mushroom Block=Блок огромного коричневого гриба -Huge Brown Mushroom Stem=Ножка огромного коричневого гриба -Huge Brown Mushroom All-Faces Stem=Многоликая ножка огромного коричневого гриба -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Коричневые грибы растут в темноте, но чувствительны к свету. Они несъедобны как таковые, но их можно использовать для приготовления продуктов питания. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Красные грибы растут в темноте, но чувствительны к свету. Они несъедобны как таковые, но их можно использовать для приготовления продуктов питания. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Одиночный гриб этого вида со временем будет медленно распространяться в направлении случайного твердого непрозрачного блока при уровне освещённости 12 и ниже пределах куба 3×3×3 вокруг себя. Он перестает распространяться, когда будет уже 5 и более грибов одного и того же вида на участке 9×3×9 блоков вокруг гриба. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Грибы вымирают при уровне света 12 и выше. Но на мицелии и подзоле они выживают и распространяются при любом уровне освещенности. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Этот гриб можно высадить на мицелий и подзол при любом уровне света. Его также можно размещать на плотных непрозрачных блоках, если уровень освещенности в дневное время не превышает 12. -Brown Mushroom=Коричневый гриб -Red Mushroom=Красный гриб -Mushroom Stew=Грибная похлёбка -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Грибная похлёбка - это полезный суп, который можно употребить в пищу для восстановления нескольких очков голода. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Если поместить блоки огромных грибов одного и того же вида рядом друг с другом, стороны, которыми они соприкасаются друг с другом, сразу превратятся в поры. -Grows on podzol, mycelium and other blocks=Растёт на подзолах, мицелии и других блоках -Spreads in darkness=Распространяется в темноте diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.zh_TW.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.zh_TW.tr deleted file mode 100644 index f4c6ba192..000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.zh_TW.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=這個裝飾塊就像一個巨大的蘑菇莖,但四面都有莖的紋理。 -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=紅色蘑菇方塊是巨大的紅蘑菇的菌蓋部分。它由紅色的皮膚組成,每一面都可以有毛孔。 -The stem part of a huge red mushroom.= -Huge Red Mushroom Block=紅色蘑菇方塊 -Huge Red Mushroom Stem=紅色蘑菇柄 -Huge Red Mushroom All-Faces Stem=紅色蘑菇(全紋理)柄 -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.= -The stem part of a huge brown mushroom.= -Huge Brown Mushroom Block=棕色蘑菇方塊 -Huge Brown Mushroom Stem=棕色蘑菇柄 -Huge Brown Mushroom All-Faces Stem=棕色蘑菇(全紋理)柄 -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=棕色蘑菇是在黑暗中生長和傳播的真菌,但對光線敏感。它們本身不能食用,但可以用來製作食品。 -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=紅色蘑菇是在黑暗中生長和傳播的真菌,但對光線敏感。它們本身不能食用,但可以用來製作食品。 -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=這個品種的單個蘑菇會隨著時間的推移,慢慢地向蘑菇周圍3×3×3立方體中光照度為12或更低的隨機固體不透明方塊擴散。當蘑菇周圍9×3×9塊的區域內有5個或更多相同種類的蘑菇時,它就會停止擴散。 -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=蘑菇最終會在12或更高的光照水平下連根拔起。在菌絲體或灰壤上,它們在任何光照水平下都能生存和傳播。 -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=這種蘑菇可以放置在任何光照水平的菌絲和莢膜上。只要白天的光照度不高於12,它也可以放在既堅固又不透明的木塊上。 -Brown Mushroom=棕色蘑菇 -Red Mushroom=紅色蘑菇 -Mushroom Stew=蘑菇湯 -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=蘑菇湯是一種健康的湯,食用後可以恢復一些飢餓值。 -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=通過將同一物種的巨大蘑菇塊放在一起,相互接觸的側面將永久地變成毛孔。 -Grows on podzol, mycelium and other blocks=在灰壤,菌絲體和其他方塊上生長 -Spreads in darkness=在黑暗中擴散 diff --git a/mods/ITEMS/mcl_mushrooms/locale/template.txt b/mods/ITEMS/mcl_mushrooms/locale/template.txt deleted file mode 100644 index 41ebdaa8f..000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/template.txt +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.= -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.= -The stem part of a huge red mushroom.= -Huge Red Mushroom Block= -Huge Red Mushroom Stem= -Huge Red Mushroom All-Faces Stem= -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.= -The stem part of a huge brown mushroom.= -Huge Brown Mushroom Block= -Huge Brown Mushroom Stem= -Huge Brown Mushroom All-Faces Stem= -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.= -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.= -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.= -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.= -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.= -Brown Mushroom= -Red Mushroom= -Mushroom Stew= -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.= -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.= -Grows on podzol, mycelium and other blocks= -Spreads in darkness= diff --git a/mods/ITEMS/mcl_mushrooms/mod.conf b/mods/ITEMS/mcl_mushrooms/mod.conf deleted file mode 100644 index 20f7bef16..000000000 --- a/mods/ITEMS/mcl_mushrooms/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_mushrooms -depends = mcl_sounds, mcl_util -optional_depends = doc diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_brown.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_brown.mts deleted file mode 100644 index b74e72686..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_brown.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_red.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_red.mts deleted file mode 100644 index 84e698109..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_red.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_brown.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_brown.mts deleted file mode 100644 index 431cf6566..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_brown.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_red.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_red.mts deleted file mode 100644 index 57520bf67..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_red.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/small.lua b/mods/ITEMS/mcl_mushrooms/small.lua deleted file mode 100644 index f6fbd2909..000000000 --- a/mods/ITEMS/mcl_mushrooms/small.lua +++ /dev/null @@ -1,166 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local on_place = mcl_util.generate_on_place_plant_function(function(place_pos, place_node) - local soil_node = minetest.get_node_or_nil({x=place_pos.x, y=place_pos.y-1, z=place_pos.z}) - if not soil_node then return false end - local snn = soil_node.name -- soil node name - - -- Placement rules: - -- * Always allowed on podzol or mycelimu - -- * Otherwise, must be solid, opaque and have daylight light level <= 12 - local light = minetest.get_node_light(place_pos, 0.5) - local light_ok = false - if light and light <= 12 then - light_ok = true - end - return ((snn == "mcl_core:podzol" or snn == "mcl_core:podzol_snow" or snn == "mcl_core:mycelium" or snn == "mcl_core:mycelium_snow") or (light_ok and minetest.get_item_group(snn, "solid") == 1 and minetest.get_item_group(snn, "opaque") == 1)) -end) - -local longdesc_intro_brown = S("Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.") -local longdesc_intro_red = S("Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.") - -local longdesc_append = S("A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.").."\n".. -S("Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.") - -local tt_help = S("Grows on podzol, mycelium and other blocks").."\n"..S("Spreads in darkness") - -local usagehelp = S("This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.") - -minetest.register_node("mcl_mushrooms:mushroom_brown", { - description = S("Brown Mushroom"), - _doc_items_longdesc = longdesc_intro_brown .. "\n\n" .. longdesc_append, - _doc_items_usagehelp = usagehelp, - _tt_help = tt_help, - drawtype = "plantlike", - tiles = { "farming_mushroom_brown.png" }, - inventory_image = "farming_mushroom_brown.png", - wield_image = "farming_mushroom_brown.png", - sunlight_propagates = true, - paramtype = "light", - walkable = false, - groups = { - attached_node = 1, deco_block = 1, destroy_by_lava_flow = 1, - dig_immediate = 3, dig_by_water = 1, dig_by_piston = 1, - mushroom = 1, enderman_takable = 1, compostability = 65 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - light_source = 1, - selection_box = { - type = "fixed", - fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 }, - }, - node_placement_prediction = "", - on_place = on_place, - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_mushrooms:mushroom_red", { - description = S("Red Mushroom"), - _doc_items_longdesc = longdesc_intro_red .. "\n\n" .. longdesc_append, - _doc_items_usagehelp = usagehelp, - _tt_help = tt_help, - drawtype = "plantlike", - tiles = { "farming_mushroom_red.png" }, - inventory_image = "farming_mushroom_red.png", - wield_image = "farming_mushroom_red.png", - sunlight_propagates = true, - paramtype = "light", - walkable = false, - groups = { - attached_node = 1, deco_block = 1, destroy_by_lava_flow = 1, - dig_immediate = 3, dig_by_water = 1, dig_by_piston = 1, - mushroom = 1, enderman_takable = 1, compostability = 65 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 }, - }, - node_placement_prediction = "", - on_place = on_place, - _mcl_blast_resistance = 0, -}) - -minetest.register_craftitem("mcl_mushrooms:mushroom_stew", { - description = S("Mushroom Stew"), - _doc_items_longdesc = S("Mushroom stew is a healthy soup which can be consumed to restore some hunger points."), - inventory_image = "farming_mushroom_stew.png", - on_place = minetest.item_eat(6, "mcl_core:bowl"), - on_secondary_use = minetest.item_eat(6, "mcl_core:bowl"), - groups = { food = 3, eatable = 6 }, - _mcl_saturation = 7.2, - stack_max = 1, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_mushrooms:mushroom_stew", - recipe = {"mcl_core:bowl", "mcl_mushrooms:mushroom_brown", "mcl_mushrooms:mushroom_red"} -}) - ---[[ Mushroom spread and death -Code based on information gathered from Minecraft Wiki - -]] -minetest.register_abm({ - label = "Mushroom spread and death", - nodenames = {"mcl_mushrooms:mushroom_brown", "mcl_mushrooms:mushroom_red"}, - interval = 11, - chance = 50, - action = function(pos, node) - local node_soil = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name - -- Mushrooms uproot in light except on podzol or mycelium - if node_soil ~= "mcl_core:podzol" and node_soil ~= "mcl_core:mycelium" and - node_soil ~= "mcl_core:podzol_snow" and node_soil ~= "mcl_core:mycelium_snow" and minetest.get_node_light(pos, nil) > 12 then - minetest.dig_node(pos) - return - end - - local pos0 = vector.add(pos, {x=-4, y=-1, z=-4}) - local pos1 = vector.add(pos, {x=4, y=1, z=4}) - - -- Stop mushroom spread if a 9×3×9 box is too crowded - if #minetest.find_nodes_in_area(pos0, pos1, node.name) >= 5 then - return - end - - local selected_pos = table.copy(pos) - - -- Do two random selections which may place the new mushroom in a 5×5×5 cube - local random = { - x = selected_pos.x + math.random(-1, 1), - y = selected_pos.y + math.random(0, 1) - math.random(0, 1), - z = selected_pos.z + math.random(-1, 1) - } - local random_node = minetest.get_node_or_nil(random) - if not random_node or random_node.name ~= "air" then - return - end - local node_under = minetest.get_node_or_nil({x = random.x, y = random.y - 1, z = random.z}) - if not node_under then - return - end - - if minetest.get_node_light(random, 0.5) > 12 or (minetest.get_item_group(node_under.name, "opaque") == 0) then - return - end - local random2 = { - x = random.x + math.random(-1, 1), - y = random.y, - z = random.z + math.random(-1, 1) - } - random_node = minetest.get_node_or_nil(random2) - if not random_node or random_node.name ~= "air" then - return - end - node_under = minetest.get_node_or_nil({x = random2.x, y = random2.y - 1, z = random2.z}) - if not node_under then - return - end - if minetest.get_node_light(random2, 0.5) > 12 or (minetest.get_item_group(node_under.name, "opaque") == 0) or (minetest.get_item_group(node_under.name, "solid") == 0) then - return - end - - minetest.set_node(random2, {name = node.name}) - end -}) diff --git a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_brown.png b/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_brown.png deleted file mode 100644 index 37e1d11e8..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_red.png b/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_red.png deleted file mode 100644 index 5f9135863..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_stew.png b/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_stew.png deleted file mode 100644 index 453225088..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_stew.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_inside.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_inside.png deleted file mode 100644 index 06377fee8..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_inside.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_brown.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_brown.png deleted file mode 100644 index 65d27c4c2..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_red.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_red.png deleted file mode 100644 index 3907e3791..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_stem.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_stem.png deleted file mode 100644 index 43e2ff1b2..000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_stem.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua deleted file mode 100644 index 2d8def90d..000000000 --- a/mods/ITEMS/mcl_nether/init.lua +++ /dev/null @@ -1,341 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_screwdriver = minetest.get_modpath("screwdriver") -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - -minetest.register_node("mcl_nether:glowstone", { - description = S("Glowstone"), - _doc_items_longdesc = S("Glowstone is a naturally-glowing block which is home to the Nether."), - tiles = {"mcl_nether_glowstone.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,building_block=1, material_glass=1}, - drop = { - max_items = 1, - items = { - {items = {"mcl_nether:glowstone_dust 4"}, rarity = 3}, - {items = {"mcl_nether:glowstone_dust 3"}, rarity = 3}, - {items = {"mcl_nether:glowstone_dust 2"}}, - } - }, - paramtype = "light", - light_source = minetest.LIGHT_MAX, - sounds = mcl_sounds.node_sound_glass_defaults(), - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mcl_nether:glowstone_dust"}, - min_count = 2, - max_count = 4, - cap = 4, - } -}) - -minetest.register_node("mcl_nether:quartz_ore", { - description = S("Nether Quartz Ore"), - _doc_items_longdesc = S("Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether."), - stack_max = 64, - tiles = {"mcl_nether_quartz_ore.png"}, - is_ground_content = true, - groups = {pickaxey=1, building_block=1, material_stone=1, xp=3}, - drop = "mcl_nether:quartz", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore -}) - --- For eternal fire on top of netherrack and magma blocks --- (this code does not require a dependency on mcl_fire) -local function eternal_after_destruct(pos, oldnode) - pos.y = pos.y + 1 - if minetest.get_node(pos).name == "mcl_fire:eternal_fire" then - minetest.remove_node(pos) - end -end - -local function eternal_on_ignite(player, pointed_thing) - local pos = pointed_thing.under - local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} - local fn = minetest.get_node(flame_pos) - local pname = player:get_player_name() - if minetest.is_protected(flame_pos, pname) then - minetest.record_protection_violation(flame_pos, pname) - return - end - if fn.name == "air" and pointed_thing.under.y < pointed_thing.above.y then - minetest.set_node(flame_pos, {name = "mcl_fire:eternal_fire"}) - return true - else - return false - end -end - -minetest.register_node("mcl_nether:netherrack", { - description = S("Netherrack"), - _doc_items_longdesc = S("Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire."), - stack_max = 64, - tiles = {"mcl_nether_netherrack.png"}, - is_ground_content = true, - groups = {pickaxey=1, building_block=1, material_stone=1, enderman_takable=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.4, - _mcl_hardness = 0.4, - - -- Eternal fire on top - after_destruct = eternal_after_destruct, - _on_ignite = eternal_on_ignite, -}) - -minetest.register_node("mcl_nether:magma", { - description = S("Magma Block"), - _tt_help = minetest.colorize(mcl_colors.YELLOW, S("Burns your feet")), - _doc_items_longdesc = S("Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire."), - stack_max = 64, - tiles = {{name="mcl_nether_magma.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.5}}}, - is_ground_content = true, - light_source = 3, - sunlight_propagates = false, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - -- From walkover mod - on_walk_over = function(loc, nodeiamon, player) - local armor_feet = player:get_inventory():get_stack("armor", 5) - if player and player:get_player_control().sneak or (minetest.global_exists("mcl_enchanting") and mcl_enchanting.has_enchantment(armor_feet, "frost_walker")) or (minetest.global_exists("mcl_potions") and mcl_potions.player_has_effect(player, "fire_proof")) then - return - end - -- Hurt players standing on top of this block - if player:get_hp() > 0 then - mcl_util.deal_damage(player, 1, {type = "hot_floor"}) - end - end, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - - -- Eternal fire on top - after_destruct = eternal_after_destruct, - _on_ignite = eternal_on_ignite, -}) - -minetest.register_node("mcl_nether:soul_sand", { - description = S("Soul Sand"), - _tt_help = S("Reduces walking speed"), - _doc_items_longdesc = S("Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block."), - stack_max = 64, - tiles = {"mcl_nether_soul_sand.png"}, - is_ground_content = true, - groups = {handy = 1, shovely = 1, building_block = 1, soil_nether_wart = 1, material_sand = 1, soul_block = 1 }, - collision_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, - }, - sounds = mcl_sounds.node_sound_sand_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - -- Movement handling is done in mcl_playerplus mod -}) - -minetest.register_node("mcl_nether:nether_brick", { - -- Original name: Nether Brick - description = S("Nether Brick Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - tiles = {"mcl_nether_nether_brick.png"}, - is_ground_content = false, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - -minetest.register_node("mcl_nether:red_nether_brick", { - -- Original name: Red Nether Brick - description = S("Red Nether Brick Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - tiles = {"mcl_nether_red_nether_brick.png"}, - is_ground_content = false, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - - -minetest.register_node("mcl_nether:nether_wart_block", { - description = S("Nether Wart Block"), - _doc_items_longdesc = S("A nether wart block is a purely decorative block made from nether wart."), - stack_max = 64, - tiles = {"mcl_nether_nether_wart_block.png"}, - is_ground_content = false, - groups = {handy=1, hoey=1, building_block=1, compostability = 85}, - sounds = mcl_sounds.node_sound_leaves_defaults( - { - footstep={name="default_dirt_footstep", gain=0.7}, - dug={name="default_dirt_footstep", gain=1.5}, - } - ), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, -}) - -minetest.register_node("mcl_nether:quartz_block", { - description = S("Block of Quartz"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_nether_quartz_block_top.png", "mcl_nether_quartz_block_bottom.png", "mcl_nether_quartz_block_side.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_nether:quartz_chiseled", { - description = S("Chiseled Quartz Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_nether_quartz_chiseled_top.png", "mcl_nether_quartz_chiseled_top.png", "mcl_nether_quartz_chiseled_side.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_nether:quartz_pillar", { - description = S("Pillar Quartz Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - paramtype2 = "facedir", - is_ground_content = false, - on_place = mcl_util.rotate_axis, - tiles = {"mcl_nether_quartz_pillar_top.png", "mcl_nether_quartz_pillar_top.png", "mcl_nether_quartz_pillar_side.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) -minetest.register_node("mcl_nether:quartz_smooth", { - description = S("Smooth Quartz"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_nether_quartz_block_bottom.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_craftitem("mcl_nether:glowstone_dust", { - description = S("Glowstone Dust"), - _doc_items_longdesc = S("Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting."), - inventory_image = "mcl_nether_glowstone_dust.png", - stack_max = 64, - groups = { craftitem=1, brewitem=1 }, -}) - -minetest.register_craftitem("mcl_nether:quartz", { - description = S("Nether Quartz"), - _doc_items_longdesc = S("Nether quartz is a versatile crafting ingredient."), - inventory_image = "mcl_nether_quartz.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_nether:netherbrick", { - description = S("Nether Brick"), - _doc_items_longdesc = S("Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences."), - inventory_image = "mcl_nether_netherbrick.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_nether:quartz", - recipe = "mcl_nether:quartz_ore", - cooktime = 10, -}) - -minetest.register_craft({ - output = "mcl_nether:quartz_block", - recipe = { - {"mcl_nether:quartz", "mcl_nether:quartz"}, - {"mcl_nether:quartz", "mcl_nether:quartz"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:quartz_pillar 2", - recipe = { - {"mcl_nether:quartz_block"}, - {"mcl_nether:quartz_block"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:glowstone", - recipe = { - {"mcl_nether:glowstone_dust", "mcl_nether:glowstone_dust"}, - {"mcl_nether:glowstone_dust", "mcl_nether:glowstone_dust"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:magma", - recipe = { - {"mcl_mobitems:magma_cream", "mcl_mobitems:magma_cream"}, - {"mcl_mobitems:magma_cream", "mcl_mobitems:magma_cream"}, - } -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_nether:netherbrick", - recipe = "mcl_nether:netherrack", - cooktime = 10, -}) - -minetest.register_craft({ - output = "mcl_nether:nether_brick", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:netherbrick"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:red_nether_brick", - recipe = { - {"mcl_nether:nether_wart_item", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:nether_wart_item"}, - } -}) -minetest.register_craft({ - output = "mcl_nether:red_nether_brick", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:netherbrick"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:nether_wart_block", - recipe = { - {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, - } -}) - -dofile(minetest.get_modpath(minetest.get_current_modname()).."/nether_wart.lua") -dofile(minetest.get_modpath(minetest.get_current_modname()).."/lava.lua") diff --git a/mods/ITEMS/mcl_nether/lava.lua b/mods/ITEMS/mcl_nether/lava.lua deleted file mode 100644 index 035a50322..000000000 --- a/mods/ITEMS/mcl_nether/lava.lua +++ /dev/null @@ -1,32 +0,0 @@ --- Lava in the Nether - -local S = minetest.get_translator(minetest.get_current_modname()) - --- TODO: Increase flow speed. This could be done by reducing viscosity, --- but this would also allow players to swim faster in lava. - -local lava_src_def = table.copy(minetest.registered_nodes["mcl_core:lava_source"]) -lava_src_def.description = S("Nether Lava Source") -lava_src_def._doc_items_create_entry = false -lava_src_def._doc_items_entry_name = nil -lava_src_def._doc_items_longdesc = nil -lava_src_def._doc_items_usagehelp = nil -lava_src_def.liquid_range = 7 -lava_src_def.liquid_alternative_source = "mcl_nether:nether_lava_source" -lava_src_def.liquid_alternative_flowing = "mcl_nether:nether_lava_flowing" -minetest.register_node("mcl_nether:nether_lava_source", lava_src_def) - -local lava_flow_def = table.copy(minetest.registered_nodes["mcl_core:lava_flowing"]) -lava_flow_def.description = S("Flowing Nether Lava") -lava_flow_def._doc_items_create_entry = false -lava_flow_def.liquid_range = 7 -lava_flow_def.liquid_alternative_flowing = "mcl_nether:nether_lava_flowing" -lava_flow_def.liquid_alternative_source = "mcl_nether:nether_lava_source" -minetest.register_node("mcl_nether:nether_lava_flowing", lava_flow_def) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_core:lava_source", "nodes", "mcl_nether:nether_lava_source") - doc.add_entry_alias("nodes", "mcl_core:lava_source", "nodes", "mcl_nether:nether_lava_flowing") -end - diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr deleted file mode 100644 index f81f381e2..000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Leuchtstein -Glowstone is a naturally-glowing block which is home to the Nether.=Leuchtstein ist ein Block aus dem Nether. Er leuchtet von Natur aus hell. -Nether Quartz Ore=Nether-Quarzerz -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Nether-Quarzerz ist ein Erz, das Nethererz enthält. Es wird oft zwischen Netherrack im Nether gefunden. -Netherrack=Netherrack -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Netherrack ist ein gesteinsartiger Block aus dem Nether. Auf diesem Block wird ein Feuer immer ein ewiges Feuer sein. -Magma Block=Magmablock -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Magmablöcke sind heiße feste Blöcke, die jeden, der auf ihm steht, verletzen, es sei denn, sie sind gegen Feuer immun. Auf diesem Block wird ein Feuer immer ein ewiges Feuer sein. -Soul Sand=Seelensand -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Seelensand ist ein Block aus dem Nether. Man kann auf ihm nur langsam gehen. Die Verlangsamung ist verstärkt, wenn sich der Seelensand auf Eis, Packeis oder einem Schleimblock befindet. -Nether Brick Block=Netherziegelblock -Red Nether Brick Block=Roter Netherziegelblock -Nether Wart Block=Netherwurzblock -A nether wart block is a purely decorative block made from nether wart.=Ein Netherwurzblock ist ein rein dekorativer Block aus Netherwurz. -Block of Quartz=Quarzblock -Chiseled Quartz Block=Gemeißelter Quarzblock -Pillar Quartz Block=Quarzsäulenblock -Smooth Quartz=Glatter Quarz -Glowstone Dust=Leuchtsteinstaub -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=Leuchtsteinstaub ist das Staub aus zerbrochenen Leuchtsteinen. -Nether Quartz=Netherquarz -Nether quartz is a versatile crafting ingredient.=Netherquarz ist eine vielseitige Fertigungskomponente. -Nether Brick=Netherziegel -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Netherziegel werden hauptsächlich zur Fertigung von Netherziegelblöcken und Netherzäunen benutzt. -Nether Lava Source=Netherlavaquelle -Flowing Nether Lava=Fließende Netherlava -@1 stood too long on a magma block.=@1 stand zu lange auf einem Magmablock. -Premature Nether Wart (Stage 1)=Junger Netherwurz (1. Stufe) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Ein junger Netherwurz wurde erst kürzlich auf Seelensand gepflanzt. Netherwurz wächst langsam auf Seelensand in 4 Stufen (die 2. und 3. Stufe sehen identisch aus). Obwohl Netherwurz im Nether beheimatet ist, wächst er in jeder Dimension. -Premature Nether Wart (Stage 2)=Junger Netherwurz (2. Stufe) -Premature Nether Wart (Stage 3)=Junger Netherwurz (3. Stufe) -Mature Nether Wart=Ausgewachsener Netherwurz -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=Der ausgewachsene Netherwurz ist eine Pflanze aus dem Nether. Er hat seine volle Größe erreicht, ist erntereif und wächst nicht weiter. -Nether Wart=Netherwurz -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Netherwurze sind Pflanzen, die im Nether beheimatet sind. Sie können auf Seelensand gepflanzt werden und wachsen in 4 Stufen. -Place this item on soul sand to plant it and watch it grow.=Platzieren Sie den Gegenstand auf Seelensand, um ihn zu pflanzen und sehen Sie dabei zu, wie es wächst. -Burns your feet=Verbrennt Ihre Füße -Grows on soul sand=Wächst auf Seelensand -Reduces walking speed=Reduziert das Schritttempo diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.es.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.es.tr deleted file mode 100644 index 046b95f27..000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.es.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Piedra luminosa -Glowstone is a naturally-glowing block which is home to the Nether.=Glowstone es un bloque que brilla de forma natural y que lo alberga el Nether. -Nether Quartz Ore=Mena de cuarzo -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=La mena de cuarzo es un mineral que contiene cuarzo inferior. Se encuentra comúnmente alrededor del tramo inferior en el Nether. -Netherrack=Netherrack -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Netherrack es un bloque de piedra que alberga el Nether. Comenzar un incendio en este bloque creará un fuego eterno. -Magma Block=Bloque de magma -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Los bloques de magma son bloques sólidos y calientes que lastiman a cualquiera que esté parado sobre él, a menos que tengan resistencia al fuego. Comenzar un incendio en este bloque creará un fuego eterno. -Soul Sand=Arena de almas -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=La arena del alma está a una cuadra del Nether. Uno solo puede caminar lentamente sobre la arena del alma. El efecto de desaceleración se amplifica cuando la arena del alma está encima del hielo, hielo empaquetado o un bloque de limo. -Nether Brick Block=Ladrillos del Nether -Red Nether Brick Block=Ladrillos del Nether rojos -Nether Wart Block=Bloque de verrugas del Nether -A nether wart block is a purely decorative block made from nether wart.=Un bloque de verruga inferior es un bloque puramente decorativo hecho de verruga inferior. -Block of Quartz=Bloque de cuarzo -Chiseled Quartz Block=Cuarzo cincelado -Pillar Quartz Block=Pilar de cuarzo -Smooth Quartz=Cuarzo liso -Glowstone Dust=Polvo de piedra luminosa -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=El polvo de piedra luminosa es el polvo que sale de las piedras luminiscentes rotas. Se utiliza principalmente en la elaboración. -Nether Quartz=Infracuarzo -Nether quartz is a versatile crafting ingredient.=El cuarzo abisal es un ingrediente de elaboración versátil. -Nether Brick=Ladrillos del Nether -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Los ladrillos abisales son el ingrediente principal para la elaboración de bloques de ladrillo y cercas inferiores. -Nether Lava Source=Fuente de lava del Nether -Flowing Nether Lava=Fuente de lava fluida del Nether -@1 stood too long on a magma block.=@1 permaneció demasiado tiempo sobre un bloque de magma. -Premature Nether Wart (Stage 1)=Verruga del Nether prematura (Etapa 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Recientemente se ha plantado una verruga inferior prematura en la arena del alma. La verruga abisal crece lentamente en la arena del alma en 4 etapas (la segunda y la tercera etapa son idénticas). Aunque la verruga inferior es el hogar del Nether, crece en cualquier dimensión. -Premature Nether Wart (Stage 2)=Verruga del Nether prematura (Etapa 2) -Premature Nether Wart (Stage 3)=Verruga del Nether prematura (Etapa 3) -Mature Nether Wart=Verruga del Nether madura -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=La verruga inferior madura es una planta del Nether y alcanzó su tamaño completo y no crecerá más. Está listo para ser cosechado por sus artículos. -Nether Wart=Verruga del Nether -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Las verrugas abisales son plantas que albergan al abismo Se pueden plantar en la arena del alma y crecer en 4 etapas. -Place this item on soul sand to plant it and watch it grow.=Coloque este artículo en la arena del alma para plantarlo y verlo crecer. diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr deleted file mode 100644 index 3e3583355..000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Pierre Lumineuse -Glowstone is a naturally-glowing block which is home to the Nether.=La Pierre Lumineuse est un bloc naturellement brillant qui abrite le Nether. -Nether Quartz Ore=Minerai de quartz du Nether -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Le minerai de quartz du Nether est un minerai contenant du quartz du Nether. Il se trouve généralement autour du Néantrack dans le Nether. -Netherrack=Netherrack -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Netherrack est un bloc de pierre qui abrite le Nether. Démarrer un feu sur ce bloc créera un feu éternel. -Magma Block=Bloc de Magma -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Les blocs de magma sont des blocs solides chauds qui blessent quiconque s'y tient, à moins qu'ils n'aient une résistance au feu. Démarrer un feu sur ce bloc créera un feu éternel. -@1 stood too long on a magma block.=@1 s'est tenu trop longtemps sur un bloc de magma. -Soul Sand=Sable des âmes -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Le sable de l'âme est un bloc du Nether. On ne peut que marcher lentement sur le sable de l'âme. L'effet de ralentissement est amplifié lorsque le sable de l'âme est au-dessus de la glace, de la glace tassée ou d'un bloc de slime. -Nether Brick Block=Bloc de Briques du Nether -Red Nether Brick Block=Bloc de Briques Rouges du Nether -Nether Wart Block=Bloc de Verrues du Nether -A nether wart block is a purely decorative block made from nether wart.=Un bloc de verrues du Nether est un bloc purement décoratif fabriqué à partir de verrue du Nether. -Block of Quartz=Bloc de Quartz -Chiseled Quartz Block=Bloc de Quartz sculpté -Pillar Quartz Block=Bloc de Quartz rayé -Smooth Quartz=Quartz Lisse -Glowstone Dust=Poudre Lumineuse -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=La poudre lumineuse est la poussière qui sort des pierres incandescentes brisées. Il est principalement utilisé dans l'artisanat. -Nether Quartz=Quartz du Nether -Nether quartz is a versatile crafting ingredient.=Le quartz du Nether est un ingrédient artisanal polyvalent. -Nether Brick=Brique du Nether -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Les briques du Nether sont le principal ingrédient pour la fabrication de blocs de briques et de clôtures du Nether. -Nether Lava Source=Source de Lave du Nether -Flowing Nether Lava=Lave du Nether en Mouvement -Premature Nether Wart (Stage 1)=Verrue du Néant prématurée (étape 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Une verrue du Nether prématurée vient d'être plantée sur du sable d'âme. La verrue du Nether pousse lentement sur le sable de l'âme en 4 étapes (les deuxième et troisième étapes semblent identiques). Bien que la verrue du Nether habite le Nether, elle se développe dans toutes les dimensions. -Premature Nether Wart (Stage 2)=Verrue du Néant prématurée (étape 2) -Premature Nether Wart (Stage 3)=Verrue du Néant prématurée (étape 3) -Mature Nether Wart=Verrue du Néant Mature -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=La verrue du Nether mature est une plante du Nether qui a atteint sa taille maximale et ne poussera plus. Il est prêt à être récolté pour ses articles. -Nether Wart=Verrues du Nether -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Les verrues du Nether sont des plantes qui habitent le Nether. Ils peuvent être plantés sur du sable d'âme et se développer en 4 étapes. -Place this item on soul sand to plant it and watch it grow.=Placez cet article sur du sable d'âme pour le planter et regardez-le grandir. -Burns your feet=Vous brûle les pieds -Grows on soul sand=Pousse sur le sable de l'âme -Reduces walking speed=Réduit la vitesse de marche \ No newline at end of file diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr deleted file mode 100644 index 11edbe3d4..000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Jasnogłaz -Glowstone is a naturally-glowing block which is home to the Nether.=Jasnogłaz jest naturalnie świecącym blokiem, występującym w Netherze. -Nether Quartz Ore=Ruda Netherowego kwarcu -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Ruda Netherowego kwarcu jest rudą zawierającą Netherowy kwarc. Występuje często nieopodal skał Netheru. -Netherrack=Skała Netheru -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Skała Netheru jest blokiem podobnym do kamienia występującym w Netherze. -Magma Block=Blok magmy -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Bloki magmy są gorącymi stałymi blokami, które ranią każdego kto na nich stanie, chyba, że mają odporność na ogień. Rozpalenie ognia na tym bloku stworzy wieczny ogień. -@1 stood too long on a magma block.=@1 zbyt długo stała na bloku magmy. -Soul Sand=Piasek dusz -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Piasek dusz jest blokiem z Netheru. Można na nim tylko chodzić powoli. Efekt spowolnienia jest mocniejszy gdy piasek dusz jest położony na lodzie, zbitym lodzi lub bloku szlamu. -Nether Brick Block=Blok Netherowych cegieł -Red Nether Brick Block=Blok czerwonych Netherowych cegieł -Nether Wart Block=Blok Netherowej brodawki -A nether wart block is a purely decorative block made from nether wart.=Blok Netherowej brodawki jest dekoracyjnym blokiem utworzonym z Netherowej brodawki. -Block of Quartz=Blok kwarcu -Chiseled Quartz Block=Rzeźbiony blok kwarcu -Pillar Quartz Block=Filarowy blok kwarcu -Smooth Quartz=Gładki kwarc -Glowstone Dust=Pył jasnogłazu -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=Pył jasnogłazu to pył wyrzucany przez rozbite jasnogłazy. Jest głównie wykorzystywany w wytwarzaniu. -Nether Quartz=Netherowy kwarc -Nether quartz is a versatile crafting ingredient.=Netherowy kwarc jest wszechstronnym przedmiotem użytecznym w wytwarzaniu. -Nether Brick=Netherowa cegła -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Netherowe cegły są głównym składnikiem do wytwarzania bloków Netherowej cegły oraz Netherowych ogrodzeń. -Nether Lava Source=Netherowe źródło lawy -Flowing Nether Lava=Płynąca Netherowa lawa -Premature Nether Wart (Stage 1)=Niedojrzała Netherowa brodawka (Etap 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Niedojrzała Netherowa brodawka to brodawka, która niedawno została zasadzona na piasku dusz. Netherowa brodawka rośnie na piasku dusz w 4 etapach (drugi i trzeci wyglądają identycznie). Pomimo tego, że brodawki te naturalnie występują tylko w Netherze, mogą one rosnąć w każdym wymiarze. -Premature Nether Wart (Stage 2)=Niedojrzała Netherowa brodawka (Etap 2) -Premature Nether Wart (Stage 3)=Niedojrzała Netherowa brodawka (Etap 3) -Mature Nether Wart=Dojrzała Netherowa brodawka -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=Dojrzała Netherowa brodawka jest rośliną z Netheru, która osiągnęła swój maksymalny rozmiar i nie urośnie więcej. Jest gotowa do zebrania dla swojego zrzutu. -Nether Wart=Netherowa brodawka -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Netherowe brodawki to rośliny występujące w Netherze. Mogą być posadzone na piasku dusz i wyrosną w 4 fazach. -Place this item on soul sand to plant it and watch it grow.=Postaw ten przedmiot na piasku dusz aby zasadzić go i patrz jak rośnie. -Burns your feet=Pali w stopy -Grows on soul sand=Rośnie na piasku dusz -Reduces walking speed=Zmniejsza prędkość poruszania diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr deleted file mode 100644 index f546d16ca..000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Светящийся камень -Glowstone is a naturally-glowing block which is home to the Nether.=Светящийся камень это природный источник света, блок, встречающийся в Аду. -Nether Quartz Ore=Кварцевая руда -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Кварцевая руда это порода, содержащая адский кварц. Часто встречается в Аду вокруг адского камня. -Netherrack=Адский камень -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Адский камень это блок, выглядящий как камень, домом которого является Ад. Разжигание огня на этом блоке создаст вечный огонь. -Magma Block=Блок магмы -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Блоки магмы это горячие твёрдые блоки, причиняющие боль тем, кто на них стоит, если у них нет защиты от огня. Разжигание огня на таком блоке создаст вечный огонь. -@1 stood too long on a magma block.=@1 слишком долго стоял(а) на магмовом блоке. -Soul Sand=Песок душ -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Песок душ это блок из Ада. Идти по нему можно только медленно. Замедляющий эффект усиливается, если песок душ лежит на льду, упакованном льду или блоке слизи. -Nether Brick Block=Блок адского кирпича -Red Nether Brick Block=Красный блок адского кирпича -Nether Wart Block=Блок адского нароста -A nether wart block is a purely decorative block made from nether wart.=Блок адского нароста это чисто декоративный блок, сделанный из адского нароста. -Block of Quartz=Кварцевый блок -Chiseled Quartz Block=Точёный кварцевый блок -Pillar Quartz Block=Кварцевый столб -Smooth Quartz=Гладкий кварц -Glowstone Dust=Светящаяся пыль -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=Светящаяся пыль это пыль, которая получается из сломанного светящегося камня. -Nether Quartz=Адский кварц -Nether quartz is a versatile crafting ingredient.=Адский кварц это универсальный ингредиент для крафтинга. -Nether Brick=Адский кирпич -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Адские кирпичи это главный ингредиент для создания блоков адских кирпичей. -Nether Lava Source=Адский источник лавы -Flowing Nether Lava=Текущая адская лава -Premature Nether Wart (Stage 1)=Саженец адского нароста (стадия 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Саженец адского нароста был недавно высажен на песке душ. Его медленный рост происходит 4 стадии (вторая и третья стадии неотличимы на глаз). Хотя домом адского нароста является Ад, он растёт в любом измерении. -Premature Nether Wart (Stage 2)=Саженец адского нароста (стадия 2) -Premature Nether Wart (Stage 3)=Саженец адского нароста (стадия 3) -Mature Nether Wart=Зрелый адский нарост -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=Зрелый адский нарост это растение Ада, достигшее своего полного размера, дальше расти оно уже не будет. Оно готово к сбору в качестве предметов. -Nether Wart=Адский нарост -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Адские наросты это растения, домом которых является Ад. Их можно высаживать на песке душ, и они растут в 4 стадии. -Place this item on soul sand to plant it and watch it grow.=Поместите этот предмет на песок душ, чтобы посадить его и наблюдать за его ростом. -Burns your feet=Обжигает ваши ноги -Grows on soul sand=Растёт на песке душ -Reduces walking speed=Уменьшает скорость ходьбы diff --git a/mods/ITEMS/mcl_nether/locale/template.txt b/mods/ITEMS/mcl_nether/locale/template.txt deleted file mode 100644 index 0e69ad520..000000000 --- a/mods/ITEMS/mcl_nether/locale/template.txt +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone= -Glowstone is a naturally-glowing block which is home to the Nether.= -Nether Quartz Ore= -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.= -Netherrack= -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.= -Magma Block= -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.= -@1 stood too long on a magma block.= -Soul Sand= -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.= -Nether Brick Block= -Red Nether Brick Block= -Nether Wart Block= -A nether wart block is a purely decorative block made from nether wart.= -Block of Quartz= -Chiseled Quartz Block= -Pillar Quartz Block= -Smooth Quartz= -Glowstone Dust= -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.= -Nether Quartz= -Nether quartz is a versatile crafting ingredient.= -Nether Brick= -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.= -Nether Lava Source= -Flowing Nether Lava= -Premature Nether Wart (Stage 1)= -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.= -Premature Nether Wart (Stage 2)= -Premature Nether Wart (Stage 3)= -Mature Nether Wart= -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.= -Nether Wart= -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.= -Place this item on soul sand to plant it and watch it grow.= -Burns your feet= -Grows on soul sand= -Reduces walking speed= \ No newline at end of file diff --git a/mods/ITEMS/mcl_nether/mod.conf b/mods/ITEMS/mcl_nether/mod.conf deleted file mode 100644 index f5ffa61ac..000000000 --- a/mods/ITEMS/mcl_nether/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_nether -depends = mcl_core, mcl_sounds, mcl_util, walkover, doc_items, mcl_colors -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_nether/nether_wart.lua b/mods/ITEMS/mcl_nether/nether_wart.lua deleted file mode 100644 index f6eb0c03c..000000000 --- a/mods/ITEMS/mcl_nether/nether_wart.lua +++ /dev/null @@ -1,187 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local table = table - -minetest.register_node("mcl_nether:nether_wart_0", { - description = S("Premature Nether Wart (Stage 1)"), - _doc_items_longdesc = S("A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension."), - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_nether:nether_wart_item", - tiles = {"mcl_nether_nether_wart_stage_0.png"}, - wield_image = "mcl_nether_nether_wart_stage_0.png", - inventory_image = "mcl_nether_nether_wart_stage_0.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.125, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), -}) - -minetest.register_node("mcl_nether:nether_wart_1", { - description = S("Premature Nether Wart (Stage 2)"), - _doc_items_create_entry = false, - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_nether:nether_wart_item", - tiles = {"mcl_nether_nether_wart_stage_1.png"}, - wield_image = "mcl_nether_nether_wart_stage_1.png", - inventory_image = "mcl_nether_nether_wart_stage_1.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.15, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), -}) - -minetest.register_node("mcl_nether:nether_wart_2", { - description = S("Premature Nether Wart (Stage 3)"), - _doc_items_create_entry = false, - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_nether:nether_wart_item", - tiles = {"mcl_nether_nether_wart_stage_1.png"}, - wield_image = "mcl_nether_nether_wart_stage_1.png", - inventory_image = "mcl_nether_nether_wart_stage_1.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.15, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), -}) - -minetest.register_node("mcl_nether:nether_wart", { - description = S("Mature Nether Wart"), - _doc_items_longdesc = S("The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items."), - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = { - max_items = 2, - items = { - { items = {"mcl_nether:nether_wart_item 2"}, rarity = 1 }, - { items = {"mcl_nether:nether_wart_item 2"}, rarity = 3 }, - { items = {"mcl_nether:nether_wart_item 1"}, rarity = 3 }, - }, - }, - tiles = {"mcl_nether_nether_wart_stage_2.png"}, - wield_image = "mcl_nether_nether_wart_stage_2.png", - inventory_image = "mcl_nether_nether_wart_stage_2.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.45, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mcl_nether:nether_wart_item"}, - min_count = 2, - max_count = 4, - } -}) - -minetest.register_craftitem("mcl_nether:nether_wart_item", { - description = S("Nether Wart"), - _tt_help = S("Grows on soul sand"), - _doc_items_longdesc = S("Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages."), - _doc_items_usagehelp = S("Place this item on soul sand to plant it and watch it grow."), - inventory_image = "mcl_nether_nether_wart.png", - wield_image = "mcl_nether_nether_wart.png", - groups = {craftitem = 1, brewitem = 1, compostability = 30}, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local placepos = pointed_thing.above - local soilpos = table.copy(placepos) - soilpos.y = soilpos.y - 1 - - -- Check for correct soil type - local chk = minetest.get_item_group(minetest.get_node(soilpos).name, "soil_nether_wart") - if chk and chk ~= 0 then - -- Check if node above soil node allows placement - if minetest.registered_items[minetest.get_node(placepos).name].buildable_to then - -- Place nether wart - minetest.sound_play({name="default_place_node", gain=1.0}, {pos=placepos}, true) - minetest.set_node(placepos, {name="mcl_nether:nether_wart_0", param2 = 3}) - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end - end - end, -}) - -local names = {"mcl_nether:nether_wart_0", "mcl_nether:nether_wart_1", "mcl_nether:nether_wart_2"} - -minetest.register_abm({ - label = "Nether wart growth", - nodenames = {"mcl_nether:nether_wart_0", "mcl_nether:nether_wart_1", "mcl_nether:nether_wart_2"}, - neighbors = {"group:soil_nether_wart"}, - interval = 35, - chance = 11, - action = function(pos, node) - pos.y = pos.y-1 - if minetest.get_item_group(minetest.get_node(pos).name, "soil_nether_wart") == 0 then - return - end - pos.y = pos.y+1 - local step = nil - for i,name in ipairs(names) do - if name == node.name then - step = i - break - end - end - if step == nil then - return - end - local new_node = {name=names[step+1]} - if new_node.name == nil then - new_node.name = "mcl_nether:nether_wart" - end - new_node.param = node.param - new_node.param2 = node.param2 - minetest.set_node(pos, new_node) - end -}) - -if minetest.get_modpath("doc") then - for i=1,2 do - doc.add_entry_alias("nodes", "mcl_nether:nether_wart_0", "nodes", "mcl_nether:nether_wart_"..i) - end -end diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone.png deleted file mode 100644 index d42c9c9c5..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone_dust.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone_dust.png deleted file mode 100644 index 446fffc0c..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone_dust.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_magma.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_magma.png deleted file mode 100644 index 8f378e02b..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_magma.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_brick.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_brick.png deleted file mode 100644 index 43a1af1bb..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart.png deleted file mode 100644 index 456a760b9..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_block.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_block.png deleted file mode 100644 index 6968c99c9..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_0.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_0.png deleted file mode 100644 index 37779d379..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_1.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_1.png deleted file mode 100644 index 30b38186a..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_2.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_2.png deleted file mode 100644 index 0478c760a..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherbrick.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netherbrick.png deleted file mode 100644 index 9d8c32d85..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherbrick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherrack.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netherrack.png deleted file mode 100644 index 43b978c43..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherrack.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz.png deleted file mode 100644 index 70512029e..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_bottom.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_bottom.png deleted file mode 100644 index fd2bc5701..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_side.png deleted file mode 100644 index 2e522f8a4..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_top.png deleted file mode 100644 index 2e522f8a4..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_side.png deleted file mode 100644 index 6029dace3..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_top.png deleted file mode 100644 index a6bd32950..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_ore.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_ore.png deleted file mode 100644 index ee9f5977e..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_side.png deleted file mode 100644 index 32dd3d8c1..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_top.png deleted file mode 100644 index 1b6fe45b6..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_red_nether_brick.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_red_nether_brick.png deleted file mode 100644 index cd2182886..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_red_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_soul_sand.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_soul_sand.png deleted file mode 100644 index dcde3812d..000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_soul_sand.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/corals.lua b/mods/ITEMS/mcl_ocean/corals.lua deleted file mode 100644 index 338929a19..000000000 --- a/mods/ITEMS/mcl_ocean/corals.lua +++ /dev/null @@ -1,318 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - -local corals = { - { "tube", S("Tube Coral Block"), S("Dead Tube Coral Block"), S("Tube Coral"), S("Dead Tube Coral"), S("Tube Coral Fan"), S("Dead Tube Coral Fan") }, - { "brain", S("Brain Coral Block"), S("Dead Brain Coral Block"), S("Brain Coral"), S("Dead Brain Coral"), S("Brain Coral Fan"), S("Dead Brain Coral Fan") }, - { "bubble", S("Bubble Coral Block"), S("Dead Bubble Coral Block"), S("Bubble Coral"), S("Dead Bubble Coral"), S("Bubble Coral Fan"), S("Dead Bubble Coral Fan")}, - { "fire", S("Fire Coral Block"), S("Dead Fire Coral Block"), S("Fire Coral"), S("Dead Fire Coral"), S("Fire Coral Fan"), S("Dead Fire Coral Fan") }, - { "horn", S("Horn Coral Block"), S("Dead Horn Coral Block"), S("Horn Coral"), S("Dead Horn Coral"), S("Horn Coral Fan"), S("Dead Horn Coral Fan") }, -} - -local function coral_on_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" or not placer then - return itemstack - end - - local player_name = placer:get_player_name() - local pos_under = pointed_thing.under - local pos_above = pointed_thing.above - local node_under = minetest.get_node(pos_under) - local def_under = minetest.registered_nodes[node_under.name] - - if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then - return def_under.on_rightclick(pos_under, node_under, - placer, itemstack, pointed_thing) or itemstack - end - - if pos_under.y >= pos_above.y then - return itemstack - end - - local g_block = minetest.get_item_group(node_under.name, "coral_block") - local g_coral = minetest.get_item_group(itemstack:get_name(), "coral") - local g_species_block = minetest.get_item_group(node_under.name, "coral_species") - local g_species_plant = minetest.get_item_group(itemstack:get_name(), "coral_species") - - -- Placement rules: - -- Coral plant can only be placed on top of a matching coral block. - if g_block == 0 or (g_coral ~= g_block) or (g_species_block ~= g_species_plant) then - return itemstack - end - - if minetest.is_protected(pos_under, player_name) or - minetest.is_protected(pos_above, player_name) then - minetest.log("action", player_name - .. " tried to place " .. itemstack:get_name() - .. " at protected position " - .. minetest.pos_to_string(pos_under)) - minetest.record_protection_violation(pos_under, player_name) - return itemstack - end - - node_under.name = itemstack:get_name() - node_under.param2 = minetest.registered_items[node_under.name].place_param2 or 1 - if node_under.param2 < 8 and math.random(1,2) == 1 then - -- Random horizontal displacement - node_under.param2 = node_under.param2 + 8 - end - minetest.set_node(pos_under, node_under) - local def_node = minetest.registered_nodes[node_under.name] - if def_node.sounds then - minetest.sound_play(def_node.sounds.place, { gain = 0.5, pos = pos_under }, true) - end - if not minetest.is_creative_enabled(player_name) then - itemstack:take_item() - end - - return itemstack -end - --- Sound for non-block corals -local sounds_coral_plant = mcl_sounds.node_sound_leaves_defaults({footstep = mcl_sounds.node_sound_dirt_defaults().footstep}) - -for c=1, #corals do - local id = corals[c][1] - local doc_desc_block = S("Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.") - local doc_desc_coral = S("Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.") - local doc_desc_fan = S("Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.") - local tt_block = S("Needs water to live") - local tt_coral_dead = S("Grows on coral block of same species") - local tt_coral = tt_coral_dead .. "\n" .. S("Needs water to live") - - -- Coral Block - minetest.register_node("mcl_ocean:"..id.."_coral_block", { - description = corals[c][2], - _doc_items_longdesc = doc_desc_block, - _tt_help = tt_block, - tiles = { "mcl_ocean_"..id.."_coral_block.png" }, - groups = { pickaxey = 1, building_block = 1, coral=1, coral_block=1, coral_species=c, }, - sounds = mcl_sounds.node_sound_dirt_defaults(), - drop = "mcl_ocean:dead_"..id.."_coral_block", - _mcl_hardness = 1.5, - _mcl_blast_resistance = 6, - _mcl_silk_touch_drop = true, - }) - minetest.register_node("mcl_ocean:dead_"..id.."_coral_block", { - description = corals[c][3], - _doc_items_create_entry = false, - tiles = { "mcl_ocean_dead_"..id.."_coral_block.png" }, - groups = { pickaxey = 1, building_block = 1, coral=2, coral_block=2, coral_species=c, }, - sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_hardness = 1.5, - _mcl_blast_resistance = 6, - }) - - -- Coral - minetest.register_node("mcl_ocean:"..id.."_coral", { - description = corals[c][4], - _doc_items_longdesc = doc_desc_coral, - _tt_help = tt_coral, - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 1, - tiles = { "mcl_ocean_"..id.."_coral_block.png" }, - special_tiles = { { name = "mcl_ocean_"..id.."_coral.png" } }, - inventory_image = "mcl_ocean_"..id.."_coral.png", - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 1.0, 0.5 }, - } - }, - groups = { dig_immediate = 3, deco_block = 1, coral=1, coral_plant=1, coral_species=c, }, - sounds = sounds_coral_plant, - drop = "mcl_ocean:dead_"..id.."_coral", - node_placement_prediction = "", - node_dig_prediction = "mcl_ocean:"..id.."_coral_block", - on_place = coral_on_place, - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "coral") == 0 then - minetest.set_node(pos, {name="mcl_ocean:"..id.."_coral_block"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, - }) - minetest.register_node("mcl_ocean:dead_"..id.."_coral", { - description = corals[c][5], - _doc_items_create_entry = false, - _tt_help = tt_coral_dead, - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 1, - tiles = { "mcl_ocean_dead_"..id.."_coral_block.png" }, - special_tiles = { { name = "mcl_ocean_dead_"..id.."_coral.png" } }, - inventory_image = "mcl_ocean_dead_"..id.."_coral.png", - groups = { dig_immediate = 3, deco_block = 1, coral=2, coral_plant=2, coral_species=c, }, - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 1.0, 0.5 }, - } - }, - sounds = sounds_coral_plant, - node_placement_prediction = "", - node_dig_prediction = "mcl_ocean:dead_"..id.."_coral_block", - on_place = coral_on_place, - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "coral") == 0 then - minetest.set_node(pos, {name="mcl_ocean:dead_"..id.."_coral_block"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - }) - - -- Coral Fan - minetest.register_node("mcl_ocean:"..id.."_coral_fan", { - description = corals[c][6], - _doc_items_longdesc = doc_desc_fan, - _tt_help = tt_coral, - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 4, - tiles = { "mcl_ocean_"..id.."_coral_block.png" }, - special_tiles = { { name = "mcl_ocean_"..id.."_coral_fan.png" } }, - inventory_image = "mcl_ocean_"..id.."_coral_fan.png", - groups = { dig_immediate = 3, deco_block = 1, coral=1, coral_fan=1, coral_species=c, }, - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 1.0, 0.5 }, - } - }, - sounds = sounds_coral_plant, - drop = "mcl_ocean:dead_"..id.."_coral_fan", - node_placement_prediction = "", - node_dig_prediction = "mcl_ocean:"..id.."_coral_block", - on_place = coral_on_place, - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "coral") == 0 then - minetest.set_node(pos, {name="mcl_ocean:"..id.."_coral_block"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, - }) - minetest.register_node("mcl_ocean:dead_"..id.."_coral_fan", { - description = corals[c][7], - _doc_items_create_entry = false, - _tt_help = tt_coral_dead, - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 4, - tiles = { "mcl_ocean_dead_"..id.."_coral_block.png" }, - special_tiles = { { name = "mcl_ocean_dead_"..id.."_coral_fan.png" } }, - inventory_image = "mcl_ocean_dead_"..id.."_coral_fan.png", - groups = { dig_immediate = 3, deco_block = 1, coral=2, coral_fan=2, coral_species=c, }, - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 1.0, 0.5 }, - } - }, - sounds = sounds_coral_plant, - node_placement_prediction = "", - node_dig_prediction = "mcl_ocean:dead_"..id.."_coral_block", - on_place = coral_on_place, - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "coral") == 0 then - minetest.set_node(pos, {name="mcl_ocean:dead_"..id.."_coral_block"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, - }) - - if mod_doc then - doc.add_entry_alias("nodes", "mcl_ocean:"..id.."_coral", "nodes", "mcl_ocean:"..id.."_coral") - doc.add_entry_alias("nodes", "mcl_ocean:"..id.."_coral_fan", "nodes", "mcl_ocean:"..id.."_coral_fan") - doc.add_entry_alias("nodes", "mcl_ocean:"..id.."_coral_block", "nodes", "mcl_ocean:"..id.."_coral_block") - doc.add_entry_alias("nodes", "mcl_ocean:"..id.."_coral", "nodes", "mcl_ocean:dead_"..id.."_coral") - doc.add_entry_alias("nodes", "mcl_ocean:"..id.."_coral_fan", "nodes", "mcl_ocean:dead_"..id.."_coral_fan") - doc.add_entry_alias("nodes", "mcl_ocean:"..id.."_coral_block", "nodes", "mcl_ocean:dead_"..id.."_coral_block") - end -end - --- Turn corals and coral fans to dead corals if not inside a water source -minetest.register_abm({ - label = "Coral plant / coral fan death", - nodenames = { "group:coral_plant", "group_coral_fan" }, - interval = 17, - chance = 5, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Check if coral's alive - local coral_state = minetest.get_item_group(node.name, "coral") - if coral_state == 1 then - -- Check node above, here lives the actual plant (it's plantlike_rooted) - if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "mcl_core:water_source" then - -- Find dead form (it's the same as the node's drop) - local def = minetest.registered_nodes[node.name] - if def then - node.name = def.drop - else - return - end - -- Set node to dead form. - minetest.set_node(pos, node) - end - end - end, -}) - --- Turn corals blocks to dead coral blocks if not next to a water source -minetest.register_abm({ - label = "Coral block death", - nodenames = { "group:coral_block" }, - interval = 17, - chance = 5, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Check if coral's alive - local coral_state = minetest.get_item_group(node.name, "coral") - if coral_state == 1 then - local posses = { - { x=0,y=1,z=0 }, - { x=-1,y=0,z=0 }, - { x=1,y=0,z=0 }, - { x=0,y=0,z=-1 }, - { x=0,y=0,z=1 }, - { x=0,y=-1,z=0 }, - } - -- Check all 6 neighbors for water - for p=1, #posses do - local checknode = minetest.get_node(vector.add(pos, posses[p])) - if checknode.name == "mcl_core:water_source" then - -- Water found! Don't die. - return - end - end - -- Find dead form (it's the same as the node's drop) - local def = minetest.registered_nodes[node.name] - if def then - node.name = def.drop - else - return - end - -- Set node to dead form - minetest.set_node(pos, node) - end - end, -}) diff --git a/mods/ITEMS/mcl_ocean/init.lua b/mods/ITEMS/mcl_ocean/init.lua deleted file mode 100644 index f723a1f3f..000000000 --- a/mods/ITEMS/mcl_ocean/init.lua +++ /dev/null @@ -1,16 +0,0 @@ -mcl_ocean = {} - --- Prismarine (includes sea lantern) -dofile(minetest.get_modpath(minetest.get_current_modname()).."/prismarine.lua") - --- Corals -dofile(minetest.get_modpath(minetest.get_current_modname()).."/corals.lua") - --- Seagrass -dofile(minetest.get_modpath(minetest.get_current_modname()).."/seagrass.lua") - --- Kelp -dofile(minetest.get_modpath(minetest.get_current_modname()).."/kelp.lua") - --- Sea Pickle -dofile(minetest.get_modpath(minetest.get_current_modname()).."/sea_pickle.lua") diff --git a/mods/ITEMS/mcl_ocean/kelp.lua b/mods/ITEMS/mcl_ocean/kelp.lua deleted file mode 100644 index ae273abe9..000000000 --- a/mods/ITEMS/mcl_ocean/kelp.lua +++ /dev/null @@ -1,845 +0,0 @@ --- TODO: whenever it becomes possible to fully implement kelp without the --- plantlike_rooted limitation, please update accordingly. --- --- TODO: whenever it becomes possible to make kelp grow infinitely without --- resorting to making intermediate kelp stem node, please update accordingly. --- --- TODO: In MC, you can't actually destroy kelp by bucket'ing water in the middle. --- However, because of the plantlike_rooted hack, we'll just allow it for now. - -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - --------------------------------------------------------------------------------- --- local-ify runtime functions --------------------------------------------------------------------------------- --- objects -local mt_registered_items = minetest.registered_items -local mt_registered_nodes = minetest.registered_nodes - --- functions -local mt_log = minetest.log -local mt_add_item = minetest.add_item -local mt_get_item_group = minetest.get_item_group -local mt_get_node = minetest.get_node -local mt_get_node_level = minetest.get_node_level -local mt_get_node_max_level = minetest.get_node_max_level -local mt_get_node_or_nil = minetest.get_node_or_nil -local mt_get_node_timer = minetest.get_node_timer -local mt_get_meta = minetest.get_meta -local mt_hash_node_position = minetest.hash_node_position -local mt_set_node = minetest.set_node -local mt_swap_node = minetest.swap_node -local mt_pos_to_string = minetest.pos_to_string -local mt_is_protected = minetest.is_protected -local mt_record_protection_violation = minetest.record_protection_violation - -local mt_is_creative_enabled = minetest.is_creative_enabled -local mt_sound_play = minetest.sound_play - -local math = math ---local string = string -local table = table - --- DEBUG: functions --- local log = minetest.log --- local chatlog = minetest.chat_send_all - --------------------------------------------------------------------------------- --- Kelp API --------------------------------------------------------------------------------- - -local kelp = {} -mcl_ocean.kelp = kelp - --- Kelp minimum and maximum age. Once reached the maximum, kelp no longer grows. -kelp.MIN_AGE = 0 -kelp.MAX_AGE = 25 - --- Tick interval (in seconds) for updating kelp. -kelp.TICK = 0.2 - --- Tick interval (in seconds) to store kelp meta. -kelp.META_TICK = 2 - --- Max age queue length -kelp.MAX_AGE_QUEUE = 20 - --- The average amount of growth for kelp in a day is 2.16 (https://youtu.be/5Bp4lAjAk3I) --- Normally, a day lasts 20 minutes, meaning kelp.next_grow() is executed --- 1200 / TICK times. Per tick probability = (216/100) / (1200/TICK) --- NOTE: currently, we can't exactly use the same type of randomness MC does, because --- it has multiple complicated sets of PRNGs. --- NOTE: Small loss of precision, should be 10 to preserve it. --- kelp.ROLL_GROWTH_PRECISION = 10 --- kelp.ROLL_GROWTH_NUMERATOR = 216 * kelp.TICK * kelp.ROLL_GROWTH_PRECISION --- kelp.ROLL_GROWTH_DENOMINATOR = 100 * 1200 * kelp.ROLL_GROWTH_PRECISION -kelp.ROLL_GROWTH_PRECISION = 1 -kelp.ROLL_GROWTH_NUMERATOR = 216 * kelp.TICK -kelp.ROLL_GROWTH_DENOMINATOR = 100 * 1200 - --- Sounds used to dig and place kelp. -kelp.leaf_sounds = mcl_sounds.node_sound_leaves_defaults() - --- Pool storing nodetimers -kelp.timers_pool = {} - --- Pool storing age, indexed by pos_hash. -kelp.age_pool = {} - --- Queue(List) of hashed positions to save their ages. --- Invalid ones may still persist in this queue. -kelp.age_queue = {} --- Stores only valid positions of each hashed postiions. -kelp.age_queue_pos = {} - - --- is age in the growable range? -function kelp.is_age_growable(age) - return age >= 0 and age < kelp.MAX_AGE -end - - --- Is this water? --- Returns the liquidtype, if indeed water. -function kelp.is_submerged(node) - if mt_get_item_group(node.name, "water") ~= 0 then - -- Expected only "source" and "flowing" from water liquids - return mt_registered_nodes[node.name].liquidtype - end - return false -end - - --- Is the water downward flowing? --- (kelp can grow/be placed inside downward flowing water) -function kelp.is_downward_flowing(pos, node, pos_above, node_above, __is_above__) - -- Function params: (pos[, node]) or (node, pos_above) or (node, node_above) - local node = node or mt_get_node(pos) - - local result = (math.floor(node.param2 / 8) % 2) == 1 - if not (result or __is_above__) then - -- If not, also check node above. - -- (this is needed due a weird quirk in the definition of "downwards flowing" - -- liquids in Minetest) - local pos_above = pos_above or {x=pos.x,y=pos.y+1,z=pos.z} - local node_above = node_above or mt_get_node(pos_above) - result = kelp.is_submerged(node_above) - or kelp.is_downward_flowing(nil, node_above, nil, nil, true) - end - return result -end - - --- Will node fall at that position? --- This only checks if a node would fall, meaning that node need not be at pos. -function kelp.is_falling(pos, node, is_falling, pos_bottom, node_bottom, def_bottom) - -- Optional params: is_falling, pos_bottom, node_bottom, def_bottom - - -- NOTE: Modified from check_single_for_falling in builtin. - -- Please update accordingly. - local nodename = node.name - - if is_falling == false or - is_falling == nil and mt_get_item_group(nodename, "falling_node") == 0 then - return false - end - - local pos_bottom = pos_bottom or {x = pos.x, y = pos.y - 1, z = pos.z} - -- get_node_or_nil: Only fall if node below is loaded - local node_bottom = node_bottom or mt_get_node_or_nil(pos_bottom) - local nodename_bottom = node_bottom.name - local def_bottom = def_bottom or node_bottom and mt_registered_nodes[nodename_bottom] - if not def_bottom then - return false - end - - local same = nodename == nodename_bottom - -- Let leveled nodes fall if it can merge with the bottom node - if same and def_bottom.paramtype2 == "leveled" and - mt_get_node_level(pos_bottom) < - mt_get_node_max_level(pos_bottom) then - return true - end - - -- Otherwise only if the bottom node is considered "fall through" - if not same and - (not def_bottom.walkable or def_bottom.buildable_to) and - (mt_get_item_group(nodename, "float") == 0 or - def_bottom.liquidtype == "none") then - return true - end - - return false -end - - --- Roll whether to grow kelp or not. -function kelp.roll_growth(numerator, denominator) - -- Optional params: numerator, denominator - return math.random(denominator or kelp.ROLL_GROWTH_DENOMINATOR) <= (numerator or kelp.ROLL_GROWTH_NUMERATOR) -end - - --- Roll initial age for kelp. -function kelp.roll_init_age(min, max) - -- Optional params - return math.random(min or kelp.MIN_AGE, (max or kelp.MAX_AGE)-1) -end - - --- Converts param2 to kelp height. --- For the special case where the max param2 is reached, interpret that as the --- 16th kelp stem. -function kelp.get_height(param2) - return math.floor(param2 / 16) + math.floor(param2 % 16 / 8) -end - - --- Obtain pos and node of the tip of kelp. -function kelp.get_tip(pos, height) - -- Optional params: height - local height = height or kelp.get_height(mt_get_node(pos).param2) - local pos_tip = {x=pos.x, y=pos.y+height+1, z=pos.z} - return pos_tip, mt_get_node(pos_tip), height -end - - --- Obtain position of the first kelp unsubmerged. -function kelp.find_unsubmerged(pos, node, height) - -- Optional params: node, height - local node = node or mt_get_node(pos) - local height = height or ((node.param2 >= 0 and node.param2 < 16) and 1) or kelp.get_height(node.param2) - - local walk_pos = {x=pos.x, z=pos.z} - local y = pos.y - for i=1,height do - walk_pos.y = y + i - local walk_node = mt_get_node(walk_pos) - if not kelp.is_submerged(walk_node) then - return walk_pos, walk_node, height, i - end - end - return nil, nil, height, height -end - - --- Obtain next param2. -function kelp.next_param2(param2) - -- param2 max value is 255, so adding to 256 causes overflow. - return math.min(param2+16 - param2 % 16, 255); -end - - --- Stores age from kelp.age_queue* into their respective meta -function kelp.store_meta() - local count = 0 - for _ in pairs(kelp.age_queue_pos) do - count = count + 1 - end - -- chatlog(string.format("Storing age metadata: %d in queue", #kelp.age_queue)) - -- chatlog(string.format("Storing age metadata: %d valid in queue", count)) - for i=1,#kelp.age_queue do - local pos_hash = kelp.age_queue[i] - local pos = kelp.age_queue_pos[pos_hash] - -- queued hashes may no longer point to a valid pos, e.g. kelp is destroyed. - if pos then - mt_get_meta(pos):set_int("mcl_ocean:kelp_age", kelp.age_pool[pos_hash]) - end - end - kelp.age_queue = {} - kelp.age_queue_pos = {} -end - - --- Store and queue a kelp's age to be saved into meta later. -function kelp.store_age(age, pos, pos_hash) - -- Watched params: pos - -- Optional params: pos_hash - local pos_hash = pos_hash or mt_hash_node_position(pos) - - kelp.age_pool[pos_hash] = age - if not kelp.age_queue_pos[pos_hash] then - table.insert(kelp.age_queue, pos_hash) - kelp.age_queue_pos[pos_hash] = pos - return true, pos_hash - end - - return false, pos_hash -end - - --- Initialise a kelp's age. -function kelp.init_age(pos, age, pos_hash, meta) - -- Watched params: pos - -- Optional params: age, pos_hash, meta - local pos_hash = pos_hash or mt_hash_node_position(pos) - local meta = meta or mt_get_meta(pos) - - local age = age - if age then - kelp.store_age(age, pos, pos_hash) - elseif not meta:contains("mcl_ocean:kelp_age") then - age = kelp.roll_init_age() - kelp.store_age(age, pos, pos_hash) - else - age = meta:get_int("mcl_ocean:kelp_age") - if not kelp.age_pool[pos_hash] then - kelp.age_pool[pos_hash] = age - end - end - - return age, pos_hash, meta -end - - --- Initialise kelp nodetimer. -function kelp.init_timer(pos, pos_hash) - -- Optional params: pos_hash - local pos_hash = pos_hash or mt_hash_node_position(pos) - - local timer = kelp.timers_pool[pos_hash] - if not timer then - timer = mt_get_node_timer(pos) - kelp.timers_pool[pos_hash] = timer - end - if not timer:is_started() then - timer:start(kelp.TICK) - end - - return pos_hash -end - - --- Apply next kelp height. The surface is swapped. so on_construct is skipped. -function kelp.next_height(pos, node, pos_tip, node_tip, submerged, downward_flowing) - -- Modified params: node - -- Optional params: node, set_node, pos_tip, node_tip, submerged, downward_flowing - local node = node or mt_get_node(pos) - local pos_tip = pos_tip - local node_tip = node_tip or (pos_tip and mt_get_node(pos_tip)) - if not pos_tip then - pos_tip,node_tip = kelp.get_tip(pos) - end - local downward_flowing = downward_flowing or - (submerged or kelp.is_submerged(node_tip) - and kelp.is_downward_flowing(pos_tip, node_tip)) - - -- Liquid source: Grow normally. - node.param2 = kelp.next_param2(node.param2) - mt_swap_node(pos, node) - - -- Flowing liquid: Grow 1 step, but also turn the tip node into a liquid source. - if downward_flowing then - local alt_liq = mt_registered_nodes[node_tip.name].liquid_alternative_source - if alt_liq then - mt_set_node(pos_tip, {name=alt_liq}) - end - end - - return node, pos_tip, node_tip, submerged, downward_flowing -end - - --- Grow next kelp. -function kelp.next_grow(age, pos, node, pos_hash, pos_tip, node_tip, submerged, downward_flowing) - -- Watched params: pos - -- Modified params: node - -- Optional params: node, pos_hash, pos_tip, node_tip, submerged, downward_flowing - local node = node or mt_get_node(pos) - local pos_hash = pos_hash or mt_hash_node_position(pos) - local pos_tip = pos_tip - local node_tip = node_tip or (pos_tip and mt_get_node(pos_tip)) - if not pos_tip then - pos_tip,node_tip = kelp.get_tip(pos) - end - - -- New kelp must also be submerged in water. - local downward_flowing = downward_flowing or kelp.is_downward_flowing(pos_tip, node_tip) - if not (submerged or kelp.is_submerged(node_tip)) then - return - end - - kelp.next_height(pos, node, pos_tip, node_tip, submerged, downward_flowing) - - return kelp.store_age(age, pos, pos_hash), node, pos_hash, pos_tip, node_tip, submerged, downward_flowing -end - - --- Drops the items for detached kelps. -function kelp.detach_drop(pos, height) - -- Optional params: height - local height = height or kelp.get_height(mt_get_node(pos).param2) - local y = pos.y - local walk_pos = {x=pos.x, z=pos.z} - for i=1,height do - walk_pos.y = y+i - mt_add_item(walk_pos, "mcl_ocean:kelp") - end - return true -end - - --- Detach the kelp at dig_pos, and drop their items. --- Synonymous to digging the kelp. --- NOTE: this is intended for whenever kelp truly becomes segmented plants --- instead of rooted to the floor. Don't try to remove dig_pos. -function kelp.detach_dig(dig_pos, pos, drop, node, height) - -- Optional params: drop, node, height - - local node = node or mt_get_node(pos) - local height = height or kelp.get_height(node.param2) - -- pos.y points to the surface, offset needed to point to the first kelp. - local new_height = dig_pos.y - (pos.y+1) - - -- Digs the entire kelp. - if new_height <= 0 then - if drop then - kelp.detach_drop(dig_pos, height) - end - mt_set_node(pos, { - name=mt_registered_nodes[node.name].node_dig_prediction, - param=node.param, - param2=0 }) - - -- Digs the kelp beginning at a height. - else - if drop then - kelp.detach_drop(dig_pos, height - new_height) - end - mt_swap_node(pos, {name=node.name, param=node.param, param2=16*new_height}) - end -end - - --------------------------------------------------------------------------------- --- Kelp callback functions --------------------------------------------------------------------------------- - -function kelp.surface_on_dig(pos, node, digger) - kelp.detach_dig(pos, pos, true, node) -end - - -function kelp.surface_after_dig_node(pos, node) - return mt_set_node(pos, {name=minetest.registered_nodes[node.name].node_dig_prediction}) -end - - -function kelp.surface_on_timer(pos) - local node = mt_get_node(pos) - local pos_hash - - -- Update detahed kelps - local dig_pos,_, height = kelp.find_unsubmerged(pos, node) - if dig_pos then - pos_hash = mt_hash_node_position(pos) - mt_sound_play(mt_registered_nodes[node.name].sounds.dug, { gain = 0.5, pos = dig_pos }, true) - kelp.detach_dig(dig_pos, pos, true, node, height) - kelp.store_age(kelp.roll_init_age(), pos, pos_hash) - end - - -- Grow kelp on chance - if kelp.roll_growth() then - pos_hash = pos_hash or mt_hash_node_position(pos) - local age = kelp.age_pool[pos_hash] - if kelp.is_age_growable(age) then - kelp.next_grow(age+1, pos, node, pos_hash) - end - end - - return true -end - -function kelp.surface_on_construct(pos) - local pos_hash = mt_hash_node_position(pos) - kelp.init_age(pos, nil, pos_hash) - kelp.init_timer(pos, pos_hash) -end - - -function kelp.surface_on_destruct(pos) - local node = mt_get_node(pos) - local pos_hash = mt_hash_node_position(pos) - - -- on_falling callback. Activated by pistons for falling nodes too. - if kelp.is_falling(pos, node) then - kelp.detach_drop(pos, kelp.get_height(node.param2)) - end - - -- Removes position from queue - kelp.age_queue_pos[pos_hash] = nil -end - - - -function kelp.surface_on_mvps_move(pos, node, oldpos, nodemeta) - -- Pistons moving falling nodes will have already activated on_falling callback. - kelp.detach_dig(pos, pos, mt_get_item_group(node.name, "falling_node") ~= 1, node) -end - - --- NOTE: Old ABM implementation. --- local function surface_unsubmerged_abm(pos, node) --- local dig_pos = find_unsubmerged(pos, node) --- if dig_pos then --- detach_dig(dig_pos, pos, node, true) --- end --- return true --- end - - -function kelp.kelp_on_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" or not placer then - return itemstack - end - - local player_name = placer:get_player_name() - local pos_under = pointed_thing.under - local pos_above = pointed_thing.above - local node_under = mt_get_node(pos_under) - local nu_name = node_under.name - local def_under = mt_registered_nodes[nu_name] - - -- Allow rightclick to override place. - if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then - return def_under.on_rightclick(pos_under, node_under, - placer, itemstack, pointed_thing) or itemstack - end - - -- Protection - if mt_is_protected(pos_under, player_name) or - mt_is_protected(pos_above, player_name) then - mt_log("action", player_name - .. " tried to place " .. itemstack:get_name() - .. " at protected position " - .. mt_pos_to_string(pos_under)) - mt_record_protection_violation(pos_under, player_name) - return itemstack - end - - - local pos_tip, node_tip, def_tip, new_surface, height - -- Kelp must also be placed on the top/tip side of the surface/kelp - if pos_under.y >= pos_above.y then - return itemstack - end - - -- When placed on kelp. - if mt_get_item_group(nu_name, "kelp") == 1 then - height = kelp.get_height(node_under.param2) - pos_tip,node_tip = kelp.get_tip(pos_under, height) - def_tip = mt_registered_nodes[node_tip.name] - - -- When placed on surface. - else - new_surface = false - for _,surface in pairs(kelp.surfaces) do - if nu_name == surface.nodename then - node_under.name = "mcl_ocean:kelp_" ..surface.name - node_under.param2 = 0 - new_surface = true - break - end - end - -- Surface must support kelp - if not new_surface then - return itemstack - end - - pos_tip = pos_above - node_tip = mt_get_node(pos_above) - def_tip = mt_registered_nodes[node_tip.name] - height = 0 - end - - -- Next kelp must also be submerged in water. - local downward_flowing = kelp.is_downward_flowing(pos_tip, node_tip) - local submerged = kelp.is_submerged(node_tip) - if not submerged then - return itemstack - end - - -- Play sound, place surface/kelp and take away an item - local def_node = mt_registered_items[nu_name] - if def_node.sounds then - mt_sound_play(def_node.sounds.place, { gain = 0.5, pos = pos_under }, true) - end - -- TODO: get rid of rooted plantlike hack - if height < 16 then - kelp.next_height(pos_under, node_under, pos_tip, node_tip, def_tip, submerged, downward_flowing) - else - mt_add_item(pos_tip, "mcl_ocean:kelp") - end - if not mt_is_creative_enabled(player_name) then - itemstack:take_item() - end - - -- Initialize age and timer when it's planted on a new surface. - local pos_hash = mt_hash_node_position(pos_under) - if new_surface then - kelp.init_age(pos_under, nil, pos_hash) - kelp.init_timer(pos_under, pos_hash) - else - kelp.store_age(kelp.roll_init_age(), pos_under, pos_hash) - end - - return itemstack -end - - -function kelp.lbm_register_nodetimer(pos, node) - local pos_hash = mt_hash_node_position(pos) - kelp.init_age(pos, nil, pos_hash) - kelp.init_timer(pos, pos_hash) -end - - -local gstep_time = 0 -function kelp.globalstep(dtime) - if #kelp.age_queue > kelp.MAX_AGE_QUEUE then - kelp.store_meta() - end - - gstep_time = gstep_time + dtime - if gstep_time < kelp.META_TICK then - return - end - gstep_time = 0 - - if #kelp.age_queue > 0 then - kelp.store_meta() - end -end - - -function kelp.on_shutdown() - if #kelp.age_queue > 0 then - kelp.store_meta() - end -end - --------------------------------------------------------------------------------- --- Kelp registration API --------------------------------------------------------------------------------- - --- List of supported surfaces for seagrass and kelp. -kelp.surfaces = { - { name="dirt", nodename="mcl_core:dirt", }, - { name="sand", nodename="mcl_core:sand", }, - { name="redsand", nodename="mcl_core:redsand", }, - { name="gravel", nodename="mcl_core:gravel", }, -} -kelp.registered_surfaces = {} - --- Commented properties are the ones obtained using register_kelp_surface. --- If you define your own properties, it overrides the default ones. -kelp.surface_deftemplate = { - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "leveled", - place_param2 = 16, - --tiles = def.tiles, - special_tiles = { - { - image = "mcl_ocean_kelp_plant.png", - animation = {type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}, - tileable_vertical = true, - } - }, - --inventory_image = "("..def.tiles[1]..")^mcl_ocean_kelp_item.png", - wield_image = "mcl_ocean_kelp_item.png", - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 1.5, 0.5 }, - }, - }, - -- groups.falling_node = is_falling, - groups = { dig_immediate = 3, deco_block = 1, plant = 1, kelp = 1, }, - --sounds = sounds, - --node_dig_prediction = nodename, - on_construct = kelp.surface_on_construct, - on_destruct = kelp.surface_on_destruct, - on_dig = kelp.surface_on_dig, - after_dig_node = kelp.surface_after_dig_node, - on_timer = kelp.surface_on_timer, - mesecon = { on_mvps_move = kelp.surface_on_mvps_move, }, - drop = "", -- drops are handled in on_dig - --_mcl_falling_node_alternative = is_falling and nodename or nil, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, -} - --- Commented properties are the ones obtained using register_kelp_surface. -kelp.surface_docs = { - -- entry_id_orig = nodename, - _doc_items_entry_name = S("Kelp"), - _doc_items_longdesc = S("Kelp grows inside water on top of dirt, sand or gravel."), - --_doc_items_create_entry = doc_create, - _doc_items_image = "mcl_ocean_kelp_item.png", -} - --- Creates new surfaces. --- NOTE: surface_deftemplate will be modified in-place. -function kelp.register_kelp_surface(surface, surface_deftemplate, surface_docs) - local name = surface.name - local nodename = surface.nodename - local def = mt_registered_nodes[nodename] - local def_tiles = def.tiles - - local surfacename = "mcl_ocean:kelp_"..name - local surface_deftemplate = surface_deftemplate or kelp.surface_deftemplate -- Optional param - - local doc_create = surface.doc_create or false - local surface_docs = surface_docs or kelp.surface_docs -- Optional param - - if doc_create then - surface_deftemplate._doc_items_entry_name = surface_docs._doc_items_entry_name - surface_deftemplate._doc_items_longdesc = surface_docs._doc_items_longdesc - surface_deftemplate._doc_items_create_entry = true - surface_deftemplate._doc_items_image = surface_docs._doc_items_image - -- Sets the first surface as the docs' entry ID - if not surface_docs.entry_id_orig then - surface_docs.entry_id_orig = nodename - end - elseif mod_doc then - doc.add_entry_alias("nodes", surface_docs.entry_id_orig, "nodes", surfacename) - end - - local sounds = table.copy(def.sounds) - sounds.dig = kelp.leaf_sounds.dig - sounds.dug = kelp.leaf_sounds.dug - sounds.place = kelp.leaf_sounds.place - - surface_deftemplate.tiles = surface_deftemplate.tiles or def_tiles - surface_deftemplate.inventory_image = surface_deftemplate.inventory_image or "("..def_tiles[1]..")^mcl_ocean_kelp_item.png" - surface_deftemplate.sounds = surface_deftemplate.sound or sounds - local falling_node = mt_get_item_group(nodename, "falling_node") - surface_deftemplate.node_dig_prediction = surface_deftemplate.node_dig_prediction or nodename - surface_deftemplate.groups.falling_node = surface_deftemplate.groups.falling_node or falling_node - surface_deftemplate._mcl_falling_node_alternative = surface_deftemplate._mcl_falling_node_alternative or (falling_node and nodename or nil) - - minetest.register_node(surfacename, surface_deftemplate) -end - --- Kelp surfaces nodes --------------------------------------------------------- - --- Dirt must be registered first, for the docs -kelp.register_kelp_surface(kelp.surfaces[1], table.copy(kelp.surface_deftemplate), kelp.surface_docs) -for i=2, #kelp.surfaces do - kelp.register_kelp_surface(kelp.surfaces[i], table.copy(kelp.surface_deftemplate), kelp.surface_docs) -end - --- Kelp item ------------------------------------------------------------------- - -minetest.register_craftitem("mcl_ocean:kelp", { - description = S("Kelp"), - _tt_help = S("Grows in water on dirt, sand, gravel"), - _doc_items_create_entry = false, - inventory_image = "mcl_ocean_kelp_item.png", - wield_image = "mcl_ocean_kelp_item.png", - on_place = kelp.kelp_on_place, - groups = {deco_block = 1, compostability = 30}, -}) - -if mod_doc then - doc.add_entry_alias("nodes", kelp.surface_docs.entry_id_orig, "craftitems", "mcl_ocean:kelp") -end - --- Dried kelp ------------------------------------------------------------------ - --- TODO: This is supposed to be eaten very fast -minetest.register_craftitem("mcl_ocean:dried_kelp", { - description = S("Dried Kelp"), - _doc_items_longdesc = S("Dried kelp is a food item."), - inventory_image = "mcl_ocean_dried_kelp.png", - wield_image = "mcl_ocean_dried_kelp.png", - groups = {food = 2, eatable = 1, compostability = 30}, - on_place = minetest.item_eat(1), - on_secondary_use = minetest.item_eat(1), - _mcl_saturation = 0.6, -}) - - -local mod_screwdriver = minetest.get_modpath("screwdriver") -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - -minetest.register_node("mcl_ocean:dried_kelp_block", { - description = S("Dried Kelp Block"), - _doc_items_longdesc = S("A decorative block that serves as a great furnace fuel."), - tiles = { "mcl_ocean_dried_kelp_top.png", "mcl_ocean_dried_kelp_bottom.png", "mcl_ocean_dried_kelp_side.png" }, - groups = { - handy = 1, hoey = 1, building_block = 1, compostability = 50, - flammable = 2, fire_encouragement = 30, fire_flammability = 60 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - on_rotate = on_rotate, - _mcl_hardness = 0.5, - _mcl_blast_resistance = 12.5, -}) - -minetest.register_craft({ - type = "cooking", - recipe = "mcl_ocean:kelp", - output = "mcl_ocean:dried_kelp", - cooktime = 10, -}) -minetest.register_craft({ - recipe = { - { "mcl_ocean:dried_kelp","mcl_ocean:dried_kelp","mcl_ocean:dried_kelp" }, - { "mcl_ocean:dried_kelp","mcl_ocean:dried_kelp","mcl_ocean:dried_kelp" }, - { "mcl_ocean:dried_kelp","mcl_ocean:dried_kelp","mcl_ocean:dried_kelp" }, - }, - output = "mcl_ocean:dried_kelp_block", -}) -minetest.register_craft({ - recipe = { - { "mcl_ocean:dried_kelp_block" }, - }, - output = "mcl_ocean:dried_kelp 9", -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_ocean:dried_kelp_block", - burntime = 200, -}) - --- Global registration ------------------------------------------------------------------------ - -minetest.register_lbm({ - label = "Kelp initialise", - name = "mcl_ocean:kelp_init", - nodenames = { "group:kelp" }, - run_at_every_load = true, -- so old kelps are also initialised - action = kelp.lbm_register_nodetimer, -}) - - -minetest.register_globalstep(kelp.globalstep) -minetest.register_on_shutdown(kelp.on_shutdown) - --- NOTE: Old ABM implementation. --- minetest.register_abm({ --- label = "Kelp drops", --- nodenames = { "group:kelp" }, --- interval = 1.0, --- chance = 1, --- catch_up = false, --- action = surface_unsubmerged_abm, --- }) --- --- minetest.register_abm({ --- label = "Kelp growth", --- nodenames = { "group:kelp" }, --- interval = 45, --- chance = 12, --- catch_up = false, --- action = grow_abm, --- }) diff --git a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.de.tr b/mods/ITEMS/mcl_ocean/locale/mcl_ocean.de.tr deleted file mode 100644 index fc7e8b56e..000000000 --- a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.de.tr +++ /dev/null @@ -1,57 +0,0 @@ -# textdomain: mcl_ocean -Sea Lantern=Seelaterne -Sea lanterns are decorative light sources which look great underwater but can be placed anywhere.=Seelaternen sind dekorative Lichtquellen, die im Wasser schick aussehen, aber sie können überall platziert werden. -Prismarine=Prismarin -Prismarine is used as a building block. It slowly changes its color.=Prismarin wird aus Baumaterial benutzt. Er verändert langsam seine Farbe. -Prismarine Bricks=Prismarinziegel -Dark Prismarine=Dunkelprismarin -Prismarine Crystals=Prismarinkristalle -Prismarine Shard=Prismarinsplitter -Dried Kelp=Getrockneter Seetang -Dried Kelp Block=Getrockneter Seetangblock -Brain Coral Block=Hirnkorallenblock -Brain Coral Fan=Hirnkorallenfächer -Brain Coral=Hirnkoralle -Bubble Coral Block=Blasenkorallenblock -Bubble Coral Fan=Blasenkorallenfächer -Bubble Coral=Blasenkoralle -Fire Coral Block=Feuerkorallenblock -Fire Coral Fan=Feuerkorallenfächer -Fire Coral=Feuerkoralle -Horn Coral Block=Hornkorallenblock -Horn Coral Fan=Hornkorallenfächer -Horn Coral=Hornkoralle -Tube Coral Block=Trompetenkorallenblock -Tube Coral Fan=Trompetenkorallenfächer -Tube Coral=Trompetenkoralle -Dead Brain Coral Block=Toter Hirnkorallenblock -Dead Brain Coral Fan=Toter Hirnkorallenfächer -Dead Brain Coral=Tote Hirnkoralle -Dead Bubble Coral Block=Toter Blasenkorallenblock -Dead Bubble Coral Fan=Toter Blasenkorallenfächer -Dead Bubble Coral=Tote Blasenkoralle -Dead Fire Coral Block=Toter Feuerkorallenblock -Dead Fire Coral Fan=Toter Feuerkorallenfächer -Dead Fire Coral=Tote Feuerkoralle -Dead Horn Coral Block=Toter Hornkorallenblock -Dead Horn Coral Fan=Toter Hornkorallenfächer -Dead Horn Coral=Tote Hornkoralle -Dead Tube Coral Block=Toter Trompetenkorallenblock -Dead Tube Coral Fan=Toter Trompetenkorallenfächer -Dead Tube Coral=Tote Trompetenkoralle -Seagrass=Seegras -Kelp=Seetang -Kelp grows inside water on top of dirt, sand or gravel.=Seetang wächst im Wasser auf Erde, Sand oder Kies. -Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.=Korallenblöcke leben im Ozean und benötigen eine Wasserquelle neben ihnen, um zu überleben. Ohne Wasser sterben sie ab. -Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Korallen wachsen auf Korallenblöcken und müssen sich in einer Wasserquelle befinden, um zu überleben. Ohne Wasser sterben sie gemeinsam mit dem Korallenblock ab. -Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Korallenfächer wachsen auf Korallenblöcken und müssen sich in einer Wasserquelle befinden, um zu überleben. Ohne Wasser sterben sie gemeinsam mit dem Korallenblock ab. -Seagrass grows inside water on top of dirt, sand or gravel.=Seegras wächst im Wasser auf Erde, Sand oder Kies. -A decorative block that serves as a great furnace fuel.=Ein dekorativer Block, der sich gut als Ofenbrennstoff eignet. -Dried kelp is a food item.=Getrockneter Seetang ist ein Lebensmittel. -Grows on coral block of same species=Wächst auf Korallenblock der gleichen Art -Needs water to live=Benötigt Wasser zum Leben -Grows in water on dirt, sand, gravel=Wächst im Wasser auf Erde, Sand, Kies -Glows in the water=Leuchtet im Wasser -4 possible sizes=4 mögliche Größen -Grows on dead brain coral block=Wächst auf totem Hirnkorallenblock -Sea Pickle=Meeresgurke diff --git a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.es.tr b/mods/ITEMS/mcl_ocean/locale/mcl_ocean.es.tr deleted file mode 100644 index 294da64b0..000000000 --- a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.es.tr +++ /dev/null @@ -1,51 +0,0 @@ -# textdomain: mcl_ocean -Sea Lantern=Linterna de mar -Sea lanterns are decorative light sources which look great underwater but can be placed anywhere.=Las linternas marinas son fuentes de luz decorativas que se ven muy bien bajo el agua pero se pueden colocar en cualquier lugar. -Prismarine=Prismarina -Prismarine is used as a building block. It slowly changes its color.=La prismarina se usa como bloque de construcción. Poco a poco cambia su color. -Prismarine Bricks=Ladrillos de prismarina -Dark Prismarine=Prismarina oscura -Prismarine Crystals=Cristales de prismatina -Prismarine Shard=Fragmento de prismatina -Dried Kelp=Algas secas -Dried Kelp Block=Bloque de algas secas -Brain Coral Block=Bloque de coral de cerebro -Brain Coral Fan=Coral de cerebro desparramado -Brain Coral=Coral de cerebro -Bubble Coral Block=Bloque de coral de burbuja -Bubble Coral Fan=Coral de burbuja desparramado -Bubble Coral=Coral de burbuja -Fire Coral Block=Bloque de coral de fuego -Fire Coral Fan=Coral de fuego desparramado -Fire Coral=Coral de fuego -Horn Coral Block=Bloque de coral de cuerno -Horn Coral Fan=Coral de cuerno desparramado -Horn Coral=Coral de cuerno -Tube Coral Block=Bloque de coral de tubo -Tube Coral Fan=Coral de tubo desparramado -Tube Coral=Coral de tubo -Dead Brain Coral Block=Bloque de coral muerto -Dead Brain Coral Fan=Coral desparramado -Dead Brain Coral=Coral de cerebro muerto -Dead Bubble Coral Block=Bloque de coral de burbuja muerto -Dead Bubble Coral Fan=Coral de burbuja desparramado -Dead Bubble Coral=Coral de burbuja muerto -Dead Fire Coral Block=Bloque de coral de fuego muerto -Dead Fire Coral Fan=Coral de fuego desparramado -Dead Fire Coral=Coral de fuego muerto -Dead Horn Coral Block=Bloque de coral de cuerno muerto -Dead Horn Coral Fan=Coral de cuerno desparramado -Dead Horn Coral=Coral de cuerno muerto -Dead Tube Coral Block=Bloque de coral de tubo muerto -Dead Tube Coral Fan=Coral de tubo desparramado -Dead Tube Coral=Coral de tubo muerto -Seagrass=Hierba marina -Kelp=Alga -Kelp grows inside water on top of dirt, sand or gravel.=Las algas crecen dentro del agua sobre tierra, arena o grava. -Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.=Los bloques de coral viven en los océanos y necesitan una fuente de agua junto a ellos para sobrevivir. Sin agua, mueren. -Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Los corales crecen sobre bloques de coral y necesitan estar dentro de una fuente de agua para sobrevivir. Sin agua, morirá, al igual que el bloque de coral que se encuentra debajo. -Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Los fanáticos de los corales crecen encima de los bloques de coral y necesitan estar dentro de una fuente de agua para sobrevivir. Sin agua, morirá, al igual que el bloque de coral que se encuentra debajo. -Seagrass grows inside water on top of dirt, sand or gravel.=La hierba marina crece dentro del agua sobre tierra, arena o grava. -A decorative block that serves as a great furnace fuel.=Un bloque decorativo que sirve como un gran combustible de horno. -Dried kelp is a food item.=Las algas secas son un alimento. -Sea Pickle= diff --git a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.fr.tr b/mods/ITEMS/mcl_ocean/locale/mcl_ocean.fr.tr deleted file mode 100644 index a1b3f0b77..000000000 --- a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.fr.tr +++ /dev/null @@ -1,59 +0,0 @@ -# textdomain: mcl_ocean -Sea Lantern=Lanterne aquatique -Sea lanterns are decorative light sources which look great underwater but can be placed anywhere.=Les lanternes marines sont des sources lumineuses décoratives qui ont fière allure sous l'eau mais peuvent être placées n'importe où. -Prismarine=Prismarine -Prismarine is used as a building block. It slowly changes its color.=La prismarine est utilisée comme bloc de construction. Il change lentement de couleur. -Prismarine Bricks=Prismarine Taillée -Dark Prismarine=Prismarine Sombre -Prismarine Crystals=Cristaux de Prismarine -Prismarine Shard=Éclat de Prismarine -Dried Kelp=Algue Séchée -Dried Kelp Block=Bloc d'Algue Séchée -Brain Coral Block=Bloc de Corail -Brain Coral Fan=Gorgone de Corail -Brain Coral=Corail -Bubble Coral Block=Bloc de Corail Bulles -Bubble Coral Fan=Gorgone de Corail Bulles -Bubble Coral=Corail Bulles -Fire Coral Block=Bloc Corail de Feu -Fire Coral Fan=Gorgone Corail de Feu -Fire Coral=Corail de Feu -Horn Coral Block=Bloc de Corail Corné -Horn Coral Fan=Gorgone de Corail Corné -Horn Coral=Corail Corné -Tube Coral Block=Bloc de Corail Tubulaire -Tube Coral Fan=Gorgone de Corail Tubulaire -Tube Coral=Corail Tubulaire -Dead Brain Coral Block=Bloc de Corail Mort -Dead Brain Coral Fan=Gorgone de Corail Mort -Dead Brain Coral=Corail Mort -Dead Bubble Coral Block=Bloc de Corail Bulles Mort -Dead Bubble Coral Fan=Gorgone de Corail Bulles Mort -Dead Bubble Coral=Corail Bulles Mort -Dead Fire Coral Block=Bloc de Corail de Feu Mort -Dead Fire Coral Fan=Gorgone de Corail de Feu Mort -Dead Fire Coral=Corail de Feu Mort -Dead Horn Coral Block=Bloc de Corail Corné Mort -Dead Horn Coral Fan=Gorgone de Corail Corné Mort -Dead Horn Coral=Corail Corné Mort -Dead Tube Coral Block=Bloc de Corail Tubulaire Mort -Dead Tube Coral Fan=Gorgone de Corail Tubulaire Mort -Dead Tube Coral=Corail Tubulaire Mort -Seagrass=Herbe aquatique -Kelp=Algue -Kelp grows inside water on top of dirt, sand or gravel.=Les Algues pousse à l'intérieur de l'eau sur la terre, le sable ou le gravier. -Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.=Les blocs de corail vivent dans les océans et ont besoin d'une source d'eau à côté d'eux pour survivre. Sans eau, ils meurent. -Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Les coraux se développent au-dessus des blocs de corail et doivent être à l'intérieur d'une source d'eau pour survivre. Sans eau, il mourra, ainsi que le bloc de corail en dessous. -Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Les gorgones de coraux se développent au-dessus des blocs de corail et doivent être à l'intérieur d'une source d'eau pour survivre. Sans eau, il mourra, ainsi que le bloc de corail en dessous. -Seagrass grows inside water on top of dirt, sand or gravel.=Les herbiers aquatique poussent à l'intérieur de l'eau sur la terre, le sable ou le gravier. -A decorative block that serves as a great furnace fuel.=Un bloc décoratif qui sert de bon combustible pour le four. -Dried kelp is a food item.=L'algue séchée est un aliment. -Grows on coral block of same species=Pousse sur un bloc de corail de la même espèce -Needs water to live=A besoin d'eau pour vivre -Grows in water on dirt, sand, gravel=Pousse dans l'eau sur la terre, le sable et le gravier -Glows in the water=Brille dans l'eau -4 possible sizes=4 tailles possibles -Grows on dead brain coral block=Pousse sur un bloc de corail mort -Sea Pickle=Cornichon de mer -Sea pickles grow on dead brain coral blocks and provide light when underwater. They come in 4 sizes that vary in brightness.=Les cornichons de mer poussent sur des blocs de corail morts et fournissent de la lumière lorsqu'ils sont sous l'eau. Ils viennent en 4 tailles qui varient en luminosité. -It can only be placed on top of dead brain coral blocks. Placing a sea pickle on another sea pickle will make it grow and brighter.=Il ne peut être placé que sur des blocs de corail morts. Placer un cornichon sur un autre cornichon le rendra plus brillant et plus brillant. \ No newline at end of file diff --git a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr b/mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr deleted file mode 100644 index 7c63e4959..000000000 --- a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr +++ /dev/null @@ -1,60 +0,0 @@ -# textdomain: mcl_ocean -Sea Lantern=Latarnia morska -Sea lanterns are decorative light sources which look great underwater but can be placed anywhere.=Latarnie morskie to dekoracyjne źródła światła, które wyglądają bardzo dobrze pod wodą, ale mogą być umieszczone gdziekolwiek. -Prismarine=Pryzmaryn -Prismarine is used as a building block. It slowly changes its color.=Pryzmaryn jest blokiem budowlanym. Powoli zmienia on swój kolor. -Prismarine Bricks=Pryzmarynowe cegły -Dark Prismarine=Ciemny pryzmaryn -Prismarine Crystals=Pryzmarynowe kryształy -Prismarine Shard=Pryzmarynowe odłamki -Dried Kelp=Suszone wodorosty -Dried Kelp Block=Blok suszonych wodorostów -Brain Coral Block=Blok mózgowatego koralowca -Brain Coral Fan=Wachlarz mózgowatego koralowca -Brain Coral=Mózgowaty koralowiec -Bubble Coral Block=Blok bąbelkowego koralowca -Bubble Coral Fan=Wachlarz bąbelkowego koralowca -Bubble Coral=Bąbelkowy koralowiec -Fire Coral Block=Blok ognistego koralowca -Fire Coral Fan=Wachlarz ognistego koralowca -Fire Coral=Ognisty koralowiec -Horn Coral Block=Blok rogatego koralowca -Horn Coral Fan=Wachlarz rogatego koralowca -Horn Coral=Rogaty koralowiec -Tube Coral Block=Blok rurkowatego koralowca -Tube Coral Fan=Wachlarz rurkowatego koralowca -Tube Coral=Rurkowaty koralowiec -Dead Brain Coral Block=Martwy blok mózgowatego koralowca -Dead Brain Coral Fan=Martwy wachlarz mózgowatego koralowca -Dead Brain Coral=Martwy mózgowaty koralowiec -Dead Bubble Coral Block=Martwy blok bąbelkowego koralowca -Dead Bubble Coral Fan=Martwy wachlarz bąbelkowego koralowca -Dead Bubble Coral=Martwy bąbelkowy koralowiec -Dead Fire Coral Block=Martwy blok ognistego koralowca -Dead Fire Coral Fan=Martwy wachlarz ognistego koralowca -Dead Fire Coral=Martwy ognisty koralowiec -Dead Horn Coral Block=Martwy blok rogatego koralowca -Dead Horn Coral Fan=Martwy wachlarz rogatego koralowca -Dead Horn Coral=Martwy rogaty koralowiec -Dead Tube Coral Block=Martwy blok rurkowatego koralowca -Dead Tube Coral Fan=Martwy wachlarz rurkowatego koralowca -Dead Tube Coral=Martwy rurkowaty koralowiec -Seagrass=Trawa morska -Kelp=Wodorosty -Kelp grows inside water on top of dirt, sand or gravel.=Wodorosty rosną w wodzie na ziemi, piasku i żwirze. -Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.=Bloki koralowca żyją w oceanach i potrzebują źródła wody obok aby przeżyć. Bez wody obumierają. -Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Koralowiec rośnie na blokach koralowca i musi być wewnątrz źródła wody aby przeżyć. Bez wody obumiera. -Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Wachlarz koralowca rośnie na blokach koralowca i musi być wewnątrz źródła wody aby przeżyć. Bez wody obumiera zarówno on jak i blok koralowca pod nim. -Seagrass grows inside water on top of dirt, sand or gravel.=Trawa morska rośnie w wodzie na ziemi, piasku i żwirze. -A decorative block that serves as a great furnace fuel.=Blok dekoracyjny, który świetnie sprawdza się jako paliwo do pieca. -Dried kelp is a food item.=Suszone wodorosty jest przedmiotem do jedzenia. -Grows on coral block of same species=Rośnie na blokach koralowca tego samego gatunku. -Needs water to live=Potrzebuje wody do życia. -Grows in water on dirt, sand, gravel=Rośnie w wodzie na ziemi, piasku i żwirze. -Glows in the water=Świeci w wodzie -4 possible sizes=4 możliwe wielkości -Grows on dead brain coral block=Rośnie na martwych blokach mózgowatego koralowca -Sea Pickle=Iskrzyłuda -Sea pickles grow on dead brain coral blocks and provide light when underwater. They come in 4 sizes that vary in brightness.=Iskrzyłuda rośnie na martwych blokach mózgowatego koralowca i jest źródłem światła pod wodą. -It can only be placed on top of dead brain coral blocks. Placing a sea pickle on another sea pickle will make it grow and brighter.=Może być postawiona tylko na blokach mózgowatego koralowca. Postawienie iskrzyłuda na innej iskrzyłudzie sprawi, że się powiększy i będzie jaśniejsza. - diff --git a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.ru.tr b/mods/ITEMS/mcl_ocean/locale/mcl_ocean.ru.tr deleted file mode 100644 index e7e5a12e3..000000000 --- a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.ru.tr +++ /dev/null @@ -1,59 +0,0 @@ -# textdomain: mcl_ocean -Sea Lantern=Морской светильник -Sea lanterns are decorative light sources which look great underwater but can be placed anywhere.=Морской светильник это декоративный источник света. Он отлично смотрится под водой, но размещать его можно в любых местах. -Prismarine=Призмарин -Prismarine is used as a building block. It slowly changes its color.=Призмарин хорош как строительный блок. Он медленно меняет свой цвет. -Prismarine Bricks=Призмариновые кирпичи -Dark Prismarine=Тёмный призмарин -Prismarine Crystals=Призмариновые кристаллы -Prismarine Shard=Осколок призмарина -Dried Kelp=Сушёная ламинария -Dried Kelp Block=Блок сухой ламинарии -Brain Coral Block=Блок мозгового коралла -Brain Coral Fan=Вентилятор мозгового коралла -Brain Coral=Мозговой коралл -Bubble Coral Block=Блок пузыристого коралла -Bubble Coral Fan=Вентилятор пузыристого коралла -Bubble Coral=Пузыристый коралл -Fire Coral Block=Блок огненного коралла -Fire Coral Fan=Вентилятор огненного коралла -Fire Coral=Огненный коралл -Horn Coral Block=Блок рожкового коралла -Horn Coral Fan=Вентилятор рожкового коралла -Horn Coral=Рожковый коралл -Tube Coral Block=Блок трубного коралла -Tube Coral Fan=Вентилятор трубного коралла -Tube Coral=Трубный коралл -Dead Brain Coral Block=Блок мёртвого мозгового коралла -Dead Brain Coral Fan=Вентилятор мёртвого мозгового коралла -Dead Brain Coral=Мёртвый мозговой коралл -Dead Bubble Coral Block=Блок мёртвого пузыристого коралла -Dead Bubble Coral Fan=Вентилятор мёртвого пузыристого коралла -Dead Bubble Coral=Мёртвый пузыристый коралл -Dead Fire Coral Block=Блок мёртвого огненного коралла -Dead Fire Coral Fan=Вентилятор мёртвого огненного коралла -Dead Fire Coral=Мёртвый огненный коралл -Dead Horn Coral Block=Блок мёртвого рожкового коралла -Dead Horn Coral Fan=Вентилятор мёртвого рожкового коралла -Dead Horn Coral=Мёртвый рожковый коралл -Dead Tube Coral Block=Блок мёртвого трубного коралла -Dead Tube Coral Fan=Вентилятор мёртвого трубного коралла -Dead Tube Coral=Мёртвый трубный коралл -Seagrass=Водоросли -Kelp=Ламинария -Kelp grows inside water on top of dirt, sand or gravel.=Водоросли растут в воде поверх грязи, песка или гравия. -Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.=Коралловые блоки живут в океанах и нуждаются в источниках воды рядом с ними, чтобы выжить. Без воды они умирают. -Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Кораллы растут на вершинах коралловых блоков и должны быть внутри источника воды, чтобы жить. Без воды они умирают, как и коралловые блоки внизу. -Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Кораллов вентиляторы растут на вершинах коралловых блоков и должны быть внутри источника воды, чтобы выжить. Без воды они умирают, как и коралловые блоки внизу. -Seagrass grows inside water on top of dirt, sand or gravel.=Водоросли растут в воде поверх грязи, песка или гравия. -A decorative block that serves as a great furnace fuel.=Декоративный блок, служащий отличным топливом для печи. -Dried kelp is a food item.=Сушеная ламинария - это продуктовый предмет. -Grows on coral block of same species=Растет на коралловом блоке того же вида -Needs water to live=Нуждается в воде, чтобы жить -Grows in water on dirt, sand, gravel=Растёт в воде на грязи, песке, гравии -Glows in the water=Светится в воде -4 possible sizes=4 возможных размера -Grows on dead brain coral block=Растёт на блоке мёртвого коралла -Sea Pickle=Морской огурец -Sea pickles grow on dead brain coral blocks and provide light when underwater. They come in 4 sizes that vary in brightness.=Морские огурцы растут на мертвых коралловых блоках и дают свет под водой. Они бывают четырёх размеров, которые различаются по яркости. -It can only be placed on top of dead brain coral blocks. Placing a sea pickle on another sea pickle will make it grow and brighter.=Это можно помещать только на верхушку блока мертвого мозгового коралла. Помещение морского огурца на другой морской огурец приведёт к тому, что он вырастет и станет ярче. diff --git a/mods/ITEMS/mcl_ocean/locale/template.txt b/mods/ITEMS/mcl_ocean/locale/template.txt deleted file mode 100644 index 975976db2..000000000 --- a/mods/ITEMS/mcl_ocean/locale/template.txt +++ /dev/null @@ -1,60 +0,0 @@ -# textdomain: mcl_ocean -Sea Lantern= -Sea lanterns are decorative light sources which look great underwater but can be placed anywhere.= -Prismarine= -Prismarine is used as a building block. It slowly changes its color.= -Prismarine Bricks= -Dark Prismarine= -Prismarine Crystals= -Prismarine Shard= -Dried Kelp= -Dried Kelp Block= -Brain Coral Block= -Brain Coral Fan= -Brain Coral= -Bubble Coral Block= -Bubble Coral Fan= -Bubble Coral= -Fire Coral Block= -Fire Coral Fan= -Fire Coral= -Horn Coral Block= -Horn Coral Fan= -Horn Coral= -Tube Coral Block= -Tube Coral Fan= -Tube Coral= -Dead Brain Coral Block= -Dead Brain Coral Fan= -Dead Brain Coral= -Dead Bubble Coral Block= -Dead Bubble Coral Fan= -Dead Bubble Coral= -Dead Fire Coral Block= -Dead Fire Coral Fan= -Dead Fire Coral= -Dead Horn Coral Block= -Dead Horn Coral Fan= -Dead Horn Coral= -Dead Tube Coral Block= -Dead Tube Coral Fan= -Dead Tube Coral= -Seagrass= -Kelp= -Kelp grows inside water on top of dirt, sand or gravel.= -Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.= -Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.= -Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.= -Seagrass grows inside water on top of dirt, sand or gravel.= -A decorative block that serves as a great furnace fuel.= -Dried kelp is a food item.= -Grows on coral block of same species= -Needs water to live= -Grows in water on dirt, sand, gravel= -Glows in the water= -4 possible sizes= -Grows on dead brain coral block= -Sea Pickle= -Sea pickles grow on dead brain coral blocks and provide light when underwater. They come in 4 sizes that vary in brightness.= -It can only be placed on top of dead brain coral blocks. Placing a sea pickle on another sea pickle will make it grow and brighter.= - diff --git a/mods/ITEMS/mcl_ocean/mod.conf b/mods/ITEMS/mcl_ocean/mod.conf deleted file mode 100644 index 9b639a7b0..000000000 --- a/mods/ITEMS/mcl_ocean/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_ocean -description = Includes various ocean nodes -depends = mcl_core, mcl_sounds, mcl_dye -optional_depends = doc, doc_items, screwdriver diff --git a/mods/ITEMS/mcl_ocean/prismarine.lua b/mods/ITEMS/mcl_ocean/prismarine.lua deleted file mode 100644 index e38b3e0a6..000000000 --- a/mods/ITEMS/mcl_ocean/prismarine.lua +++ /dev/null @@ -1,125 +0,0 @@ --- Nodes - -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_node("mcl_ocean:sea_lantern", { - description = S("Sea Lantern"), - _doc_items_longdesc = S("Sea lanterns are decorative light sources which look great underwater but can be placed anywhere."), - paramtype2 = "facedir", - is_ground_content = false, - stack_max = 64, - light_source = minetest.LIGHT_MAX, - drop = { - max_items = 1, - items = { - { items = {"mcl_ocean:prismarine_crystals 3"}, rarity = 2 }, - { items = {"mcl_ocean:prismarine_crystals 2"}} - } - }, - tiles = {{name="mcl_ocean_sea_lantern.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.25}}}, - groups = {handy=1, building_block=1, material_glass=1}, - sounds = mcl_sounds.node_sound_glass_defaults(), - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mcl_ocean:prismarine_crystals"}, - min_count = 2, - max_count = 3, - cap = 5, - } -}) - -minetest.register_node("mcl_ocean:prismarine", { - description = S("Prismarine"), - _doc_items_longdesc = S("Prismarine is used as a building block. It slowly changes its color."), - stack_max = 64, - is_ground_content = false, - -- Texture should have 22 frames for smooth transitions. - tiles = {{name="mcl_ocean_prismarine_anim.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=45.0}}}, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 1.5, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_ocean:prismarine_brick", { - description = S("Prismarine Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_ocean_prismarine_bricks.png"}, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 1.5, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_ocean:prismarine_dark", { - description = S("Dark Prismarine"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_ocean_prismarine_dark.png"}, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 1.5, - _mcl_hardness = 1.5, -}) - --- Craftitems - -minetest.register_craftitem("mcl_ocean:prismarine_crystals", { - description = S("Prismarine Crystals"), - _doc_items_longdesc = doc.sub.items.temp.craftitem, - inventory_image = "mcl_ocean_prismarine_crystals.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_ocean:prismarine_shard", { - description = S("Prismarine Shard"), - _doc_items_longdesc = doc.sub.items.temp.craftitem, - inventory_image = "mcl_ocean_prismarine_shard.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - --- Crafting - -minetest.register_craft({ - output = "mcl_ocean:sea_lantern", - recipe = { - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_shard"}, - {"mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_crystals"}, - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_shard"}, - } -}) - -minetest.register_craft({ - output = "mcl_ocean:prismarine", - recipe = { - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, - } -}) - -minetest.register_craft({ - output = "mcl_ocean:prismarine_brick", - recipe = { - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, - } -}) - -minetest.register_craft({ - output = "mcl_ocean:prismarine_dark", - recipe = { - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, - {"mcl_ocean:prismarine_shard", "mcl_dye:black", "mcl_ocean:prismarine_shard"}, - {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, - } -}) - diff --git a/mods/ITEMS/mcl_ocean/sea_pickle.lua b/mods/ITEMS/mcl_ocean/sea_pickle.lua deleted file mode 100644 index 6a4e4a751..000000000 --- a/mods/ITEMS/mcl_ocean/sea_pickle.lua +++ /dev/null @@ -1,209 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_doc = minetest.get_modpath("doc") - -local function sea_pickle_on_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" or not placer then - return itemstack - end - - local player_name = placer:get_player_name() - local pos_under = pointed_thing.under - local pos_above = pointed_thing.above - local node_under = minetest.get_node(pos_under) - local node_above = minetest.get_node(pos_above) - local def_under = minetest.registered_nodes[node_under.name] - --local def_above = minetest.registered_nodes[node_above.name] - - if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then - return def_under.on_rightclick(pos_under, node_under, - placer, itemstack, pointed_thing) or itemstack - end - - if minetest.is_protected(pos_under, player_name) or - minetest.is_protected(pos_above, player_name) then - minetest.log("action", player_name - .. " tried to place " .. itemstack:get_name() - .. " at protected position " - .. minetest.pos_to_string(pos_under)) - minetest.record_protection_violation(pos_under, player_name) - return itemstack - end - - local submerged = false - if minetest.get_item_group(node_above.name, "water") ~= 0 then - submerged = true - end - -- Place - if node_under.name == "mcl_ocean:dead_brain_coral_block" then - -- Place on suitable coral block - if submerged then - node_under.name = "mcl_ocean:sea_pickle_1_dead_brain_coral_block" - else - node_under.name = "mcl_ocean:sea_pickle_1_off_dead_brain_coral_block" - end - minetest.set_node(pos_under, node_under) - elseif minetest.get_item_group(node_under.name, "sea_pickle") ~= 0 then - -- Grow by 1 stage - local def = minetest.registered_nodes[node_under.name] - if def and def._mcl_sea_pickle_next then - node_under.name = def._mcl_sea_pickle_next - minetest.set_node(pos_under, node_under) - else - return itemstack - end - else - return itemstack - end - if not minetest.is_creative_enabled(player_name) then - itemstack:take_item() - end - return itemstack -end - --- Sea Pickle on brain coral - -local sounds_coral_plant = mcl_sounds.node_sound_leaves_defaults({footstep = mcl_sounds.node_sound_dirt_defaults().footstep}) -local ontop = "dead_brain_coral_block" -local canonical = "mcl_ocean:sea_pickle_1_"..ontop - -for s=1,4 do - local desc, doc_desc, doc_use, doc_create, tt_help, nici, img, img_off, on_place - if s == 1 then - desc = S("Sea Pickle") - doc_desc = S("Sea pickles grow on dead brain coral blocks and provide light when underwater. They come in 4 sizes that vary in brightness.") - doc_use = S("It can only be placed on top of dead brain coral blocks. Placing a sea pickle on another sea pickle will make it grow and brighter.") - tt_help = S("Glows in the water").."\n"..S("4 possible sizes").."\n"..S("Grows on dead brain coral block") - img = "mcl_ocean_sea_pickle_item.png" - on_place = sea_pickle_on_place - else - doc_create = false - nici = 1 - img = "mcl_ocean_"..ontop..".png^(mcl_ocean_sea_pickle_"..s.."_anim.png^[verticalframe:2:1)" - end - img_off = "mcl_ocean_"..ontop..".png^mcl_ocean_sea_pickle_"..s.."_off.png" - local next_on, next_off - if s < 4 then - next_on = "mcl_ocean:sea_pickle_"..tostring(s+1).."_"..ontop - next_off = "mcl_ocean:sea_pickle_"..tostring(s+1).."_off_"..ontop - end - - minetest.register_node("mcl_ocean:sea_pickle_"..s.."_"..ontop, { - description = desc, - _tt_help = tt_help, - _doc_items_create_entry = doc_create, - _doc_items_longdesc = doc_desc, - _doc_items_usagehelp = doc_use, - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - tiles = { "mcl_ocean_"..ontop..".png" }, - special_tiles = { - { - image = "mcl_ocean_sea_pickle_"..s.."_anim.png", - animation = {type="vertical_frames", aspect_w=16, aspect_h=16, length=1.7}, - } - }, - inventory_image = img, - wield_image = img, - groups = { - dig_immediate = 3, deco_block = 1, sea_pickle = 1, - not_in_creative_inventory=nici, compostability = 65 - }, - -- Light level: 6 at size 1, +3 for each additional stage - light_source = math.min(6 + (s-1)*3, minetest.LIGHT_MAX), - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.15, 0.5, -0.15, 0.15, 0.5+2/16+(2/16)*s, 0.15 }, - } - }, - sounds = sounds_coral_plant, - drop = canonical .. " "..s, - node_placement_prediction = "", - node_dig_prediction = "mcl_ocean:"..ontop, - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "sea_pickle") == 0 then - minetest.set_node(pos, {name="mcl_ocean:"..ontop}) - end - end, - on_place = on_place, - _mcl_sea_pickle_off = "mcl_ocean:sea_pickle_"..s.."_off_"..ontop, - _mcl_sea_pickle_next = next_on, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - }) - - minetest.register_node("mcl_ocean:sea_pickle_"..s.."_off_"..ontop, { - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - tiles = { "mcl_ocean_"..ontop..".png" }, - special_tiles = { "mcl_ocean_sea_pickle_"..s.."_off.png", }, - groups = { dig_immediate = 3, deco_block = 1, sea_pickle=2, not_in_creative_inventory=1 }, - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.15, 0.5, -0.15, 0.15, 0.5+2/16+(2/16)*s, 0.15 }, - } - }, - inventory_image = img_off, - wield_image = img_off, - sounds = sounds_coral_plant, - drop = canonical .. " "..s, - node_placement_prediction = "", - node_dig_prediction = "mcl_ocean:"..ontop, - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "sea_pickle") == 0 then - minetest.set_node(pos, {name="mcl_ocean:"..ontop}) - end - end, - _mcl_sea_pickle_on = "mcl_ocean:sea_pickle_"..s.."_"..ontop, - _mcl_sea_pickle_next = next_off, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - }) - - if mod_doc then - if s == 1 then - doc.add_entry_alias("nodes", "mcl_ocean:sea_pickle_1_dead_brain_coral_block", "nodes", "mcl_ocean:sea_pickle_1_off_"..ontop) - else - doc.add_entry_alias("nodes", "mcl_ocean:sea_pickle_1_dead_brain_coral_block", "nodes", "mcl_ocean:sea_pickle_"..s.."_off_"..ontop) - doc.add_entry_alias("nodes", "mcl_ocean:sea_pickle_1_dead_brain_coral_block", "nodes", "mcl_ocean:sea_pickle_"..s.."_"..ontop) - end - end -end - -minetest.register_abm({ - label = "Sea pickle update", - nodenames = { "group:sea_pickle" }, - interval = 17, - chance = 5, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Check if it's lit - local state = minetest.get_item_group(node.name, "sea_pickle") - -- Check for water - local checknode = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) - local def = minetest.registered_nodes[node.name] - if minetest.get_item_group(checknode.name, "water") ~= 0 then - -- Sea pickle is unlit - if state == 2 then - node.name = def._mcl_sea_pickle_on - minetest.set_node(pos, node) - return - end - else - -- Sea pickle is lit - if state == 1 then - node.name = def._mcl_sea_pickle_off - minetest.set_node(pos, node) - return - end - end - end, -}) diff --git a/mods/ITEMS/mcl_ocean/seagrass.lua b/mods/ITEMS/mcl_ocean/seagrass.lua deleted file mode 100644 index 2f58a2812..000000000 --- a/mods/ITEMS/mcl_ocean/seagrass.lua +++ /dev/null @@ -1,157 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_doc = minetest.get_modpath("doc") - --- List of supported surfaces for seagrass -local surfaces = { - { "dirt", "mcl_core:dirt" }, - { "sand", "mcl_core:sand", 1 }, - { "redsand", "mcl_core:redsand", 1 }, - { "gravel", "mcl_core:gravel", 1 }, -} - -local function seagrass_on_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" or not placer then - return itemstack - end - - local player_name = placer:get_player_name() - local pos_under = pointed_thing.under - local pos_above = pointed_thing.above - local node_under = minetest.get_node(pos_under) - local node_above = minetest.get_node(pos_above) - local def_under = minetest.registered_nodes[node_under.name] - local def_above = minetest.registered_nodes[node_above.name] - - if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then - return def_under.on_rightclick(pos_under, node_under, - placer, itemstack, pointed_thing) or itemstack - end - - if pos_under.y >= pos_above.y then - return itemstack - end - - -- Placement rules: - -- Seagrass can only be placed on top of dirt inside water - local g_above_water = minetest.get_item_group(node_above.name, "water") - if not (g_above_water ~= 0 and def_above.liquidtype == "source") then - return itemstack - end - - if minetest.is_protected(pos_under, player_name) or - minetest.is_protected(pos_above, player_name) then - minetest.log("action", player_name - .. " tried to place " .. itemstack:get_name() - .. " at protected position " - .. minetest.pos_to_string(pos_under)) - minetest.record_protection_violation(pos_under, player_name) - return itemstack - end - - -- Select a seagrass node - if node_under.name == "mcl_core:dirt" then - node_under.name = "mcl_ocean:seagrass_dirt" - elseif node_under.name == "mcl_core:sand" then - node_under.name = "mcl_ocean:seagrass_sand" - elseif node_under.name == "mcl_core:redsand" then - node_under.name = "mcl_ocean:seagrass_redsand" - elseif node_under.name == "mcl_core:gravel" then - node_under.name = "mcl_ocean:seagrass_gravel" - else - return itemstack - end - node_under.param2 = minetest.registered_items[node_under.name].place_param2 or 3 - if node_under.param2 < 8 and math.random(1,2) == 1 then - -- Random horizontal displacement - node_under.param2 = node_under.param2 + 8 - end - local def_node = minetest.registered_items[node_under.name] - if def_node.sounds then - minetest.sound_play(def_node.sounds.place, { gain = 0.5, pos = pos_under }, true) - end - minetest.set_node(pos_under, node_under) - if not minetest.is_creative_enabled(player_name) then - itemstack:take_item() - end - - return itemstack -end - -minetest.register_craftitem("mcl_ocean:seagrass", { - description = S("Seagrass"), - _tt_help = S("Grows in water on dirt, sand, gravel"), - _doc_items_create_entry = false, - inventory_image = "mcl_ocean_seagrass.png^[verticalframe:12:0", - wield_image = "mcl_ocean_seagrass.png^[verticalframe:12:0", - on_place = seagrass_on_place, - groups = {deco_block = 1, compostability = 30}, -}) - --- Seagrass nodes: seagrass on a surface node - -for s=1, #surfaces do - local def = minetest.registered_nodes[surfaces[s][2]] - local alt - if surfaces[s][3] == 1 then - alt = surfaces[s][2] - end - local sounds = table.copy(def.sounds) - local leaf_sounds = mcl_sounds.node_sound_leaves_defaults() - sounds.dig = leaf_sounds.dig - sounds.dug = leaf_sounds.dug - sounds.place = leaf_sounds.place - local doc_longdesc, doc_img, desc - if surfaces[s][1] == "dirt" then - doc_longdesc = S("Seagrass grows inside water on top of dirt, sand or gravel.") - desc = S("Seagrass") - doc_create = true - doc_img = "mcl_ocean_seagrass.png^[verticalframe:12:0" - else - doc_create = false - end - minetest.register_node("mcl_ocean:seagrass_"..surfaces[s][1], { - _doc_items_entry_name = desc, - _doc_items_longdesc = doc_longdesc, - _doc_items_create_entry = doc_create, - _doc_items_image = doc_img, - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - tiles = def.tiles, - special_tiles = { - { - image = "mcl_ocean_seagrass.png", - animation = {type="vertical_frames", aspect_w=16, aspect_h=16, length=1.0}, - } - }, - inventory_image = "("..def.tiles[1]..")^(mcl_ocean_seagrass.png^[verticalframe:12:0)", - wield_image = "mcl_ocean_seagrass.png^[verticalframe:12:0", - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 1.3, 0.5 }, - }, - }, - groups = { handy = 1, shearsy = 1, deco_block = 1, plant = 1, seagrass = 1, falling_node = surfaces[s][3], not_in_creative_inventory = 1 }, - sounds = sounds, - node_dig_prediction = surfaces[s][2], - after_dig_node = function(pos) - minetest.set_node(pos, {name=surfaces[s][2]}) - end, - drop = "", - _mcl_falling_node_alternative = alt, - _mcl_shears_drop = { "mcl_ocean:seagrass" }, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - }) - if mod_doc and surfaces[s][1] ~= "dirt" then - doc.add_entry_alias("nodes", "mcl_ocean:seagrass_dirt", "nodes", "mcl_ocean:seagrass_"..surfaces[s][1]) - end -end - -if mod_doc then - doc.add_entry_alias("nodes", "mcl_ocean:seagrass_dirt", "craftitems", "mcl_ocean:seagrass") -end diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral.png deleted file mode 100644 index 60a4c53da..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral_block.png deleted file mode 100644 index a9a508be8..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral_fan.png deleted file mode 100644 index 0ffe520e0..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_brain_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral.png deleted file mode 100644 index 905ba2f7c..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral_block.png deleted file mode 100644 index 551975513..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral_fan.png deleted file mode 100644 index c9a49f45f..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_bubble_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral.png deleted file mode 100644 index 8d8068200..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral_block.png deleted file mode 100644 index 2938880ef..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral_fan.png deleted file mode 100644 index b297894e8..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_brain_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral.png deleted file mode 100644 index 0d69e128c..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral_block.png deleted file mode 100644 index 86333fb47..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral_fan.png deleted file mode 100644 index 0b11adc31..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_bubble_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral.png deleted file mode 100644 index c050ecfea..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral_block.png deleted file mode 100644 index 836ab2a7f..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral_fan.png deleted file mode 100644 index 63c0806b9..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_fire_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral.png deleted file mode 100644 index c0ede515d..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral_block.png deleted file mode 100644 index 8f37cd1e3..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral_fan.png deleted file mode 100644 index 161c0ec7b..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_horn_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral.png deleted file mode 100644 index d1bef3abd..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral_block.png deleted file mode 100644 index eb0e0da61..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral_fan.png deleted file mode 100644 index 5d0500d18..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dead_tube_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp.png deleted file mode 100644 index 2d7879200..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_bottom.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_bottom.png deleted file mode 100644 index 148ecfd35..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_side.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_side.png deleted file mode 100644 index 71d1cb2ad..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_top.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_top.png deleted file mode 100644 index 148ecfd35..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_dried_kelp_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral.png deleted file mode 100644 index e7958d50c..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral_block.png deleted file mode 100644 index e562b024e..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral_fan.png deleted file mode 100644 index 412e97f8e..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_fire_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral.png deleted file mode 100644 index 8f3227618..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral_block.png deleted file mode 100644 index c56a1344e..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral_fan.png deleted file mode 100644 index 63e7d12ea..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_horn_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_kelp_item.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_kelp_item.png deleted file mode 100644 index 396f8b3ef..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_kelp_item.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_kelp_plant.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_kelp_plant.png deleted file mode 100644 index 11eaf610a..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_kelp_plant.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_anim.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_anim.png deleted file mode 100644 index a433caa41..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_anim.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_bricks.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_bricks.png deleted file mode 100644 index f708a270a..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_crystals.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_crystals.png deleted file mode 100644 index 048ecb673..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_crystals.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_dark.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_dark.png deleted file mode 100644 index ac27934c5..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_dark.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_shard.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_shard.png deleted file mode 100644 index 200afd4dd..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_prismarine_shard.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_lantern.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_lantern.png deleted file mode 100644 index 7f627aff1..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_lantern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_1_anim.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_1_anim.png deleted file mode 100644 index 5c4f0064c..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_1_anim.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_1_off.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_1_off.png deleted file mode 100644 index 24b648777..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_1_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_2_anim.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_2_anim.png deleted file mode 100644 index ce063765f..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_2_anim.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_2_off.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_2_off.png deleted file mode 100644 index c0b34e8e9..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_2_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_3_anim.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_3_anim.png deleted file mode 100644 index d484085e2..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_3_anim.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_3_off.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_3_off.png deleted file mode 100644 index 56ac78f3a..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_3_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_4_anim.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_4_anim.png deleted file mode 100644 index 6d3e56675..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_4_anim.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_4_off.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_4_off.png deleted file mode 100644 index d2df93109..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_4_off.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_item.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_item.png deleted file mode 100644 index 88a4669ad..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_sea_pickle_item.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_seagrass.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_seagrass.png deleted file mode 100644 index 216d25312..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_seagrass.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral.png deleted file mode 100644 index 63cf864c7..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral_block.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral_block.png deleted file mode 100644 index 016888db3..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral_fan.png b/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral_fan.png deleted file mode 100644 index 7d055a7bd..000000000 Binary files a/mods/ITEMS/mcl_ocean/textures/mcl_ocean_tube_coral_fan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/LICENSE b/mods/ITEMS/mcl_portals/LICENSE deleted file mode 100644 index ece42d0aa..000000000 --- a/mods/ITEMS/mcl_portals/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -The MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/mods/ITEMS/mcl_portals/README.md b/mods/ITEMS/mcl_portals/README.md deleted file mode 100644 index d3faaa8e2..000000000 --- a/mods/ITEMS/mcl_portals/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Portals mod for MineClone 2 -## How to create portals - -Nether portal: Build an upright frame of obsidian, 4 blocks wide and 5 blocks high, and use a flint and steel inside it. -End portal: Build an upright frame of red nether brick blocks, 4 blocks wide and 5 blocks high, and use an eye of ender inside it. - -## Credits -Created by maikerumine and Wuzzy. -Code license: MIT License (see `LICENSE`). - -Texture license: See README.md in main MineClone 2 directory. - -`mcl_portals_teleport.ogg` - * License: [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/) - * Authors: [FreqMan](https://freesound.org/people/FreqMan/) and Wuzzy - * Source: - -`mcl_portals_open_end_portal.ogg` - * License: CC0 - * Author: Johnnie\_Holiday - * Source: diff --git a/mods/ITEMS/mcl_portals/init.lua b/mods/ITEMS/mcl_portals/init.lua deleted file mode 100644 index 972e93473..000000000 --- a/mods/ITEMS/mcl_portals/init.lua +++ /dev/null @@ -1,18 +0,0 @@ --- Load files - -mcl_portals = { - storage = minetest.get_mod_storage(), -} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - --- Nether portal: --- Obsidian frame, activated by flint and steel -dofile(modpath.."/portal_nether.lua") - --- End portal (W.I.P): --- Red nether brick block frame, activated by an eye of ender -dofile(modpath.."/portal_end.lua") - -dofile(modpath.."/portal_gateway.lua") - diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.de.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.de.tr deleted file mode 100644 index 58478faa4..000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.de.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_portals -End Portal=Endportal -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Ein Endportal teleportiert Kreaturen und Objekte zur mysteriösen Ende-Dimension (und wieder zurück!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Springen Sie ins Portal, um sich zu teleportieren. Von der Oberwelt aus werden Sie zu einer festen Position im Ende hin teleportiert. Eine 5×5-Obsidianplattform wird am Zielort erzeugt. Im Ende werden Sie zurück zu Ihrem Startpunkt in der Oberwelt teleportiert. -End Portal Frame=Endportalrahmen -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Endportalrahmen werden in der Konstruktion von Endportalen benutzt. Jeder Block hat einen Sockel für ein Enderauge. -NOTE: The End dimension is currently incomplete and might change in future versions.=ANMERKUNG: Die Ende-Dimension ist momentan unfertig und könnte sich in künftigen Versionen ändern. -To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.=Um ein Endportal zu bauen, brauchen sie 12 Endportalrahmen und 12 Enderaugen. Die Endportalrahmenblöcke muss um ein horizontales Feld von 3×3 platziert sein, wobei jeder von ihnen nach innen zeigt. Jede andere Anordnung wird nicht funktionieren. -Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.=Platzieren Sie ein Enderauge in jeden Block. Das Endportal wird sich in der Mitte öffnen, wenn das letzte Auge platziert wurde. -End Portal Frame with Eye of Ender=Endportalrahmen mit Enderauge -Nether Portal=Netherportal -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Ein Netherportal teleportiert Kreaturen und Objekte zur heißen und gefährlichen Nether-Dimension (und zurück!). Betreten auf eigene Gefahr! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Stellen Sie sich ins Portal für einen Moment, um sich zu teleportieren. Beim ersten Mal wird auch ein Portal in der anderen Dimension erschaffen. Wenn ein Netherportal im Nether gebaut wird, wird es zurück zur Oberwelt führen. Ein Netherportal wird zerstört, wenn das Obsidian, das ihn umgibt, zerstört wird, oder, wenn es einer Explosion ausgesetzt war. -Obsidian is also used as the frame of Nether portals.=Obsidian wird auch als Rahmen von Netherportalen benutzt. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Um ein Netherportal zu öffnen, platzieren Sie einen aufrechten Rahmen aus Obsidian mit einer Breite von mindestens 4 Blöcken und einer Höhe von mindestens 5 Blöcken, nur mit Luft in der Mitte. Nachdem Sie den Rahmen gebaut haben, entfachen Sie ein Feuer im Obsidianrahmen. Netherportale funktionieren nur in der Oberwelt und im Nether. -Once placed, an eye of ender can not be taken back.=Sobald platziert, kann ein Enderauge nicht mehr zurück genommen werden. -Used to construct end portals=Benutzt zur Konstruktion von Endportalen -Liquid container=Flüssigkeitsbehälter -No effect=Keine Wirkung diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.es.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.es.tr deleted file mode 100644 index 5f8509026..000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.es.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_portals -End Portal=Portal del End -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Un portal final teletransporta criaturas y objetos a la misteriosa dimensión final (¡y viceversa!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Salta al portal para teletransportarte. Entrar en un portal final en el Overworld te teletransporta a una posición fija en la dimensión final y crea una plataforma de obsidiana 5 × 5 en tu destino. Los portales finales en el final lo llevarán de regreso a su punto de generación en el mundo terrenal -End Portal Frame=Marco de portal del End -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Los marcos del portal final se utilizan en la construcción de portales finales. Cada bloque tiene un zócalo para un ojo de ender. -NOTE: The End dimension is currently incomplete and might change in future versions.=NOTA: El portal del end está actualmente incompleto y puede cambiar en futuras versiones. -To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.=Para crear un portal final, necesita 12 marcos de portal final y 12 ojos de ender. Los marcos del portal final deben estar dispuestos alrededor de un área horizontal de 3 × 3 con cada bloque mirando hacia adentro. Cualquier otro arreglo fallará. -Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.=Coloque un ojo de ender en cada bloque. El portal final aparece en el medio después de colocar el ojo final. -End Portal Frame with Eye of Ender=Marco de portal del End con ojo de ender -Nether Portal=Portal del Nether -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Un portal Nether teletransporta criaturas y objetos a la dimensión Nether ardiente y peligrosa (¡y viceversa!). ¡Entra bajo tu propio riesgo! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=SPárate en el portal por un momento para activar la teletransportación. Entrar en un portal Nether por primera vez también creará un nuevo portal en la otra dimensión. Si se ha construido un portal Nether en Nether, conducirá al Overworld. Un portal abisal se destruye si se destruye cualquiera de las obsidianas que lo rodean, o si quedó atrapado en una explosión. -Obsidian is also used as the frame of Nether portals.=La obsidiana también se usa como marco de portal del End. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.= -Once placed, an eye of ender can not be taken back.=Una vez colocado, un ojo de ender no puede ser retirado. - -#OUTDATED: -#To open a Nether portal, place an upright frame of obsidian with a width of 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Para abrir un portal Nether, coloque un marco vertical de obsidiana con un ancho de 4 bloques y una altura de 5 bloques, dejando solo aire en el centro. Después de colocar este marco, enciende un fuego en el marco de obsidiana. Los portales de Nether solo funcionan en Overworld y Nether. diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.fr.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.fr.tr deleted file mode 100644 index 4b2598b13..000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.fr.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=Portail de l'End -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Un portail de l'End téléporte des créatures et des objets dans la mystérieuse dimension End (et vice-versa!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Sautez dans le portail pour vous téléporter. Entrer dans un portail d'End dans l'Overworld vous téléporte à une position fixe dans la dimension d'End et crée une plate-forme d'obsidienne 5×5 à votre destination. Les portails de l'End à la fin vous ramèneront à votre point d'apparition dans l'Overworld. -End Portal Frame=Cadre de Portail de l'End -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Les portiques d'End sont utilisés dans la construction de portails d'End. Chaque bloc a une prise pour un oeil d'ender. -NOTE: The End dimension is currently incomplete and might change in future versions.=REMARQUE: la dimension d'End est actuellement incomplète et pourrait changer dans les futures versions. -End Portal Frame with Eye of Ender=Cadre de portail de l'End avec Oeil d'Ender -Nether Portal=Portail du Nether -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Tenez-vous un instant dans le portail pour activer la téléportation. Entrer pour la première fois sur un portail Nether créera également un nouveau portail dans l'Overworld. Si un portail du Nether a été construit dans le Nether, il mènera à l'Overworld. Un portail du Nether est détruit si l'une des obsidiennes qui l'entourent est détruit, ou s'il a été pris dans une explosion. -Obsidian is also used as the frame of Nether portals.=Obsidian is also used as the frame of Nether portals. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Pour ouvrir un portail du Nether, placez un cadre vertical d'obsidienne d'une largeur d'au moins 4 blocs et d'une hauteur de 5 blocs, ne laissant que de l'air au centre. Après avoir placé ce cadre, allumez un feu dans le cadre d'obsidienne. Les portails du Nether ne fonctionnent que dans l'Overworld et le Nether. -Once placed, an eye of ender can not be taken back.=Une fois placé, un œil d'ender ne peut pas être repris. -Used to construct end portals=Utilisé pour construire des portails d'End \ No newline at end of file diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr deleted file mode 100644 index 18d9b4b7b..000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=Portal Kresu -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Portal Kresu teleportuje osoby i rzeczy do tajemniczego wymiaru Kresu (i z powrotem!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Wskocz do portalu by się teleportować. Wejście do portalu Kresu na Powierzchni przeniesie cię do ustalonej pozycji w wymiarze Kresu i tworzy obsydianową platformę 5×5 w tym miejscu. Portal Kresu w Kresie przeniesie cię do twojego miejsca odradzania. -End Portal Frame=Rama portalu Kresu -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Ramy portalu Kresu są wykorzystywane do konstrukcji portali Kresu. Każdy blok ma miejsce na oko Kresu. -NOTE: The End dimension is currently incomplete and might change in future versions.=UWAGA: Wymiar Kresu jest aktualnie nieukończony i może się zmienić w przyszłych wersjach. -End Portal Frame with Eye of Ender=Rama portalu Kresu z okiem Kresu. -Nether Portal=Portal Netheru -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Portal Netheru teleportuje osoby i obiekty do gorącego i niebezpiecznego wymiaru Nether (i z powrotem!). Wejdź na własne ryzyko! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Stań w portalu na krótki moment aby aktywować teleport. Wejście przez portal Netheru po raz pierwszy stworzy również nowy portal w drugim wymiarze. Jeśli portal Netheru został zbudowany w Netherze będzie prowadził z powrotem na Powierzchnię. Portal Netheru przestanie działać jeśli któryś z otaczających go bloków obsydianu zostanie zniszczony lub gdy dosięgnie go wybuch. -Obsidian is also used as the frame of Nether portals.=Obsydian jest również wykorzystywany do budowania portali Netheru. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Aby otworzyć portal Netheru umieść ramę z obsydianu o szerokości co najmniej 4 i wysokości 5 bloków, zostawiając tylko powietrze wewnątrz. Po postawieniu tej ramy rozpal ogień wewnątrz ramy. Portale Netheru działają tylko w Netherze i na Powierzchni. -Once placed, an eye of ender can not be taken back.=Raz umieszczone oko Kresu nie może być odzyskane -Used to construct end portals=Używane do konstrukcji portali Kresu diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.ru.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.ru.tr deleted file mode 100644 index 8b6310793..000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.ru.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=Портал Предела -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Портал Предела телепортирует создания и объекты в загадочное измерение Предел (и обратно!) -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Прыгайте в портал, чтобы телепортироваться. Вход в портал Предела в Верхнем мире телепортирует вас в определённое место в измерении Предела и создаёт обсидиановую платформу 5×5 в пункте вашего назначения. Портал предела в Пределе перебросит вас в вашу точку возрождения в Верхнем мире. -End Portal Frame=Рамка портала Предела -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Рамка портала Предела используется для построения порталов Предела. Каждый блок имеет отсек для ока Предела. -NOTE: The End dimension is currently incomplete and might change in future versions.=Предупреждение: Измерение Предел в данный момент не завершено и может измениться в будущих версиях. -End Portal Frame with Eye of Ender=Рамка портала Предела с оком Предела -Nether Portal=Адский портал -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Адский портал переносит создания и объекты в горячее и опасное измерение Ад (и обратно!). Используйте на свой страх и риск! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Стойте в портале несколько секунд для запуска телепортации. Вход в портал Ада в первый раз приведёт к созданию аналогичного портала в другом измерении. Если Адский портал создан в Аду, он ведёт в Верхний мир. Портал Ада уничтожается, если уничтожается любой блок обсидиана из окружающих его, либо при задевании взрывом. -Obsidian is also used as the frame of Nether portals.=Обсидиан также используется в качестве рамки портала Ада -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Чтобы открыть портал Ада, постройте рамку из обсидиана шириной не менее 4 блоков и высото не менее 5, оставляя в центре лишь воздух. После создания обсидиановой рамки зажгите в ней огонь. Адские порталы работают только в Верхнем мире и в Аду. -Once placed, an eye of ender can not be taken back.=Однажды размещённое, око Предела нельзя взять обратно. -Used to construct end portals=Используется для создания порталов Предела diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.zh_TW.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.zh_TW.tr deleted file mode 100644 index a6b389036..000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.zh_TW.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=終界傳送門 -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=終界傳送門用於將生物和實體到達終末之界(或回來!)。 -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=跳入傳送門進行傳送。進入終界傳送門會將你傳送到終界的一個固定位置,並在你的目的地創建一個5×5的黑曜石平台。終界的傳送門會將你帶回你在主界的出生點。 -End Portal Frame=終界傳送門框架 -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=終界傳送門框架用於建造終界傳送門。每個框架都有一個插座,用於放置終界之眼。 -NOTE: The End dimension is currently incomplete and might change in future versions.=注意:終界目前還不完整,在未來的版本中可能會有變化。 -End Portal Frame with Eye of Ender=含終界之眼的終界傳送門框架 -Nether Portal=地獄傳送門 -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=地獄傳送門將生物和實體傳送到炎熱和危險的地獄(或回來!)。進入後風險自負! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=在傳送門中站立片刻以激活傳送。第一次進入地獄傳送門也會在另一維度創建一個新的傳送門。如果在地獄建立了地獄傳送門,它將會通​​向主世界。如果圍繞著它的任何黑曜石被毀壞,或者它被捲入一場爆炸,地獄傳送門就會被破壞。 -Obsidian is also used as the frame of Nether portals.=黑曜石也被用來作為地獄傳送門的框架。 -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=要打開地獄傳送門,需要放置一個直立的黑曜石框架,寬度至少為4塊,高度為5塊,中間只留有空氣。放置這個框架後,在黑曜石框架中點火。地獄傳送門只在主世界上和地獄起作用。 -Once placed, an eye of ender can not be taken back.=在擺放後,終界之眼無法再取回。 -Used to construct end portals=用於建造終界傳送門 diff --git a/mods/ITEMS/mcl_portals/locale/template.txt b/mods/ITEMS/mcl_portals/locale/template.txt deleted file mode 100644 index 21f5e21f8..000000000 --- a/mods/ITEMS/mcl_portals/locale/template.txt +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal= -An End portal teleports creatures and objects to the mysterious End dimension (and back!).= -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.= -End Portal Frame= -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.= -NOTE: The End dimension is currently incomplete and might change in future versions.= -End Portal Frame with Eye of Ender= -Nether Portal= -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!= -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.= -Obsidian is also used as the frame of Nether portals.= -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.= -Once placed, an eye of ender can not be taken back.= -Used to construct end portals= diff --git a/mods/ITEMS/mcl_portals/mod.conf b/mods/ITEMS/mcl_portals/mod.conf deleted file mode 100644 index 610b590c6..000000000 --- a/mods/ITEMS/mcl_portals/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_portals -description = Adds buildable portals to the Nether and End dimensions. -depends = mcl_nether, mcl_end, mcl_particles, mcl_spawn, mcl_credits -optional_depends = awards, doc diff --git a/mods/ITEMS/mcl_portals/portal_end.lua b/mods/ITEMS/mcl_portals/portal_end.lua deleted file mode 100644 index e4982c39b..000000000 --- a/mods/ITEMS/mcl_portals/portal_end.lua +++ /dev/null @@ -1,393 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local table = table -local vector = vector -local math = math - -local has_doc = minetest.get_modpath("doc") - --- Parameters ---local SPAWN_MIN = mcl_vars.mg_end_min+70 ---local SPAWN_MAX = mcl_vars.mg_end_min+98 - ---local mg_name = minetest.get_mapgen_setting("mg_name") - -local function destroy_portal(pos) - local neighbors = { - { x=1, y=0, z=0 }, - { x=-1, y=0, z=0 }, - { x=0, y=0, z=1 }, - { x=0, y=0, z=-1 }, - } - for n=1, #neighbors do - local npos = vector.add(pos, neighbors[n]) - if minetest.get_node(npos).name == "mcl_portals:portal_end" then - minetest.remove_node(npos) - end - end -end - -local ep_scheme = { - { o={x=0, y=0, z=1}, p=1 }, - { o={x=0, y=0, z=2}, p=1 }, - { o={x=0, y=0, z=3}, p=1 }, - { o={x=1, y=0, z=4}, p=2 }, - { o={x=2, y=0, z=4}, p=2 }, - { o={x=3, y=0, z=4}, p=2 }, - { o={x=4, y=0, z=3}, p=3 }, - { o={x=4, y=0, z=2}, p=3 }, - { o={x=4, y=0, z=1}, p=3 }, - { o={x=3, y=0, z=0}, p=0 }, - { o={x=2, y=0, z=0}, p=0 }, - { o={x=1, y=0, z=0}, p=0 }, -} - --- End portal -minetest.register_node("mcl_portals:portal_end", { - description = S("End Portal"), - _tt_help = S("Used to construct end portals"), - _doc_items_longdesc = S("An End portal teleports creatures and objects to the mysterious End dimension (and back!)."), - _doc_items_usagehelp = S("Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld."), - tiles = { - { - name = "mcl_portals_end_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.0, - }, - }, - { - name = "mcl_portals_end_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 6.0, - }, - }, - "blank.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - walkable = false, - diggable = false, - pointable = false, - buildable_to = false, - is_ground_content = false, - drop = "", - -- This is 15 in MC. - light_source = 14, - post_effect_color = {a = 192, r = 0, g = 0, b = 0}, - after_destruct = destroy_portal, - -- This prevents “falling through” - collision_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -7/16, 0.5}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 4/16, 0.5}, - }, - }, - groups = {portal=1, not_in_creative_inventory = 1, disable_jump = 1}, - - _mcl_hardness = -1, - _mcl_blast_resistance = 36000000, -}) - --- Obsidian platform at the End portal destination in the End -local function build_end_portal_destination(pos) - local p1 = {x = pos.x - 2, y = pos.y, z = pos.z-2} - local p2 = {x = pos.x + 2, y = pos.y+2, z = pos.z+2} - - for x = p1.x, p2.x do - for y = p1.y, p2.y do - for z = p1.z, p2.z do - local newp = {x=x,y=y,z=z} - -- Build obsidian platform - if minetest.registered_nodes[minetest.get_node(newp).name].is_ground_content then - if y == p1.y then - minetest.set_node(newp, {name="mcl_core:obsidian"}) - else - minetest.remove_node(newp) - end - end - end - end - end -end - - --- Check if pos is part of a valid end portal frame, filled with eyes of ender. -local function check_end_portal_frame(pos) - for i = 1, 12 do - local pos0 = vector.subtract(pos, ep_scheme[i].o) - local portal = true - for j = 1, 12 do - local p = vector.add(pos0, ep_scheme[j].o) - local node = minetest.get_node(p) - if not node or node.name ~= "mcl_portals:end_portal_frame_eye" or node.param2 ~= ep_scheme[j].p then - portal = false - break - end - end - if portal then - return true, {x=pos0.x+1, y=pos0.y, z=pos0.z+1} - end - end - return false -end - --- Generate or destroy a 3×3 end portal beginning at pos. To be used to fill an end portal framea. --- If destroy == true, the 3×3 area is removed instead. -local function end_portal_area(pos, destroy) - local SIZE = 3 - local name - if destroy then - name = "air" - else - name = "mcl_portals:portal_end" - end - local posses = {} - for x=pos.x, pos.x+SIZE-1 do - for z=pos.z, pos.z+SIZE-1 do - table.insert(posses, {x=x,y=pos.y,z=z}) - end - end - minetest.bulk_set_node(posses, {name=name}) -end - -function mcl_portals.end_teleport(obj, pos) - if not obj then return end - local pos = pos or obj:get_pos() - if not pos then return end - local dim = mcl_worlds.pos_to_dimension(pos) - - local target - if dim == "end" then - -- End portal in the End: - -- Teleport back to the player's spawn or world spawn in the Overworld. - if obj:is_player() then - target = mcl_spawn.get_player_spawn_pos(obj) - end - - target = target or mcl_spawn.get_world_spawn_pos(obj) - else - -- End portal in any other dimension: - -- Teleport to the End at a fixed position and generate a - -- 5×5 obsidian platform below. - - local platform_pos = mcl_vars.mg_end_platform_pos - -- force emerge of target1 area - minetest.get_voxel_manip():read_from_map(platform_pos, platform_pos) - if not minetest.get_node_or_nil(platform_pos) then - minetest.emerge_area(vector.subtract(platform_pos, 3), vector.add(platform_pos, 3)) - end - - -- Build destination - local function check_and_build_end_portal_destination(pos) - local n = minetest.get_node_or_nil(pos) - if n and n.name ~= "mcl_core:obsidian" then - build_end_portal_destination(pos) - minetest.after(2, check_and_build_end_portal_destination, pos) - elseif not n then - minetest.after(1, check_and_build_end_portal_destination, pos) - end - end - - build_end_portal_destination(platform_pos) - check_and_build_end_portal_destination(platform_pos) - - target = table.copy(platform_pos) - target.y = target.y + 1 - end - - -- Teleport - obj:set_pos(target) - - if obj:is_player() then - -- Look towards the main End island - if dim ~= "end" then - obj:set_look_horizontal(math.pi/2) - -- Show credits - else - mcl_credits.show(obj) - end - mcl_worlds.dimension_change(obj, mcl_worlds.pos_to_dimension(target)) - minetest.sound_play("mcl_portals_teleport", {pos=target, gain=0.5, max_hear_distance = 16}, true) - end -end - -function mcl_portals.end_portal_teleport(pos, node) - for _,obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do - local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel - if obj:is_player() or lua_entity then - local objpos = obj:get_pos() - if objpos == nil then - return - end - - -- Check if object is actually in portal. - objpos.y = math.ceil(objpos.y) - if minetest.get_node(objpos).name ~= "mcl_portals:portal_end" then - return - end - - mcl_portals.end_teleport(obj, objpos) - - end - end -end - -minetest.register_abm({ - label = "End portal teleportation", - nodenames = {"mcl_portals:portal_end"}, - interval = 0.1, - chance = 1, - action = mcl_portals.end_portal_teleport, -}) - -local rotate_frame, rotate_frame_eye - -if minetest.get_modpath("screwdriver") then - -- Intentionally not rotatable - rotate_frame = false - rotate_frame_eye = false -end - -local function after_place_node(pos, placer, itemstack, pointed_thing) - local node = minetest.get_node(pos) - if node then - node.param2 = (node.param2+2) % 4 - minetest.swap_node(pos, node) - - local ok, ppos = check_end_portal_frame(pos) - if ok then - -- Epic 'portal open' sound effect that can be heard everywhere - minetest.sound_play("mcl_portals_open_end_portal", {gain=0.8}, true) - end_portal_area(ppos) - end - end -end - -minetest.register_node("mcl_portals:end_portal_frame", { - description = S("End Portal Frame"), - _tt_help = S("Used to construct end portals"), - _doc_items_longdesc = S("End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.") .. "\n" .. S("NOTE: The End dimension is currently incomplete and might change in future versions."), - _doc_items_usagehelp = S("To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.") .. "\n" .. S("Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.") .. "\n" .. S("Once placed, an eye of ender can not be taken back."), - groups = { creative_breakable = 1, deco_block = 1, end_portal_frame = 1 }, - tiles = { "mcl_portals_endframe_top.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_side.png" }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 5/16, 0.5 }, - }, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype = "light", - sunlight_propagates = false, - light_source = 1, - - on_rotate = rotate_frame, - - after_place_node = after_place_node, - - _mcl_blast_resistance = 36000000, - _mcl_hardness = -1, -}) - -minetest.register_node("mcl_portals:end_portal_frame_eye", { - description = S("End Portal Frame with Eye of Ender"), - _tt_help = S("Used to construct end portals"), - _doc_items_create_entry = false, - groups = { creative_breakable = 1, deco_block = 1, comparator_signal = 15, end_portal_frame = 2, not_in_creative_inventory = 1 }, - tiles = { "mcl_portals_endframe_top.png^[lowpart:75:mcl_portals_endframe_eye.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_eye.png^mcl_portals_endframe_side.png" }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 5/16, 0.5 }, -- Frame - { -4/16, 5/16, -4/16, 4/16, 0.5, 4/16 }, -- Eye - }, - }, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype = "light", - sunlight_propagates = false, - light_source = 1, - on_destruct = function(pos) - local ok, ppos = check_end_portal_frame(pos) - if ok then - end_portal_area(ppos, true) - end - end, - - on_rotate = rotate_frame_eye, - - after_place_node = after_place_node, - - _mcl_blast_resistance = 36000000, - _mcl_hardness = -1, -}) - -if has_doc then - doc.add_entry_alias("nodes", "mcl_portals:end_portal_frame", "nodes", "mcl_portals:end_portal_frame_eye") -end - - ---[[ ITEM OVERRIDES ]] - --- Portal opener -minetest.override_item("mcl_end:ender_eye", { - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - - -- Place eye of ender into end portal frame - if pointed_thing.under and node.name == "mcl_portals:end_portal_frame" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_portals:end_portal_frame_eye", param2 = node.param2 }) - - if has_doc then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:end_portal_frame") - end - minetest.sound_play( - "default_place_node_hard", - {pos = pointed_thing.under, gain = 0.5, max_hear_distance = 16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item() -- 1 use - end - - local ok, ppos = check_end_portal_frame(pointed_thing.under) - if ok then - -- Epic 'portal open' sound effect that can be heard everywhere - minetest.sound_play("mcl_portals_open_end_portal", {gain=0.8}, true) - end_portal_area(ppos) - if has_doc then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal_end") - end - end - end - return itemstack - end, -}) diff --git a/mods/ITEMS/mcl_portals/portal_gateway.lua b/mods/ITEMS/mcl_portals/portal_gateway.lua deleted file mode 100644 index ca15a61d5..000000000 --- a/mods/ITEMS/mcl_portals/portal_gateway.lua +++ /dev/null @@ -1,121 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local storage = mcl_portals.storage - -local vector = vector - -local gateway_positions = { - {x = 96, y = -26925, z = 0}, - {x = 91, y = -26925, z = 29}, - {x = 77, y = -26925, z = 56}, - {x = 56, y = -26925, z = 77}, - {x = 29, y = -26925, z = 91}, - {x = 0, y = -26925, z = 96}, - {x = -29, y = -26925, z = 91}, - {x = -56, y = -26925, z = 77}, - {x = -77, y = -26925, z = 56}, - {x = -91, y = -26925, z = 29}, - {x = -96, y = -26925, z = 0}, - {x = -91, y = -26925, z = -29}, - {x = -77, y = -26925, z = -56}, - {x = -56, y = -26925, z = -77}, - {x = -29, y = -26925, z = -91}, - {x = 0, y = -26925, z = -96}, - {x = 29, y = -26925, z = -91}, - {x = 56, y = -26925, z = -77}, - {x = 77, y = -26925, z = -56}, - {x = 91, y = -26925, z = -29}, -} - -local path_gateway_portal = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_gateway_portal.mts" - -local function spawn_gateway_portal(pos, dest_str) - return mcl_structures.place_schematic(vector.add(pos, vector.new(-1, -2, -1)), path_gateway_portal, "0", nil, true, nil, dest_str and function() - minetest.get_meta(pos):set_string("mcl_portals:gateway_destination", dest_str) - end) -end - -function mcl_portals.spawn_gateway_portal() - local id = storage:get_int("gateway_last_id") + 1 - local pos = gateway_positions[id] - if not pos then return end - storage:set_int("gateway_last_id", id) - spawn_gateway_portal(pos) -end - -local gateway_def = table.copy(minetest.registered_nodes["mcl_portals:portal_end"]) -gateway_def.description = S("End Gateway Portal") -gateway_def._tt_help = S("Used to construct end gateway portals") -gateway_def._doc_items_longdesc = S("An End gateway portal teleports creatures and objects to the outer End (and back!).") -gateway_def._doc_items_usagehelp = S("Throw an ender pearl into the portal to teleport. Entering an Gateway portal near the Overworld teleports you to the outer End. At this destination another gateway portal will be constructed, which you can use to get back.") -gateway_def.after_destruct = nil -gateway_def.drawtype = "normal" -gateway_def.node_box = nil -gateway_def.walkable = true -gateway_def.tiles[3] = nil -minetest.register_node("mcl_portals:portal_gateway", gateway_def) - -local function find_destination_pos(minp, maxp) - for y = maxp.y, minp.y, -1 do - for x = maxp.x, minp.x, -1 do - for z = maxp.z, minp.z, -1 do - local pos = vector.new(x, y, z) - local nn = minetest.get_node(pos).name - if nn ~= "ignore" and nn ~= "mcl_portals:portal_gateway" and nn ~= "mcl_core:bedrock" then - local def = minetest.registered_nodes[nn] - if def and def.walkable then - return vector.add(pos, vector.new(0, 1.5, 0)) - end - end - end - end - end -end - -local preparing = {} - -local function teleport(pos, obj) - local meta = minetest.get_meta(pos) - local dest_portal - local dest_str = meta:get_string("mcl_portals:gateway_destination") - local pos_str = minetest.pos_to_string(pos) - if dest_str == "" then - dest_portal = vector.multiply(vector.direction(vector.new(0, pos.y, 0), pos), math.random(768, 1024)) - dest_portal.y = -26970 - spawn_gateway_portal(dest_portal, pos_str) - meta:set_string("mcl_portals:gateway_destination", minetest.pos_to_string(dest_portal)) - else - dest_portal = minetest.string_to_pos(dest_str) - end - local minp = vector.subtract(dest_portal, vector.new(5, 40, 5)) - local maxp = vector.add(dest_portal, vector.new(5, 10, 5)) - preparing[pos_str] = true - minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining, param) - if calls_remaining < 1 then - if obj and obj:is_player() or obj:get_luaentity() then - obj:set_pos(find_destination_pos(minp, maxp) or vector.add(dest_portal, vector.new(0, 3.5, 0))) - end - preparing[pos_str] = false - end - end) -end - -minetest.register_abm({ - label = "End gateway portal teleportation", - nodenames = {"mcl_portals:portal_gateway"}, - interval = 0.1, - chance = 1, - action = function(pos) - if preparing[minetest.pos_to_string(pos)] then return end - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do - if obj:get_hp() > 0 then - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_throwing:ender_pearl" then - obj:remove() - obj = luaentity._thrower - end - teleport(pos, obj) - return - end - end - end, -}) diff --git a/mods/ITEMS/mcl_portals/portal_nether.lua b/mods/ITEMS/mcl_portals/portal_nether.lua deleted file mode 100644 index 0d93e11d1..000000000 --- a/mods/ITEMS/mcl_portals/portal_nether.lua +++ /dev/null @@ -1,875 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local SCAN_2_MAP_CHUNKS = true -- slower but helps to find more suitable places - --- Localize functions for better performance -local abs = math.abs -local ceil = math.ceil -local floor = math.floor -local max = math.max -local min = math.min -local random = math.random -local dist = vector.distance -local add = vector.add -local mul = vector.multiply -local sub = vector.subtract - --- Setup -local W_MIN, W_MAX = 4, 23 -local H_MIN, H_MAX = 5, 23 -local N_MIN, N_MAX = 6, (W_MAX-2) * (H_MAX-2) -local TRAVEL_X, TRAVEL_Y, TRAVEL_Z = 8, 1, 8 -local LIM_MIN, LIM_MAX = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max -local PLAYER_COOLOFF, MOB_COOLOFF = 3, 14 -- for this many seconds they won't teleported again -local TOUCH_CHATTER_TIME = 1 -- prevent multiple teleportation attempts caused by multiple portal touches, for this number of seconds -local CHATTER_US = TOUCH_CHATTER_TIME * 1000000 -local DELAY = 3 -- seconds before teleporting in Nether portal in Survival mode (4 minus ABM interval time) -local DISTANCE_MAX = 128 -local PORTAL = "mcl_portals:portal" -local OBSIDIAN = "mcl_core:obsidian" -local O_Y_MIN, O_Y_MAX = max(mcl_vars.mg_overworld_min, -31), min(mcl_vars.mg_overworld_max, 2048) -local N_Y_MIN, N_Y_MAX = mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_top_min - H_MIN - --- Alpha and particles -local node_particles_allowed = minetest.settings:get("mcl_node_particles") or "none" -local node_particles_levels = { none=0, low=1, medium=2, high=3 } -local PARTICLES = node_particles_levels[node_particles_allowed] - --- Table of objects (including players) which recently teleported by a --- Nether portal. Those objects have a brief cooloff period before they --- can teleport again. This prevents annoying back-and-forth teleportation. -local cooloff = {} -function mcl_portals.nether_portal_cooloff(object) - return cooloff[object] -end - -local chatter = {} - -local queue = {} -local chunks = {} - -local storage = mcl_portals.storage -local exits = {} -local keys = minetest.deserialize(storage:get_string("nether_exits_keys") or "return {}") or {} -for _, key in pairs(keys) do - local n = tonumber(key) - if n then - exits[key] = minetest.deserialize(storage:get_string("nether_exits_"..key) or "return {}") or {} - end -end -minetest.register_on_shutdown(function() - local keys={} - for key, data in pairs(exits) do - storage:set_string("nether_exits_"..tostring(key), minetest.serialize(data)) - keys[#keys+1] = key - end - storage:set_string("nether_exits_keys", minetest.serialize(keys)) -end) - -local get_node = mcl_vars.get_node -local set_node = minetest.set_node -local registered_nodes = minetest.registered_nodes -local is_protected = minetest.is_protected -local find_nodes_in_area = minetest.find_nodes_in_area -local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air -local log = minetest.log -local pos_to_string = minetest.pos_to_string -local is_area_protected = minetest.is_area_protected -local get_us_time = minetest.get_us_time - -local dimension_to_teleport = { nether = "overworld", overworld = "nether" } - -local limits = { - nether = { - pmin = {x=LIM_MIN, y = N_Y_MIN, z = LIM_MIN}, - pmax = {x=LIM_MAX, y = N_Y_MAX, z = LIM_MAX}, - }, - overworld = { - pmin = {x=LIM_MIN, y = O_Y_MIN, z = LIM_MIN}, - pmax = {x=LIM_MAX, y = O_Y_MAX, z = LIM_MAX}, - }, -} - --- This function registers exits from Nether portals. --- Incoming verification performed: two nodes must be portal nodes, and an obsidian below them. --- If the verification passes - position adds to the table and saves to mod storage on exit. -local function add_exit(p) - if not p or not p.y or not p.z or not p.x then return end - local x, y, z = floor(p.x), floor(p.y), floor(p.z) - local p = {x = x, y = y, z = z} - if get_node({x=x,y=y-1,z=z}).name ~= OBSIDIAN or get_node(p).name ~= PORTAL or get_node({x=x,y=y+1,z=z}).name ~= PORTAL then return end - local k = floor(z/256) * 256 + floor(x/256) - if not exits[k] then - exits[k]={} - end - local e = exits[k] - for i = 1, #e do - local t = e[i] - if t and t.x == p.x and t.y == p.y and t.z == p.z then - return - end - end - e[#e+1] = p - log("action", "[mcl_portals] Exit added at " .. pos_to_string(p)) -end - --- This function removes Nether portals exits. -local function remove_exit(p) - if not p or not p.y or not p.z or not p.x then return end - local x, y, z = floor(p.x), floor(p.y), floor(p.z) - local k = floor(z/256) * 256 + floor(x/256) - if not exits[k] then return end - local p = {x = x, y = y, z = z} - local e = exits[k] - if e then - for i, t in pairs(e) do - if t and t.x == x and t.y == y and t.z == z then - e[i] = nil - log("action", "[mcl_portals] Nether portal removed from " .. pos_to_string(p)) - return - end - end - end -end - --- This functon searches Nether portal nodes whitin distance specified -local function find_exit(p, dx, dy, dz) - if not p or not p.y or not p.z or not p.x then return end - local dx, dy, dz = dx or DISTANCE_MAX, dy or DISTANCE_MAX, dz or DISTANCE_MAX - if dx < 1 or dy < 1 or dz < 1 then return false end - - --y values aren't used - local x = floor(p.x) - --local y = floor(p.y) - local z = floor(p.z) - - local x1 = x-dx+1 - --local y1 = y-dy+1 - local z1 = z-dz+1 - - local x2 = x+dx-1 - --local y2 = y+dy-1 - local z2 = z+dz-1 - - local k1x, k2x = floor(x1/256), floor(x2/256) - local k1z, k2z = floor(z1/256), floor(z2/256) - - local t, d - for kx = k1x, k2x do for kz = k1z, k2z do - local k = kz*256 + kx - local e = exits[k] - if e then - for _, t0 in pairs(e) do - local d0 = dist(p, t0) - if not d or d>d0 then - d = d0 - t = t0 - if d==0 then return t end - end - end - end - end end - - if t and abs(t.x-p.x) <= dx and abs(t.y-p.y) <= dy and abs(t.z-p.z) <= dz then - return t - end -end - - --- Ping-Pong the coordinate for Fast Travelling, https://git.minetest.land/Wuzzy/MineClone2/issues/795#issuecomment-11058 -local function ping_pong(x, m, l1, l2) - if x < 0 then - return l1 + abs(((x*m+l1) % (l1*4)) - (l1*2)), floor(x*m/l1/2) + ((ceil(x*m/l1)+1)%2) * ((x*m)%l1)/l1 - end - return l2 - abs(((x*m+l2) % (l2*4)) - (l2*2)), floor(x*m/l2/2) + (floor(x*m/l2)%2) * ((x*m)%l2)/l2 -end - -local function get_target(p) - if p and p.y and p.x and p.z then - local x, z = p.x, p.z - local y, d = mcl_worlds.y_to_layer(p.y) - local o1, o2 -- y offset - if y then - if d=="nether" then - x, o1 = ping_pong(x, TRAVEL_X, LIM_MIN, LIM_MAX) - z, o2 = ping_pong(z, TRAVEL_Z, LIM_MIN, LIM_MAX) - y = floor(y * TRAVEL_Y + (o1+o2) / 16 * LIM_MAX) - y = min(max(y + O_Y_MIN, O_Y_MIN), O_Y_MAX) - elseif d=="overworld" then - x, y, z = floor(x / TRAVEL_X + 0.5), floor(y / TRAVEL_Y + 0.5), floor(z / TRAVEL_Z + 0.5) - y = min(max(y + N_Y_MIN, N_Y_MIN), N_Y_MAX) - end - return {x=x, y=y, z=z}, d - end - end -end - --- Destroy a nether portal. Connected portal nodes are searched and removed --- using 'bulk_set_node'. This function is called from 'after_destruct' of --- nether portal nodes. The flag 'destroying_portal' is used to avoid this --- function being called recursively through callbacks in 'bulk_set_node'. -local destroying_portal = false -local function destroy_nether_portal(pos, node) - if destroying_portal then - return - end - destroying_portal = true - - local orientation = node.param2 - local checked_tab = { [minetest.hash_node_position(pos)] = true } - local nodes = { pos } - - local function check_remove(pos) - local h = minetest.hash_node_position(pos) - if checked_tab[h] then - return - end - - local node = minetest.get_node(pos) - if node and node.name == PORTAL and (orientation == nil or node.param2 == orientation) then - table.insert(nodes, pos) - checked_tab[h] = true - end - end - - local i = 1 - while i <= #nodes do - pos = nodes[i] - if orientation == 0 then - check_remove({x = pos.x - 1, y = pos.y, z = pos.z}) - check_remove({x = pos.x + 1, y = pos.y, z = pos.z}) - else - check_remove({x = pos.x, y = pos.y, z = pos.z - 1}) - check_remove({x = pos.x, y = pos.y, z = pos.z + 1}) - end - check_remove({x = pos.x, y = pos.y - 1, z = pos.z}) - check_remove({x = pos.x, y = pos.y + 1, z = pos.z}) - remove_exit(pos) - i = i + 1 - end - - minetest.bulk_set_node(nodes, { name = "air" }) - destroying_portal = false -end - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.disallow -end - -minetest.register_node(PORTAL, { - description = S("Nether Portal"), - _doc_items_longdesc = S("A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!"), - _doc_items_usagehelp = S("Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion."), - - tiles = { - "blank.png", - "blank.png", - "blank.png", - "blank.png", - { - name = "mcl_portals_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.25, - }, - }, - { - name = "mcl_portals_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.25, - }, - }, - }, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - walkable = false, - buildable_to = false, - is_ground_content = false, - drop = "", - light_source = 11, - post_effect_color = {a = 180, r = 51, g = 7, b = 89}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.1, 0.5, 0.5, 0.1}, - }, - }, - groups = { creative_breakable = 1, portal = 1, not_in_creative_inventory = 1 }, - sounds = mcl_sounds.node_sound_glass_defaults(), - after_destruct = destroy_nether_portal, - on_rotate = on_rotate, - - _mcl_hardness = -1, - _mcl_blast_resistance = 0, -}) - -local function light_frame(x1, y1, z1, x2, y2, z2, name, node, node_frame) - local orientation = 0 - if x1 == x2 then - orientation = 1 - end - local pos = {} - local node = node or {name = PORTAL, param2 = orientation} - local node_frame = node_frame or {name = OBSIDIAN} - for x = x1 - 1 + orientation, x2 + 1 - orientation do - pos.x = x - for z = z1 - orientation, z2 + orientation do - pos.z = z - for y = y1 - 1, y2 + 1 do - pos.y = y - local frame = (x < x1) or (x > x2) or (y < y1) or (y > y2) or (z < z1) or (z > z2) - if frame then - set_node(pos, node_frame) - else - set_node(pos, node) - add_exit({x=pos.x, y=pos.y-1, z=pos.z}) - end - end - end - end -end - ---Build arrival portal -function build_nether_portal(pos, width, height, orientation, name, clear_before_build) - local width, height, orientation = width or W_MIN - 2, height or H_MIN - 2, orientation or random(0, 1) - - if clear_before_build then - light_frame(pos.x, pos.y, pos.z, pos.x + (1 - orientation) * (width - 1), pos.y + height - 1, pos.z + orientation * (width - 1), name, {name="air"}, {name="air"}) - end - light_frame(pos.x, pos.y, pos.z, pos.x + (1 - orientation) * (width - 1), pos.y + height - 1, pos.z + orientation * (width - 1), name) - - -- Build obsidian platform: - for x = pos.x - orientation, pos.x + orientation + (width - 1) * (1 - orientation), 1 + orientation do - for z = pos.z - 1 + orientation, pos.z + 1 - orientation + (width - 1) * orientation, 2 - orientation do - local pp = {x = x, y = pos.y - 1, z = z} - local pp_1 = {x = x, y = pos.y - 2, z = z} - local nn = get_node(pp).name - local nn_1 = get_node(pp_1).name - if ((nn=="air" and nn_1 == "air") or not registered_nodes[nn].is_ground_content) and not is_protected(pp, name) then - set_node(pp, {name = OBSIDIAN}) - end - end - end - - log("action", "[mcl_portals] Destination Nether portal generated at "..pos_to_string(pos).."!") - - return pos -end - -function mcl_portals.spawn_nether_portal(pos, rot, pr, name) - if not pos then return end - local o = 0 - if rot then - if rot == "270" or rot=="90" then - o = 1 - elseif rot == "random" then - o = random(0,1) - end - end - build_nether_portal(pos, nil, nil, o, name, true) -end - --- Teleportation cooloff for some seconds, to prevent back-and-forth teleportation -local function stop_teleport_cooloff(o) - cooloff[o] = nil - chatter[o] = nil -end - -local function teleport_cooloff(obj) - cooloff[obj] = true - if obj:is_player() then - minetest.after(PLAYER_COOLOFF, stop_teleport_cooloff, obj) - else - minetest.after(MOB_COOLOFF, stop_teleport_cooloff, obj) - end -end - -local function finalize_teleport(obj, exit) - if not obj or not exit or not exit.x or not exit.y or not exit.z then return end - - local objpos = obj:get_pos() - if not objpos then return end - - local is_player = obj:is_player() - local name - if is_player then - name = obj:get_player_name() - end - local _, dim = mcl_worlds.y_to_layer(exit.y) - - - -- If player stands, player is at ca. something+0.5 which might cause precision problems, so we used ceil for objpos.y - objpos = {x = floor(objpos.x+0.5), y = ceil(objpos.y), z = floor(objpos.z+0.5)} - if get_node(objpos).name ~= PORTAL then return end - - -- THIS IS A TEMPORATY CODE SECTION FOR COMPATIBILITY REASONS -- 1 of 2 -- TODO: Remove -- - -- Old worlds have no exits indexed - adding the exit to return here: - add_exit(objpos) - -- TEMPORATY CODE SECTION ENDS HERE -- - - - -- Enable teleportation cooloff for some seconds, to prevent back-and-forth teleportation - teleport_cooloff(obj) - - -- Teleport - obj:set_pos(exit) - - if is_player then - mcl_worlds.dimension_change(obj, dim) - minetest.sound_play("mcl_portals_teleport", {pos=exit, gain=0.5, max_hear_distance = 16}, true) - log("action", "[mcl_portals] player "..name.." teleported to Nether portal at "..pos_to_string(exit)..".") - else - log("action", "[mcl_portals] entity teleported to Nether portal at "..pos_to_string(exit)..".") - end -end - -local function create_portal_2(pos1, name, obj) - local orientation = 0 - local pos2 = {x = pos1.x + 3, y = pos1.y + 3, z = pos1.z + 3} - local nodes = find_nodes_in_area(pos1, pos2, {"air"}) - if #nodes == 64 then - orientation = random(0,1) - else - pos2.x = pos2.x - 1 - nodes = find_nodes_in_area(pos1, pos2, {"air"}) - if #nodes == 48 then - orientation = 1 - end - end - local exit = build_nether_portal(pos1, W_MIN-2, H_MIN-2, orientation, name) - finalize_teleport(obj, exit) - local cn = mcl_vars.get_chunk_number(pos1) - chunks[cn] = nil - if queue[cn] then - for next_obj, _ in pairs(queue[cn]) do - if next_obj ~= obj then - finalize_teleport(next_obj, exit) - end - end - queue[cn] = nil - end -end - -local function get_lava_level(pos, pos1, pos2) - if pos.y > -1000 then - return max(min(mcl_vars.mg_lava_overworld_max, pos2.y-1), pos1.y+1) - end - return max(min(mcl_vars.mg_lava_nether_max, pos2.y-1), pos1.y+1) -end - -local function ecb_scan_area_2(blockpos, action, calls_remaining, param) - if calls_remaining and calls_remaining > 0 then return end - local pos, pos1, pos2, name, obj = param.pos, param.pos1, param.pos2, param.name or "", param.obj - local pos0, distance - local lava = get_lava_level(pos, pos1, pos2) - - -- THIS IS A TEMPORATY CODE SECTION FOR COMPATIBILITY REASONS -- 2 of 2 -- TODO: Remove -- - -- Find portals for old worlds (new worlds keep them all in the table): - local portals = find_nodes_in_area(pos1, pos2, {PORTAL}) - if portals and #portals>0 then - for _, p in pairs(portals) do - add_exit(p) - end - local exit = find_exit(pos) - if exit then - finalize_teleport(obj, exit) - end - return - end - -- TEMPORATY CODE SECTION ENDS HERE -- - - - local nodes = find_nodes_in_area_under_air(pos1, pos2, {"group:building_block"}) - if nodes then - local nc = #nodes - log("action", "[mcl_portals] Area for destination Nether portal emerged! Found " .. tostring(nc) .. " nodes under the air around "..pos_to_string(pos)) - if nc > 0 then - for i=1,nc do - local node = nodes[i] - local node1 = {x=node.x, y=node.y+1, z=node.z } - local node2 = {x=node.x+2, y=node.y+3, z=node.z+2} - local nodes2 = find_nodes_in_area(node1, node2, {"air"}) - if nodes2 then - local nc2 = #nodes2 - if nc2 == 27 and not is_area_protected(node, node2, name) then - local distance0 = dist(pos, node) - if distance0 < 2 then - log("action", "[mcl_portals] found space at pos "..pos_to_string(node).." - creating a portal") - create_portal_2(node1, name, obj) - return - end - if not distance or (distance0 < distance) or (distance0 < distance-1 and node.y > lava and pos0.y < lava) then - log("verbose", "[mcl_portals] found distance "..tostring(distance0).." at pos "..pos_to_string(node)) - distance = distance0 - pos0 = {x=node1.x, y=node1.y, z=node1.z} - end - end - end - end - end - end - if distance then -- several nodes of air might be better than lava lake, right? - log("action", "[mcl_portals] using backup pos "..pos_to_string(pos0).." to create a portal") - create_portal_2(pos0, name, obj) - return - end - - if param.next_chunk_1 and param.next_chunk_2 and param.next_pos then - local pos1, pos2, p = param.next_chunk_1, param.next_chunk_2, param.next_pos - if p.x >= pos1.x and p.x <= pos2.x and p.y >= pos1.y and p.y <= pos2.y and p.z >= pos1.z and p.z <= pos2.z then - log("action", "[mcl_portals] Making additional search in chunk below, because current one doesn't contain any air space for portal, target pos "..pos_to_string(p)) - minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = p, pos1 = pos1, pos2 = pos2, name=name, obj=obj}) - return - end - end - - log("action", "[mcl_portals] found no space, reverting to target pos "..pos_to_string(pos).." - creating a portal") - if pos.y < lava then - pos.y = lava + 1 - else - pos.y = pos.y + 1 - end - create_portal_2(pos, name, obj) -end - -local function create_portal(pos, limit1, limit2, name, obj) - local cn = mcl_vars.get_chunk_number(pos) - if chunks[cn] then - local q = queue[cn] or {} - q[obj] = true - queue[cn] = q - return - end - chunks[cn] = true - - -- we need to emerge the area here, but currently (mt5.4/mcl20.71) map generation is slow - -- so we'll emerge single chunk only: 5x5x5 blocks, 80x80x80 nodes maximum - -- and maybe one more chunk from below if (SCAN_2_MAP_CHUNKS = true) - - local pos1 = add(mul(mcl_vars.pos_to_chunk(pos), mcl_vars.chunk_size_in_nodes), mcl_vars.central_chunk_offset_in_nodes) - local pos2 = add(pos1, mcl_vars.chunk_size_in_nodes - 1) - - if not SCAN_2_MAP_CHUNKS then - if limit1 and limit1.x and limit1.y and limit1.z then - pos1 = {x = max(min(limit1.x, pos.x), pos1.x), y = max(min(limit1.y, pos.y), pos1.y), z = max(min(limit1.z, pos.z), pos1.z)} - end - if limit2 and limit2.x and limit2.y and limit2.z then - pos2 = {x = min(max(limit2.x, pos.x), pos2.x), y = min(max(limit2.y, pos.y), pos2.y), z = min(max(limit2.z, pos.z), pos2.z)} - end - minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = vector.new(pos), pos1 = pos1, pos2 = pos2, name=name, obj=obj}) - return - end - - -- Basically the copy of code above, with minor additions to continue the search in single additional chunk below: - local next_chunk_1 = {x = pos1.x, y = pos1.y - mcl_vars.chunk_size_in_nodes, z = pos1.z} - local next_chunk_2 = add(next_chunk_1, mcl_vars.chunk_size_in_nodes - 1) - local next_pos = {x = pos.x, y=max(next_chunk_2.y, limit1.y), z = pos.z} - if limit1 and limit1.x and limit1.y and limit1.z then - pos1 = {x = max(min(limit1.x, pos.x), pos1.x), y = max(min(limit1.y, pos.y), pos1.y), z = max(min(limit1.z, pos.z), pos1.z)} - next_chunk_1 = {x = max(min(limit1.x, next_pos.x), next_chunk_1.x), y = max(min(limit1.y, next_pos.y), next_chunk_1.y), z = max(min(limit1.z, next_pos.z), next_chunk_1.z)} - end - if limit2 and limit2.x and limit2.y and limit2.z then - pos2 = {x = min(max(limit2.x, pos.x), pos2.x), y = min(max(limit2.y, pos.y), pos2.y), z = min(max(limit2.z, pos.z), pos2.z)} - next_chunk_2 = {x = min(max(limit2.x, next_pos.x), next_chunk_2.x), y = min(max(limit2.y, next_pos.y), next_chunk_2.y), z = min(max(limit2.z, next_pos.z), next_chunk_2.z)} - end - minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = vector.new(pos), pos1 = pos1, pos2 = pos2, name=name, obj=obj, next_chunk_1 = next_chunk_1, next_chunk_2 = next_chunk_2, next_pos = next_pos}) -end - -local function available_for_nether_portal(p) - local nn = get_node(p).name - local obsidian = nn == OBSIDIAN - if nn ~= "air" and minetest.get_item_group(nn, "fire") ~= 1 then - return false, obsidian - end - return true, obsidian -end - -local function check_and_light_shape(pos, orientation) - local stack = {{x = pos.x, y = pos.y, z = pos.z}} - local node_list = {} - local index_list = {} - local node_counter = 0 - -- Search most low node from the left (pos1) and most right node from the top (pos2) - local pos1 = {x = pos.x, y = pos.y, z = pos.z} - local pos2 = {x = pos.x, y = pos.y, z = pos.z} - - local kx, ky, kz = pos.x - 1999, pos.y - 1999, pos.z - 1999 - while #stack > 0 do - local i = #stack - local x, y, z = stack[i].x, stack[i].y, stack[i].z - local k = (x-kx)*16000000 + (y-ky)*4000 + z-kz - if index_list[k] then - stack[i] = nil -- Already checked, skip it - else - local good, obsidian = available_for_nether_portal(stack[i]) - if obsidian then - stack[i] = nil - else - if (not good) or (node_counter >= N_MAX) then - return false - end - node_counter = node_counter + 1 - node_list[node_counter] = {x = x, y = y, z = z} - index_list[k] = true - stack[i].y = y - 1 - stack[i + 1] = {x = x, y = y + 1, z = z} - if orientation == 0 then - stack[i + 2] = {x = x - 1, y = y, z = z} - stack[i + 3] = {x = x + 1, y = y, z = z} - else - stack[i + 2] = {x = x, y = y, z = z - 1} - stack[i + 3] = {x = x, y = y, z = z + 1} - end - if (y < pos1.y) or (y == pos1.y and (x < pos1.x or z < pos1.z)) then - pos1 = {x = x, y = y, z = z} - end - if (x > pos2.x or z > pos2.z) or (x == pos2.x and z == pos2.z and y > pos2.y) then - pos2 = {x = x, y = y, z = z} - end - end - end - end - - if node_counter < N_MIN then - return false - end - - -- Limit rectangles width and height - if abs(pos2.x - pos1.x + pos2.z - pos1.z) + 3 > W_MAX or abs(pos2.y - pos1.y) + 3 > H_MAX then - return false - end - - for i = 1, node_counter do - local node_pos = node_list[i] - minetest.set_node(node_pos, {name = PORTAL, param2 = orientation}) - add_exit(node_pos) - end - return true -end - --- Attempts to light a Nether portal at pos --- Pos can be any of the inner part. --- The frame MUST be filled only with air or any fire, which will be replaced with Nether portal blocks. --- If no Nether portal can be lit, nothing happens. --- Returns true if portal created -function mcl_portals.light_nether_portal(pos) - -- Only allow to make portals in Overworld and Nether - local dim = mcl_worlds.pos_to_dimension(pos) - if dim ~= "overworld" and dim ~= "nether" then - return false - end - local orientation = random(0, 1) - for orientation_iteration = 1, 2 do - if check_and_light_shape(pos, orientation) then - return true - end - orientation = 1 - orientation - end - return false -end - --- Teleport function -local function teleport_no_delay(obj, pos) - local is_player = obj:is_player() - if (not is_player and not obj:get_luaentity()) or cooloff[obj] then return end - - local objpos = obj:get_pos() - if not objpos then return end - - -- If player stands, player is at ca. something+0.5 which might cause precision problems, so we used ceil for objpos.y - objpos = {x = floor(objpos.x+0.5), y = ceil(objpos.y), z = floor(objpos.z+0.5)} - if get_node(objpos).name ~= PORTAL then return end - - local target, dim = get_target(objpos) - if not target then return end - - local name - if is_player then - name = obj:get_player_name() - end - - local exit = find_exit(target) - if exit then - finalize_teleport(obj, exit) - else - dim = dimension_to_teleport[dim] - -- need to create arrival portal - create_portal(target, limits[dim].pmin, limits[dim].pmax, name, obj) - end -end - -local function prevent_portal_chatter(obj) - local time_us = get_us_time() - local ch = chatter[obj] or 0 - chatter[obj] = time_us - minetest.after(TOUCH_CHATTER_TIME, function(o) - if o and chatter[o] and get_us_time() - chatter[o] >= CHATTER_US then - chatter[o] = nil - end - end, obj) - return time_us - ch > CHATTER_US -end - -local function animation(player, playername) - local ch = chatter[player] or 0 - if cooloff[player] or get_us_time() - ch < CHATTER_US then - local pos = player:get_pos() - if not pos then - return - end - minetest.add_particlespawner({ - amount = 1, - minpos = {x = pos.x - 0.1, y = pos.y + 1.4, z = pos.z - 0.1}, - maxpos = {x = pos.x + 0.1, y = pos.y + 1.6, z = pos.z + 0.1}, - minvel = 0, - maxvel = 0, - minacc = 0, - maxacc = 0, - minexptime = 0.1, - maxexptime = 0.2, - minsize = 5, - maxsize = 15, - collisiondetection = false, - texture = "mcl_particles_nether_portal_t.png", - playername = playername, - }) - minetest.after(0.3, animation, player, playername) - end -end - -local function teleport(obj, portal_pos) - local name = "" - if obj:is_player() then - name = obj:get_player_name() - animation(obj, name) - end - - if cooloff[obj] then return end - - if minetest.is_creative_enabled(name) then - teleport_no_delay(obj, portal_pos) - return - end - - minetest.after(DELAY, teleport_no_delay, obj, portal_pos) -end - -minetest.register_abm({ - label = "Nether portal teleportation and particles", - nodenames = {PORTAL}, - interval = 1, - chance = 1, - action = function(pos, node) - local o = node.param2 -- orientation - local d = random(0, 1) -- direction - local time = random() * 1.9 + 0.5 - local velocity, acceleration - if o == 1 then - velocity = {x = random() * 0.7 + 0.3, y = random() - 0.5, z = random() - 0.5} - acceleration = {x = random() * 1.1 + 0.3, y = random() - 0.5, z = random() - 0.5} - else - velocity = {x = random() - 0.5, y = random() - 0.5, z = random() * 0.7 + 0.3} - acceleration = {x = random() - 0.5, y = random() - 0.5, z = random() * 1.1 + 0.3} - end - local distance = add(mul(velocity, time), mul(acceleration, time * time / 2)) - if d == 1 then - if o == 1 then - distance.x = -distance.x - velocity.x = -velocity.x - acceleration.x = -acceleration.x - else - distance.z = -distance.z - velocity.z = -velocity.z - acceleration.z = -acceleration.z - end - end - distance = sub(pos, distance) - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 15)) do - if obj:is_player() then - minetest.add_particlespawner({ - amount = PARTICLES + 1, - minpos = distance, - maxpos = distance, - minvel = velocity, - maxvel = velocity, - minacc = acceleration, - maxacc = acceleration, - minexptime = time, - maxexptime = time, - minsize = 0.3, - maxsize = 1.8, - collisiondetection = false, - texture = "mcl_particles_nether_portal.png", - playername = obj:get_player_name(), - }) - end - end - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do --maikerumine added for objects to travel - local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel - if (obj:is_player() or lua_entity) and prevent_portal_chatter(obj) then - teleport(obj, pos) - end - end - end, -}) - - ---[[ ITEM OVERRIDES ]] - -local longdesc = registered_nodes[OBSIDIAN]._doc_items_longdesc -longdesc = longdesc .. "\n" .. S("Obsidian is also used as the frame of Nether portals.") -local usagehelp = S("To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.") - -minetest.override_item(OBSIDIAN, { - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - after_destruct = function(pos, node) - local function check_remove(pos, orientation) - local node = get_node(pos) - if node and node.name == PORTAL then - minetest.remove_node(pos) - end - end - - -- check each of 6 sides of it and destroy every portal - check_remove({x = pos.x - 1, y = pos.y, z = pos.z}) - check_remove({x = pos.x + 1, y = pos.y, z = pos.z}) - check_remove({x = pos.x, y = pos.y, z = pos.z - 1}) - check_remove({x = pos.x, y = pos.y, z = pos.z + 1}) - check_remove({x = pos.x, y = pos.y - 1, z = pos.z}) - check_remove({x = pos.x, y = pos.y + 1, z = pos.z}) - end, - - _on_ignite = function(user, pointed_thing) - local x, y, z = pointed_thing.under.x, pointed_thing.under.y, pointed_thing.under.z - -- Check empty spaces around obsidian and light all frames found: - local portals_placed = - mcl_portals.light_nether_portal({x = x - 1, y = y, z = z}) or mcl_portals.light_nether_portal({x = x + 1, y = y, z = z}) or - mcl_portals.light_nether_portal({x = x, y = y - 1, z = z}) or mcl_portals.light_nether_portal({x = x, y = y + 1, z = z}) or - mcl_portals.light_nether_portal({x = x, y = y, z = z - 1}) or mcl_portals.light_nether_portal({x = x, y = y, z = z + 1}) - if portals_placed then - log("action", "[mcl_portals] Nether portal activated at "..pos_to_string({x=x,y=y,z=z})..".") - if minetest.get_modpath("doc") then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", PORTAL) - - -- Achievement for finishing a Nether portal TO the Nether - local dim = mcl_worlds.pos_to_dimension({x=x, y=y, z=z}) - if minetest.get_modpath("awards") and dim ~= "nether" and user:is_player() then - awards.unlock(user:get_player_name(), "mcl:buildNetherPortal") - end - end - return true - else - return false - end - end, -}) diff --git a/mods/ITEMS/mcl_portals/sounds/mcl_portals_open_end_portal.ogg b/mods/ITEMS/mcl_portals/sounds/mcl_portals_open_end_portal.ogg deleted file mode 100644 index 82311b3dc..000000000 Binary files a/mods/ITEMS/mcl_portals/sounds/mcl_portals_open_end_portal.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/sounds/mcl_portals_teleport.ogg b/mods/ITEMS/mcl_portals/sounds/mcl_portals_teleport.ogg deleted file mode 100644 index 1d64c451b..000000000 Binary files a/mods/ITEMS/mcl_portals/sounds/mcl_portals_teleport.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal.png b/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal.png deleted file mode 100644 index 2837756f6..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal_t.png b/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal_t.png deleted file mode 100644 index 05c508c53..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal_t.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_end_portal.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_end_portal.png deleted file mode 100644 index 46d548e92..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_end_portal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_bottom.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_bottom.png deleted file mode 100644 index 49125a86a..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_eye.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_eye.png deleted file mode 100644 index c1d3a2bb6..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_eye.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_side.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_side.png deleted file mode 100644 index a2370ecef..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_top.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_top.png deleted file mode 100644 index ad2b729ff..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle1.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle1.png deleted file mode 100644 index 6695291eb..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle2.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle2.png deleted file mode 100644 index 99b3a191a..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle3.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle3.png deleted file mode 100644 index 3000a799c..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle4.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle4.png deleted file mode 100644 index 28d14cbd6..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle5.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle5.png deleted file mode 100644 index fbd67375a..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle5.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_portal.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_portal.png deleted file mode 100644 index a47f4f4e3..000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_portal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/README.txt b/mods/ITEMS/mcl_potions/README.txt deleted file mode 100644 index 7ebe4ba6c..000000000 --- a/mods/ITEMS/mcl_potions/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -License information: - -* Code: MIT License -* Textures: See main MineClone 2 README.md file -* Sounds: CC0 diff --git a/mods/ITEMS/mcl_potions/commands.lua b/mods/ITEMS/mcl_potions/commands.lua deleted file mode 100644 index 1fbf591d9..000000000 --- a/mods/ITEMS/mcl_potions/commands.lua +++ /dev/null @@ -1,56 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- ░█████╗░██╗░░██╗░█████╗░████████╗  ░█████╗░░█████╗░███╗░░░███╗███╗░░░███╗░█████╗░███╗░░██╗██████╗░░██████╗ --- ██╔══██╗██║░░██║██╔══██╗╚══██╔══╝  ██╔══██╗██╔══██╗████╗░████║████╗░████║██╔══██╗████╗░██║██╔══██╗██╔════╝ --- ██║░░╚═╝███████║███████║░░░██║░░░  ██║░░╚═╝██║░░██║██╔████╔██║██╔████╔██║███████║██╔██╗██║██║░░██║╚█████╗░ --- ██║░░██╗██╔══██║██╔══██║░░░██║░░░  ██║░░██╗██║░░██║██║╚██╔╝██║██║╚██╔╝██║██╔══██║██║╚████║██║░░██║░╚═══██╗ --- ╚█████╔╝██║░░██║██║░░██║░░░██║░░░  ╚█████╔╝╚█████╔╝██║░╚═╝░██║██║░╚═╝░██║██║░░██║██║░╚███║██████╔╝██████╔╝ --- ░╚════╝░╚═╝░░╚═╝╚═╝░░╚═╝░░░╚═╝░░░  ░╚════╝░░╚════╝░╚═╝░░░░░╚═╝╚═╝░░░░░╚═╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░╚═════╝░ - - -local get_chat_function = {} - -get_chat_function["poison"] = mcl_potions.poison_func -get_chat_function["regeneration"] = mcl_potions.regeneration_func -get_chat_function["invisibility"] = mcl_potions.invisiblility_func -get_chat_function["fire_resistance"] = mcl_potions.fire_resistance_func -get_chat_function["night_vision"] = mcl_potions.night_vision_func -get_chat_function["water_breathing"] = mcl_potions.water_breathing_func -get_chat_function["leaping"] = mcl_potions.leaping_func -get_chat_function["swiftness"] = mcl_potions.swiftness_func -get_chat_function["heal"] = mcl_potions.healing_func - -minetest.register_chatcommand("effect",{ - params = S(" []"), - description = S("Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 = 100%)"), - privs = {server = true}, - func = function(name, params) - - local P = {} - local i = 0 - for str in string.gmatch(params, "([^ ]+)") do - i = i + 1 - P[i] = str - end - - if not P[1] then - return false, S("Missing effect parameter!") - elseif not tonumber(P[2]) then - return false, S("Missing or invalid duration parameter!") - elseif P[3] and not tonumber(P[3]) then - return false, S("Invalid factor parameter!") - end - -- Default factor = 1 - if not P[3] then - P[3] = 1.0 - end - - if get_chat_function[P[1]] then - get_chat_function[P[1]](minetest.get_player_by_name(name), tonumber(P[3]), tonumber(P[2])) - return true - else - return false, S("@1 is not an available status effect.", P[1]) - end - - end, -}) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua deleted file mode 100644 index 2c47d50d1..000000000 --- a/mods/ITEMS/mcl_potions/functions.lua +++ /dev/null @@ -1,986 +0,0 @@ -local EF = {} -EF.invisible = {} -EF.poisoned = {} -EF.regenerating = {} -EF.strong = {} -EF.weak = {} -EF.water_breathing = {} -EF.leaping = {} -EF.swift = {} -- for swiftness AND slowness -EF.night_vision = {} -EF.fire_proof = {} - -local EFFECT_TYPES = 0 -for _,_ in pairs(EF) do - EFFECT_TYPES = EFFECT_TYPES + 1 -end - -local icon_ids = {} - -local function potions_set_hudbar(player) - - if EF.poisoned[player] and EF.regenerating[player] then - hb.change_hudbar(player, "health", nil, nil, "hbhunger_icon_regen_poison.png", nil, "hudbars_bar_health.png") - elseif EF.poisoned[player] then - hb.change_hudbar(player, "health", nil, nil, "hbhunger_icon_health_poison.png", nil, "hudbars_bar_health.png") - elseif EF.regenerating[player] then - hb.change_hudbar(player, "health", nil, nil, "hudbars_icon_regenerate.png", nil, "hudbars_bar_health.png") - else - hb.change_hudbar(player, "health", nil, nil, "hudbars_icon_health.png", nil, "hudbars_bar_health.png") - end - -end - -local function potions_init_icons(player) - local name = player:get_player_name() - icon_ids[name] = {} - for e=1, EFFECT_TYPES do - local x = -52 * e - 2 - local id = player:hud_add({ - hud_elem_type = "image", - text = "blank.png", - position = { x = 1, y = 0 }, - offset = { x = x, y = 3 }, - scale = { x = 3, y = 3 }, - alignment = { x = 1, y = 1 }, - z_index = 100, - }) - table.insert(icon_ids[name], id) - end -end - -local function potions_set_icons(player) - local name = player:get_player_name() - if not icon_ids[name] then - return - end - local active_effects = {} - for effect_name, effect in pairs(EF) do - if effect[player] then - table.insert(active_effects, effect_name) - end - end - - for i=1, EFFECT_TYPES do - local icon = icon_ids[name][i] - local effect_name = active_effects[i] - if effect_name == "swift" and EF.swift[player].is_slow then - effect_name = "slow" - end - if effect_name == nil then - player:hud_change(icon, "text", "blank.png") - else - player:hud_change(icon, "text", "mcl_potions_effect_"..effect_name..".png") - end - end - -end - -local function potions_set_hud(player) - - potions_set_hudbar(player) - potions_set_icons(player) - -end - - --- ███╗░░░███╗░█████╗░██╗███╗░░██╗  ███████╗███████╗███████╗███████╗░█████╗░████████╗ --- ████╗░████║██╔══██╗██║████╗░██║  ██╔════╝██╔════╝██╔════╝██╔════╝██╔══██╗╚══██╔══╝ --- ██╔████╔██║███████║██║██╔██╗██║  █████╗░░█████╗░░█████╗░░█████╗░░██║░░╚═╝░░░██║░░░ --- ██║╚██╔╝██║██╔══██║██║██║╚████║  ██╔══╝░░██╔══╝░░██╔══╝░░██╔══╝░░██║░░██╗░░░██║░░░ --- ██║░╚═╝░██║██║░░██║██║██║░╚███║  ███████╗██║░░░░░██║░░░░░███████╗╚█████╔╝░░░██║░░░ --- ╚═╝░░░░░╚═╝╚═╝░░╚═╝╚═╝╚═╝░░╚══╝  ╚══════╝╚═╝░░░░░╚═╝░░░░░╚══════╝░╚════╝░░░░╚═╝░░░ --- --- ░█████╗░██╗░░██╗███████╗░█████╗░██╗░░██╗███████╗██████╗░ --- ██╔══██╗██║░░██║██╔════╝██╔══██╗██║░██╔╝██╔════╝██╔══██╗ --- ██║░░╚═╝███████║█████╗░░██║░░╚═╝█████═╝░█████╗░░██████╔╝ --- ██║░░██╗██╔══██║██╔══╝░░██║░░██╗██╔═██╗░██╔══╝░░██╔══██╗ --- ╚█████╔╝██║░░██║███████╗╚█████╔╝██║░╚██╗███████╗██║░░██║ --- ░╚════╝░╚═╝░░╚═╝╚══════╝░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝ - -local is_player, entity, meta - -minetest.register_globalstep(function(dtime) - - -- Check for invisible players - for player, vals in pairs(EF.invisible) do - - EF.invisible[player].timer = EF.invisible[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#7F8392") end - - if EF.invisible[player].timer >= EF.invisible[player].dur then - mcl_potions.make_invisible(player, false) - EF.invisible[player] = nil - if player:is_player() then - meta = player:get_meta() - meta:set_string("_is_invisible", minetest.serialize(EF.invisible[player])) - end - potions_set_hud(player) - - end - - end - - -- Check for poisoned players - for player, vals in pairs(EF.poisoned) do - - is_player = player:is_player() - entity = player:get_luaentity() - - EF.poisoned[player].timer = EF.poisoned[player].timer + dtime - EF.poisoned[player].hit_timer = (EF.poisoned[player].hit_timer or 0) + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#4E9331") end - - if EF.poisoned[player].hit_timer >= EF.poisoned[player].step then - if mcl_util.get_hp(player) - 1 > 0 then - mcl_util.deal_damage(player, 1, {type = "magic"}) - end - EF.poisoned[player].hit_timer = 0 - end - - if EF.poisoned[player] and EF.poisoned[player].timer >= EF.poisoned[player].dur then - EF.poisoned[player] = nil - if is_player then - meta = player:get_meta() - meta:set_string("_is_poisoned", minetest.serialize(EF.poisoned[player])) - potions_set_hud(player) - end - end - - end - - -- Check for regnerating players - for player, vals in pairs(EF.regenerating) do - - is_player = player:is_player() - entity = player:get_luaentity() - - EF.regenerating[player].timer = EF.regenerating[player].timer + dtime - EF.regenerating[player].heal_timer = (EF.regenerating[player].heal_timer or 0) + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#CD5CAB") end - - if EF.regenerating[player].heal_timer >= EF.regenerating[player].step then - - if is_player then - player:set_hp(math.min(player:get_properties().hp_max or 20, player:get_hp() + 1), { type = "set_hp", other = "regeneration" }) - EF.regenerating[player].heal_timer = 0 - elseif entity and entity.is_mob then - entity.health = math.min(entity.hp_max, entity.health + 1) - EF.regenerating[player].heal_timer = 0 - else -- stop regenerating if not a player or mob - EF.regenerating[player] = nil - end - - end - - if EF.regenerating[player] and EF.regenerating[player].timer >= EF.regenerating[player].dur then - EF.regenerating[player] = nil - if is_player then - meta = player:get_meta() - meta:set_string("_is_regenerating", minetest.serialize(EF.regenerating[player])) - potions_set_hud(player) - end - end - - end - - -- Check for water breathing players - for player, vals in pairs(EF.water_breathing) do - - if player:is_player() then - - EF.water_breathing[player].timer = EF.water_breathing[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#2E5299") end - - if player:get_breath() then - hb.hide_hudbar(player, "breath") - if player:get_breath() < 10 then player:set_breath(10) end - end - - if EF.water_breathing[player].timer >= EF.water_breathing[player].dur then - meta = player:get_meta() - meta:set_string("_is_water_breathing", minetest.serialize(EF.water_breathing[player])) - EF.water_breathing[player] = nil - end - potions_set_hud(player) - - else - EF.water_breathing[player] = nil - end - - end - - -- Check for leaping players - for player, vals in pairs(EF.leaping) do - - if player:is_player() then - - EF.leaping[player].timer = EF.leaping[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#22FF4C") end - - if EF.leaping[player].timer >= EF.leaping[player].dur then - playerphysics.remove_physics_factor(player, "jump", "mcl_potions:leaping") - EF.leaping[player] = nil - meta = player:get_meta() - meta:set_string("_is_leaping", minetest.serialize(EF.leaping[player])) - end - potions_set_hud(player) - - else - EF.leaping[player] = nil - end - - end - - -- Check for swift players - for player, vals in pairs(EF.swift) do - - if player:is_player() then - - EF.swift[player].timer = EF.swift[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#7CAFC6") end - - if EF.swift[player].timer >= EF.swift[player].dur then - playerphysics.remove_physics_factor(player, "speed", "mcl_potions:swiftness") - EF.swift[player] = nil - meta = player:get_meta() - meta:set_string("_is_swift", minetest.serialize(EF.swift[player])) - end - potions_set_hud(player) - - else - EF.swift[player] = nil - end - - end - - -- Check for Night Vision equipped players - for player, vals in pairs(EF.night_vision) do - - if player:is_player() then - - EF.night_vision[player].timer = EF.night_vision[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#1F1FA1") end - - if EF.night_vision[player].timer >= EF.night_vision[player].dur then - EF.night_vision[player] = nil - meta = player:get_meta() - meta:set_string("_is_cat", minetest.serialize(EF.night_vision[player])) - meta:set_int("night_vision", 0) - end - mcl_weather.skycolor.update_sky_color({player}) - potions_set_hud(player) - - else - EF.night_vision[player] = nil - end - - end - - -- Check for Fire Proof players - for player, vals in pairs(EF.fire_proof) do - - if player:is_player() then - - player = player or player:get_luaentity() - - EF.fire_proof[player].timer = EF.fire_proof[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#E49A3A") end - - if EF.fire_proof[player].timer >= EF.fire_proof[player].dur then - EF.fire_proof[player] = nil - meta = player:get_meta() - meta:set_string("_is_fire_proof", minetest.serialize(EF.fire_proof[player])) - end - potions_set_hud(player) - - else - EF.fire_proof[player] = nil - end - - end - - -- Check for Weak players - for player, vals in pairs(EF.weak) do - - if player:is_player() then - - EF.weak[player].timer = EF.weak[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#484D48") end - - if EF.weak[player].timer >= EF.weak[player].dur then - EF.weak[player] = nil - meta = player:get_meta() - meta:set_string("_is_weak", minetest.serialize(EF.weak[player])) - end - - else - EF.weak[player] = nil - end - - end - - -- Check for Strong players - for player, vals in pairs(EF.strong) do - - if player:is_player() then - - EF.strong[player].timer = EF.strong[player].timer + dtime - - if player:get_pos() then mcl_potions._add_spawner(player, "#932423") end - - if EF.strong[player].timer >= EF.strong[player].dur then - EF.strong[player] = nil - meta = player:get_meta() - meta:set_string("_is_strong", minetest.serialize(EF.strong[player])) - end - - else - EF.strong[player] = nil - end - - end - -end) - --- Prevent damage to player with Fire Resistance enabled -mcl_damage.register_modifier(function(obj, damage, reason) - if EF.fire_proof[obj] and not reason.flags.bypasses_magic and reason.flags.is_fire then - return 0 - end -end, -50) - - - --- ███████╗███████╗███████╗███████╗░█████╗░████████╗ --- ██╔════╝██╔════╝██╔════╝██╔════╝██╔══██╗╚══██╔══╝ --- █████╗░░█████╗░░█████╗░░█████╗░░██║░░╚═╝░░░██║░░░ --- ██╔══╝░░██╔══╝░░██╔══╝░░██╔══╝░░██║░░██╗░░░██║░░░ --- ███████╗██║░░░░░██║░░░░░███████╗╚█████╔╝░░░██║░░░ --- ╚══════╝╚═╝░░░░░╚═╝░░░░░╚══════╝░╚════╝░░░░╚═╝░░░ --- --- ██╗░░░░░░█████╗░░█████╗░██████╗░░░░░██╗░██████╗░█████╗░██╗░░░██╗███████╗ --- ██║░░░░░██╔══██╗██╔══██╗██╔══██╗░░░██╔╝██╔════╝██╔══██╗██║░░░██║██╔════╝ --- ██║░░░░░██║░░██║███████║██║░░██║░░██╔╝░╚█████╗░███████║╚██╗░██╔╝█████╗░░ --- ██║░░░░░██║░░██║██╔══██║██║░░██║░██╔╝░░░╚═══██╗██╔══██║░╚████╔╝░██╔══╝░░ --- ███████╗╚█████╔╝██║░░██║██████╔╝██╔╝░░░██████╔╝██║░░██║░░╚██╔╝░░███████╗ --- ╚══════╝░╚════╝░╚═╝░░╚═╝╚═════╝░╚═╝░░░░╚═════╝░╚═╝░░╚═╝░░░╚═╝░░░╚══════╝ - - -function mcl_potions._reset_player_effects(player, set_hud) - - if not player:is_player() then - return - end - meta = player:get_meta() - - mcl_potions.make_invisible(player, false) - EF.invisible[player] = nil - EF.poisoned[player] = nil - EF.regenerating[player] = nil - EF.strong[player] = nil - EF.weak[player] = nil - EF.water_breathing[player] = nil - - EF.leaping[player] = nil - playerphysics.remove_physics_factor(player, "jump", "mcl_potions:leaping") - - EF.swift[player] = nil - playerphysics.remove_physics_factor(player, "speed", "mcl_potions:swiftness") - - EF.night_vision[player] = nil - meta:set_int("night_vision", 0) - mcl_weather.skycolor.update_sky_color({player}) - - EF.fire_proof[player] = nil - - if set_hud ~= false then - potions_set_hud(player) - end - -end - -function mcl_potions._save_player_effects(player) - - if not player:is_player() then - return - end - meta = player:get_meta() - - meta:set_string("_is_invisible", minetest.serialize(EF.invisible[player])) - meta:set_string("_is_poisoned", minetest.serialize(EF.poisoned[player])) - meta:set_string("_is_regenerating", minetest.serialize(EF.regenerating[player])) - meta:set_string("_is_strong", minetest.serialize(EF.strong[player])) - meta:set_string("_is_weak", minetest.serialize(EF.weak[player])) - meta:set_string("_is_water_breathing", minetest.serialize(EF.water_breathing[player])) - meta:set_string("_is_leaping", minetest.serialize(EF.leaping[player])) - meta:set_string("_is_swift", minetest.serialize(EF.swift[player])) - meta:set_string("_is_cat", minetest.serialize(EF.night_vision[player])) - meta:set_string("_is_fire_proof", minetest.serialize(EF.fire_proof[player])) - -end - -function mcl_potions._load_player_effects(player) - - if not player:is_player() then - return - end - meta = player:get_meta() - - if minetest.deserialize(meta:get_string("_is_invisible")) then - EF.invisible[player] = minetest.deserialize(meta:get_string("_is_invisible")) - mcl_potions.make_invisible(player, true) - end - - if minetest.deserialize(meta:get_string("_is_poisoned")) then - EF.poisoned[player] = minetest.deserialize(meta:get_string("_is_poisoned")) - end - - if minetest.deserialize(meta:get_string("_is_regenerating")) then - EF.regenerating[player] = minetest.deserialize(meta:get_string("_is_regenerating")) - end - - if minetest.deserialize(meta:get_string("_is_strong")) then - EF.strong[player] = minetest.deserialize(meta:get_string("_is_strong")) - end - - if minetest.deserialize(meta:get_string("_is_weak")) then - EF.weak[player] = minetest.deserialize(meta:get_string("_is_weak")) - end - - if minetest.deserialize(meta:get_string("_is_water_breathing")) then - EF.water_breathing[player] = minetest.deserialize(meta:get_string("_is_water_breathing")) - end - - if minetest.deserialize(meta:get_string("_is_leaping")) then - EF.leaping[player] = minetest.deserialize(meta:get_string("_is_leaping")) - end - - if minetest.deserialize(meta:get_string("_is_swift")) then - EF.swift[player] = minetest.deserialize(meta:get_string("_is_swift")) - end - - if minetest.deserialize(meta:get_string("_is_cat")) then - EF.night_vision[player] = minetest.deserialize(meta:get_string("_is_cat")) - end - - if minetest.deserialize(meta:get_string("_is_fire_proof")) then - EF.fire_proof[player] = minetest.deserialize(meta:get_string("_is_fire_proof")) - end - -end - --- Returns true if player has given effect -function mcl_potions.player_has_effect(player, effect_name) - if not EF[effect_name] then - return false - end - return EF[effect_name][player] ~= nil -end - -minetest.register_on_leaveplayer( function(player) - mcl_potions._save_player_effects(player) - mcl_potions._reset_player_effects(player) -- clearout the buffer to prevent looking for a player not there - icon_ids[player:get_player_name()] = nil -end) - -minetest.register_on_dieplayer( function(player) - mcl_potions._reset_player_effects(player) - potions_set_hud(player) -end) - -minetest.register_on_joinplayer( function(player) - mcl_potions._reset_player_effects(player, false) -- make sure there are no wierd holdover effects - mcl_potions._load_player_effects(player) - potions_init_icons(player) - -- .after required because player:hud_change doesn't work when called - -- in same tick as player:hud_add - -- (see ) - -- FIXME: Remove minetest.after - minetest.after(3, function(player) - if player and player:is_player() then - potions_set_hud(player) - end - end, player) -end) - -minetest.register_on_shutdown(function() - -- save player effects on server shutdown - for _,player in pairs(minetest.get_connected_players()) do - mcl_potions._save_player_effects(player) - end - -end) - - --- ░██████╗██╗░░░██╗██████╗░██████╗░░█████╗░██████╗░████████╗██╗███╗░░██╗░██████╗░ --- ██╔════╝██║░░░██║██╔══██╗██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██║████╗░██║██╔════╝░ --- ╚█████╗░██║░░░██║██████╔╝██████╔╝██║░░██║██████╔╝░░░██║░░░██║██╔██╗██║██║░░██╗░ --- ░╚═══██╗██║░░░██║██╔═══╝░██╔═══╝░██║░░██║██╔══██╗░░░██║░░░██║██║╚████║██║░░╚██╗ --- ██████╔╝╚██████╔╝██║░░░░░██║░░░░░╚█████╔╝██║░░██║░░░██║░░░██║██║░╚███║╚██████╔╝ --- ╚═════╝░░╚═════╝░╚═╝░░░░░╚═╝░░░░░░╚════╝░╚═╝░░╚═╝░░░╚═╝░░░╚═╝╚═╝░░╚══╝░╚═════╝░ --- --- ███████╗██╗░░░██╗███╗░░██╗░█████╗░████████╗██╗░█████╗░███╗░░██╗░██████╗ --- ██╔════╝██║░░░██║████╗░██║██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║██╔════╝ --- █████╗░░██║░░░██║██╔██╗██║██║░░╚═╝░░░██║░░░██║██║░░██║██╔██╗██║╚█████╗░ --- ██╔══╝░░██║░░░██║██║╚████║██║░░██╗░░░██║░░░██║██║░░██║██║╚████║░╚═══██╗ --- ██║░░░░░╚██████╔╝██║░╚███║╚█████╔╝░░░██║░░░██║╚█████╔╝██║░╚███║██████╔╝ --- ╚═╝░░░░░░╚═════╝░╚═╝░░╚══╝░╚════╝░░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝╚═════╝░ - -function mcl_potions.is_obj_hit(self, pos) - - local entity - for _,object in pairs(minetest.get_objects_inside_radius(pos, 1.1)) do - - entity = object:get_luaentity() - - if entity and entity.name ~= self.object:get_luaentity().name then - - if entity.is_mob then - return true - end - - elseif object:is_player() and self._thrower ~= object:get_player_name() then - return true - end - - end - return false -end - - -function mcl_potions.make_invisible(player, toggle) - - if not player then - return false - end - - local is_player = player:is_player() - local entity = player:get_luaentity() - --local playername = player:get_player_name() - local skin_file - - if toggle then -- hide player - - skin_file = "mobs_mc_empty.png" - - if entity then - EF.invisible[player].old_size = entity.visual_size - elseif not is_player then -- if not a player or entity, do nothing - return - end - - if is_player then - mcl_player.player_set_skin(player, skin_file) - elseif not is_player then - player:set_properties({visual_size = {x = 0, y = 0}}) - end - player:set_nametag_attributes({color = {a = 0}}) - - elseif EF.invisible[player] then -- show player - - if is_player then - mcl_skins.update_player_skin(player) - elseif not is_player then - player:set_properties({visual_size = EF.invisible[player].old_size}) - end - player:set_nametag_attributes({color = {r = 255, g = 255, b = 255, a = 255}}) - - end - -end - - -function mcl_potions._use_potion(item, obj, color) - local d = 0.1 - local pos = obj:get_pos() - minetest.sound_play("mcl_potions_drinking", {pos = pos, max_hear_distance = 6, gain = 1}) - minetest.add_particlespawner({ - amount = 25, - time = 1, - minpos = {x=pos.x-d, y=pos.y+1, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, - minvel = {x=-0.1, y=0, z=-0.1}, - maxvel = {x=0.1, y=0.1, z=0.1}, - minacc = {x=-0.1, y=0, z=-0.1}, - maxacc = {x=0.1, y=.1, z=0.1}, - minexptime = 1, - maxexptime = 5, - minsize = 0.5, - maxsize = 1, - collisiondetection = true, - vertical = false, - texture = "mcl_particles_effect.png^[colorize:"..color..":127", - }) -end - - -function mcl_potions._add_spawner(obj, color) - local d = 0.2 - local pos = obj:get_pos() - minetest.add_particlespawner({ - amount = 1, - time = 1, - minpos = {x=pos.x-d, y=pos.y+1, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, - minvel = {x=-0.1, y=0, z=-0.1}, - maxvel = {x=0.1, y=0.1, z=0.1}, - minacc = {x=-0.1, y=0, z=-0.1}, - maxacc = {x=0.1, y=.1, z=0.1}, - minexptime = 0.5, - maxexptime = 1, - minsize = 0.5, - maxsize = 1, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_effect.png^[colorize:"..color..":127", - }) -end - - - --- ██████╗░░█████╗░░██████╗███████╗  ██████╗░░█████╗░████████╗██╗░█████╗░███╗░░██╗ --- ██╔══██╗██╔══██╗██╔════╝██╔════╝  ██╔══██╗██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║ --- ██████╦╝███████║╚█████╗░█████╗░░  ██████╔╝██║░░██║░░░██║░░░██║██║░░██║██╔██╗██║ --- ██╔══██╗██╔══██║░╚═══██╗██╔══╝░░  ██╔═══╝░██║░░██║░░░██║░░░██║██║░░██║██║╚████║ --- ██████╦╝██║░░██║██████╔╝███████╗  ██║░░░░░╚█████╔╝░░░██║░░░██║╚█████╔╝██║░╚███║ --- ╚═════╝░╚═╝░░╚═╝╚═════╝░╚══════╝  ╚═╝░░░░░░╚════╝░░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝ --- --- ███████╗███████╗███████╗███████╗░█████╗░████████╗ --- ██╔════╝██╔════╝██╔════╝██╔════╝██╔══██╗╚══██╔══╝ --- █████╗░░█████╗░░█████╗░░█████╗░░██║░░╚═╝░░░██║░░░ --- ██╔══╝░░██╔══╝░░██╔══╝░░██╔══╝░░██║░░██╗░░░██║░░░ --- ███████╗██║░░░░░██║░░░░░███████╗╚█████╔╝░░░██║░░░ --- ╚══════╝╚═╝░░░░░╚═╝░░░░░╚══════╝░╚════╝░░░░╚═╝░░░ --- --- ███████╗██╗░░░██╗███╗░░██╗░█████╗░████████╗██╗░█████╗░███╗░░██╗░██████╗ --- ██╔════╝██║░░░██║████╗░██║██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║██╔════╝ --- █████╗░░██║░░░██║██╔██╗██║██║░░╚═╝░░░██║░░░██║██║░░██║██╔██╗██║╚█████╗░ --- ██╔══╝░░██║░░░██║██║╚████║██║░░██╗░░░██║░░░██║██║░░██║██║╚████║░╚═══██╗ --- ██║░░░░░╚██████╔╝██║░╚███║╚█████╔╝░░░██║░░░██║╚█████╔╝██║░╚███║██████╔╝ --- ╚═╝░░░░░░╚═════╝░╚═╝░░╚══╝░╚════╝░░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝╚═════╝░ - - -function mcl_potions.healing_func(player, hp) - - local obj = player:get_luaentity() - - if player:get_hp() == 0 then - return - end - - if obj and obj.harmed_by_heal then hp = -hp end - - if hp > 0 then - -- at least 1 HP - if hp < 1 then - hp = 1 - end - - if obj and obj.is_mob then - obj.health = math.max(obj.health + hp, obj.hp_max) - elseif player:is_player() then - player:set_hp(math.min(player:get_hp() + hp, player:get_properties().hp_max), { type = "set_hp", other = "healing" }) - end - - elseif hp < 0 then - if hp > -1 then - hp = -1 - end - - mcl_util.deal_damage(player, -hp, {type = "magic"}) - end - -end - -function mcl_potions.swiftness_func(player, factor, duration) - - if not player:get_meta() then - return false - end - - if not EF.swift[player] then - - EF.swift[player] = {dur = duration, timer = 0, is_slow = factor < 1} - playerphysics.add_physics_factor(player, "speed", "mcl_potions:swiftness", factor) - - else - - local victim = EF.swift[player] - - playerphysics.add_physics_factor(player, "speed", "mcl_potions:swiftness", factor) - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - victim.is_slow = factor < 1 - - end - - if player:is_player() then - potions_set_icons(player) - end - -end - -function mcl_potions.leaping_func(player, factor, duration) - - if not player:get_meta() then - return false - end - - if not EF.leaping[player] then - - EF.leaping[player] = {dur = duration, timer = 0} - playerphysics.add_physics_factor(player, "jump", "mcl_potions:leaping", factor) - - else - - local victim = EF.leaping[player] - - playerphysics.add_physics_factor(player, "jump", "mcl_potions:leaping", factor) - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_icons(player) - end - -end - - -function mcl_potions.weakness_func(player, factor, duration) - - if not EF.weak[player] then - - EF.weak[player] = {dur = duration, timer = 0, factor = factor} - - else - - local victim = EF.weak[player] - - victim.factor = factor - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_icons(player) - end - -end - - -function mcl_potions.strength_func(player, factor, duration) - - if not EF.strong[player] then - - EF.strong[player] = {dur = duration, timer = 0, factor = factor} - - else - - local victim = EF.strong[player] - - victim.factor = factor - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_icons(player) - end - -end - - -function mcl_potions.poison_func(player, factor, duration) - - if not EF.poisoned[player] then - - EF.poisoned[player] = {step = factor, dur = duration, timer = 0} - - else - - local victim = EF.poisoned[player] - - victim.step = math.min(victim.step, factor) - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_hud(player) - end - -end - - -function mcl_potions.regeneration_func(player, factor, duration) - - if not EF.regenerating[player] then - - EF.regenerating[player] = {step = factor, dur = duration, timer = 0} - - else - - local victim = EF.regenerating[player] - - victim.step = math.min(victim.step, factor) - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_hud(player) - end - -end - - -function mcl_potions.invisiblility_func(player, null, duration) - - if not EF.invisible[player] then - - EF.invisible[player] = {dur = duration, timer = 0} - mcl_potions.make_invisible(player, true) - - else - - local victim = EF.invisible[player] - - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_icons(player) - end - -end - -function mcl_potions.water_breathing_func(player, null, duration) - - if not EF.water_breathing[player] then - - EF.water_breathing[player] = {dur = duration, timer = 0} - - else - - local victim = EF.water_breathing[player] - - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_icons(player) - end - -end - - -function mcl_potions.fire_resistance_func(player, null, duration) - - if not EF.fire_proof[player] then - - EF.fire_proof[player] = {dur = duration, timer = 0} - - else - - local victim = EF.fire_proof[player] - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - if player:is_player() then - potions_set_icons(player) - end - -end - - -function mcl_potions.night_vision_func(player, null, duration) - - meta = player:get_meta() - if not EF.night_vision[player] then - - EF.night_vision[player] = {dur = duration, timer = 0} - - else - - local victim = EF.night_vision[player] - - victim.dur = math.max(duration, victim.dur - victim.timer) - victim.timer = 0 - - end - - is_player = player:is_player() - if is_player then - meta:set_int("night_vision", 1) - else - return -- Do not attempt to set night_vision on mobs - end - mcl_weather.skycolor.update_sky_color({player}) - - if player:is_player() then - potions_set_icons(player) - end - -end - -function mcl_potions._extinguish_nearby_fire(pos, radius) - local epos = {x=pos.x, y=pos.y+0.5, z=pos.z} - local dnode = minetest.get_node({x=pos.x,y=pos.y-0.5,z=pos.z}) - if minetest.get_item_group(dnode.name, "fire") ~= 0 then - epos.y = pos.y - 0.5 - end - local exting = false - -- No radius: Splash, extinguish epos and 4 nodes around - if not radius then - local dirs = { - {x=0,y=0,z=0}, - {x=0,y=0,z=-1}, - {x=0,y=0,z=1}, - {x=-1,y=0,z=0}, - {x=1,y=0,z=0}, - } - for d=1, #dirs do - local tpos = vector.add(epos, dirs[d]) - local node = minetest.get_node(tpos) - if minetest.get_item_group(node.name, "fire") ~= 0 then - minetest.sound_play("fire_extinguish_flame", {pos = tpos, gain = 0.25, max_hear_distance = 16}, true) - minetest.remove_node(tpos) - exting = true - end - end - -- Has radius: lingering, extinguish all nodes in area - else - local nodes = minetest.find_nodes_in_area( - {x=epos.x-radius,y=epos.y,z=epos.z-radius}, - {x=epos.x+radius,y=epos.y,z=epos.z+radius}, - {"group:fire"}) - for n=1, #nodes do - minetest.sound_play("fire_extinguish_flame", {pos = nodes[n], gain = 0.25, max_hear_distance = 16}, true) - minetest.remove_node(nodes[n]) - exting = true - end - end - return exting -end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua deleted file mode 100644 index 5b9f1fab3..000000000 --- a/mods/ITEMS/mcl_potions/init.lua +++ /dev/null @@ -1,461 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - -mcl_potions = {} - --- duration effects of redstone are a factor of 8/3 --- duration effects of glowstone are a time factor of 1/2 --- splash potion duration effects are reduced by a factor of 3/4 - -mcl_potions.II_FACTOR = 2 -mcl_potions.PLUS_FACTOR = 8/3 - -mcl_potions.DURATION = 180 -mcl_potions.DURATION_PLUS = mcl_potions.DURATION * mcl_potions.PLUS_FACTOR -mcl_potions.DURATION_2 = mcl_potions.DURATION / mcl_potions.II_FACTOR - -mcl_potions.INV_FACTOR = 0.50 -mcl_potions.SPLASH_FACTOR = 0.75 -mcl_potions.LINGERING_FACTOR = 0.25 - -dofile(modpath .. "/functions.lua") -dofile(modpath .. "/commands.lua") -dofile(modpath .. "/splash.lua") -dofile(modpath .. "/lingering.lua") -dofile(modpath .. "/tipped_arrow.lua") -dofile(modpath .. "/potions.lua") - -minetest.register_craftitem("mcl_potions:fermented_spider_eye", { - description = S("Fermented Spider Eye"), - _doc_items_longdesc = S("Try different combinations to create potions."), - wield_image = "mcl_potions_spider_eye_fermented.png", - inventory_image = "mcl_potions_spider_eye_fermented.png", - groups = { brewitem = 1, }, - stack_max = 64, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_potions:fermented_spider_eye", - recipe = { "mcl_mushrooms:mushroom_brown", "mcl_core:sugar", "mcl_mobitems:spider_eye" }, -}) - -minetest.register_craftitem("mcl_potions:glass_bottle", { - description = S("Glass Bottle"), - _tt_help = S("Liquid container"), - _doc_items_longdesc = S("A glass bottle is used as a container for liquids and can be used to collect water directly."), - _doc_items_usagehelp = S("To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water)."), - inventory_image = "mcl_potions_potion_bottle.png", - wield_image = "mcl_potions_potion_bottle.png", - groups = {brewitem=1}, - liquids_pointable = true, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[node.name] - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - -- Try to fill glass bottle with water - local get_water = false - --local from_liquid_source = false - local river_water = false - if def and def.groups and def.groups.water and def.liquidtype == "source" then - -- Water source - get_water = true - --from_liquid_source = true - river_water = node.name == "mclx_core:river_water_source" - -- Or reduce water level of cauldron by 1 - elseif string.sub(node.name, 1, 14) == "mcl_cauldrons:" then - local pname = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, pname) then - minetest.record_protection_violation(pointed_thing.under, pname) - return itemstack - end - if node.name == "mcl_cauldrons:cauldron_3" then - get_water = true - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_2"}) - elseif node.name == "mcl_cauldrons:cauldron_2" then - get_water = true - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_1"}) - elseif node.name == "mcl_cauldrons:cauldron_1" then - get_water = true - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - elseif node.name == "mcl_cauldrons:cauldron_3r" then - get_water = true - river_water = true - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_2r"}) - elseif node.name == "mcl_cauldrons:cauldron_2r" then - get_water = true - river_water = true - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_1r"}) - elseif node.name == "mcl_cauldrons:cauldron_1r" then - get_water = true - river_water = true - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - end - end - if get_water then - local water_bottle - if river_water then - water_bottle = ItemStack("mcl_potions:river_water") - else - water_bottle = ItemStack("mcl_potions:water") - end - -- Replace with water bottle, if possible, otherwise - -- place the water potion at a place where's space - local inv = placer:get_inventory() - minetest.sound_play("mcl_potions_bottle_fill", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then - -- Don't replace empty bottle in creative for convenience reasons - if not inv:contains_item("main", water_bottle) then - inv:add_item("main", water_bottle) - end - elseif itemstack:get_count() == 1 then - return water_bottle - else - if inv:room_for_item("main", water_bottle) then - inv:add_item("main", water_bottle) - else - minetest.add_item(placer:get_pos(), water_bottle) - end - itemstack:take_item() - end - end - end - return itemstack - end, -}) - -minetest.register_craft( { - output = "mcl_potions:glass_bottle 3", - recipe = { - { "mcl_core:glass", "", "mcl_core:glass" }, - { "", "mcl_core:glass", "" } - } -}) - --- Template function for creating images of filled potions --- - colorstring must be a ColorString of form “#RRGGBB”, e.g. “#0000FF” for blue. --- - opacity is optional opacity from 0-255 (default: 127) -local function potion_image(colorstring, opacity) - if not opacity then - opacity = 127 - end - return "mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_potion_bottle.png" -end - - - --- Cauldron fill up rules: --- Adding any water increases the water level by 1, preserving the current water type -local cauldron_levels = { - -- start = { add water, add river water } - { "", "_1", "_1r" }, - { "_1", "_2", "_2" }, - { "_2", "_3", "_3" }, - { "_1r", "_2r", "_2r" }, - { "_2r", "_3r", "_3r" }, -} -local fill_cauldron = function(cauldron, water_type) - local base = "mcl_cauldrons:cauldron" - for i=1, #cauldron_levels do - if cauldron == base .. cauldron_levels[i][1] then - if water_type == "mclx_core:river_water_source" then - return base .. cauldron_levels[i][3] - else - return base .. cauldron_levels[i][2] - end - end - end -end - --- Itemstring of potions is “mcl_potions:” - -minetest.register_craftitem("mcl_potions:water", { - description = S("Water Bottle"), - _tt_help = S("No effect"), - _doc_items_longdesc = S("Water bottles can be used to fill cauldrons. Drinking water has no effect."), - _doc_items_usagehelp = S("Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron."), - stack_max = 1, - inventory_image = potion_image("#0022FF"), - wield_image = potion_image("#0022FF"), - groups = {brewitem=1, food=3, can_eat_when_full=1, water_bottle=1}, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[node.name] - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local cauldron = fill_cauldron(node.name, "mcl_core:water_source") - if cauldron then - local pname = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, pname) then - minetest.record_protection_violation(pointed_thing.under, pname) - return itemstack - end - -- Increase water level of cauldron by 1 - minetest.set_node(pointed_thing.under, {name=cauldron}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then - return itemstack - else - return "mcl_potions:glass_bottle" - end - end - end - - -- Drink the water by default - return minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, placer, pointed_thing) - end, - on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -}) - - -minetest.register_craftitem("mcl_potions:river_water", { - description = S("River Water Bottle"), - _tt_help = S("No effect"), - _doc_items_longdesc = S("River water bottles can be used to fill cauldrons. Drinking it has no effect."), - _doc_items_usagehelp = S("Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron."), - - stack_max = 1, - inventory_image = potion_image("#0044FF"), - wield_image = potion_image("#0044FF"), - groups = {brewitem=1, food=3, can_eat_when_full=1, water_bottle=1}, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[node.name] - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local cauldron = fill_cauldron(node.name, "mclx_core:river_water_source") - if cauldron then - local pname = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, pname) then - minetest.record_protection_violation(pointed_thing.under, pname) - return itemstack - end - -- Increase water level of cauldron by 1 - minetest.set_node(pointed_thing.under, {name=cauldron}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then - return itemstack - else - return "mcl_potions:glass_bottle" - end - end - end - - -- Drink the water by default - return minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, placer, pointed_thing) - end, - on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), - -}) - --- Hurt mobs -local function water_splash(obj, damage) - if not obj then - return - end - if not damage or (damage > 0 and damage < 1) then - damage = 1 - end - -- Damage mobs that are vulnerable to water - local lua = obj:get_luaentity() - if lua and lua.is_mob then - obj:punch(obj, 1.0, { - full_punch_interval = 1.0, - damage_groups = {water_vulnerable=damage}, - }, nil) - end -end - -mcl_potions.register_splash("water", S("Splash Water Bottle"), "#0022FF", { - tt=S("Extinguishes fire and hurts some mobs"), - longdesc=S("A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water."), - no_effect=true, - potion_fun=water_splash, - effect=1 -}) -mcl_potions.register_lingering("water", S("Lingering Water Bottle"), "#0022FF", { - tt=S("Extinguishes fire and hurts some mobs"), - longdesc=S("A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water."), - no_effect=true, - potion_fun=water_splash, - effect=1 -}) - -minetest.register_craftitem("mcl_potions:speckled_melon", { - description = S("Glistering Melon"), - _doc_items_longdesc = S("This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else."), - stack_max = 64, - groups = { brewitem = 1, }, - inventory_image = "mcl_potions_melon_speckled.png", -}) - -minetest.register_craft({ - output = "mcl_potions:speckled_melon", - recipe = { - {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, - {"mcl_core:gold_nugget", "mcl_farming:melon_item", "mcl_core:gold_nugget"}, - {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, - } -}) - - -local water_table = { - ["mcl_nether:nether_wart_item"] = "mcl_potions:awkward", - -- ["mcl_potions:fermented_spider_eye"] = "mcl_potions:weakness", - ["mcl_potions:speckled_melon"] = "mcl_potions:mundane", - ["mcl_core:sugar"] = "mcl_potions:mundane", - ["mcl_mobitems:magma_cream"] = "mcl_potions:mundane", - ["mcl_mobitems:blaze_powder"] = "mcl_potions:mundane", - ["mesecons:wire_00000000_off"] = "mcl_potions:mundane", - ["mcl_mobitems:ghast_tear"] = "mcl_potions:mundane", - ["mcl_mobitems:spider_eye"] = "mcl_potions:mundane", - ["mcl_mobitems:rabbit_foot"] = "mcl_potions:mundane", - ["mcl_nether:glowstone_dust"] = "mcl_potions:thick", - ["mcl_mobitems:gunpowder"] = "mcl_potions:water_splash" -} - -local awkward_table = { - ["mcl_potions:speckled_melon"] = "mcl_potions:healing", - ["mcl_farming:carrot_item_gold"] = "mcl_potions:night_vision", - ["mcl_core:sugar"] = "mcl_potions:swiftness", - ["mcl_mobitems:magma_cream"] = "mcl_potions:fire_resistance", - -- ["mcl_mobitems:blaze_powder"] = "mcl_potions:strength", - ["mcl_fishing:pufferfish_raw"] = "mcl_potions:water_breathing", - ["mcl_mobitems:ghast_tear"] = "mcl_potions:regeneration", - ["mcl_mobitems:spider_eye"] = "mcl_potions:poison", - ["mcl_mobitems:rabbit_foot"] = "mcl_potions:leaping", -} - -local output_table = { - ["mcl_potions:river_water"] = water_table, - ["mcl_potions:water"] = water_table, - ["mcl_potions:awkward"] = awkward_table, -} - - -local enhancement_table = {} -local extension_table = {} -local potions = {} - -for i, potion in ipairs({"healing","harming","swiftness","slowness", - "leaping","poison","regeneration","invisibility","fire_resistance", - -- "weakness","strength", - "water_breathing","night_vision"}) do - - table.insert(potions, potion) - - if potion ~= "invisibility" and potion ~= "night_vision" and potion ~= "weakness" and potion ~= "water_breathing" and potion ~= "fire_resistance" then - enhancement_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_2" - enhancement_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_2_splash" - table.insert(potions, potion.."_2") - end - - if potion ~= "healing" and potion ~= "harming" then - extension_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_plus_splash" - extension_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_plus" - table.insert(potions, potion.."_plus") - end - -end - -for i, potion in ipairs({"awkward", "mundane", "thick", "water"}) do - table.insert(potions, potion) -end - - -local inversion_table = { - ["mcl_potions:healing"] = "mcl_potions:harming", - ["mcl_potions:healing_2"] = "mcl_potions:harming_2", - ["mcl_potions:swiftness"] = "mcl_potions:slowness", - ["mcl_potions:swiftness_plus"] = "mcl_potions:slowness_plus", - ["mcl_potions:leaping"] = "mcl_potions:slowness", - ["mcl_potions:leaping_plus"] = "mcl_potions:slowness_plus", - ["mcl_potions:night_vision"] = "mcl_potions:invisibility", - ["mcl_potions:night_vision_plus"] = "mcl_potions:invisibility_plus", - ["mcl_potions:poison"] = "mcl_potions:harming", - ["mcl_potions:poison_2"] = "mcl_potions:harming_2", - ["mcl_potions:healing_splash"] = "mcl_potions:harming_splash", - ["mcl_potions:healing_2_splash"] = "mcl_potions:harming_2_splash", - ["mcl_potions:swiftness_splash"] = "mcl_potions:slowness_splash", - ["mcl_potions:swiftness_plus_splash"] = "mcl_potions:slowness_plus_splash", - ["mcl_potions:leaping_splash"] = "mcl_potions:slowness_splash", - ["mcl_potions:leaping_plus_splash"] = "mcl_potions:slowness_plus_splash", - ["mcl_potions:night_vision_splash"] = "mcl_potions:invisibility_splash", - ["mcl_potions:night_vision_plus_splash"] = "mcl_potions:invisibility_plus_splash", - ["mcl_potions:poison_splash"] = "mcl_potions:harming_splash", - ["mcl_potions:poison_2_splash"] = "mcl_potions:harming_2_splash", -} - - -local splash_table = {} -local lingering_table = {} - -for i, potion in ipairs(potions) do - splash_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_splash" - lingering_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_lingering" -end - - -local mod_table = { - ["mesecons:wire_00000000_off"] = extension_table, - ["mcl_potions:fermented_spider_eye"] = inversion_table, - ["mcl_nether:glowstone_dust"] = enhancement_table, - ["mcl_mobitems:gunpowder"] = splash_table, - ["mcl_potions:dragon_breath"] = lingering_table, -} - --- Compare two ingredients for compatable alchemy -function mcl_potions.get_alchemy(ingr, pot) - if output_table[pot] then - - local brew_table = output_table[pot] - - if brew_table[ingr] then - return brew_table[ingr] - end - end - - if mod_table[ingr] then - - local brew_table = mod_table[ingr] - - if brew_table[pot] then - return brew_table[pot] - end - - end - - return false -end - -mcl_wip.register_wip_item("mcl_potions:night_vision") -mcl_wip.register_wip_item("mcl_potions:night_vision_plus") -mcl_wip.register_wip_item("mcl_potions:night_vision_splash") -mcl_wip.register_wip_item("mcl_potions:night_vision_plus_splash") -mcl_wip.register_wip_item("mcl_potions:night_vision_lingering") -mcl_wip.register_wip_item("mcl_potions:night_vision_plus_lingering") -mcl_wip.register_wip_item("mcl_potions:night_vision_arrow") -mcl_wip.register_wip_item("mcl_potions:night_vision_plus_arrow") \ No newline at end of file diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua deleted file mode 100644 index 17088ad13..000000000 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ /dev/null @@ -1,170 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_target = minetest.get_modpath("mcl_target") - -local function lingering_image(colorstring, opacity) - if not opacity then - opacity = 127 - end - return "mcl_potions_splash_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_lingering_bottle.png" -end - -local lingering_effect_at = {} - -local function add_lingering_effect(pos, color, def, is_water, instant) - lingering_effect_at[pos] = {color = color, timer = 30, def = def, is_water = is_water} -end - -local function linger_particles(pos, d, texture, color) - minetest.add_particlespawner({ - amount = 10 * d^2, - time = 1, - minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+1, z=pos.z+d}, - minvel = {x=-0.5, y=0, z=-0.5}, - maxvel = {x=0.5, y=0.5, z=0.5}, - minacc = {x=-0.2, y=0, z=-0.2}, - maxacc = {x=0.2, y=.05, z=0.2}, - minexptime = 1, - maxexptime = 2, - minsize = 2, - maxsize = 4, - collisiondetection = true, - vertical = false, - texture = texture.."^[colorize:"..color..":127", - }) -end - -local lingering_timer = 0 -minetest.register_globalstep(function(dtime) - - lingering_timer = lingering_timer + dtime - if lingering_timer >= 1 then - - for pos, vals in pairs(lingering_effect_at) do - - vals.timer = vals.timer - lingering_timer - local d = 4 * (vals.timer / 30.0) - local texture - if vals.is_water then - texture = "mcl_particles_droplet_bottle.png" - elseif vals.def.instant then - texture = "mcl_particles_instant_effect.png" - else - texture = "mcl_particles_effect.png" - end - linger_particles(pos, d, texture, vals.color) - - -- Extinguish fire if water bottle - if vals.is_water then - if mcl_potions._extinguish_nearby_fire(pos, d) then - vals.timer = vals.timer - 3.25 - end - end - - -- Affect players and mobs - for _, obj in pairs(minetest.get_objects_inside_radius(pos, d)) do - - local entity = obj:get_luaentity() - if obj:is_player() or entity.is_mob then - - vals.def.potion_fun(obj) - -- TODO: Apply timer penalty only if the potion effect was acutally applied - vals.timer = vals.timer - 3.25 - - end - end - - if vals.timer <= 0 then - lingering_effect_at[pos] = nil - end - - end - lingering_timer = 0 - end -end) - - - -function mcl_potions.register_lingering(name, descr, color, def) - - local id = "mcl_potions:"..name.."_lingering" - local longdesc = def.longdesc - if not def.no_effect then - longdesc = S("A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.") - if def.longdesc then - longdesc = longdesc .. "\n" .. def.longdesc - end - end - minetest.register_craftitem(id, { - description = descr, - _tt_help = def.tt, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = S("Use the “Punch” key to throw it."), - inventory_image = lingering_image(color), - groups = {brewitem=1, not_in_creative_inventory=0}, - on_use = function(item, placer, pointed_thing) - local velocity = 10 - local dir = placer:get_look_dir(); - local pos = placer:getpos(); - minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true) - local obj = minetest.add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying") - obj:setvelocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}) - obj:setacceleration({x=dir.x*-3, y=-9.8, z=dir.z*-3}) - obj:get_luaentity()._thrower = placer:get_player_name() - if not minetest.is_creative_enabled(placer:get_player_name()) then - item:take_item() - end - return item - end, - stack_max = 1, - _on_dispense = function(stack, dispenserpos, droppos, dropnode, dropdir) - local s_pos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51)) - local pos = {x=s_pos.x+dropdir.x,y=s_pos.y+dropdir.y,z=s_pos.z+dropdir.z} - minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true) - local obj = minetest.add_entity(pos, id.."_flying") - local velocity = 22 - obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity}) - obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3}) - end - }) - - local w = 0.7 - - minetest.register_entity(id.."_flying",{ - textures = {lingering_image(color)}, - hp_max = 1, - visual_size = {x=w/2,y=w/2}, - collisionbox = {-0.1,-0.1,-0.1,0.1,0.1,0.1}, - pointable = false, - on_step = function(self, dtime) - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - local n = node.name - local g = minetest.get_item_group(n, "liquid") - local d = 4 - if mod_target and n == "mcl_target:target_off" then - mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks - end - if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then - minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) - add_lingering_effect(pos, color, def, name == "water") - local texture - if name == "water" then - texture = "mcl_particles_droplet_bottle.png" - else - if def.instant then - texture = "mcl_particles_instant_effect.png" - else - texture = "mcl_particles_effect.png" - end - end - linger_particles(pos, d, texture, color) - if name == "water" then - mcl_potions._extinguish_nearby_fire(pos, d) - end - self.object:remove() - end - end, - }) -end diff --git a/mods/ITEMS/mcl_potions/locale/mcl_potions.de.tr b/mods/ITEMS/mcl_potions/locale/mcl_potions.de.tr deleted file mode 100644 index 34693d531..000000000 --- a/mods/ITEMS/mcl_potions/locale/mcl_potions.de.tr +++ /dev/null @@ -1,114 +0,0 @@ -# textdomain: mcl_potions - []= [] - -Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 @= 100%)=Ihnen einen Statuseffekt geben. Parameter: : Name des Statuseffekts, z.B. „poison“. : Dauer in Sekunden. : Effektstärkenmultiplikator (1 @= 100%) - -Missing effect parameter!=Fehlender Effektparameter! -Missing or invalid duration parameter!=Fehlender oder ungültiger Dauerparameter! -Invalid factor parameter!=Ungültiger Faktorparameter! -@1 is not an available status effect.=@1 ist kein verfügbarer Statuseffekt. -Fermented Spider Eye=Fermentiertes Spinnenauge -Glass Bottle=Glasflasche -Liquid container=Flüssigkeitsbehälter - -A glass bottle is used as a container for liquids and can be used to collect water directly.=Eine Glasflasche wird als Behälter von Flüssigkeiten benutzt und kann Wasser direkt aufsammeln. - -To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Um Wasser aufzusammeln, benutzen Sie sie an einem Kessel mit Wasser (was etwas Wasser entfernt) oder einer Wasserquelle (was kein Wasser entfernt). - -Water Bottle=Wasserflasche -Water bottles can be used to fill cauldrons. Drinking water has no effect.=Wasserflaschen können benutzt werden, um Kessel aufzufüllen. Trinken hat keine Wirkung. - -Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.=Benutzen Sie die „Platzieren“-Taste zum Trinken. Platzieren Sie diesen Gegenstand auf einen Kessel, um das Wasser in den Kessel zu schütten. - -River Water Bottle=Flusswasserflasche -River water bottles can be used to fill cauldrons. Drinking it has no effect.=Flusswasserflaschen können benutzt werden, um Kessel aufzufüllen. Trinken hat keine Wirkung. - -Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Benutzen Sie die „Platzieren“-Taste zum Trinken. Platzieren Sie diesen Gegenstand auf einen Kessel, um das Flusswasser in den Kessel zu schütten. - -Splash Water Bottle=Wurfwasserflasche -Extinguishes fire and hurts some mobs=Löscht Feuer und verletzt einige Mobs - -A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.=Eine werfbare Wasserflasche, die beim Einschlag zerbrechen wird und nahes Feuer löschen und einige wasserempfindliche Mobs verletzen wird. - -Lingering Water Bottle=Verweilwasserflasche - -A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.=Eine werfbare Wasserflasche, die beim Einschlag zerbrechen und eine Wolke aus Wasserdunst erzeugen wird, welche Feuer löscht und wasserempfindliche Mobs verletzt. - -Glistering Melon=Glitzermelone - -This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Diese glänzende Melone ist voller winziger Goldnuggets und sähe ganz nett in einem Rahmen aus. Er ist nicht essbar und auch sonst zu nichts zu gebrauchen. - -A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=Ein werfbarer Trank, der bei Kollision zerbrechen wird, wo er eine magische Wolke erzeugt, die für eine gewisse Zeit verweilen wird. Jeder Spieler und jede Mob in der Wolke wird die Trankwirkung erhalten, möglicherweise mehrmals. - -Use the “Punch” key to throw it.=Benutzen Sie die „Schlagen“-Taste zum Werfen. -Use the “Place” key to drink it.=Benutzen Sie die „Platzieren“-Taste zum Trinken. -Drinking a potion gives you a particular effect.=Das Trinken eines Tranks gibt Ihnen einen bestimmten Effekt. -1 HP/@1s | @2=1 TP/@1s | @2 -@1 HP=@1 TP -@1 Potion=Trank der @1 -Splash @1 Potion=Wurftrank der @1 -Lingering @1 Potion=Verweiltrank der @1 -Arrow of @1=Pfeil der @1 - II= II - IV= IV -@1 Potion@2=Trank der @1@2 -Splash @1@2 Potion=Wurftrank der @1@2 -Lingering @1@2 Potion=Verweiltrank der @1@2 -Arrow of @1@2=Pfeil der @1@2 -@1 + Potion=Trank der @1 + -Splash @1 + Potion=Wurftrank der @1 + -Lingering @1 + Potion=Verweiltrank der @1 + -Arrow of @1 +=Pfeil der @1 -Awkward Potion=Seltsamer Trank -Awkward Splash Potion=Seltsamer Wurftrank -Awkward Lingering Potion=Seltsamer Verweiltrank -Has an awkward taste and is used for brewing potions.=Hat einen seltsamen Geschmack und wird in der Trankherstellung benutzt. -Mundane Potion=Klarer Trank -Mundane Splash Potion=Klarer Wurftrank -Mundane Lingering Potion=Klarer Verweiltrank -Has a terrible taste and is not useful for brewing potions.=Hat einen furchtbaren Geschmack und ist nicht für die Trankherstellung brauchbar. -Thick Potion=Bitterer Trank -Thick Splash Potion=Bitterer Wurftrank -Thick Lingering Potion=Bitterer Verweiltrank -Has a bitter taste and is not useful for brewing potions.=Hat einen bitteren Geschmack und ist nicht für die Trankherstellung brauchbar. -Dragon's Breath=Drachenatem - -This item is used in brewing and can be combined with splash potions to create lingering potions.=Dieser Objekt wird für die Trankherstellung benutzt und kann mit Wurftränken kombiniert werden, um Verweiltränke herzustellen. - -Healing=Heilung -+4 HP=+4 TP -+8 HP=+8 TP -Instantly heals.=Heilt sofort. -Harming=Verletzung --6 HP=-6 TP --12 HP=-12 TP -Instantly deals damage.=Richtet sofort Schaden an. -Night Vision=Nachtsicht -Increases the perceived brightness of light under a dark sky.=Erhöht die wahrgenommene Helligkeit des Lichts unter einem dunklem Himmel. -Swiftness=Schnelligkeit -Increases walking speed.=Erhöht Gehgeschwindigkeit. -Slowness=Langsamkeit -Decreases walking speed.=Verringert Gehgeschwindigkeit. -Leaping=Sprungkraft -Increases jump strength.=Erhöht Sprungstärke. -Poison=Vergiftung -Applies the poison effect which deals damage at a regular interval.=Gibt den Gifteffekt, der Schaden in regelmäßigen Abständen anrichtet. -Regeneration=Regenerierung -Regenerates health over time.=Regeneriert Gesundheit mit der Zeit. -Invisibility=Unsichtbarkeit -Grants invisibility.=Gibt Unsichtbarkeit. -Water Breathing=Wasseratmung -Grants limitless breath underwater.=Gibt unbegrenzten Atem im Wasser. -Fire Resistance=Feuerresistenz -Grants immunity to damage from heat sources like fire.=Gibt Immunität gegenüber Schaden von Hitzequellen wie Feuer. -Weakness=Schwäche -Weakness +=Schwäche + -Strength=Stärke -Strength II=Stärke II -Strength +=Stärke + -Try different combinations to create potions.=Probieren Sie Kombinationen aus, um Tränke herzustellen. -No effect=Keine Wirkung - -A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Ein werfbarer Trank, der bei Kollision zerbrechen wird, wo er allen nahen Spielern und Mobs einen Statuseffekt geben wird. - -This particular arrow is tipped and will give an effect when it hits a player or mob.=Diese Pfeilspitze dieses Pfeils in einem Trank getränkt und gibt einen Effekt, wenn er einen Spieler oder einen Mob trifft. diff --git a/mods/ITEMS/mcl_potions/locale/mcl_potions.es.tr b/mods/ITEMS/mcl_potions/locale/mcl_potions.es.tr deleted file mode 100644 index efa990247..000000000 --- a/mods/ITEMS/mcl_potions/locale/mcl_potions.es.tr +++ /dev/null @@ -1,115 +0,0 @@ -# textdomain: mcl_potions - []= - -Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 @= 100%)= - -Missing effect parameter!= -Missing or invalid duration parameter!= -Invalid factor parameter!= -@1 is not an available status effect.= -Fermented Spider Eye=Ojo de araña fermentado -Glass Bottle=Frasco de cristal -Liquid container= - -A glass bottle is used as a container for liquids and can be used to collect water directly.=El frasco de cristal se usa como recipiente para líquidos y se puede usar para recoger agua directamente. - -To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Para recoger agua, colóquela en un caldero con agua (que elimina un nivel de agua) o cualquier fuente de agua (que no elimine agua). - -Water Bottle=Frasco de cristal con agua -Water bottles can be used to fill cauldrons. Drinking water has no effect.=Las botellas de agua se pueden usar para llenar calderos. El agua potable no tiene efecto. - -Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.=Use la tecla "Acción" para beber. Coloque este artículo en un caldero para verter el agua en el caldero. - -River Water Bottle=Frasco de cristal con agua de rio -River water bottles can be used to fill cauldrons. Drinking it has no effect.=Las botellas de agua de río se pueden usar para llenar calderos. Beberlo no tiene ningún efecto. - -Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Use la tecla "Acción" para beber. Coloque este artículo en un caldero para verter el agua de río en el caldero. - -Splash Water Bottle= -Extinguishes fire and hurts some mobs= - -A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.= - -Lingering Water Bottle= - -A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.= - -Glistering Melon=Rodaja de sandía reluciente - -This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Esta sandía brillante está llena de pequeñas pepitas de oro y sería bueno en un marco de artículo. No es comestible y no es útil para nada más. - -A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.= - -Use the “Punch” key to throw it.= -Use the “Place” key to drink it.=Use la tecla "Colocar" para beberlo. -Drinking a potion gives you a particular effect.= -1 HP/@1s | @2= -@1 HP= -@1 Potion= -Splash @1 Potion= -Lingering @1 Potion= -Arrow of @1= - II= - IV= -@1 Potion@2= -Splash @1@2 Potion= -Lingering @1@2 Potion= -Arrow of @1@2= -@1 + Potion= -Splash @1 + Potion= -Lingering @1 + Potion= -Arrow of @1 += -Awkward Potion=Poción incomoda -Awkward Splash Potion= -Awkward Lingering Potion= -Has an awkward taste and is used for brewing potions.= -Mundane Potion=Poción Mundana -Mundane Splash Potion= -Mundane Lingering Potion= -Has a terrible taste and is not useful for brewing potions.= -Thick Potion=Poción densa -Thick Splash Potion= -Thick Lingering Potion= -Has a bitter taste and is not useful for brewing potions.= -Dragon's Breath=Aliento de dragón - -This item is used in brewing and can be combined with splash potions to create lingering potions.= - -Healing= -+4 HP= -+8 HP= -Instantly heals.= -Harming= --6 HP= --12 HP= -Instantly deals damage.= -Night Vision= -Increases the perceived brightness of light under a dark sky.= -Swiftness= -Increases walking speed.= -Slowness= -Decreases walking speed.= -Leaping= -Increases jump strength.= -Poison= -Applies the poison effect which deals damage at a regular interval.= -Regeneration= -Regenerates health over time.= -Invisibility= -Grants invisibility.= -Water Breathing= -Grants limitless breath underwater.= -Fire Resistance= -Grants immunity to damage from heat sources like fire.= -Weakness= -Weakness += -Strength= -Strength II= -Strength += -Try different combinations to create potions.= -No effect= - -A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.= - -This particular arrow is tipped and will give an effect when it hits a player or mob.= - diff --git a/mods/ITEMS/mcl_potions/locale/mcl_potions.fr.tr b/mods/ITEMS/mcl_potions/locale/mcl_potions.fr.tr deleted file mode 100644 index f3850a7b6..000000000 --- a/mods/ITEMS/mcl_potions/locale/mcl_potions.fr.tr +++ /dev/null @@ -1,115 +0,0 @@ -# textdomain: mcl_potions - []= [] - -Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 @= 100%)=Ajoutez-vous un effet de statut. Arguments: : nom de l'effet de statut, par ex. poison. : durée en secondes. : multiplicateur de force d'effet (1 @ = 100%) - -Missing effect parameter!=Paramètre d'effet manquant! -Missing or invalid duration parameter!=Paramètre durée manquant ou invalide! -Invalid factor parameter!=Paramètre facteur invalide! -@1 is not an available status effect.=@1 n'est pas un effet disponible. -Fermented Spider Eye=Oeil d'araignée fermenté -Glass Bottle=Bouteille en verre -Liquid container=Récipient de liquide - -A glass bottle is used as a container for liquids and can be used to collect water directly.=Une bouteille en verre est utilisée comme récipient pour les liquides et peut être utilisée pour collecter l'eau directement. - -To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Pour collecter l'eau, poser la sur un chaudron avec de l'eau (qui enlève un niveau d'eau) ou toute source d'eau (qui n'enlève pas d'eau). - -Water Bottle=Bouteille d'eau -Water bottles can be used to fill cauldrons. Drinking water has no effect.=Les bouteilles d'eau peuvent être utilisées pour remplir les chaudrons. L'eau potable n'a aucun effet. - -Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.=Utilisez la touche "Utiliser" pour boire. Placez cet article sur un chaudron pour verser l'eau dans le chaudron. - -River Water Bottle=Bouteille d'eau de rivière -River water bottles can be used to fill cauldrons. Drinking it has no effect.=Les bouteilles d'eau de rivière peuvent être utilisées pour remplir les chaudrons. Le boire n'a aucun effet. - -Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Utilisez la touche "Utiliser" pour boire. Placez cet objet sur un chaudron pour verser l'eau de la rivière dans le chaudron. - -Splash Water Bottle=Bouteille d'eau jetable -Extinguishes fire and hurts some mobs=Éteint le feu et blesse certains mobs - -A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.=Une bouteille d'eau jetable qui se brisera à l'impact, où elle éteint le feu à proximité et blesse les mobs vulnérables à l'eau. - -Lingering Water Bottle=Bouteille d'eau persistante - -A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.=Une bouteille d'eau jetable qui se brisera à l'impact, où elle crée un nuage de vapeur d'eau qui s'attarde au sol pendant un moment. Ce nuage éteint le feu et blesse les mobs vulnérables à l'eau. - -Glistering Melon=Melon étincelant - -This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Ce melon brillant est plein de minuscules pépites d'or et serait bien dans un cadre d'objet. Il n'est pas comestible et n'est utile à rien d'autre. - -A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=Une potion jetable qui se brisera à l'impact, où elle crée un nuage magique qui persiste pendant un moment. Tout joueur ou mob à l'intérieur du nuage recevra l'effet de la potion, peut-être à plusieurs reprises. - -Use the “Punch” key to throw it.=Utilisez la touche "Frapper" pour le lancer. -Use the “Place” key to drink it.=Utilisez la touche "Utiliser" pour le boire. -Drinking a potion gives you a particular effect.=Boire une potion vous donne un effet particulier. -1 HP/@1s | @2=1 HP/@1s | @2 -@1 HP=@1 HP -@1 Potion=Potion @1 -Splash @1 Potion=Potion @1 jetable -Lingering @1 Potion=Potion @1 persistante -Arrow of @1=Flêche de @1 - II= II - IV= IV -@1 Potion@2=@1 Potion@2 -Splash @1@2 Potion=Potion @1@2 jetable -Lingering @1@2 Potion=Potion @1@2 persistante -Arrow of @1@2=Flêche de @1@2 -@1 + Potion=@1 + Potion -Splash @1 + Potion=Potion @1 + jetable -Lingering @1 + Potion=Potion @1 + persistante -Arrow of @1 +=Flêche de @1 + -Awkward Potion=Potion étrange -Awkward Splash Potion=Potion étrange jetable -Awkward Lingering Potion=Potion étrange persistante -Has an awkward taste and is used for brewing potions.=A un goût étrange et est utilisé pour préparer des potions. -Mundane Potion=Potion banale -Mundane Splash Potion=Potion banale jetable -Mundane Lingering Potion=Potion banale persistante -Has a terrible taste and is not useful for brewing potions.=A un goût terrible et n'est pas utile pour préparer des potions. -Thick Potion=Potion épaisse -Thick Splash Potion=Potion épaisse jetable -Thick Lingering Potion=Potion épaisse persistante -Has a bitter taste and is not useful for brewing potions.=A un goût amer et n'est pas utile pour préparer des potions. -Dragon's Breath=Souffle du dragon - -This item is used in brewing and can be combined with splash potions to create lingering potions.=Cet objet est utilisé dans le brassage et peut être combiné avec des potions d'éclaboussures pour créer des potions persistantes. - -Healing=Guérison -+4 HP=+4 HP -+8 HP=+8 HP -Instantly heals.=Guérit instantanément. -Harming=Dégâts --6 HP=-6 HP --12 HP=-12 HP -Instantly deals damage.=Instantly deals damage. -Night Vision=Vision Nocturne -Increases the perceived brightness of light under a dark sky.=Augmente la luminosité perçue de la lumière sous un ciel sombre. -Swiftness=Rapidité -Increases walking speed.=Augmente la vitesse de marche. -Slowness=Lenteur -Decreases walking speed.=Diminue la vitesse de marche. -Leaping=Saut -Increases jump strength.=Augmente la force de saut. -Poison=Poison -Applies the poison effect which deals damage at a regular interval.=Applique l'effet de poison qui inflige des dégâts à intervalle régulier. -Regeneration=Régénération -Regenerates health over time.=Régénère la santé au fil du temps. -Invisibility=Invisibilité -Grants invisibility.=Accorde l'invisibilité. -Water Breathing=Respiration Aquatique -Grants limitless breath underwater.=Donne une respiration illimitée sous l'eau. -Fire Resistance=Résistance au Feu -Grants immunity to damage from heat sources like fire.=Confère une immunité aux dommages causés par des sources de chaleur comme le feu. -Weakness=Faiblesse -Weakness +=Faiblesse + -Strength=Force -Strength II=Force II -Strength +=Force + -Try different combinations to create potions.=Essayez différentes combinaisons pour créer des potions. -No effect=Aucun effet - -A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Une potion jetable qui se brisera à l'impact, où elle donne à tous les joueurs et créatures proches un effet de statut. - -This particular arrow is tipped and will give an effect when it hits a player or mob.=Cette flèche particulière est enchantée et donnera un effet lorsqu'elle touche un joueur ou un mob. - diff --git a/mods/ITEMS/mcl_potions/locale/mcl_potions.pl.tr b/mods/ITEMS/mcl_potions/locale/mcl_potions.pl.tr deleted file mode 100644 index abf61d4d3..000000000 --- a/mods/ITEMS/mcl_potions/locale/mcl_potions.pl.tr +++ /dev/null @@ -1,115 +0,0 @@ -# textdomain: mcl_potions - []= [] - -Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 @= 100%)=Dodaj status na siebie. Argumenty: : nazwa efektu statusu, np. trucizna. : czas trwania w sekundach. : czynnik siły efektu (1 @= 100%) - -Missing effect parameter!=Brak parametru efektu! -Missing or invalid duration parameter!=Brak lub nieprawidłowy parametr czasu trwania! -Invalid factor parameter!=Nieprawidłowy parametr czynnika! -@1 is not an available status effect.=@1 nie jest dostępnym efektem statusu. -Fermented Spider Eye=Fermentowane oko pająka -Glass Bottle=Szklana butelka -Liquid container=Pojemnik na płyn - -A glass bottle is used as a container for liquids and can be used to collect water directly.=Szklana butelka jest używana jako pojemnik na płyny i może być wykorzystana bezpośrednio do pozyskiwania wody. - -To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Aby pozyskać wodę użyj jej na kotle z wodą (co usunie jeden poziom wody) lub jakimkolwiek źródle wody (co nie usunie wody). - -Water Bottle=Butelka wody -Water bottles can be used to fill cauldrons. Drinking water has no effect.=Butelka wody może być wykorzystana do napełniania kotłów. Picie wody nie ma żadnych efektów. - -Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.=Użyj przycisku do stawiania aby pić. Postaw ten przedmiot na kotle aby wylać wodę do kotła. - -River Water Bottle=Butelka wody rzecznej -River water bottles can be used to fill cauldrons. Drinking it has no effect.=Butelka wody rzecznej może być wykorzystana do napełniania kotłów. Picie jej nie ma żadnego efektu. - -Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Użyj przycisku do stawiania aby pić. Postaw ten przedmiot na kotle aby wylać wodę rzeczną do kotła. - -Splash Water Bottle=Miotana butelka wody -Extinguishes fire and hurts some mobs=Gasi ogień i rani niektóre moby - -A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.=Butelka wody którą można rzucać i roztrzaska się przy uderzeniu, gdzie ugasi ogień i rani moby podatne na wodę. - -Lingering Water Bottle=Trwała miotana butelka wody - -A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.=Butelka wody którą można rzucać i roztrzaska się przy uderzeniu tworząc opary wody pozostające przez chwilę na ziemi. Opary te gaszą ogień i ranią moby podatne na wodę. - -Glistering Melon=Błyszczący arbuz - -This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Ten błyszczący arbuz jest pełen tycich odłamków złota i wygląda ładnie w ramkach na przedmioty. Nie jest jadalny ani użyteczny do innych rzeczy. - -A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=Mikstura którą można rzucać i roztrzaska się przy uderzeniu tworząc magiczne opary pozostające przez chwilę na ziemi. Jakikolwiek gracz lub mob wewnątrz oparów będzie wystawiony na efekt mikstury. - -Use the “Punch” key to throw it.=Użyj przycisku "Uderz" by rzucić. -Use the “Place” key to drink it.=Użyj przycisku "Postaw" by wypić. -Drinking a potion gives you a particular effect.=Wypicie mikstury sprawi, że będziesz wystawiona na jej efekty. -1 HP/@1s | @2=1 HP/@1s | @2 -@1 HP=@1 HP -@1 Potion=Mikstura @1 -Splash @1 Potion=Miotana mikstura @1 -Lingering @1 Potion=Trwała miotana mikstura @1 -Arrow of @1=Strzała @1 - II= II - IV= IV -@1 Potion@2=Mikstura @1@2 -Splash @1@2 Potion=Miotana mikstura @1@2 -Lingering @1@2 Potion=Trwała miotana mikstura @1@2 -Arrow of @1@2=Strzała @1@2 -@1 + Potion=Mikstura @1 + -Splash @1 + Potion=Miotana mikstura @1 + -Lingering @1 + Potion=Trwała miotana mikstura @1 + -Arrow of @1 +=Strzała @1 + -Awkward Potion=Klarowna mikstura -Awkward Splash Potion=Klarowna miotana mikstura -Awkward Lingering Potion=Klarowna trwała miotana mikstura -Has an awkward taste and is used for brewing potions.=Ma dziwny smak i jest użyteczna przy warzenia mikstur. -Mundane Potion=Mdła mikstura -Mundane Splash Potion=Mdła miotana mikstura -Mundane Lingering Potion=Mdła trwała miotana mikstura -Has a terrible taste and is not useful for brewing potions.=Ma ohydny smak i nie jest użyteczna przy warzenia mikstur. -Thick Potion=Gęsta mikstura -Thick Splash Potion=Gęsta miotana mikstura -Thick Lingering Potion=Gęsta trwała miotana mikstura -Has a bitter taste and is not useful for brewing potions.=Ma cierpki smak i nie jest użyteczna przy warzenia mikstur. -Dragon's Breath=Oddech smoka - -This item is used in brewing and can be combined with splash potions to create lingering potions.=Ten przedmiot jest używany przy warzeniu i może zostać dodany do miotanych mikstur aby uczynić je trwałymi. - -Healing=leczenia -+4 HP=+4 HP -+8 HP=+8 HP -Instantly heals.=Natychmiastowo leczy. -Harming=obrażeń --6 HP=-6 HP --12 HP=-12 HP -Instantly deals damage.=Natychmiastowo zadaje obrażenia. -Night Vision=widzenia w ciemności -Increases the perceived brightness of light under a dark sky.=Zwiększa postrzeganą jasność przy ciemnym niebie. -Swiftness=prędkości -Increases walking speed.=Zwiększa prędkość poruszania. -Slowness=spowolnienia -Decreases walking speed.=Zmniejsza prędkość poruszania. -Leaping=skakania -Increases jump strength.=Zwiększa siłę skoku. -Poison=trucizny -Applies the poison effect which deals damage at a regular interval.=Aplikuje efekt trucizny zadający obrażenia w regularnych odstępach czasu. -Regeneration=regeneracji -Regenerates health over time.=Regeneruje życie przez pewien czas. -Invisibility=niewidzialności -Grants invisibility.=Sprawia, że cel jest niewidzialny. -Water Breathing=oddychania pod wodą -Grants limitless breath underwater.=Sprawia, że cel może oddychać pod wodą. -Fire Resistance=odporności na ogień -Grants immunity to damage from heat sources like fire.=Sprawia, że cel jest odporny na obrażenia od źródeł ciepła takich jak ogień. -Weakness=słabości -Weakness +=słabości + -Strength=siły -Strength II=siły II -Strength +=siły + -Try different combinations to create potions.=Spróbuj innej kombinacji aby stworzyć miksturę. -No effect=Brak efektu - -A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Mikstura, którą można rzucić i rozbije się przy uderzeniu wystawiając wszystkich pobliskich graczy i moby na efekt jej działania. - -This particular arrow is tipped and will give an effect when it hits a player or mob.=Czubek tej strzały jest zanurzony w miksturze co wystawi jej cel na efekt jej działania. - diff --git a/mods/ITEMS/mcl_potions/locale/mcl_potions.ru.tr b/mods/ITEMS/mcl_potions/locale/mcl_potions.ru.tr deleted file mode 100644 index 2bc4380ec..000000000 --- a/mods/ITEMS/mcl_potions/locale/mcl_potions.ru.tr +++ /dev/null @@ -1,116 +0,0 @@ -# textdomain: mcl_potions - []=<эффект> <длительность> [<фактор>] - -Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 @= 100%)=Добавляет вам эффект состояния. Параметры: <эффект> - название эффекта состояния, например, poison (отравление). <Длительность> - длительность в секундах. <Фактор> - коэффициент силы эффекта (1 @= 100%) - -Missing effect parameter!=Отсутствует параметр эффекта! -Missing or invalid duration parameter!=Отсутствует либо неправильно задан параметр длительности! -Invalid factor parameter!=Отсутствует параметр фактора! -@1 is not an available status effect.=@1 не является допустимым эффектом состояния. -Fermented Spider Eye=Прокисший паучий глаз -Glass Bottle=Стеклянная бутылка -Liquid container=Контейнер для жидкостей - -A glass bottle is used as a container for liquids and can be used to collect water directly.=Стеклянная бутылка используется для хранения жидкостей, её также можно использовать для сбора воды. - -To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Воду в бутылку можно набрать из котла с помощью команды [Использовать] (это уменьшает уровень воды в котле) или из другого источника (уровень которого не уменьшится). - -Water Bottle=Бутылка с водой -Water bottles can be used to fill cauldrons. Drinking water has no effect.=Бутылки с водой можно использовать для наполнения котлов. Выпивание воды не даст никакого эффекта. - -Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.=Используйте клавишу “Разместить”, чтобы выпить это. Поместите этот предмет на котёл, чтобы вылить воду в котёл. - -River Water Bottle=Бутылка с речной водой -River water bottles can be used to fill cauldrons. Drinking it has no effect.=Бутылки с речной водой можно использовать для наполнения котлов. Выпивание воды не даст никакого эффекта. - -Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Используйте клавишу “Разместить”, чтобы выпить это. Поместите этот предмет на котёл, чтобы вылить речную воду в котёл. - -Splash Water Bottle=Бутылка со взрывающейся водой -Extinguishes fire and hurts some mobs=Тушит огонь и ранит некоторых мобов - -A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.=Бутылка с водой, которую можно метать. Она разбивается при ударе, тушит ближайший огонь и ранит мобов, уязвимых к воде. - -Lingering Water Bottle=Бутылка с оседающей водой - -A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.=Бутылка с водой, которую можно метать. Она разбивается при ударе, образуя облако пара, которое оседает на землю через некоторое время. Это облако тушит огонь и ранит мобов, уязвимых к воде. - -Glistering Melon=Искрящаяся дыня - -This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Искрящаяся дыня полна маленьких золотых самородков и может отлично смотреться в рамке. Она несъедобна и не годится больше ни для чего. - -A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=Зелье, которое можно метать. При ударе оно разбивается, создавая волшебное облако, которое задерживается на некоторое время. Любой игрок или моб внутри облака получит эффект зелья, возможно, неоднократно. - -Use the “Punch” key to throw it.=Нажмите [Ударить] для метания. -Use the “Place” key to drink it.=Нажмите [Разместить] для выпивания. -Drinking a potion gives you a particular effect.=Выпивание зелья даёт вам особый эффект. -1 HP/@1s | @2=1 HP/@1с | @2 -@1 HP=@1 HP -@1 Potion=Зелье @1 -Splash @1 Potion=Взрывающееся зелье @1 -Lingering @1 Potion=Оседающее зелье @1 -Arrow of @1=Стрела @1 - II= II - IV= IV -@1 Potion@2=Зелье @1 @2 -Splash @1@2 Potion=Взрывающееся зелье @1@2 -Lingering @1@2 Potion=Оседающее зелье @1@2 -Arrow of @1@2=Стрела @1@2 -@1 + Potion=Зелье @1+ -Splash @1 + Potion=Взрывающееся зелье @1+ -Lingering @1 + Potion=Оседающее зелье @1+ -Arrow of @1 +=Стрела @1+ -Awkward Potion=Невкусное зелье -Awkward Splash Potion=Невкусное взрывающееся зелье -Awkward Lingering Potion=Невкусное оседающее зелье -Has an awkward taste and is used for brewing potions.=Имеет неприятный вкус и используется для приготовления других зелий. -Mundane Potion=Успокоительное зелье -Mundane Splash Potion=Успокоительное взрывающееся зелье -Mundane Lingering Potion=Успокоительное оседающее зелье -Has a terrible taste and is not useful for brewing potions.=Имеет отвратительный вкус и используется для приготовления других зелий. -Thick Potion=Густое зелье -Thick Splash Potion=Густое взрывающееся зелье -Thick Lingering Potion=Густое оседающее зелье -Has a bitter taste and is not useful for brewing potions.=Имеет горький вкус и используется для приготовления других зелий. -Dragon's Breath=Дыхание дракона - -This item is used in brewing and can be combined with splash potions to create lingering potions.=Этот предмет используется в зельеварении и может объединяться со взрывающимися зельями, чтобы создать эффект оседания - -Healing=исцеления -+4 HP=+4 HP -+8 HP=+8 HP -Instantly heals.=Лечит мгновенно -Harming=урона --6 HP=-6 HP --12 HP=-12 HP -Instantly deals damage.=Вызывает мгновенную смерть. -Night Vision=ночного зрения -Increases the perceived brightness of light under a dark sky.=Усиливает восприятие яркости освещения под тёмным небом. -Swiftness=ускорения -Increases walking speed.=Увеличивает скорость ходьбы -Slowness=замедления -Decreases walking speed.=Уменьшает скорость ходьбы -Leaping=прыгучести -Increases jump strength.=Увеличивает силу прыжка -Poison=отравления -Applies the poison effect which deals damage at a regular interval.=Наносит эффект яда, который вызывает урон через равные промежутки времени. -Regeneration=восстановления -Regenerates health over time.=Восстанавливает здоровье со временем. -Invisibility=невидимости -Grants invisibility.=Делает невидимым. -Water Breathing=подводного дыхания -Grants limitless breath underwater.=Даёт возможность неограниченно дышать под водой. -Fire Resistance=огнестойкости -Grants immunity to damage from heat sources like fire.=Делает невосприимчивым к урону от источников тепла, например, от огня. -Weakness=Слабость -Weakness +=Слабость + -Strength=Сила -Strength II=Сила II -Strength +=Сила + -Try different combinations to create potions.=Пробуйте разные сочетания для приготовления зелий. -No effect=Не оказывает эффекта - -A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Зелье, которое можно метать. Оно разбивается при ударе и он дает всем ближайшим игрокам и мобам эффект состояния. - -This particular arrow is tipped and will give an effect when it hits a player or mob.=Эта необычная стрела с обработанным наконечником даёт эффект при попадании в игрока или моба. - - diff --git a/mods/ITEMS/mcl_potions/locale/template.txt b/mods/ITEMS/mcl_potions/locale/template.txt deleted file mode 100644 index 1420dabee..000000000 --- a/mods/ITEMS/mcl_potions/locale/template.txt +++ /dev/null @@ -1,115 +0,0 @@ -# textdomain: mcl_potions - []= - -Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 @= 100%)= - -Missing effect parameter!= -Missing or invalid duration parameter!= -Invalid factor parameter!= -@1 is not an available status effect.= -Fermented Spider Eye= -Glass Bottle= -Liquid container= - -A glass bottle is used as a container for liquids and can be used to collect water directly.= - -To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).= - -Water Bottle= -Water bottles can be used to fill cauldrons. Drinking water has no effect.= - -Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.= - -River Water Bottle= -River water bottles can be used to fill cauldrons. Drinking it has no effect.= - -Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.= - -Splash Water Bottle= -Extinguishes fire and hurts some mobs= - -A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.= - -Lingering Water Bottle= - -A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.= - -Glistering Melon= - -This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.= - -A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.= - -Use the “Punch” key to throw it.= -Use the “Place” key to drink it.= -Drinking a potion gives you a particular effect.= -1 HP/@1s | @2= -@1 HP= -@1 Potion= -Splash @1 Potion= -Lingering @1 Potion= -Arrow of @1= - II= - IV= -@1 Potion@2= -Splash @1@2 Potion= -Lingering @1@2 Potion= -Arrow of @1@2= -@1 + Potion= -Splash @1 + Potion= -Lingering @1 + Potion= -Arrow of @1 += -Awkward Potion= -Awkward Splash Potion= -Awkward Lingering Potion= -Has an awkward taste and is used for brewing potions.= -Mundane Potion= -Mundane Splash Potion= -Mundane Lingering Potion= -Has a terrible taste and is not useful for brewing potions.= -Thick Potion= -Thick Splash Potion= -Thick Lingering Potion= -Has a bitter taste and is not useful for brewing potions.= -Dragon's Breath= - -This item is used in brewing and can be combined with splash potions to create lingering potions.= - -Healing= -+4 HP= -+8 HP= -Instantly heals.= -Harming= --6 HP= --12 HP= -Instantly deals damage.= -Night Vision= -Increases the perceived brightness of light under a dark sky.= -Swiftness= -Increases walking speed.= -Slowness= -Decreases walking speed.= -Leaping= -Increases jump strength.= -Poison= -Applies the poison effect which deals damage at a regular interval.= -Regeneration= -Regenerates health over time.= -Invisibility= -Grants invisibility.= -Water Breathing= -Grants limitless breath underwater.= -Fire Resistance= -Grants immunity to damage from heat sources like fire.= -Weakness= -Weakness += -Strength= -Strength II= -Strength += -Try different combinations to create potions.= -No effect= - -A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.= - -This particular arrow is tipped and will give an effect when it hits a player or mob.= - diff --git a/mods/ITEMS/mcl_potions/mod.conf b/mods/ITEMS/mcl_potions/mod.conf deleted file mode 100644 index bcb6d8ad3..000000000 --- a/mods/ITEMS/mcl_potions/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_potions -depends = mcl_core, mcl_farming, mcl_mobitems, mcl_fishing, mcl_bows, mcl_end, mcl_weather, playerphysics, mcl_wip diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua deleted file mode 100644 index 3d89d1d40..000000000 --- a/mods/ITEMS/mcl_potions/potions.lua +++ /dev/null @@ -1,728 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) ---local brewhelp = S("Try different combinations to create potions.") - -local function potion_image(colorstring, opacity) - if not opacity then - opacity = 127 - end - return "mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_potion_bottle.png" -end - -local how_to_drink = S("Use the “Place” key to drink it.") -local potion_intro = S("Drinking a potion gives you a particular effect.") - -local function time_string(dur) - if not dur then - return nil - end - return math.floor(dur/60)..string.format(":%02d",math.floor(dur % 60)) -end -local function perc_string(num) - - local rem = math.floor((num-1.0)*100 + 0.1) % 5 - local out = math.floor((num-1.0)*100 + 0.1) - rem - - if (num - 1.0) < 0 then - return out.."%" - else - return "+"..out.."%" - end -end - - --- ██████╗░███████╗░██████╗░██╗░██████╗████████╗███████╗██████╗░ --- ██╔══██╗██╔════╝██╔════╝░██║██╔════╝╚══██╔══╝██╔════╝██╔══██╗ --- ██████╔╝█████╗░░██║░░██╗░██║╚█████╗░░░░██║░░░█████╗░░██████╔╝ --- ██╔══██╗██╔══╝░░██║░░╚██╗██║░╚═══██╗░░░██║░░░██╔══╝░░██╔══██╗ --- ██║░░██║███████╗╚██████╔╝██║██████╔╝░░░██║░░░███████╗██║░░██║ --- ╚═╝░░╚═╝╚══════╝░╚═════╝░╚═╝╚═════╝░░░░╚═╝░░░╚══════╝╚═╝░░╚═╝ --- --- ██████╗░░█████╗░████████╗██╗░█████╗░███╗░░██╗░██████╗ --- ██╔══██╗██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║██╔════╝ --- ██████╔╝██║░░██║░░░██║░░░██║██║░░██║██╔██╗██║╚█████╗░ --- ██╔═══╝░██║░░██║░░░██║░░░██║██║░░██║██║╚████║░╚═══██╗ --- ██║░░░░░╚█████╔╝░░░██║░░░██║╚█████╔╝██║░╚███║██████╔╝ --- ╚═╝░░░░░░╚════╝░░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝╚═════╝░ - - -function return_on_use(def, effect, dur) - return function (itemstack, user, pointed_thing) - if pointed_thing.type == "node" then - if user and not user:get_player_control().sneak then - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - end - elseif pointed_thing.type == "object" then - return itemstack - end - - def.on_use(user, effect, dur) - local old_name, old_count = itemstack:get_name(), itemstack:get_count() - itemstack = minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) - if old_name ~= itemstack:get_name() or old_count ~= itemstack:get_count() then - mcl_potions._use_potion(itemstack, user, def.color) - end - return itemstack - end -end - - -local function register_potion(def) - - local dur = mcl_potions.DURATION - - if def.is_inv then - dur = dur * mcl_potions.INV_FACTOR - end - if def.name == "poison" or def.name == "regeneration" then - dur = 45 - end - - local on_use = nil - - if def.on_use then - on_use = return_on_use(def, def.effect, dur) - end - - local function get_tt(tt, effect, dur) - local _tt - if effect and def.is_dur then - _tt = perc_string(effect).." | "..time_string(dur) - if def.name == "poison" or def.name == "regeneration" then - _tt = S("1 HP/@1s | @2", effect, time_string(dur)) - end - elseif def.name == "healing" or def.name == "harming" then - _tt = S("@1 HP", effect) - else - _tt = tt or time_string(dur) or S("No effect") - end - return _tt - end - - local function get_splash_fun(effect, sp_dur) - if def.is_dur then - return function(player, redx) def.on_use(player, effect, sp_dur*redx) end - elseif def.effect then - return function(player, redx) def.on_use(player, effect*redx, sp_dur) end - end - -- covers case of no effect (water, awkward, mundane) - return function() end - end - - local function get_lingering_fun(effect, ling_dur) - if def.is_dur then - return function(player) def.on_use(player, effect, ling_dur) end - elseif def.effect then - return function(player) def.on_use(player, effect*0.5, ling_dur) end - end - -- covers case of no effect (water, awkward, mundane) - return function() end - end - - local function get_arrow_fun(effect, dur) - if def.is_dur then - return function(player) def.on_use(player, effect, dur) end - elseif def.effect then - return function(player) def.on_use(player, effect, dur) end - end - -- covers case of no effect (water, awkward, mundane) - return function() end - end - - local desc - if not def.no_potion then - if def.description_potion then - desc = def.description_potion - else - desc = S("@1 Potion", def.description) - end - else - desc = def.description - end - local potion_longdesc = def._longdesc - if not def.no_effect then - potion_longdesc = potion_intro .. "\n" .. def._longdesc - end - local potion_usagehelp - local basic_potion_tt - if def.name ~= "dragon_breath" then - potion_usagehelp = how_to_drink - basic_potion_tt = get_tt(def._tt, def.effect, dur) - end - - minetest.register_craftitem("mcl_potions:"..def.name, { - description = desc, - _tt_help = basic_potion_tt, - _doc_items_longdesc = potion_longdesc, - _doc_items_usagehelp = potion_usagehelp, - stack_max = def.stack_max or 1, - inventory_image = def.image or potion_image(def.color), - wield_image = def.image or potion_image(def.color), - groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1 }, - on_place = on_use, - on_secondary_use = on_use, - }) - - -- Register Splash and Lingering - local splash_dur = dur * mcl_potions.SPLASH_FACTOR - local ling_dur = dur * mcl_potions.LINGERING_FACTOR - - local splash_def = { - tt = get_tt(def._tt, def.effect, splash_dur), - longdesc = def._longdesc, - potion_fun = get_splash_fun(def.effect, splash_dur), - no_effect = def.no_effect, - instant = def.instant, - } - - local ling_def - if def.name == "healing" or def.name == "harming" then - ling_def = { - tt = get_tt(def._tt, def.effect*mcl_potions.LINGERING_FACTOR, ling_dur), - longdesc = def._longdesc, - potion_fun = get_lingering_fun(def.effect*mcl_potions.LINGERING_FACTOR, ling_dur), - no_effect = def.no_effect, - instant = def.instant, - } - else - ling_def = { - tt = get_tt(def._tt, def.effect, ling_dur), - longdesc = def._longdesc, - potion_fun = get_lingering_fun(def.effect, ling_dur), - no_effect = def.no_effect, - instant = def.instant, - } - end - - local arrow_def = { - tt = get_tt(def._tt, def.effect, dur/8.), - longdesc = def._longdesc, - potion_fun = get_arrow_fun(def.effect, dur/8.), - no_effect = def.no_effect, - instant = def.instant, - } - - if def.color and not def.no_throwable then - local desc - if def.description_splash then - desc = def.description_splash - else - desc = S("Splash @1 Potion", def.description) - end - mcl_potions.register_splash(def.name, desc, def.color, splash_def) - if def.description_lingering then - desc = def.description_lingering - else - desc = S("Lingering @1 Potion", def.description) - end - mcl_potions.register_lingering(def.name, desc, def.color, ling_def) - if not def.no_arrow then - mcl_potions.register_arrow(def.name, S("Arrow of @1", def.description), def.color, arrow_def) - end - end - - if def.is_II then - - local desc_mod = S(" II") - - local effect_II - if def.name == "healing" or def.name == "harming" then - effect_II = def.effect*mcl_potions.II_FACTOR - elseif def.name == "poison" or def.name == "regeneration" then - effect_II = 1.2 - else - effect_II = def.effect^mcl_potions.II_FACTOR - end - - local dur_2 = dur / mcl_potions.II_FACTOR - if def.name == "poison" then dur_2 = dur_2 - 1 end - - if def.name == "slowness" then - dur_2 = 20 - effect_II = 0.40 - desc_mod = S(" IV") - end - - on_use = return_on_use(def, effect_II, dur_2) - - minetest.register_craftitem("mcl_potions:"..def.name.."_2", { - description = S("@1 Potion@2", def.description, desc_mod), - _tt_help = get_tt(def._tt_2, effect_II, dur_2), - _doc_items_longdesc = potion_longdesc, - _doc_items_usagehelp = potion_usagehelp, - stack_max = def.stack_max or 1, - inventory_image = def.image or potion_image(def.color), - wield_image = def.image or potion_image(def.color), - groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1}, - on_place = on_use, - on_secondary_use = on_use, - }) - - -- Register Splash and Lingering - local splash_dur_2 = dur_2 * mcl_potions.SPLASH_FACTOR - local ling_dur_2 = dur_2 * mcl_potions.LINGERING_FACTOR - - local splash_def_2 - if def.name == "healing" then - splash_def_2 = { - tt = get_tt(def._tt_2, 7, splash_dur_2), - longdesc = def._longdesc, - potion_fun = get_splash_fun(7, splash_dur_2), - no_effect = def.no_effect, - instant = def.instant, - } - else - splash_def_2 = { - tt = get_tt(def._tt_2, effect_II, splash_dur_2), - longdesc = def._longdesc, - potion_fun = get_splash_fun(effect_II, splash_dur_2), - no_effect = def.no_effect, - instant = def.instant, - } - end - - - local ling_def_2 - if def.name == "healing" or def.name == "harming" then - ling_def_2 = { - tt = get_tt(def._tt_2, effect_II*mcl_potions.LINGERING_FACTOR, ling_dur_2), - longdesc = def._longdesc, - potion_fun = get_lingering_fun(effect_II*mcl_potions.LINGERING_FACTOR, ling_dur_2), - no_effect = def.no_effect, - instant = def.instant, - } - else - ling_def_2 = { - tt = get_tt(def._tt_2, effect_II, ling_dur_2), - longdesc = def._longdesc, - potion_fun = get_lingering_fun(effect_II, ling_dur_2), - no_effect = def.no_effect, - instant = def.instant, - } - end - - local arrow_def_2 = { - tt = get_tt(def._tt_2, effect_II, dur_2/8.), - longdesc = def._longdesc, - potion_fun = get_arrow_fun(effect_II, dur_2/8.), - no_effect = def.no_effect, - instant = def.instant, - } - - if def.color and not def.no_throwable then - mcl_potions.register_splash(def.name.."_2", S("Splash @1@2 Potion", def.description, desc_mod), def.color, splash_def_2) - mcl_potions.register_lingering(def.name.."_2", S("Lingering @1@2 Potion", def.description, desc_mod), def.color, ling_def_2) - if not def.no_arrow then - mcl_potions.register_arrow(def.name.."_2", S("Arrow of @1@2", def.description, desc_mod), def.color, arrow_def_2) - end - end - - end - - if def.is_plus then - - local dur_pl = dur * mcl_potions.PLUS_FACTOR - if def.name == "poison" or def.name == "regeneration" then - dur_pl = 90 - end - - on_use = return_on_use(def, def.effect, dur_pl) - - minetest.register_craftitem("mcl_potions:"..def.name.."_plus", { - description = S("@1 + Potion", def.description), - _tt_help = get_tt(def._tt_plus, def.effect, dur_pl), - _doc_items_longdesc = potion_longdesc, - _doc_items_usagehelp = potion_usagehelp, - stack_max = 1, - inventory_image = def.image or potion_image(def.color), - wield_image = def.image or potion_image(def.color), - groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1}, - on_place = on_use, - on_secondary_use = on_use, - }) - - -- Register Splash - local splash_dur_pl = dur_pl * mcl_potions.SPLASH_FACTOR - local ling_dur_pl = dur_pl * mcl_potions.LINGERING_FACTOR - - local splash_def_pl = { - tt = get_tt(def._tt_plus, def.effect, splash_dur_pl), - longdesc = def._longdesc, - potion_fun = get_splash_fun(def.effect, splash_dur_pl), - no_effect = def.no_effect, - instant = def.instant, - } - local ling_def_pl = { - tt = get_tt(def._tt_plus, def.effect, ling_dur_pl), - longdesc = def._longdesc, - potion_fun = get_lingering_fun(def.effect, ling_dur_pl), - no_effect = def.no_effect, - instant = def.instant, - } - local arrow_def_pl = { - tt = get_tt(def._tt_pl, def.effect, dur_pl/8.), - longdesc = def._longdesc, - potion_fun = get_arrow_fun(def.effect, dur_pl/8.), - no_effect = def.no_effect, - instant = def.instant, - } - if def.color and not def.no_throwable then - mcl_potions.register_splash(def.name.."_plus", S("Splash @1 + Potion", def.description), def.color, splash_def_pl) - mcl_potions.register_lingering(def.name.."_plus", S("Lingering @1 + Potion", def.description), def.color, ling_def_pl) - if not def.no_arrow then - mcl_potions.register_arrow(def.name.."_plus", S("Arrow of @1 +", def.description), def.color, arrow_def_pl) - end - end - - end - -end - - --- ██████╗░░█████╗░████████╗██╗░█████╗░███╗░░██╗ --- ██╔══██╗██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║ --- ██████╔╝██║░░██║░░░██║░░░██║██║░░██║██╔██╗██║ --- ██╔═══╝░██║░░██║░░░██║░░░██║██║░░██║██║╚████║ --- ██║░░░░░╚█████╔╝░░░██║░░░██║╚█████╔╝██║░╚███║ --- ╚═╝░░░░░░╚════╝░░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝ --- --- ██████╗░███████╗███████╗██╗███╗░░██╗██╗████████╗██╗░█████╗░███╗░░██╗░██████╗ --- ██╔══██╗██╔════╝██╔════╝██║████╗░██║██║╚══██╔══╝██║██╔══██╗████╗░██║██╔════╝ --- ██║░░██║█████╗░░█████╗░░██║██╔██╗██║██║░░░██║░░░██║██║░░██║██╔██╗██║╚█████╗░ --- ██║░░██║██╔══╝░░██╔══╝░░██║██║╚████║██║░░░██║░░░██║██║░░██║██║╚████║░╚═══██╗ --- ██████╔╝███████╗██║░░░░░██║██║░╚███║██║░░░██║░░░██║╚█████╔╝██║░╚███║██████╔╝ --- ╚═════╝░╚══════╝╚═╝░░░░░╚═╝╚═╝░░╚══╝╚═╝░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝╚═════╝░ - - -local awkward_def = { - name = "awkward", - description_potion = S("Awkward Potion"), - description_splash = S("Awkward Splash Potion"), - description_lingering = S("Awkward Lingering Potion"), - no_arrow = true, - no_effect = true, - _tt = S("No effect"), - _longdesc = S("Has an awkward taste and is used for brewing potions."), - color = "#0000FF", - groups = {brewitem=1, food=3, can_eat_when_full=1}, - on_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -} - -local mundane_def = { - name = "mundane", - description_potion = S("Mundane Potion"), - description_splash = S("Mundane Splash Potion"), - description_lingering = S("Mundane Lingering Potion"), - no_arrow = true, - no_effect = true, - _tt = S("No effect"), - _longdesc = S("Has a terrible taste and is not useful for brewing potions."), - color = "#0000FF", - on_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -} - -local thick_def = { - name = "thick", - description_potion = S("Thick Potion"), - description_splash = S("Thick Splash Potion"), - description_lingering = S("Thick Lingering Potion"), - no_arrow = true, - no_effect = true, - _tt = S("No effect"), - _longdesc = S("Has a bitter taste and is not useful for brewing potions."), - color = "#0000FF", - on_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -} - -local dragon_breath_def = { - name = "dragon_breath", - description = S("Dragon's Breath"), - no_arrow = true, - no_potion = true, - no_throwable = true, - no_effect = true, - _longdesc = S("This item is used in brewing and can be combined with splash potions to create lingering potions."), - image = "mcl_potions_dragon_breath.png", - groups = { brewitem = 1 }, - on_use = nil, - stack_max = 64, -} - -local healing_def = { - name = "healing", - description = S("Healing"), - _tt = S("+4 HP"), - _tt_2 = S("+8 HP"), - _longdesc = S("Instantly heals."), - color = "#F82423", - effect = 4, - instant = true, - on_use = mcl_potions.healing_func, - is_II = true, -} - - -local harming_def = { - name = "harming", - description = S("Harming"), - _tt = S("-6 HP"), - _tt_II = S("-12 HP"), - _longdesc = S("Instantly deals damage."), - color = "#430A09", - effect = -6, - instant = true, - on_use = mcl_potions.healing_func, - is_II = true, - is_inv = true, -} - -local night_vision_def = { - name = "night_vision", - description = S("Night Vision"), - _tt = nil, - _longdesc = S("Increases the perceived brightness of light under a dark sky."), - color = "#1F1FA1", - effect = nil, - is_dur = true, - on_use = mcl_potions.night_vision_func, - is_plus = true, -} - -local swiftness_def = { - name = "swiftness", - description = S("Swiftness"), - _tt = nil, - _longdesc = S("Increases walking speed."), - color = "#7CAFC6", - effect = 1.2, - is_dur = true, - on_use = mcl_potions.swiftness_func, - is_II = true, - is_plus = true, -} - -local slowness_def = { - name = "slowness", - description = S("Slowness"), - _tt = nil, - _longdesc = S("Decreases walking speed."), - color = "#5A6C81", - effect = 0.85, - is_dur = true, - on_use = mcl_potions.swiftness_func, - is_II = true, - is_plus = true, - is_inv = true, -} - -local leaping_def = { - name = "leaping", - description = S("Leaping"), - _tt = nil, - _longdesc = S("Increases jump strength."), - color = "#22FF4C", - effect = 1.15, - is_dur = true, - on_use = mcl_potions.leaping_func, - is_II = true, - is_plus = true, -} - -local poison_def = { - name = "poison", - description = S("Poison"), - _tt = nil, - _longdesc = S("Applies the poison effect which deals damage at a regular interval."), - color = "#4E9331", - effect = 2.5, - is_dur = true, - on_use = mcl_potions.poison_func, - is_II = true, - is_plus = true, - is_inv = true, -} - -local regeneration_def = { - name = "regeneration", - description = S("Regeneration"), - _tt = nil, - _longdesc = S("Regenerates health over time."), - color = "#CD5CAB", - effect = 2.5, - is_dur = true, - on_use = mcl_potions.regeneration_func, - is_II = true, - is_plus = true, -} - -local invisibility_def = { - name = "invisibility", - description = S("Invisibility"), - _tt = nil, - _longdesc = S("Grants invisibility."), - color = "#7F8392", - is_dur = true, - on_use = mcl_potions.invisiblility_func, - is_plus = true, -} - -local water_breathing_def = { - name = "water_breathing", - description = S("Water Breathing"), - _tt = nil, - _longdesc = S("Grants limitless breath underwater."), - color = "#2E5299", - is_dur = true, - on_use = mcl_potions.water_breathing_func, - is_plus = true, -} - -local fire_resistance_def = { - name = "fire_resistance", - description = S("Fire Resistance"), - _tt = nil, - _longdesc = S("Grants immunity to damage from heat sources like fire."), - color = "#E49A3A", - is_dur = true, - on_use = mcl_potions.fire_resistance_func, - is_plus = true, -} - - - -local defs = { awkward_def, mundane_def, thick_def, dragon_breath_def, - healing_def, harming_def, night_vision_def, swiftness_def, - slowness_def, leaping_def, poison_def, regeneration_def, - invisibility_def, water_breathing_def, fire_resistance_def} - -for _, def in ipairs(defs) do - register_potion(def) -end - - - - --- minetest.register_craftitem("mcl_potions:weakness", { --- description = S("Weakness"), --- _tt_help = TODO, --- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#484D48"), --- inventory_image = potion_image("#484D48"), --- groups = { brewitem=1, food=3, can_eat_when_full=1 }, --- stack_max = 1, --- --- on_place = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION*mcl_potions.INV_FACTOR) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#484D48") --- return itemstack --- end, --- --- on_secondary_use = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION*mcl_potions.INV_FACTOR) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#484D48") --- return itemstack --- end --- }) --- --- minetest.register_craftitem("mcl_potions:weakness_plus", { --- description = S("Weakness +"), --- _tt_help = TODO, --- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#484D48"), --- inventory_image = potion_image("#484D48"), --- groups = { brewitem=1, food=3, can_eat_when_full=1 }, --- stack_max = 1, --- --- on_place = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION_2*mcl_potions.INV_FACTOR) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#484D48") --- return itemstack --- end, --- --- on_secondary_use = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION_2*mcl_potions.INV_FACTOR) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#484D48") --- return itemstack --- end --- }) --- --- minetest.register_craftitem("mcl_potions:strength", { --- description = S("Strength"), --- _tt_help = TODO, --- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#932423"), --- inventory_image = potion_image("#932423"), --- groups = { brewitem=1, food=3, can_eat_when_full=1 }, --- stack_max = 1, --- --- on_place = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#932423") --- return itemstack --- end, --- --- on_secondary_use = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#932423") --- return itemstack --- end --- }) --- --- minetest.register_craftitem("mcl_potions:strength_2", { --- description = S("Strength II"), --- _tt_help = TODO, --- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#932423"), --- inventory_image = potion_image("#932423"), --- groups = { brewitem=1, food=3, can_eat_when_full=1 }, --- stack_max = 1, --- --- on_place = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, 6, mcl_potions.DURATION_2) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#932423") --- return itemstack --- end, --- --- on_secondary_use = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, 6, mcl_potions.DURATION_2) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#932423") --- return itemstack --- end --- }) --- --- minetest.register_craftitem("mcl_potions:strength_plus", { --- description = S("Strength +"), --- _tt_help = TODO, --- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#932423"), --- inventory_image = potion_image("#932423"), --- groups = { brewitem=1, food=3, can_eat_when_full=1 }, --- stack_max = 1, --- --- on_place = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION_PLUS) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#932423") --- return itemstack --- end, --- --- on_secondary_use = function(itemstack, user, pointed_thing) --- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION_PLUS) --- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#932423") --- return itemstack --- end --- }) diff --git a/mods/ITEMS/mcl_potions/sounds/mcl_potions_bottle_fill.ogg b/mods/ITEMS/mcl_potions/sounds/mcl_potions_bottle_fill.ogg deleted file mode 100644 index c78bfee1e..000000000 Binary files a/mods/ITEMS/mcl_potions/sounds/mcl_potions_bottle_fill.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/sounds/mcl_potions_bottle_pour.ogg b/mods/ITEMS/mcl_potions/sounds/mcl_potions_bottle_pour.ogg deleted file mode 100644 index 8acc0c150..000000000 Binary files a/mods/ITEMS/mcl_potions/sounds/mcl_potions_bottle_pour.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/sounds/mcl_potions_breaking_glass.ogg b/mods/ITEMS/mcl_potions/sounds/mcl_potions_breaking_glass.ogg deleted file mode 100755 index 4cb7b5a0d..000000000 Binary files a/mods/ITEMS/mcl_potions/sounds/mcl_potions_breaking_glass.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/sounds/mcl_potions_drinking.ogg b/mods/ITEMS/mcl_potions/sounds/mcl_potions_drinking.ogg deleted file mode 100644 index 6e3978d29..000000000 Binary files a/mods/ITEMS/mcl_potions/sounds/mcl_potions_drinking.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua deleted file mode 100644 index 730796952..000000000 --- a/mods/ITEMS/mcl_potions/splash.lua +++ /dev/null @@ -1,132 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local GRAVITY = tonumber(minetest.settings:get("movement_gravity")) - -local mod_target = minetest.get_modpath("mcl_target") - -local function splash_image(colorstring, opacity) - if not opacity then - opacity = 127 - end - return "mcl_potions_splash_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_splash_bottle.png" -end - - -function mcl_potions.register_splash(name, descr, color, def) - local id = "mcl_potions:"..name.."_splash" - local longdesc = def.longdesc - if not def.no_effect then - longdesc = S("A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.") - if def.longdesc then - longdesc = longdesc .. "\n" .. def.longdesc - end - end - minetest.register_craftitem(id, { - description = descr, - _tt_help = def.tt, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = S("Use the “Punch” key to throw it."), - inventory_image = splash_image(color), - groups = {brewitem=1, not_in_creative_inventory=0}, - on_use = function(item, placer, pointed_thing) - local velocity = 10 - local dir = placer:get_look_dir(); - local pos = placer:get_pos(); - minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true) - local obj = minetest.add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying") - obj:set_velocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}) - obj:set_acceleration({x=dir.x*-3, y=-9.8, z=dir.z*-3}) - obj:get_luaentity()._thrower = placer:get_player_name() - if not minetest.is_creative_enabled(placer:get_player_name()) then - item:take_item() - end - return item - end, - stack_max = 1, - _on_dispense = function(stack, dispenserpos, droppos, dropnode, dropdir) - local s_pos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51)) - local pos = {x=s_pos.x+dropdir.x,y=s_pos.y+dropdir.y,z=s_pos.z+dropdir.z} - minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true) - local obj = minetest.add_entity(pos, id.."_flying") - local velocity = 22 - obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity}) - obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3}) - end - }) - - local w = 0.7 - - minetest.register_entity(id.."_flying",{ - textures = {splash_image(color)}, - hp_max = 1, - visual_size = {x=w/2,y=w/2}, - collisionbox = {-0.1,-0.1,-0.1,0.1,0.1,0.1}, - pointable = false, - on_step = function(self, dtime) - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - local n = node.name - local g = minetest.get_item_group(n, "liquid") - local d = 0.1 - local redux_map = {7/8,0.5,0.25} - if mod_target and n == "mcl_target:target_off" then - mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks - end - if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then - minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) - local texture, acc - if name == "water" then - texture = "mcl_particles_droplet_bottle.png" - acc = {x=0, y=-GRAVITY, z=0} - else - if def.instant then - texture = "mcl_particles_instant_effect.png" - else - texture = "mcl_particles_effect.png" - end - acc = {x=0, y=0, z=0} - end - minetest.add_particlespawner({ - amount = 50, - time = 0.1, - minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+0.5+d, z=pos.z+d}, - minvel = {x=-2, y=0, z=-2}, - maxvel = {x=2, y=2, z=2}, - minacc = acc, - maxacc = acc, - minexptime = 0.5, - maxexptime = 1.25, - minsize = 1, - maxsize = 2, - collisiondetection = true, - vertical = false, - texture = texture.."^[colorize:"..color..":127" - }) - - if name == "water" then - mcl_potions._extinguish_nearby_fire(pos) - end - self.object:remove() - for _,obj in pairs(minetest.get_objects_inside_radius(pos, 4)) do - - local entity = obj:get_luaentity() - if obj:is_player() or entity.is_mob then - - local pos2 = obj:get_pos() - local rad = math.floor(math.sqrt((pos2.x-pos.x)^2 + (pos2.y-pos.y)^2 + (pos2.z-pos.z)^2)) - if rad > 0 then - def.potion_fun(obj, redux_map[rad]) - else - def.potion_fun(obj, 1) - end - end - end - - end - end, - }) -end - ---[[local function time_string(dur) - return math.floor(dur/60)..string.format(":%02d",math.floor(dur % 60)) -end]] diff --git a/mods/ITEMS/mcl_potions/textures/hbhunger_icon_regen_poison.png b/mods/ITEMS/mcl_potions/textures/hbhunger_icon_regen_poison.png deleted file mode 100644 index d4fe9b4e0..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/hbhunger_icon_regen_poison.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/hudbars_icon_regenerate.png b/mods/ITEMS/mcl_potions/textures/hudbars_icon_regenerate.png deleted file mode 100644 index 4ae259897..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/hudbars_icon_regenerate.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_arrow_inv.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_arrow_inv.png deleted file mode 100644 index 4bda14bd5..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_arrow_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_dragon_breath.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_dragon_breath.png deleted file mode 100644 index c5bbddbfa..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_dragon_breath.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_fire_proof.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_fire_proof.png deleted file mode 100644 index f5df4dab6..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_fire_proof.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_food_poisoning.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_food_poisoning.png deleted file mode 100644 index 2490b0cfb..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_food_poisoning.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_invisible.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_invisible.png deleted file mode 100644 index ffefb89bf..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_invisible.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_leaping.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_leaping.png deleted file mode 100644 index 5614729ba..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_leaping.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_night_vision.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_night_vision.png deleted file mode 100644 index 579defa71..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_night_vision.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_poisoned.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_poisoned.png deleted file mode 100644 index 1b96ef2d9..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_poisoned.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_regenerating.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_regenerating.png deleted file mode 100644 index 634b74fad..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_regenerating.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_slow.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_slow.png deleted file mode 100644 index 1869a58ff..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_slow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_strong.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_strong.png deleted file mode 100644 index 2a69bd4a8..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_strong.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_swift.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_swift.png deleted file mode 100644 index 8ae960cc9..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_swift.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_water_breathing.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_water_breathing.png deleted file mode 100644 index d68983b5a..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_water_breathing.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_weak.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_weak.png deleted file mode 100644 index 9ac3985e2..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_effect_weak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_lingering_bottle.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_lingering_bottle.png deleted file mode 100644 index 431fe5bc6..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_lingering_bottle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_melon_speckled.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_melon_speckled.png deleted file mode 100644 index cd2d43581..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_melon_speckled.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_potion_bottle.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_potion_bottle.png deleted file mode 100644 index 66d6424bf..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_potion_bottle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_potion_overlay.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_potion_overlay.png deleted file mode 100644 index 9bef3d93b..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_potion_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_spider_eye_fermented.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_spider_eye_fermented.png deleted file mode 100644 index 82af0549b..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_spider_eye_fermented.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_bottle.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_bottle.png deleted file mode 100644 index 17a69a8b6..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_bottle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_overlay.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_overlay.png deleted file mode 100644 index 9acbce6cd..000000000 Binary files a/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua deleted file mode 100644 index e6da04dff..000000000 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ /dev/null @@ -1,473 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_target = minetest.get_modpath("mcl_target") - -local math = math - --- Time in seconds after which a stuck arrow is deleted -local ARROW_TIMEOUT = 60 --- Time after which stuck arrow is rechecked for being stuck -local STUCK_RECHECK_TIME = 5 - ---local GRAVITY = 9.81 - -local YAW_OFFSET = -math.pi/2 - -local function dir_to_pitch(dir) - --local dir2 = vector.normalize(dir) - local xz = math.abs(dir.x) + math.abs(dir.z) - return -math.atan2(-dir.y, xz) -end - -local function arrow_image(colorstring, opacity) - if not opacity then - opacity = 127 - end - return {"mcl_bows_arrow.png^(mcl_bows_arrow_overlay.png^[colorize:"..colorstring..":"..tostring(opacity)..")"} -end - -local how_to_shoot = minetest.registered_items["mcl_bows:arrow"]._doc_items_usagehelp - -local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") -local mod_button = minetest.get_modpath("mesecons_button") - -local arrow_longdesc = minetest.registered_items["mcl_bows:arrow"]._doc_items_longdesc or "" -local arrow_tt = minetest.registered_items["mcl_bows:arrow"]._tt_help or "" - -function mcl_potions.register_arrow(name, desc, color, def) - - local longdesc = def.longdesc or "" - minetest.register_craftitem("mcl_potions:"..name.."_arrow", { - description = desc, - _tt_help = arrow_tt .. "\n" .. def.tt, - _doc_items_longdesc = arrow_longdesc .. "\n" .. - S("This particular arrow is tipped and will give an effect when it hits a player or mob.") .. "\n" .. - longdesc, - _doc_items_usagehelp = how_to_shoot, - inventory_image = "mcl_bows_arrow_inv.png^(mcl_potions_arrow_inv.png^[colorize:"..color..":100)", - groups = { ammo=1, ammo_bow=1, brewitem=1}, - _on_dispense = function(itemstack, dispenserpos, droppos, dropnode, dropdir) - -- Shoot arrow - local shootpos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51)) - local yaw = math.atan2(dropdir.z, dropdir.x) + YAW_OFFSET - mcl_bows.shoot_arrow(itemstack:get_name(), shootpos, dropdir, yaw, nil, 19, 3) - end, - }) - - - -- This is a fake node, used as model for the arrow entity. - -- It's not supposed to be usable as item or real node. - -- TODO: Use a proper mesh for the arrow entity - minetest.register_node("mcl_potions:"..name.."_arrow_box", { - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = { - -- Shaft - {-6.5/17, -1.5/17, -1.5/17, -4.5/17, 1.5/17, 1.5/17}, - {-4.5/17, -0.5/17, -0.5/17, 5.5/17, 0.5/17, 0.5/17}, - {5.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, - -- Tip - {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, - {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, - -- Fletching - {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, - {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, - {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, - {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, - - {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, - {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, - {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, - {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, - } - }, - tiles = arrow_image(color, 100), - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - groups = {not_in_creative_inventory=1, dig_immediate=3}, - drop = "", - node_placement_prediction = "", - on_construct = function(pos) - minetest.log("error", "[mcl_potions] Trying to construct mcl_potions:"..name.."arrow_box at "..minetest.pos_to_string(pos)) - minetest.remove_node(pos) - end, - }) - - - local ARROW_ENTITY={ - physical = true, - visual = "mesh", - mesh = "mcl_bows_arrow.obj", - visual_size = {x=-1, y=1}, - textures = arrow_image(color, 100), - collisionbox = {-0.19, -0.125, -0.19, 0.19, 0.125, 0.19}, - collide_with_objects = false, - - _lastpos={}, - _startpos=nil, - _damage=1, -- Damage on impact - _stuck=false, -- Whether arrow is stuck - _stucktimer=nil,-- Amount of time (in seconds) the arrow has been stuck so far - _stuckrechecktimer=nil,-- An additional timer for periodically re-checking the stuck status of an arrow - _stuckin=nil, --Position of node in which arow is stuck. - _shooter=nil, -- ObjectRef of player or mob who shot it - - _viscosity=0, -- Viscosity of node the arrow is currently in - _deflection_cooloff=0, -- Cooloff timer after an arrow deflection, to prevent many deflections in quick succession - } - - -- Destroy arrow entity self at pos and drops it as an item - local function spawn_item(self, pos) - if not minetest.is_creative_enabled("") then - local item = minetest.add_item(pos, "mcl_potions:"..name.."_arrow") - item:set_velocity({x=0, y=0, z=0}) - item:set_yaw(self.object:get_yaw()) - end - self.object:remove() - end - - function ARROW_ENTITY.on_step(self, dtime) - local pos = self.object:get_pos() - local dpos = table.copy(pos) -- digital pos - dpos = vector.round(dpos) - local node = minetest.get_node(dpos) - - if self._stuck then - self._stucktimer = self._stucktimer + dtime - self._stuckrechecktimer = self._stuckrechecktimer + dtime - if self._stucktimer > ARROW_TIMEOUT then - self.object:remove() - return - end - -- Drop arrow as item when it is no longer stuck - -- FIXME: Arrows are a bit slow to react and continue to float in mid air for a few seconds. - if self._stuckrechecktimer > STUCK_RECHECK_TIME then - local stuckin_def - if self._stuckin then - stuckin_def = minetest.registered_nodes[minetest.get_node(self._stuckin).name] - end - -- TODO: In MC, arrow just falls down without turning into an item - if stuckin_def and stuckin_def.walkable == false then - spawn_item(self, pos) - return - end - self._stuckrechecktimer = 0 - end - -- Pickup arrow if player is nearby (not in Creative Mode) - local objects = minetest.get_objects_inside_radius(pos, 1) - for _,obj in ipairs(objects) do - if obj:is_player() then - if not minetest.is_creative_enabled(obj:get_player_name()) then - if obj:get_inventory():room_for_item("main", "mcl_potions:"..name.."_arrow") then - obj:get_inventory():add_item("main", "mcl_potions:"..name.."_arrow") - minetest.sound_play("item_drop_pickup", { - pos = pos, - max_hear_distance = 16, - gain = 1.0, - }, true) - end - end - self.object:remove() - return - end - end - - -- Check for object "collision". Done every tick (hopefully this is not too stressing) - else - - if self._damage == 10 or self._damage == 9 then - minetest.add_particlespawner({ - amount = 1, - time = .001, - minpos = pos, - maxpos = pos, - minvel = vector.new(-0.1,-0.1,-0.1), - maxvel = vector.new(0.1,0.1,0.1), - minexptime = 0.5, - maxexptime = 0.5, - minsize = 2, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mobs_mc_arrow_particle.png", - glow = 1, - }) - end - -- We just check for any hurtable objects nearby. - -- The radius of 3 is fairly liberal, but anything lower than than will cause - -- arrow to hilariously go through mobs often. - -- TODO: Implement an ACTUAL collision detection (engine support needed). - local objs = minetest.get_objects_inside_radius(pos, 1.5) - local closest_object - local closest_distance - - if self._deflection_cooloff > 0 then - self._deflection_cooloff = self._deflection_cooloff - dtime - end - - -- Iterate through all objects and remember the closest attackable object - for k, obj in pairs(objs) do - local ok = false - -- Arrows can only damage players and mobs - if obj ~= self._shooter and obj:is_player() then - ok = true - elseif obj:get_luaentity() then - if obj ~= self._shooter and obj:get_luaentity().is_mob then - ok = true - end - end - - if ok then - local dist = vector.distance(pos, obj:get_pos()) - if not closest_object or not closest_distance then - closest_object = obj - closest_distance = dist - elseif dist < closest_distance then - closest_object = obj - closest_distance = dist - end - end - end - - -- If an attackable object was found, we will damage the closest one only - if closest_object then - local obj = closest_object - local is_player = obj:is_player() - local lua = obj:get_luaentity() - if obj ~= self._shooter and (is_player or (lua and lua.is_mob)) then - - if obj:get_hp() > 0 then - -- Check if there is no solid node between arrow and object - local ray = minetest.raycast(self.object:get_pos(), obj:get_pos(), true) - for pointed_thing in ray do - if pointed_thing.type == "object" and pointed_thing.ref == closest_object then - -- Target reached! We can proceed now. - break - elseif pointed_thing.type == "node" then - local nn = minetest.get_node(minetest.get_pointed_thing_position(pointed_thing)).name - local nodedef = minetest.registered_nodes[nn] - if (not nodedef) or nodedef.walkable then - -- There's a node in the way. Delete arrow without damage - self.object:remove() - return - end - end - end - - -- Punch target object but avoid hurting enderman. - if lua then - if lua.name ~= "mobs_mc:enderman" then - obj:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=self._damage}, - }, nil) - def.potion_fun(obj) - end - else - obj:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=self._damage}, - }, nil) - def.potion_fun(obj) - end - - if is_player then - if self._shooter and self._shooter:is_player() then - -- “Ding” sound for hitting another player - minetest.sound_play({name="mcl_bows_hit_player", gain=0.1}, {to_player=self._shooter}, true) - end - end - - if lua then - local entity_name = lua.name - -- Achievement for hitting skeleton, wither skeleton or stray (TODO) with an arrow at least 50 meters away - -- NOTE: Range has been reduced because mobs unload much earlier than that ... >_> - -- TODO: This achievement should be given for the kill, not just a hit - if self._shooter and self._shooter:is_player() and vector.distance(pos, self._startpos) >= 20 then - if mod_awards and (entity_name == "mobs_mc:skeleton" or entity_name == "mobs_mc:stray" or entity_name == "mobs_mc:witherskeleton") then - awards.unlock(self._shooter:get_player_name(), "mcl:snipeSkeleton") - end - end - end - end - self.object:remove() - return - end - end - end - - -- Check for node collision - if self._lastpos.x~=nil and not self._stuck then - local nodedef = minetest.registered_nodes[node.name] - local vel = self.object:get_velocity() - -- Arrow has stopped in one axis, so it probably hit something. - -- This detection is a bit clunky, but sadly, MT does not offer a direct collision detection for us. :-( - if (math.abs(vel.x) < 0.0001) or (math.abs(vel.z) < 0.0001) or (math.abs(vel.y) < 0.00001) then - -- Check for the node to which the arrow is pointing - local dir - if math.abs(vel.y) < 0.00001 then - if self._lastpos.y < pos.y then - dir = {x=0, y=1, z=0} - else - dir = {x=0, y=-1, z=0} - end - else - dir = minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(self.object:get_yaw()-YAW_OFFSET))) - end - self._stuckin = vector.add(dpos, dir) - local snode = minetest.get_node(self._stuckin) - local sdef = minetest.registered_nodes[snode.name] - - -- If node is non-walkable, unknown or ignore, don't make arrow stuck. - -- This causes a deflection in the engine. - if not sdef or sdef.walkable == false or snode.name == "ignore" then - self._stuckin = nil - if self._deflection_cooloff <= 0 then - -- Lose 1/3 of velocity on deflection - local newvel = vector.multiply(vel, 0.6667) - - self.object:set_velocity(newvel) - -- Reset deflection cooloff timer to prevent many deflections happening in quick succession - self._deflection_cooloff = 1.0 - end - else - - -- Node was walkable, make arrow stuck - self._stuck = true - self._stucktimer = 0 - self._stuckrechecktimer = 0 - - self.object:set_velocity({x=0, y=0, z=0}) - self.object:set_acceleration({x=0, y=0, z=0}) - - -- Activate target - if mod_target and snode.name == "mcl_target:target_off" then - mcl_target.hit(self._stuckin, 1) --10 redstone ticks - end - - -- Push the button! Push, push, push the button! - if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then - local bdir = minetest.wallmounted_to_dir(node.param2) - -- Check the button orientation - if vector.equals(vector.add(dpos, bdir), self._stuckin) then - mesecon.push_button(dpos, node) - end - end - end - elseif (nodedef and nodedef.liquidtype ~= "none") then - -- Slow down arrow in liquids - local v = nodedef.liquid_viscosity - if not v then - v = 0 - end - --local old_v = self._viscosity - self._viscosity = v - local vpenalty = math.max(0.1, 0.98 - 0.1 * v) - if math.abs(vel.x) > 0.001 then - vel.x = vel.x * vpenalty - end - if math.abs(vel.z) > 0.001 then - vel.z = vel.z * vpenalty - end - self.object:set_velocity(vel) - end - end - - -- Update yaw - if not self._stuck then - local vel = self.object:get_velocity() - local yaw = minetest.dir_to_yaw(vel)+YAW_OFFSET - local pitch = dir_to_pitch(vel) - self.object:set_rotation({ x = 0, y = yaw, z = pitch }) - end - - -- Update internal variable - self._lastpos={x=pos.x, y=pos.y, z=pos.z} - end - - -- Force recheck of stuck arrows when punched. - -- Otherwise, punching has no effect. - function ARROW_ENTITY.on_punch(self) - if self._stuck then - self._stuckrechecktimer = STUCK_RECHECK_TIME - end - end - - function ARROW_ENTITY.get_staticdata(self) - local out = { - lastpos = self._lastpos, - startpos = self._startpos, - damage = self._damage, - stuck = self._stuck, - stuckin = self._stuckin, - } - if self._stuck then - -- If _stucktimer is missing for some reason, assume the maximum - if not self._stucktimer then - self._stucktimer = ARROW_TIMEOUT - end - out.stuckstarttime = minetest.get_gametime() - self._stucktimer - end - if self._shooter and self._shooter:is_player() then - out.shootername = self._shooter:get_player_name() - end - return minetest.serialize(out) - end - - function ARROW_ENTITY.on_activate(self, staticdata, dtime_s) - local data = minetest.deserialize(staticdata) - if data then - self._stuck = data.stuck - if data.stuck then - if data.stuckstarttime then - -- First, check if the stuck arrow is aleady past its life timer. - -- If yes, delete it. - self._stucktimer = minetest.get_gametime() - data.stuckstarttime - if self._stucktimer > ARROW_TIMEOUT then - self.object:remove() - return - end - end - - -- Perform a stuck recheck on the next step. - self._stuckrechecktimer = STUCK_RECHECK_TIME - - self._stuckin = data.stuckin - end - - -- Get the remaining arrow state - self._lastpos = data.lastpos - self._startpos = data.startpos - self._damage = data.damage - if data.shootername then - local shooter = minetest.get_player_by_name(data.shootername) - if shooter and shooter:is_player() then - self._shooter = shooter - end - end - end - self.object:set_armor_groups({ immortal = 1 }) - end - - minetest.register_entity("mcl_potions:"..name.."_arrow_entity", ARROW_ENTITY) - - if minetest.get_modpath("mcl_bows") then - minetest.register_craft({ - output = "mcl_potions:"..name.."_arrow 8", - recipe = { - {"mcl_bows:arrow","mcl_bows:arrow","mcl_bows:arrow"}, - {"mcl_bows:arrow","mcl_potions:"..name.."_lingering","mcl_bows:arrow"}, - {"mcl_bows:arrow","mcl_bows:arrow","mcl_bows:arrow"} - } - }) - - end - - if minetest.get_modpath("doc_identifier") then - doc.sub.identifier.register_object("mcl_bows:arrow_entity", "craftitems", "mcl_bows:arrow") - end -end diff --git a/mods/ITEMS/mcl_raw_ores/init.lua b/mods/ITEMS/mcl_raw_ores/init.lua deleted file mode 100644 index 12ca8d222..000000000 --- a/mods/ITEMS/mcl_raw_ores/init.lua +++ /dev/null @@ -1,50 +0,0 @@ -local function register_raw_ore(description, n) - local ore = description:lower() - local n = n or "" - local raw_ingot = "mcl_raw_ores:raw_"..ore - local texture = "mcl_raw_ores_raw_"..ore - - minetest.register_craftitem(raw_ingot, { - description = ("Raw "..description), - _doc_items_longdesc = ("Raw "..ore..". Mine a"..n.." "..ore.." ore to get it."), - inventory_image = texture..".png", - groups = { craftitem = 1 }, - }) - - minetest.register_node(raw_ingot.."_block", { - description = ("Block of Raw "..description), - _doc_items_longdesc = ("A block of raw "..ore.." is mostly a decorative block but also useful as a compact storage of raw "..ore.."."), - tiles = { texture.."_block.png" }, - is_ground_content = false, - groups = { pickaxey = 2, building_block = 1 }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - }) - - minetest.register_craft({ - output = raw_ingot.."_block", - recipe = { - { raw_ingot, raw_ingot, raw_ingot }, - { raw_ingot, raw_ingot, raw_ingot }, - { raw_ingot, raw_ingot, raw_ingot }, - }, - }) - - minetest.register_craft({ - type = "cooking", - output = "mcl_core:"..ore.."_ingot", - recipe = raw_ingot, - cooktime = 10, - }) - - minetest.register_craft({ - output = raw_ingot.." 9", - recipe = { - { raw_ingot.."_block" }, - }, - }) -end - -register_raw_ore("Iron", "n") -register_raw_ore("Gold") diff --git a/mods/ITEMS/mcl_raw_ores/mod.conf b/mods/ITEMS/mcl_raw_ores/mod.conf deleted file mode 100644 index a3ee955c7..000000000 --- a/mods/ITEMS/mcl_raw_ores/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_raw_ores -author = NO11 -depends = mcl_core -description = Adds raw iron and raw gold. \ No newline at end of file diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold.png deleted file mode 100644 index 9b3e14e88..000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold_block.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold_block.png deleted file mode 100644 index 71e8767b3..000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron.png deleted file mode 100644 index 73076a67e..000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron_block.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron_block.png deleted file mode 100644 index f8b10745d..000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/init.lua b/mods/ITEMS/mcl_shields/init.lua deleted file mode 100644 index 038ffc0f3..000000000 --- a/mods/ITEMS/mcl_shields/init.lua +++ /dev/null @@ -1,515 +0,0 @@ -local minetest, math, vector = minetest, math, vector -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) - -mcl_shields = { - types = { - mob = true, - player = true, - arrow = true, - generic = true, - explosion = true, - dragon_breath = true, - }, - enchantments = {"mending", "unbreaking"}, - players = {}, -} - -local interact_priv = minetest.registered_privileges.interact -interact_priv.give_to_singleplayer = false -interact_priv.give_to_admin = false - -local overlay = mcl_enchanting.overlay -local hud = "mcl_shield_hud.png" - -minetest.register_tool("mcl_shields:shield", { - description = S("Shield"), - _doc_items_longdesc = S("A shield is a tool used for protecting the player against attacks."), - inventory_image = "mcl_shield.png", - stack_max = 1, - groups = { - shield = 1, - weapon = 1, - enchantability = -1, - no_wieldview = 1, - offhand_item = 1, - }, - sound = {breaks = "default_tool_breaks"}, - _repair_material = "group:wood", - wield_scale = vector.new(2, 2, 2), -}) - -local function wielded_item(obj, i) - local itemstack = obj:get_wielded_item() - if i == 1 then - itemstack = obj:get_inventory():get_stack("offhand", 1) - end - return itemstack:get_name() -end - -function mcl_shields.wielding_shield(obj, i) - return wielded_item(obj, i):find("mcl_shields:shield") -end - -local function shield_is_enchanted(obj, i) - return mcl_enchanting.is_enchanted(wielded_item(obj, i)) -end - -minetest.register_entity("mcl_shields:shield_entity", { - initial_properties = { - visual = "mesh", - mesh = "mcl_shield.obj", - physical = false, - pointable = false, - collide_with_objects = false, - textures = {"mcl_shield_base_nopattern.png"}, - visual_size = vector.new(1, 1, 1), - }, - _blocking = false, - _shield_number = 2, - _texture_copy = "", - on_step = function(self, dtime, moveresult) - local player = self.object:get_attach() - if not player then - self.object:remove() - return - end - local shield_texture = "mcl_shield_base_nopattern.png" - local i = self._shield_number - local item = wielded_item(player, i) - - if item ~= "mcl_shields:shield" and item ~= "mcl_shields:shield_enchanted" then - local itemstack = player:get_wielded_item() - if i == 1 then - itemstack = player:get_inventory():get_stack("offhand", 1) - end - local meta_texture = itemstack:get_meta():get_string("mcl_shields:shield_custom_pattern_texture") - if meta_texture ~= "" then - shield_texture = meta_texture - else - local color = minetest.registered_items[item]._shield_color - if color then - shield_texture = "mcl_shield_base_nopattern.png^(mcl_shield_pattern_base.png^[colorize:" .. color .. ")" - end - end - end - - if shield_is_enchanted(player, i) then - shield_texture = shield_texture .. overlay - end - - if self._texture_copy ~= shield_texture then - self.object:set_properties({textures = {shield_texture}}) - end - - self._texture_copy = shield_texture - end, -}) - -for _, e in pairs(mcl_shields.enchantments) do - mcl_enchanting.enchantments[e].secondary.shield = true -end - -function mcl_shields.is_blocking(obj) - if not obj:is_player() then return end - local blocking = mcl_shields.players[obj].blocking - if blocking <= 0 then - return - end - - local shieldstack = obj:get_wielded_item() - if blocking == 1 then - shieldstack = obj:get_inventory():get_stack("offhand", 1) - end - return blocking, shieldstack -end - -mcl_damage.register_modifier(function(obj, damage, reason) - local type = reason.type - local damager = reason.direct - local blocking, shieldstack = mcl_shields.is_blocking(obj) - - if not (obj:is_player() and blocking and mcl_shields.types[type] and damager) then - return - end - - local entity = damager:get_luaentity() - if entity and entity._shooter then - damager = entity._shooter - end - - local dpos = damager:get_pos() - - -- Used for removed / killed entities before the projectile hits the player - if entity and not entity._shooter and entity._saved_shooter_pos then - dpos = entity._saved_shooter_pos - end - - if not dpos or vector.dot(obj:get_look_dir(), vector.subtract(dpos, obj:get_pos())) < 0 then - return - end - - local durability = 336 - local unbreaking = mcl_enchanting.get_enchantment(shieldstack, mcl_shields.enchantments[2]) - if unbreaking > 0 then - durability = durability * (unbreaking + 1) - end - - if not minetest.is_creative_enabled(obj:get_player_name()) and damage >= 3 then - shieldstack:add_wear(65535 / durability) - if blocking == 2 then - obj:set_wielded_item(shieldstack) - else - obj:get_inventory():set_stack("offhand", 1, shieldstack) - mcl_inventory.update_inventory_formspec(obj) - end - end - minetest.sound_play({name = "mcl_block"}) - return 0 -end) - -local function modify_shield(player, vpos, vrot, i) - local arm = "Right" - if i == 1 then - arm = "Left" - end - local shield = mcl_shields.players[player].shields[i] - if shield then - shield:set_attach(player, "Arm_" .. arm, vpos, vrot, false) - end -end - -local function set_shield(player, block, i) - if block then - if i == 1 then - modify_shield(player, vector.new(-9, 4, 0.5), vector.new(80, 100, 0), i) -- TODO - else - modify_shield(player, vector.new(-8, 4, -2.5), vector.new(80, 80, 0), i) - end - else - if i == 1 then - modify_shield(player, vector.new(-3, -5, 0), vector.new(0, 180, 0), i) - else - modify_shield(player, vector.new(3, -5, 0), vector.new(0, 0, 0), i) - end - end - local shield = mcl_shields.players[player].shields[i] - if not shield then return end - - local luaentity = shield:get_luaentity() - if not luaentity then return end - - luaentity._blocking = block -end - -local function set_interact(player, interact) - local player_name = player:get_player_name() - local privs = minetest.get_player_privs(player_name) - if privs.interact == interact then - return - end - local meta = player:get_meta() - if meta:get_int("mcl_privs:interact_revoked") ~= 1 then - privs.interact = interact - minetest.set_player_privs(player_name, privs) - meta:set_int("mcl_privs:interact_revoked",0) - end -end - -local shield_hud = {} - -local function remove_shield_hud(player) - if shield_hud[player] then - player:hud_remove(shield_hud[player]) - shield_hud[player] = nil - set_shield(player, false, 1) - set_shield(player, false, 2) - end - - local hf = player:hud_get_flags() - if not hf.wielditem then - player:hud_set_flags({wielditem = true}) - end - - playerphysics.remove_physics_factor(player, "speed", "shield_speed") - set_interact(player, true) -end - -local function add_shield_entity(player, i) - local shield = minetest.add_entity(player:get_pos(), "mcl_shields:shield_entity") - shield:get_luaentity()._shield_number = i - mcl_shields.players[player].shields[i] = shield - set_shield(player, false, i) -end - -local function remove_shield_entity(player, i) - local shields = mcl_shields.players[player].shields - if shields[i] then - shields[i]:remove() - shields[i] = nil - end -end - -local function handle_blocking(player) - local player_shield = mcl_shields.players[player] - local rmb = player:get_player_control().RMB - if not rmb then - player_shield.blocking = 0 - return - end - - local shield_in_offhand = mcl_shields.wielding_shield(player, 1) - local shield_in_hand = mcl_shields.wielding_shield(player) - local not_blocking = player_shield.blocking == 0 - - local pos = player:get_pos() - if shield_in_hand then - if not_blocking then - minetest.after(0.25, function() - if (not_blocking or not shield_in_offhand) and shield_in_hand and rmb then - player_shield.blocking = 2 - set_shield(player, true, 2) - end - end) - elseif not shield_in_offhand then - player_shield.blocking = 2 - end - elseif shield_in_offhand then - local offhand_can_block = (wielded_item(player) == "" or not mcl_util.get_pointed_thing(player, true)) - and (minetest.get_item_group(wielded_item(player), "bow") ~= 1 and minetest.get_item_group(wielded_item(player), "crossbow") ~= 1) - - if not offhand_can_block then - return - end - if not_blocking then - minetest.after(0.25, function() - if (not_blocking or not shield_in_hand) and shield_in_offhand and rmb and offhand_can_block then - player_shield.blocking = 1 - set_shield(player, true, 1) - end - end) - elseif not shield_in_hand then - player_shield.blocking = 1 - end - else - player_shield.blocking = 0 - end -end - -local function update_shield_entity(player, blocking, i) - local shield = mcl_shields.players[player].shields[i] - if mcl_shields.wielding_shield(player, i) then - if not shield then - add_shield_entity(player, i) - else - if blocking == i then - if shield:get_luaentity() and not shield:get_luaentity()._blocking then - set_shield(player, true, i) - end - else - set_shield(player, false, i) - end - end - elseif shield then - remove_shield_entity(player, i) - end -end - -local function add_shield_hud(shieldstack, player, blocking) - local texture = hud - if mcl_enchanting.is_enchanted(shieldstack:get_name()) then - texture = texture .. overlay - end - local offset = 100 - if blocking == 1 then - texture = texture .. "^[transform4" - offset = -100 - else - player:hud_set_flags({wielditem = false}) - end - shield_hud[player] = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -101, y = -101}, - offset = {x = offset, y = 0}, - text = texture, - z_index = -200, - }) - playerphysics.add_physics_factor(player, "speed", "shield_speed", 0.5) - set_interact(player, nil) -end - -local function update_shield_hud(player, blocking, shieldstack) - local shieldhud = shield_hud[player] - if not shieldhud then - add_shield_hud(shieldstack, player, blocking) - return - end - - local wielditem = player:hud_get_flags().wielditem - if blocking == 1 then - if not wielditem then - player:hud_change(shieldhud, "text", hud .. "^[transform4") - player:hud_change(shieldhud, "offset", {x = -100, y = 0}) - player:hud_set_flags({wielditem = true}) - end - elseif wielditem then - player:hud_change(shieldhud, "text", hud) - player:hud_change(shieldhud, "offset", {x = 100, y = 0}) - player:hud_set_flags({wielditem = false}) - end - - local image = player:hud_get(shieldhud).text - local enchanted = hud .. overlay - local enchanted1 = image == enchanted - local enchanted2 = image == enchanted .. "^[transform4" - if mcl_enchanting.is_enchanted(shieldstack:get_name()) then - if not enchanted1 and not enchanted2 then - if blocking == 1 then - player:hud_change(shieldhud, "text", hud .. overlay .. "^[transform4") - else - player:hud_change(shieldhud, "text", hud .. overlay) - end - end - elseif enchanted1 or enchanted2 then - if blocking == 1 then - player:hud_change(shieldhud, "text", hud .. "^[transform4") - else - player:hud_change(shieldhud, "text", hud) - end - end -end - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - - handle_blocking(player) - - local blocking, shieldstack = mcl_shields.is_blocking(player) - - if blocking then - update_shield_hud(player, blocking, shieldstack) - else - remove_shield_hud(player) - end - - for i = 1, 2 do - update_shield_entity(player, blocking, i) - end - end -end) - -minetest.register_on_dieplayer(function(player) - remove_shield_hud(player) - if not minetest.settings:get_bool("mcl_keepInventory") then - remove_shield_entity(player, 1) - remove_shield_entity(player, 2) - end -end) - -minetest.register_on_leaveplayer(function(player) - shield_hud[player] = nil - mcl_shields.players[player] = nil -end) - -minetest.register_craft({ - output = "mcl_shields:shield", - recipe = { - {"group:wood", "mcl_core:iron_ingot", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - {"", "group:wood", ""}, - } -}) - -for _, colortab in pairs(mcl_banners.colors) do - local color = colortab[1] - minetest.register_tool("mcl_shields:shield_" .. color, { - description = S(colortab[6] .. " Shield"), - _doc_items_longdesc = S("A shield is a tool used for protecting the player against attacks."), - inventory_image = "mcl_shield.png^(mcl_shield_item_overlay.png^[colorize:" .. colortab[4] ..")", - stack_max = 1, - groups = { - shield = 1, - weapon = 1, - enchantability = -1, - no_wieldview = 1, - not_in_creative_inventory = 1, - offhand_item = 1, - }, - sound = {breaks = "default_tool_breaks"}, - _repair_material = "group:wood", - wield_scale = vector.new(2, 2, 2), - _shield_color = colortab[4], - }) - - local banner = "mcl_banners:banner_item_" .. color - minetest.register_craft({ - type = "shapeless", - output = "mcl_shields:shield_" .. color, - recipe = {"mcl_shields:shield", banner}, - }) - minetest.register_craft({ - type = "shapeless", - output = "mcl_shields:shield_" .. color .. "_enchanted", - recipe = {"mcl_shields:shield_enchanted", banner}, - }) -end - -local function to_shield_texture(banner_texture) - return banner_texture - :gsub("mcl_banners_base_inverted.png", "mcl_shield_base_nopattern.png^mcl_shield_pattern_base.png") - :gsub("mcl_banners_banner_base.png", "mcl_shield_base_nopattern.png^mcl_shield_pattern_base.png") - :gsub("mcl_banners_base", "mcl_shield_pattern_base") - :gsub("mcl_banners", "mcl_shield_pattern") -end - -local function craft_banner_on_shield(itemstack, player, old_craft_grid, craft_inv) - if not string.find(itemstack:get_name(), "mcl_shields:shield_") then - return itemstack - end - - local shield_stack - for i = 1, player:get_inventory():get_size("craft") do - local stack = old_craft_grid[i] - local name = stack:get_name() - if minetest.get_item_group(name, "shield") then - shield_stack = stack - break - end - end - - for i = 1, player:get_inventory():get_size("craft") do - local banner_stack = old_craft_grid[i] - local banner_name = banner_stack:get_name() - if string.find(banner_name, "mcl_banners:banner") and shield_stack then - local banner_meta = banner_stack:get_meta() - local layers_meta = banner_meta:get_string("layers") - local new_shield_meta = itemstack:get_meta() - if layers_meta ~= "" then - local color = mcl_banners.color_reverse(banner_name) - local layers = minetest.deserialize(layers_meta) - local texture = mcl_banners.make_banner_texture(color, layers) - new_shield_meta:set_string("description", mcl_banners.make_advanced_banner_description(itemstack:get_description(), layers)) - new_shield_meta:set_string("mcl_shields:shield_custom_pattern_texture", to_shield_texture(texture)) - end - itemstack:set_wear(shield_stack:get_wear()) - break - end - end -end - -minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv) - return craft_banner_on_shield(itemstack, player, old_craft_grid, craft_inv) -end) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - return craft_banner_on_shield(itemstack, player, old_craft_grid, craft_inv) -end) - -minetest.register_on_joinplayer(function(player) - mcl_shields.players[player] = { - shields = {}, - blocking = 0, - } - remove_shield_hud(player) -end) diff --git a/mods/ITEMS/mcl_shields/locale/mcl_shields.de.tr b/mods/ITEMS/mcl_shields/locale/mcl_shields.de.tr deleted file mode 100644 index 2a4deccc0..000000000 --- a/mods/ITEMS/mcl_shields/locale/mcl_shields.de.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_shields -Shield=Schild -A shield is a tool used for protecting the player against attacks.=Der Schild ist eine Schutzwaffe, die den Spieler vor Angriffen schützt. -White Shield=Weißer Schild -Grey Shield=Grauer Schild -Light Grey Shield=Hellgrauer Schild -Black Shield=Schwarzer Schild -Red Shield=Roter Schild -Yellow Shield=Gelber Schild -Green Shield=Grüner Schild -Cyan Shield=Türkiser Schild -Blue Shield=Blauer Schild -Magenta Shield=Magenta Schild -Orange Shield=Oranger Schild -Purple Shield=Violetter Schild -Brown Shield=Brauner Schild -Pink Shield=Rosa Schild -Lime Shield=Hellgrüner Schild -Light Blue Shield=Hellblauer Schild diff --git a/mods/ITEMS/mcl_shields/locale/template.txt b/mods/ITEMS/mcl_shields/locale/template.txt deleted file mode 100644 index bcf7b1b54..000000000 --- a/mods/ITEMS/mcl_shields/locale/template.txt +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_shields -Shield= -A shield is a tool used for protecting the player against attacks.= -White Shield= -Grey Shield= -Light Grey Shield= -Black Shield= -Red Shield= -Yellow Shield= -Green Shield= -Cyan Shield= -Blue Shield= -Magenta Shield= -Orange Shield= -Purple Shield= -Brown Shield= -Pink Shield= -Lime Shield= -Light Blue Shield= diff --git a/mods/ITEMS/mcl_shields/mod.conf b/mods/ITEMS/mcl_shields/mod.conf deleted file mode 100644 index 8aded6a62..000000000 --- a/mods/ITEMS/mcl_shields/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_shields -author = NO11 -depends = mcl_damage, mcl_enchanting, mcl_banners, mcl_util, playerphysics diff --git a/mods/ITEMS/mcl_shields/models/mcl_shield.obj b/mods/ITEMS/mcl_shields/models/mcl_shield.obj deleted file mode 100644 index b1cf77c28..000000000 --- a/mods/ITEMS/mcl_shields/models/mcl_shield.obj +++ /dev/null @@ -1,88 +0,0 @@ -# Blender v3.0.0 OBJ File: '' -# www.blender.org -mtllib mcl_shield.mtl -o Cube.002_Cube.003 -v 4.663009 11.096291 6.387994 -v 4.663009 4.596560 5.241916 -v 5.213008 4.596560 5.241916 -v 5.213008 11.096291 6.387994 -v 5.213007 13.197435 -5.528180 -v 5.213007 6.697705 -6.674258 -v 4.663008 6.697705 -6.674258 -v 4.663008 13.197435 -5.528180 -v 4.663008 8.641873 -1.863572 -v 4.663008 8.068833 1.386293 -v 1.363008 8.068833 1.386294 -v 1.363008 8.641873 -1.863572 -v 1.363008 9.152122 1.577307 -v 1.363008 9.725162 -1.672559 -v 4.663008 9.152122 1.577306 -v 4.663008 9.725162 -1.672559 -vt 0.015625 0.984375 -vt 0.203125 0.984375 -vt 0.203125 1.000000 -vt 0.015625 1.000000 -vt 0.203125 0.640625 -vt 0.203125 0.984375 -vt 0.015625 0.984375 -vt 0.015625 0.640625 -vt 0.015625 0.984375 -vt 0.015625 0.640625 -vt -0.000000 0.640625 -vt -0.000000 0.984375 -vt 0.203125 0.984375 -vt 0.390625 0.984375 -vt 0.390625 1.000000 -vt 0.203125 1.000000 -vt 0.203125 0.984375 -vt 0.203125 0.640625 -vt 0.218750 0.640625 -vt 0.218750 0.984375 -vt 0.406250 0.640625 -vt 0.406250 0.984375 -vt 0.218750 0.984375 -vt 0.218750 0.640625 -vt 0.531250 0.812500 -vt 0.625000 0.812500 -vt 0.625000 0.906250 -vt 0.531250 0.906250 -vt 0.500000 0.906250 -vt 0.500000 0.812500 -vt 0.531250 0.812500 -vt 0.531250 0.906250 -vt 0.406250 0.812500 -vt 0.500000 0.812500 -vt 0.500000 0.906250 -vt 0.406250 0.906250 -vt 0.625000 0.812500 -vt 0.656250 0.812500 -vt 0.656250 0.906250 -vt 0.625000 0.906250 -vt 0.562500 1.000000 -vt 0.531250 1.000000 -vt 0.531250 0.906250 -vt 0.562500 0.906250 -vt 0.531250 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.906250 -vt 0.531250 0.906250 -vn 0.0000 -0.1736 0.9848 -vn 1.0000 0.0000 -0.0000 -vn 0.0000 -0.9848 -0.1736 -vn 0.0000 0.1736 -0.9848 -vn 0.0000 0.9848 0.1736 -vn -1.0000 -0.0000 0.0000 -usemtl Material.002 -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/2 4/6/2 3/7/2 6/8/2 -f 6/9/3 3/10/3 2/11/3 7/12/3 -f 7/13/4 8/14/4 5/15/4 6/16/4 -f 8/17/5 1/18/5 4/19/5 5/20/5 -f 7/21/6 2/22/6 1/23/6 8/24/6 -f 9/25/3 10/26/3 11/27/3 12/28/3 -f 12/29/6 11/30/6 13/31/6 14/32/6 -f 14/33/5 13/34/5 15/35/5 16/36/5 -f 16/37/2 15/38/2 10/39/2 9/40/2 -f 12/41/4 14/42/4 16/43/4 9/44/4 -f 13/45/1 11/46/1 10/47/1 15/48/1 diff --git a/mods/ITEMS/mcl_shields/sounds/mcl_block.ogg b/mods/ITEMS/mcl_shields/sounds/mcl_block.ogg deleted file mode 100644 index 3af7f04b4..000000000 Binary files a/mods/ITEMS/mcl_shields/sounds/mcl_block.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield.png b/mods/ITEMS/mcl_shields/textures/mcl_shield.png deleted file mode 100644 index 7391636e9..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_base_nopattern.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_base_nopattern.png deleted file mode 100644 index 8146632bb..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_base_nopattern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_hud.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_hud.png deleted file mode 100644 index 4286d3e83..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_hud.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_item_overlay.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_item_overlay.png deleted file mode 100644 index 3e7953609..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_item_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_base.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_base.png deleted file mode 100644 index 268445b36..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_border.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_border.png deleted file mode 100644 index e128218e6..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_bricks.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_bricks.png deleted file mode 100644 index f1ddd716b..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_circle.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_circle.png deleted file mode 100644 index 8ff66b8c8..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_circle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_creeper.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_creeper.png deleted file mode 100644 index 5b30dc76b..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_creeper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_cross.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_cross.png deleted file mode 100644 index 40a6624ae..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_curly_border.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_curly_border.png deleted file mode 100644 index 9f8c21773..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_curly_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_left.png deleted file mode 100644 index a04a6fdc0..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_right.png deleted file mode 100644 index 309f711bf..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_left.png deleted file mode 100644 index c5f4399a0..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_right.png deleted file mode 100644 index 59dd957dd..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_flower.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_flower.png deleted file mode 100644 index fe7ca826f..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_flower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient.png deleted file mode 100644 index 29a98c704..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient_up.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient_up.png deleted file mode 100644 index 09effb26a..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient_up.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal.png deleted file mode 100644 index 5187803b3..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal_bottom.png deleted file mode 100644 index 515e6ddfe..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical.png deleted file mode 100644 index 9a56804da..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical_right.png deleted file mode 100644 index 4a5af61fb..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_rhombus.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_rhombus.png deleted file mode 100644 index 13b502289..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_rhombus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_skull.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_skull.png deleted file mode 100644 index 4e0c7c1f5..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_skull.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_small_stripes.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_small_stripes.png deleted file mode 100644 index f125ba2fb..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_small_stripes.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_left.png deleted file mode 100644 index a5c4e00c0..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_right.png deleted file mode 100644 index ca2c53692..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_left.png deleted file mode 100644 index 2123cba15..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_right.png deleted file mode 100644 index 3f7a759a8..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_straight_cross.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_straight_cross.png deleted file mode 100644 index dc861f048..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_straight_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_bottom.png deleted file mode 100644 index 859ad11d1..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_center.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_center.png deleted file mode 100644 index 8d1e2404c..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_center.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downleft.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downleft.png deleted file mode 100644 index c0a93cd4f..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downleft.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downright.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downright.png deleted file mode 100644 index 09580857c..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downright.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_left.png deleted file mode 100644 index 6e5bcb02e..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_middle.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_middle.png deleted file mode 100644 index af5ebc12a..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_middle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_right.png deleted file mode 100644 index dcb911b68..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_top.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_top.png deleted file mode 100644 index a1e10be46..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_thing.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_thing.png deleted file mode 100644 index 43b2a1d49..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_thing.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_bottom.png deleted file mode 100644 index 87d1aa95b..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_top.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_top.png deleted file mode 100644 index 94d652878..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_bottom.png deleted file mode 100644 index 3e4851abb..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_top.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_top.png deleted file mode 100644 index 0ae85d6d1..000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/README.txt b/mods/ITEMS/mcl_signs/README.txt deleted file mode 100644 index ee161fc95..000000000 --- a/mods/ITEMS/mcl_signs/README.txt +++ /dev/null @@ -1,13 +0,0 @@ -Mod based on reworked signs mod by PilzAdam: -https://forum.minetest.net/viewtopic.php?t=3289 - -License of code and font: MIT License - -Font source: 04.jp.org, some modifications and additions were made (added support for Latin-1 Supplement) -Original font license text states: “YOU MAY USE THEM AS YOU LIKE” (in about.gif file distributed with the font) - -License of textures: See README.md in top directory of MineClone 2. - -License of models: GPLv3 (https://www.gnu.org/licenses/gpl-3.0.html) -Models author: 22i. -Source: https://github.com/22i/amc diff --git a/mods/ITEMS/mcl_signs/characters.txt b/mods/ITEMS/mcl_signs/characters.txt deleted file mode 100644 index 3e30994aa..000000000 --- a/mods/ITEMS/mcl_signs/characters.txt +++ /dev/null @@ -1,567 +0,0 @@ -A -_a_ -7 -B -_b_ -5 -C -_c_ -6 -D -_d_ -6 -E -_e_ -5 -F -_f_ -5 -G -_g_ -6 -H -_h_ -6 -I -_i_ -1 -J -_j_ -4 -K -_k_ -5 -L -_l_ -4 -M -_m_ -7 -N -_n_ -6 -O -_o_ -6 -P -_p_ -5 -Q -_q_ -7 -R -_r_ -5 -S -_s_ -5 -T -_t_ -5 -U -_u_ -6 -V -_v_ -7 -W -_w_ -9 -X -_x_ -5 -Y -_y_ -7 -Z -_z_ -5 -a -_a -5 -b -_b -5 -c -_c -4 -d -_d -5 -e -_e -4 -f -_f -4 -g -_g -5 -h -_h -5 -i -_i -1 -j -_j -1 -k -_k -4 -l -_l -1 -m -_m -7 -n -_n -5 -o -_o -5 -p -_p -5 -q -_q -5 -r -_r -3 -s -_s -4 -t -_t -3 -u -_u -4 -v -_v -5 -w -_w -7 -x -_x -5 -y -_y -4 -z -_z -4 - -_sp -2 -0 -_0 -4 -1 -_1 -2 -2 -_2 -4 -3 -_3 -4 -4 -_4 -4 -5 -_5 -4 -6 -_6 -4 -7 -_7 -4 -8 -_8 -4 -9 -_9 -4 -( -_bl -2 -) -_br -2 -{ -_cl -3 -} -_cr -3 -[ -_sl -2 -] -_sr -2 -' -_ap -1 -! -_ex -1 -? -_qu -4 -@ -_at -5 -# -_hs -5 -$ -_dl -4 -% -_pr -5 -^ -_ca -3 -& -_am -5 -* -_as -3 -_ -_un -3 -+ -_ps -3 -- -_mn -3 -= -_eq -3 -; -_sm -1 -, -_cm -2 -" -_qo -3 -/ -_dv -5 -~ -_tl -4 -< -_lt -3 -> -_gt -3 -\ -_re -5 -| -_vb -1 -. -_dt -1 -: -_co -1 -` -_gr -2 -ä -_ae -5 -ë -_ee -5 -ï -_ie -5 -ö -_oe -5 -ü -_ue -5 -Ä -_ae_ -5 -Ë -_ee_ -5 -Ï -_ie_ -5 -Ö -_oe_ -5 -Ü -_ue_ -5 -ß -_sz -5 -× -_times_cross -5 -· -_times_dot -5 -÷ -_div -5 -» -_guill_right -5 -« -_guill_left -5 -¢ -_cent -5 -¿ -_qu_inv -5 -± -_plus_minus -5 -© -_copyright -5 -® -_registered -5 -¨ -_diaresis -5 -§ -_paragraph -5 -¦ -_broken_bar -5 -¥ -_yen -5 -¤ -_currency -5 -£ -_pound -5 -µ -_mu -5 -¡ -_ex_inv -5 -¬ -_not -5 -¯ -_macron -5 -° -_degree -5 -¹ -_1_sup -5 -² -_2_sup -5 -³ -_3_sup -5 -´ -_acute -5 -¶ -_pilcrow -5 -¼ -_1_4 -5 -½ -_1_2 -5 -¾ -_3_4 -5 -À -_a_grave_ -5 -Á -_a_acute_ -5 -Â -_a_circumflex_ -5 -Ã -_a_tilde_ -5 -Å -_a_ring -5 -Æ -_ae_lig_ -5 -ª -_a_sup -5 -º -_o_sup -5 -¸ -_cedille -5 -Ç -_c_cedille_ -5 -ç -_c_cedille -5 -È -_e_grave_ -5 -É -_e_acute_ -5 -Ê -_e_circumflex_ -5 -Ì -_i_grave_ -5 -Í -_i_acute_ -5 -Î -_i_circumflex_ -5 -Ð -_d_dash_ -5 -Ñ -_n_tilde_ -5 -Ò -_o_grave_ -5 -Ó -_o_acute_ -5 -Ô -_o_circumflex_ -5 -Õ -_o_tilde_ -5 -Ø -_o_dash_ -5 -Ù -_u_grave_ -5 -Ú -_u_acute_ -5 -Û -_u_circumflex_ -5 -Ý -_y_acute_ -5 -Þ -_thorn_ -5 -à -_a_grave -5 -á -_a_acute -5 -â -_a_circumflex -5 -ã -_a_tilde -5 -å -_a_ring -5 -æ -_ae_lig -5 -è -_e_grave -5 -é -_e_acute -5 -ê -_e_circumflex -5 -ì -_i_grave -5 -í -_i_acute -5 -î -_i_circumflex -5 -ð -_d_dash -5 -ñ -_n_tilde -5 -ò -_o_grave -5 -ó -_o_acute -5 -ô -_o_circumflex -5 -õ -_o_tilde -5 -ø -_o_dash -5 -ù -_u_grave -5 -ú -_u_acute -5 -û -_u_circumflex -5 -ý -_y_acute -5 -þ -_thorn -5 -ÿ -_y_diaresis -5 diff --git a/mods/ITEMS/mcl_signs/init.lua b/mods/ITEMS/mcl_signs/init.lua deleted file mode 100644 index b6bfb3fe8..000000000 --- a/mods/ITEMS/mcl_signs/init.lua +++ /dev/null @@ -1,580 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) -local F = minetest.formspec_escape - -local table = table - --- Load the characters map (characters.txt) ---[[ File format of characters.txt: -It's an UTF-8 encoded text file that contains metadata for all supported characters. It contains a sequence of info blocks, one for each character. Each info block is made out of 3 lines: -Line 1: The literal UTF-8 encoded character -Line 2: Name of the texture file for this character minus the “.png” suffix; found in the “textures/” sub-directory -Line 3: Currently ignored. Previously this was for the character width in pixels - -After line 3, another info block may follow. This repeats until the end of the file. - -All character files must be 5 or 6 pixels wide (5 pixels are preferred) -]] - -local chars_file = io.open(modpath.."/characters.txt", "r") --- FIXME: Support more characters (many characters are missing). Currently ASCII and Latin-1 Supplement are supported. -local charmap = {} -if not chars_file then - minetest.log("error", "[mcl_signs] : character map file not found") -else - while true do - local char = chars_file:read("*l") - if char == nil then - break - end - local img = chars_file:read("*l") - chars_file:read("*l") - charmap[char] = img - end -end - --- CONSTANTS -local SIGN_WIDTH = 115 - -local LINE_LENGTH = 15 -local NUMBER_OF_LINES = 4 - -local LINE_HEIGHT = 14 -local CHAR_WIDTH = 5 - - --- Helper functions -local function round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - -local function string_to_array(str) - local tab = {} - for i=1,string.len(str) do - table.insert(tab, string.sub(str, i,i)) - end - return tab -end - -local function string_to_line_array(str) - local tab = {} - local current = 1 - local linechar = 1 - tab[1] = "" - for _,char in ipairs(string_to_array(str)) do - -- New line - if char == "\n" then - current = current + 1 - tab[current] = "" - linechar = 1 - else - tab[current] = tab[current]..char - linechar = linechar + 1 - end - end - return tab -end - -local function create_lines(text) - local line_num = 1 - local tab = {} - for _, line in ipairs(string_to_line_array(text)) do - if line_num > NUMBER_OF_LINES then - break - end - table.insert(tab, line) - line_num = line_num + 1 - end - return tab -end - -local function generate_line(s, ypos) - local i = 1 - local parsed = {} - local width = 0 - local chars = 0 - local printed_char_width = CHAR_WIDTH + 1 - while chars < LINE_LENGTH and i <= #s do - local file - -- Get and render character - if charmap[s:sub(i, i)] then - file = charmap[s:sub(i, i)] - i = i + 1 - elseif i < #s and charmap[s:sub(i, i + 1)] then - file = charmap[s:sub(i, i + 1)] - i = i + 2 - else - -- No character image found. - -- Use replacement character: - file = "_rc" - i = i + 1 - minetest.log("verbose", "[mcl_signs] Unknown symbol in '"..s.."' at "..i) - end - if file then - width = width + printed_char_width - table.insert(parsed, file) - chars = chars + 1 - end - end - width = width - 1 - - local texture = "" - local xpos = math.floor((SIGN_WIDTH - width) / 2) - for i = 1, #parsed do - texture = texture..":"..xpos..","..ypos.."="..parsed[i]..".png" - xpos = xpos + printed_char_width - end - return texture -end - -local function generate_texture(lines, signnodename) - local texture = "[combine:"..SIGN_WIDTH.."x"..SIGN_WIDTH - local ypos - if signnodename == "mcl_signs:wall_sign" then - ypos = 30 - else - ypos = 0 - end - for i = 1, #lines do - texture = texture..generate_line(lines[i], ypos) - ypos = ypos + LINE_HEIGHT - end - return texture -end - -local n = 23/56 - 1/128 - -local signtext_info_wall = { - {delta = {x = 0, y = 0, z = n}, yaw = 0}, - {delta = {x = n, y = 0, z = 0}, yaw = math.pi / -2}, - {delta = {x = 0, y = 0, z = -n}, yaw = math.pi}, - {delta = {x = -n, y = 0, z = 0}, yaw = math.pi / 2}, -} - -local signtext_info_standing = {} - -local m = -1/16 + 1/64 - -for rot=0, 15 do - local yaw = math.pi*2 - (((math.pi*2) / 16) * rot) - local delta = vector.multiply(minetest.yaw_to_dir(yaw), m) - -- Offset because sign is a bit above node boundaries - delta.y = delta.y + 2/28 - table.insert(signtext_info_standing, { delta = delta, yaw = yaw }) -end - -local function get_rotation_level(facedir, nodename) - local rl = facedir * 4 - if nodename == "mcl_signs:standing_sign22_5" then - rl = rl + 1 - elseif nodename == "mcl_signs:standing_sign45" then - rl = rl + 2 - elseif nodename == "mcl_signs:standing_sign67_5" then - rl = rl + 3 - end - return rl -end - -local function get_wall_signtext_info(param2, nodename) - local dir = minetest.wallmounted_to_dir(param2) - if dir.x > 0 then - return 2 - elseif dir.z > 0 then - return 1 - elseif dir.x < 0 then - return 4 - else - return 3 - end -end - -local sign_groups = {handy=1,axey=1, deco_block=1, material_wood=1, attached_node=1, dig_by_piston=1, flammable=-1} - -local function destruct_sign(pos) - local objects = minetest.get_objects_inside_radius(pos, 0.5) - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and ent.name == "mcl_signs:text" then - v:remove() - end - end - local players = minetest.get_connected_players() - for p=1, #players do - if vector.distance(players[p]:get_pos(), pos) <= 30 then - minetest.close_formspec(players[p]:get_player_name(), "mcl_signs:set_text_"..pos.x.."_"..pos.y.."_"..pos.z) - end - end -end - -local function update_sign(pos, fields, sender, force_remove) - local meta = minetest.get_meta(pos) - if not meta then - return - end - local text = meta:get_string("text") - if fields and (text == "" and fields.text) then - meta:set_string("text", fields.text) - text = fields.text - end - if text == nil then - text = "" - end - - local sign_info - local n = minetest.get_node(pos) - local nn = n.name - if nn == "mcl_signs:standing_sign" or nn == "mcl_signs:standing_sign22_5" or nn == "mcl_signs:standing_sign45" or nn == "mcl_signs:standing_sign67_5" then - sign_info = signtext_info_standing[get_rotation_level(n.param2, nn) + 1] - elseif nn == "mcl_signs:wall_sign" then - sign_info = signtext_info_wall[get_wall_signtext_info(n.param2)] - end - if sign_info == nil then - minetest.log("error", "[mcl_signs] Missing sign_info!") - return - end - - local objects = minetest.get_objects_inside_radius(pos, 0.5) - local text_entity - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and ent.name == "mcl_signs:text" then - if force_remove then - v:remove() - else - text_entity = v - break - end - end - end - - if not text_entity then - text_entity = minetest.add_entity({ - x = pos.x + sign_info.delta.x, - y = pos.y + sign_info.delta.y, - z = pos.z + sign_info.delta.z}, "mcl_signs:text") - end - text_entity:get_luaentity()._signnodename = nn - text_entity:set_properties({textures={generate_texture(create_lines(text), nn)}}) - - text_entity:set_yaw(sign_info.yaw) -end - -local function show_formspec(player, pos) - minetest.show_formspec( - player:get_player_name(), - "mcl_signs:set_text_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[6,3]textarea[0.25,0.25;6,1.5;text;"..F(S("Enter sign text:"))..";]label[0,1.5;"..F(S("Maximum line length: 15")).."\n"..F(S("Maximum lines: 4")).."]button_exit[0,2.5;6,1;submit;"..F(S("Done")).."]" - ) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname:find("mcl_signs:set_text_") == 1 then - local x, y, z = formname:match("mcl_signs:set_text_(.-)_(.-)_(.*)") - local pos = {x=tonumber(x), y=tonumber(y), z=tonumber(z)} - if not pos or not pos.x or not pos.y or not pos.z then return end - update_sign(pos, fields, player) - end -end) - -local node_sounds -if minetest.get_modpath("mcl_sounds") then - node_sounds = mcl_sounds.node_sound_wood_defaults() -end - -minetest.register_node("mcl_signs:wall_sign", { - description = S("Sign"), - _tt_help = S("Can be written"), - _doc_items_longdesc = S("Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them."), - _doc_items_usagehelp = S("After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again."), - inventory_image = "default_sign.png", - walkable = false, - is_ground_content = false, - wield_image = "default_sign.png", - node_placement_prediction = "", - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "wallmounted", - drawtype = "mesh", - mesh = "mcl_signs_signonwallmount.obj", - selection_box = {type = "wallmounted", wall_side = {-0.5, -7/28, -0.5, -23/56, 7/28, 0.5}}, - tiles = {"mcl_signs_sign.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - groups = sign_groups, - stack_max = 16, - sounds = node_sounds, - - on_place = function(itemstack, placer, pointed_thing) - local above = pointed_thing.above - local under = pointed_thing.under - - -- Use pointed node's on_rightclick function first, if present - local node_under = minetest.get_node(under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack - end - end - - local dir = vector.subtract(under, above) - - -- Only build when it's legal - local abovenodedef = minetest.registered_nodes[minetest.get_node(above).name] - if not abovenodedef or abovenodedef.buildable_to == false then - return itemstack - end - - local wdir = minetest.dir_to_wallmounted(dir) - - --local placer_pos = placer:get_pos() - - local fdir = minetest.dir_to_facedir(dir) - - local sign_info - local nodeitem = ItemStack(itemstack) - -- Ceiling - if wdir == 0 then - --how would you add sign to ceiling? - return itemstack - -- Floor - elseif wdir == 1 then - -- Standing sign - - -- Determine the sign rotation based on player's yaw - local yaw = math.pi*2 - placer:get_look_horizontal() - - -- Select one of 16 possible rotations (0-15) - local rotation_level = round((yaw / (math.pi*2)) * 16) - - if rotation_level > 15 then - rotation_level = 0 - elseif rotation_level < 0 then - rotation_level = 15 - end - - -- The actual rotation is a combination of predefined mesh and facedir (see node definition) - if rotation_level % 4 == 0 then - nodeitem:set_name("mcl_signs:standing_sign") - elseif rotation_level % 4 == 1 then - nodeitem:set_name("mcl_signs:standing_sign22_5") - elseif rotation_level % 4 == 2 then - nodeitem:set_name("mcl_signs:standing_sign45") - elseif rotation_level % 4 == 3 then - nodeitem:set_name("mcl_signs:standing_sign67_5") - end - fdir = math.floor(rotation_level / 4) - - -- Place the node! - local _, success = minetest.item_place_node(nodeitem, placer, pointed_thing, fdir) - if not success then - return itemstack - end - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - sign_info = signtext_info_standing[rotation_level + 1] - -- Side - else - -- Wall sign - local _, success = minetest.item_place_node(itemstack, placer, pointed_thing, wdir) - if not success then - return itemstack - end - sign_info = signtext_info_wall[fdir + 1] - end - - -- Determine spawn position of entity - local place_pos - if minetest.registered_nodes[node_under.name].buildable_to then - place_pos = under - else - place_pos = above - end - - local text_entity = minetest.add_entity({ - x = place_pos.x + sign_info.delta.x, - y = place_pos.y + sign_info.delta.y, - z = place_pos.z + sign_info.delta.z}, "mcl_signs:text") - text_entity:set_yaw(sign_info.yaw) - text_entity:get_luaentity()._signnodename = nodeitem:get_name() - - minetest.sound_play({name="default_place_node_hard", gain=1.0}, {pos = place_pos}, true) - - show_formspec(placer, place_pos) - return itemstack - end, - on_destruct = destruct_sign, - on_punch = function(pos, node, puncher) - update_sign(pos) - end, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - local r = screwdriver.rotate.wallmounted(pos, node, mode) - node.param2 = r - minetest.swap_node(pos, node) - update_sign(pos, nil, nil, true) - return true - else - return false - end - end, - _mcl_hardness = 1, - _mcl_blast_resistance = 1, -}) - --- Standing sign nodes. --- 4 rotations at 0°, 22.5°, 45° and 67.5°. --- These are 4 out of 16 possible rotations. --- With facedir the remaining 12 rotations are constructed. - --- 0° -local ssign = { - paramtype = "light", - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "mesh", - mesh = "mcl_signs_sign.obj", - selection_box = {type = "fixed", fixed = {-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}}, - tiles = {"mcl_signs_sign.png"}, - groups = sign_groups, - drop = "mcl_signs:wall_sign", - stack_max = 16, - sounds = node_sounds, - - on_destruct = destruct_sign, - on_punch = function(pos, node, puncher) - update_sign(pos) - end, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign22_5" - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true - end, - - _mcl_hardness = 1, - _mcl_blast_resistance = 1, -} - -minetest.register_node("mcl_signs:standing_sign", ssign) - --- 22.5° -local ssign22_5 = table.copy(ssign) -ssign22_5.mesh = "mcl_signs_sign22.5.obj" -ssign22_5.on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign45" - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true -end -minetest.register_node("mcl_signs:standing_sign22_5", ssign22_5) - --- 45° -local ssign45 = table.copy(ssign) -ssign45.mesh = "mcl_signs_sign45.obj" -ssign45.on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign67_5" - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true -end -minetest.register_node("mcl_signs:standing_sign45", ssign45) - --- 67.5° -local ssign67_5 = table.copy(ssign) -ssign67_5.mesh = "mcl_signs_sign67.5.obj" -ssign67_5.on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign" - node.param2 = (node.param2 + 1) % 4 - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true -end -minetest.register_node("mcl_signs:standing_sign67_5", ssign67_5) - --- FIXME: Prevent entity destruction by /clearobjects -minetest.register_entity("mcl_signs:text", { - pointable = false, - visual = "upright_sprite", - textures = {}, - physical = false, - collide_with_objects = false, - - _signnodename = nil, -- node name of sign node to which the text belongs - - on_activate = function(self, staticdata) - if staticdata and staticdata ~= "" then - local des = minetest.deserialize(staticdata) - if des then - self._signnodename = des._signnodename - end - end - local meta = minetest.get_meta(self.object:get_pos()) - local text = meta:get_string("text") - self.object:set_properties({ - textures={generate_texture(create_lines(text), self._signnodename)}, - }) - self.object:set_armor_groups({ immortal = 1 }) - end, - get_staticdata = function(self) - local out = { _signnodename = self._signnodename } - return minetest.serialize(out) - end, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_signs:wall_sign", - burntime = 10, -}) - -if minetest.get_modpath("mcl_core") then - minetest.register_craft({ - output = "mcl_signs:wall_sign 3", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - {"", "mcl_core:stick", ""}, - } - }) -end - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign") - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign22_5") - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign45") - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign67_5") -end - -minetest.register_alias("signs:sign_wall", "mcl_signs:wall_sign") -minetest.register_alias("signs:sign_yard", "mcl_signs:standing_sign") - -minetest.register_lbm({ - name = "mcl_signs:respawn_entities", - label = "Respawn sign text entities", - run_at_every_load = true, - nodenames = { "mcl_signs:wall_sign", "mcl_signs:standing_sign", "mcl_signs:standing_sign22_5", "mcl_signs:standing_sign45", "mcl_signs:standing_sign67_5" }, - action = function(pos, node) - update_sign(pos) - end, -}) diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.de.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.de.tr deleted file mode 100644 index a7513659b..000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Schild -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Schilder können beschrieben werden und kommen in zwei Varianten: Wandschild und stehendes Schild. Sie können auf und an den Seiten von anderen Blöclen platziert werden, aber nicht unter ihnen. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Nachdem das Schild platziert wurde, kann man etwas darauf schreiben. 4 Zeilen mit je 15 Zeichen pro Zeile sind verfügbar, alles darüber geht verloren. Es werden nicht alle Zeichen unterstützt. Der Text kann nicht geändert werden, sobald er geschrieben wurde; man muss das Schild erneut platzieren. -Enter sign text:=Schildtext eingeben: -Maximum line length: 15=Maximale Zeilenlänge: 15 -Maximum lines: 4=Maximale Zeilen: 4 -Done=Fertig -Can be written=Kann beschriftet werden diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.es.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.es.tr deleted file mode 100644 index d67e2da0d..000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_signs -Sign=Firmar -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Los letreros se pueden escribir y vienen en dos variantes: letrero de muro y letrero en un poste de letrero. Los letreros se pueden colocar en la parte superior y en los costados de otros bloques, pero no debajo de ellos. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Después de colocar el letrero, puede escribir algo en él. Tiene 4 líneas de texto con hasta 15 caracteres para cada línea; todo lo que esté más allá de estos límites se pierde. No todos los personajes son compatibles. El texto no se puede cambiar una vez que se ha escrito; tienes que romper y colocar el letrero nuevamente. -Enter sign text:=Inserte el texto del letrero: -Maximum line length: 15=Longitud máxima de línea: 15 -Maximum lines: 4=Líneas máximas: 4 -Done=Escribir cartel diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.fr.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.fr.tr deleted file mode 100644 index 158640dae..000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Panneau -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Les panneaux peuvent être écrits et se déclinent en deux variantes: panneau mural et panneau sur poteau. Des panneaux peuvent être placés en haut et sur les côtés des autres blocs, mais pas en dessous. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Après avoir placé le panneau, vous pouvez écrire quelque chose dessus. Vous avez 4 lignes de texte avec jusqu'à 15 caractères pour chaque ligne; tout ce qui dépasse ces limites est perdu. Tous les caractères ne sont pas pris en charge. Le texte ne peut pas être modifié une fois qu'il a été écrit; vous devez casser et placer à nouveau le panneau. -Enter sign text:=Saisir le texte du panneau: -Maximum line length: 15=Longueur maximum des lignes: 15 -Maximum lines: 4=Nombre maximum de lignes: 4 -Done=Terminé -Can be written=Peut être écrit diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr deleted file mode 100644 index bf3bbf3c8..000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Znak -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Na znakach można pisać i postawić je w dwóch wariantach: znak ścienny i znak na patyku. Znaki mogą być stawiane na górze i na bokach bloków, ale nie pod nimi. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Po postawieniu znaku możesz coś na nim napisać. Masz miejsce na cztery linie tekstu po 15 znaków każda; cokolwiek poza limitami będzie utracone. Nie wszystkie znaki są wspierane. Tekstu nie można zmienić po napisaniu; musisz zniszczyć znak i postawić go ponownie. -Enter sign text:=Wpisz tekst znaku: -Maximum line length: 15=Maksymalna długość linii: 15 -Maximum lines: 4=Maksymalna liczba linii: 4 -Done=Skończone -Can be written=Można na nim coś napisać diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.ru.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.ru.tr deleted file mode 100644 index 354e556a8..000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Табличка -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=На табличках можно писать. Таблички бывают двух видов: настенные и отдельно стоящие. Таблички можно размещать на верхушках и сторонах блоков, но не под блоками. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=После установки таблички вы можете написать на ней что-то. Вам доступны 4 строки текста, до 15 символов в каждой; всё, что вы напишете сверх лимита, потеряется. Поддерживаются не все символы. Текст нельзя изменить. Чтобы изменить его, вам придётся сломать табличку и подписать её снова. -Enter sign text:=Текст на табличке: -Maximum line length: 15=Максимальная длина строки: 15 -Maximum lines: 4=Максимум строк: 4 -Done=Готово -Can be written=Может быть подписана diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.zh_TW.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.zh_TW.tr deleted file mode 100644 index 62994bc3d..000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.zh_TW.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=告示牌 -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=告示牌可以寫字,有兩種變體:牆上的告示牌和柱上的告示牌。告示牌可以放在其他方塊的頂部和側面,但不能放在下面。 -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=放置告示牌後,你可以在上面寫東西。你最多可以寫4行文字,每行最多可以寫15個字符;超過這些限制的文字就會丟失。不是所有的字符都被支持。文字一旦寫完就不能更改;你必須打破並重新放置標誌。 -Enter sign text:=輸入告示牌文字: -Maximum line length: 15=每行最多可以寫15個字符 -Maximum lines: 4=最多可以寫4行文字 -Done=確認 -Can be written=可以寫字 diff --git a/mods/ITEMS/mcl_signs/locale/template.txt b/mods/ITEMS/mcl_signs/locale/template.txt deleted file mode 100644 index 6635e989f..000000000 --- a/mods/ITEMS/mcl_signs/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign= -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.= -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.= -Enter sign text:= -Maximum line length: 15= -Maximum lines: 4= -Done= -Can be written= diff --git a/mods/ITEMS/mcl_signs/mod.conf b/mods/ITEMS/mcl_signs/mod.conf deleted file mode 100644 index 1af689d7b..000000000 --- a/mods/ITEMS/mcl_signs/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_signs -optional_depends = mcl_sounds, mcl_core, doc diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign.obj deleted file mode 100644 index 00d0d415c..000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'sign.blend' -# www.blender.org -mtllib sign.mtl -o wood_Cube.001 -v 0.499985 0.082879 -0.041665 -v 0.499985 0.582864 -0.041665 -v 0.499985 0.082879 0.041666 -v 0.499985 0.582864 0.041666 -v -0.499985 0.082879 -0.041666 -v -0.499985 0.582864 -0.041666 -v -0.499985 0.082879 0.041665 -v -0.499985 0.582864 0.041665 -v 0.041665 -0.500001 -0.041665 -v 0.041665 0.083315 -0.041665 -v 0.041665 -0.500001 0.041665 -v 0.041665 0.083315 0.041665 -v -0.041665 -0.500001 -0.041665 -v -0.041665 0.083315 -0.041665 -v -0.041665 -0.500001 0.041665 -v -0.041665 0.083315 0.041665 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 1.000000 0.000000 0.000000 -vn -0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign22.5.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign22.5.obj deleted file mode 100644 index 7d38aa872..000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign22.5.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'sign 22.5.blend' -# www.blender.org -mtllib sign 22.5.mtl -o wood_Cube.001 -v 0.477871 0.082879 0.152842 -v 0.477871 0.582864 0.152842 -v 0.445982 0.082879 0.229830 -v 0.445982 0.582864 0.229830 -v -0.445982 0.082879 -0.229830 -v -0.445982 0.582864 -0.229830 -v -0.477871 0.082879 -0.152842 -v -0.477871 0.582864 -0.152842 -v 0.054439 -0.500001 -0.022549 -v 0.054439 0.083315 -0.022549 -v 0.022549 -0.500001 0.054439 -v 0.022549 0.083315 0.054439 -v -0.022549 -0.500001 -0.054439 -v -0.022549 0.083315 -0.054439 -v -0.054439 -0.500001 0.022549 -v -0.054439 0.083315 0.022549 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 0.923900 0.000000 0.382700 -vn -0.382700 0.000000 0.923900 -vn -0.923900 0.000000 -0.382700 -vn 0.382700 0.000000 -0.923900 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign45.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign45.obj deleted file mode 100644 index 4ab4ffa96..000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign45.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'mcl_signs_sign45.blend' -# www.blender.org -mtllib mcl_signs_sign45.mtl -o wood_Cube.001 -v 0.383005 0.082879 0.324081 -v 0.383005 0.582864 0.324081 -v 0.324081 0.082879 0.383005 -v 0.324081 0.582864 0.383005 -v -0.324081 0.082879 -0.383005 -v -0.324081 0.582864 -0.383005 -v -0.383005 0.082879 -0.324081 -v -0.383005 0.582864 -0.324081 -v 0.058924 -0.500001 0.000000 -v 0.058924 0.083315 0.000000 -v -0.000000 -0.500001 0.058924 -v -0.000000 0.083315 0.058924 -v 0.000000 -0.500001 -0.058924 -v 0.000000 0.083315 -0.058924 -v -0.058924 -0.500001 -0.000000 -v -0.058924 0.083315 -0.000000 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 0.707100 0.000000 0.707100 -vn -0.707100 0.000000 0.707100 -vn -0.707100 0.000000 -0.707100 -vn 0.707100 0.000000 -0.707100 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign67.5.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign67.5.obj deleted file mode 100644 index 314a48539..000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign67.5.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'mcl_signs_sign67.5.blend' -# www.blender.org -mtllib mcl_signs_sign67.5.mtl -o wood_Cube.001 -v 0.229830 0.082879 0.445982 -v 0.229830 0.582864 0.445982 -v 0.152842 0.082879 0.477871 -v 0.152842 0.582864 0.477871 -v -0.152842 0.082879 -0.477871 -v -0.152842 0.582864 -0.477871 -v -0.229830 0.082879 -0.445982 -v -0.229830 0.582864 -0.445982 -v 0.054439 -0.500001 0.022549 -v 0.054439 0.083315 0.022549 -v -0.022549 -0.500001 0.054439 -v -0.022549 0.083315 0.054439 -v 0.022549 -0.500001 -0.054439 -v 0.022549 0.083315 -0.054439 -v -0.054439 -0.500001 -0.022549 -v -0.054439 0.083315 -0.022549 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 0.382700 0.000000 0.923900 -vn -0.923900 0.000000 0.382700 -vn -0.382700 0.000000 -0.923900 -vn 0.923900 0.000000 -0.382700 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwall.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_signonwall.obj deleted file mode 100644 index 39567095a..000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwall.obj +++ /dev/null @@ -1,40 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'mcl_signs_signonwall.blend' -# www.blender.org -mtllib mcl_signs_signonwall.mtl -o wood_Cube.001 -v 0.499985 -0.249993 0.416671 -v 0.499985 0.249993 0.416671 -v 0.499985 -0.249993 0.500002 -v 0.499985 0.249993 0.500002 -v -0.499985 -0.249993 0.416671 -v -0.499985 0.249993 0.416671 -v -0.499985 -0.249993 0.500002 -v -0.499985 0.249993 0.500002 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn -0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwallmount.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_signonwallmount.obj deleted file mode 100644 index 098cdb965..000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwallmount.obj +++ /dev/null @@ -1,40 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'signonwallmount.blend' -# www.blender.org -mtllib signonwallmount.mtl -o wood_Cube.001 -v 0.499985 -0.416668 -0.249992 -v 0.499985 -0.416668 0.249993 -v 0.499985 -0.499999 -0.249992 -v 0.499985 -0.499999 0.249993 -v -0.499985 -0.416668 -0.249993 -v -0.499985 -0.416668 0.249992 -v -0.499985 -0.499999 -0.249993 -v -0.499985 -0.499999 0.249992 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 -1.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.000000 1.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn -0.000000 -0.000000 1.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 diff --git a/mods/ITEMS/mcl_signs/textures/_0.png b/mods/ITEMS/mcl_signs/textures/_0.png deleted file mode 100644 index e764f3d6a..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1.png b/mods/ITEMS/mcl_signs/textures/_1.png deleted file mode 100644 index 7fae5fa4c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1_2.png b/mods/ITEMS/mcl_signs/textures/_1_2.png deleted file mode 100644 index 52d025e87..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1_4.png b/mods/ITEMS/mcl_signs/textures/_1_4.png deleted file mode 100644 index 220e65ef5..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1_sup.png b/mods/ITEMS/mcl_signs/textures/_1_sup.png deleted file mode 100644 index 6be5fdcb1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_2.png b/mods/ITEMS/mcl_signs/textures/_2.png deleted file mode 100644 index e32866d03..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_2_sup.png b/mods/ITEMS/mcl_signs/textures/_2_sup.png deleted file mode 100644 index 3db952179..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_2_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_3.png b/mods/ITEMS/mcl_signs/textures/_3.png deleted file mode 100644 index 4e7da5665..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_3_4.png b/mods/ITEMS/mcl_signs/textures/_3_4.png deleted file mode 100644 index 46e171049..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_3_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_3_sup.png b/mods/ITEMS/mcl_signs/textures/_3_sup.png deleted file mode 100644 index add337326..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_3_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_4.png b/mods/ITEMS/mcl_signs/textures/_4.png deleted file mode 100644 index 5f3d95656..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_5.png b/mods/ITEMS/mcl_signs/textures/_5.png deleted file mode 100644 index baf23b273..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_5.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_6.png b/mods/ITEMS/mcl_signs/textures/_6.png deleted file mode 100644 index 31fcd7d72..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_6.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_7.png b/mods/ITEMS/mcl_signs/textures/_7.png deleted file mode 100644 index 7594eb9d6..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_7.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_8.png b/mods/ITEMS/mcl_signs/textures/_8.png deleted file mode 100644 index b61f4e294..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_8.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_9.png b/mods/ITEMS/mcl_signs/textures/_9.png deleted file mode 100644 index 5ed82070b..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_9.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a.png b/mods/ITEMS/mcl_signs/textures/_a.png deleted file mode 100644 index 4b9356ac4..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_.png b/mods/ITEMS/mcl_signs/textures/_a_.png deleted file mode 100644 index 152beabd4..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_acute.png b/mods/ITEMS/mcl_signs/textures/_a_acute.png deleted file mode 100644 index b72b4853e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_acute_.png b/mods/ITEMS/mcl_signs/textures/_a_acute_.png deleted file mode 100644 index d038b45ce..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_circumflex.png b/mods/ITEMS/mcl_signs/textures/_a_circumflex.png deleted file mode 100644 index f9b80df66..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_a_circumflex_.png deleted file mode 100644 index 8b35bdf7c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_grave.png b/mods/ITEMS/mcl_signs/textures/_a_grave.png deleted file mode 100644 index 3f0de45a5..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_grave_.png b/mods/ITEMS/mcl_signs/textures/_a_grave_.png deleted file mode 100644 index 8176f51c5..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_ring.png b/mods/ITEMS/mcl_signs/textures/_a_ring.png deleted file mode 100644 index d3c06ae6d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_ring.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_ring_.png b/mods/ITEMS/mcl_signs/textures/_a_ring_.png deleted file mode 100644 index d3e9b7e96..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_ring_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_sup.png b/mods/ITEMS/mcl_signs/textures/_a_sup.png deleted file mode 100644 index 4f4f9801c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_tilde.png b/mods/ITEMS/mcl_signs/textures/_a_tilde.png deleted file mode 100644 index 567632c37..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_tilde.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_tilde_.png b/mods/ITEMS/mcl_signs/textures/_a_tilde_.png deleted file mode 100644 index fd3d97784..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_tilde_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_acute.png b/mods/ITEMS/mcl_signs/textures/_acute.png deleted file mode 100644 index 0655de2dd..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae.png b/mods/ITEMS/mcl_signs/textures/_ae.png deleted file mode 100644 index 7f199e477..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae_.png b/mods/ITEMS/mcl_signs/textures/_ae_.png deleted file mode 100644 index e19fdf1c8..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae_lig.png b/mods/ITEMS/mcl_signs/textures/_ae_lig.png deleted file mode 100644 index a02bd30cf..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae_lig.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae_lig_.png b/mods/ITEMS/mcl_signs/textures/_ae_lig_.png deleted file mode 100644 index 0eb5d2f5c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae_lig_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_am.png b/mods/ITEMS/mcl_signs/textures/_am.png deleted file mode 100644 index 76a886757..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_am.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ap.png b/mods/ITEMS/mcl_signs/textures/_ap.png deleted file mode 100644 index bced380ac..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ap.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_as.png b/mods/ITEMS/mcl_signs/textures/_as.png deleted file mode 100644 index 702a519b8..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_as.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_at.png b/mods/ITEMS/mcl_signs/textures/_at.png deleted file mode 100644 index 1c7fa502c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_at.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_b.png b/mods/ITEMS/mcl_signs/textures/_b.png deleted file mode 100644 index 427f488e5..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_b.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_b_.png b/mods/ITEMS/mcl_signs/textures/_b_.png deleted file mode 100644 index c89961d1b..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_b_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_bl.png b/mods/ITEMS/mcl_signs/textures/_bl.png deleted file mode 100644 index 422fcc586..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_bl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_br.png b/mods/ITEMS/mcl_signs/textures/_br.png deleted file mode 100644 index 88b1ba4a3..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_br.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_broken_bar.png b/mods/ITEMS/mcl_signs/textures/_broken_bar.png deleted file mode 100644 index c733fd862..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_broken_bar.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c.png b/mods/ITEMS/mcl_signs/textures/_c.png deleted file mode 100644 index 0ae311f3d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c_.png b/mods/ITEMS/mcl_signs/textures/_c_.png deleted file mode 100644 index 135260913..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c_cedille.png b/mods/ITEMS/mcl_signs/textures/_c_cedille.png deleted file mode 100644 index 9d5a4b564..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c_cedille.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c_cedille_.png b/mods/ITEMS/mcl_signs/textures/_c_cedille_.png deleted file mode 100644 index 7eb654bc4..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c_cedille_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ca.png b/mods/ITEMS/mcl_signs/textures/_ca.png deleted file mode 100644 index 79fa4345f..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ca.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cedille.png b/mods/ITEMS/mcl_signs/textures/_cedille.png deleted file mode 100644 index 0de32ed0c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cedille.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cent.png b/mods/ITEMS/mcl_signs/textures/_cent.png deleted file mode 100644 index ecdb1f1d1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cent.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cl.png b/mods/ITEMS/mcl_signs/textures/_cl.png deleted file mode 100644 index 38cad796c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cm.png b/mods/ITEMS/mcl_signs/textures/_cm.png deleted file mode 100644 index 6b2b10a17..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cm.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_co.png b/mods/ITEMS/mcl_signs/textures/_co.png deleted file mode 100644 index 6775d5eaf..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_co.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_copyright.png b/mods/ITEMS/mcl_signs/textures/_copyright.png deleted file mode 100644 index 7cfdf217e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_copyright.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cr.png b/mods/ITEMS/mcl_signs/textures/_cr.png deleted file mode 100644 index cd6d6dac6..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_currency.png b/mods/ITEMS/mcl_signs/textures/_currency.png deleted file mode 100644 index 1264c8945..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_currency.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d.png b/mods/ITEMS/mcl_signs/textures/_d.png deleted file mode 100644 index d7988e2be..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d_.png b/mods/ITEMS/mcl_signs/textures/_d_.png deleted file mode 100644 index 8803ea036..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d_dash.png b/mods/ITEMS/mcl_signs/textures/_d_dash.png deleted file mode 100644 index 73f5a1246..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d_dash.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d_dash_.png b/mods/ITEMS/mcl_signs/textures/_d_dash_.png deleted file mode 100644 index e9c9e69c7..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d_dash_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_degree.png b/mods/ITEMS/mcl_signs/textures/_degree.png deleted file mode 100644 index 64a7ee2b1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_degree.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_diaresis.png b/mods/ITEMS/mcl_signs/textures/_diaresis.png deleted file mode 100644 index f8b75d38d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_diaresis.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_div.png b/mods/ITEMS/mcl_signs/textures/_div.png deleted file mode 100644 index 808343753..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_div.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_dl.png b/mods/ITEMS/mcl_signs/textures/_dl.png deleted file mode 100644 index 044e4f00b..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_dl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_dt.png b/mods/ITEMS/mcl_signs/textures/_dt.png deleted file mode 100644 index 5dfa75349..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_dt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_dv.png b/mods/ITEMS/mcl_signs/textures/_dv.png deleted file mode 100644 index 2989d93db..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_dv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e.png b/mods/ITEMS/mcl_signs/textures/_e.png deleted file mode 100644 index 316e966a1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_.png b/mods/ITEMS/mcl_signs/textures/_e_.png deleted file mode 100644 index 5ef88d282..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_acute.png b/mods/ITEMS/mcl_signs/textures/_e_acute.png deleted file mode 100644 index 911207f86..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_acute_.png b/mods/ITEMS/mcl_signs/textures/_e_acute_.png deleted file mode 100644 index b60193740..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_circumflex.png b/mods/ITEMS/mcl_signs/textures/_e_circumflex.png deleted file mode 100644 index 2b5ace3c4..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_e_circumflex_.png deleted file mode 100644 index c17d9dc29..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_grave.png b/mods/ITEMS/mcl_signs/textures/_e_grave.png deleted file mode 100644 index c24ab4635..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_grave_.png b/mods/ITEMS/mcl_signs/textures/_e_grave_.png deleted file mode 100644 index c71bb2ef6..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ee.png b/mods/ITEMS/mcl_signs/textures/_ee.png deleted file mode 100644 index 646c19e14..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ee.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ee_.png b/mods/ITEMS/mcl_signs/textures/_ee_.png deleted file mode 100644 index 5db7bc66a..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ee_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_eq.png b/mods/ITEMS/mcl_signs/textures/_eq.png deleted file mode 100644 index 166f7a30d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_eq.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ex.png b/mods/ITEMS/mcl_signs/textures/_ex.png deleted file mode 100644 index 65a76aad1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ex_inv.png b/mods/ITEMS/mcl_signs/textures/_ex_inv.png deleted file mode 100644 index 1e7bbfe87..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ex_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_f.png b/mods/ITEMS/mcl_signs/textures/_f.png deleted file mode 100644 index 1e431df13..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_f.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_f_.png b/mods/ITEMS/mcl_signs/textures/_f_.png deleted file mode 100644 index d0dec2b35..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_f_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_g.png b/mods/ITEMS/mcl_signs/textures/_g.png deleted file mode 100644 index 0b39fc95e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_g.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_g_.png b/mods/ITEMS/mcl_signs/textures/_g_.png deleted file mode 100644 index bfe054638..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_g_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_gr.png b/mods/ITEMS/mcl_signs/textures/_gr.png deleted file mode 100644 index 3f806499a..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_gr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_gt.png b/mods/ITEMS/mcl_signs/textures/_gt.png deleted file mode 100644 index 0449b44de..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_gt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_guill_left.png b/mods/ITEMS/mcl_signs/textures/_guill_left.png deleted file mode 100644 index 32b90c3e2..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_guill_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_guill_right.png b/mods/ITEMS/mcl_signs/textures/_guill_right.png deleted file mode 100644 index d372e6a85..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_guill_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_h.png b/mods/ITEMS/mcl_signs/textures/_h.png deleted file mode 100644 index bd6f1891c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_h.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_h_.png b/mods/ITEMS/mcl_signs/textures/_h_.png deleted file mode 100644 index 08cb5d8b0..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_h_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ha.png b/mods/ITEMS/mcl_signs/textures/_ha.png deleted file mode 100644 index 946ae4e5e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ha.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_hs.png b/mods/ITEMS/mcl_signs/textures/_hs.png deleted file mode 100644 index 682a92a2d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_hs.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i.png b/mods/ITEMS/mcl_signs/textures/_i.png deleted file mode 100644 index 9ba3e01a3..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_.png b/mods/ITEMS/mcl_signs/textures/_i_.png deleted file mode 100644 index ffe090aa8..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_acute.png b/mods/ITEMS/mcl_signs/textures/_i_acute.png deleted file mode 100644 index 20bdafb62..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_acute_.png b/mods/ITEMS/mcl_signs/textures/_i_acute_.png deleted file mode 100644 index 4cdc943d9..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_circumflex.png b/mods/ITEMS/mcl_signs/textures/_i_circumflex.png deleted file mode 100644 index f0e712725..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_i_circumflex_.png deleted file mode 100644 index dc46f3ff5..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_grave.png b/mods/ITEMS/mcl_signs/textures/_i_grave.png deleted file mode 100644 index 7254cd7d2..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_grave_.png b/mods/ITEMS/mcl_signs/textures/_i_grave_.png deleted file mode 100644 index 1e2212679..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_j.png b/mods/ITEMS/mcl_signs/textures/_j.png deleted file mode 100644 index 7fec50215..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_j.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_j_.png b/mods/ITEMS/mcl_signs/textures/_j_.png deleted file mode 100644 index 440af26d5..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_j_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_k.png b/mods/ITEMS/mcl_signs/textures/_k.png deleted file mode 100644 index af07f4bf3..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_k.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_k_.png b/mods/ITEMS/mcl_signs/textures/_k_.png deleted file mode 100644 index 5e0a6b995..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_k_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_l.png b/mods/ITEMS/mcl_signs/textures/_l.png deleted file mode 100644 index d28a863f3..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_l.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_l_.png b/mods/ITEMS/mcl_signs/textures/_l_.png deleted file mode 100644 index c40390194..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_l_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_lt.png b/mods/ITEMS/mcl_signs/textures/_lt.png deleted file mode 100644 index 54295121e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_lt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_m.png b/mods/ITEMS/mcl_signs/textures/_m.png deleted file mode 100644 index e4110bbb0..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_m.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_m_.png b/mods/ITEMS/mcl_signs/textures/_m_.png deleted file mode 100644 index ac516a053..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_m_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_macron.png b/mods/ITEMS/mcl_signs/textures/_macron.png deleted file mode 100644 index ffb9dfd77..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_macron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_mn.png b/mods/ITEMS/mcl_signs/textures/_mn.png deleted file mode 100644 index 2230e1065..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_mn.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_mu.png b/mods/ITEMS/mcl_signs/textures/_mu.png deleted file mode 100644 index 3d8c1b890..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_mu.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n.png b/mods/ITEMS/mcl_signs/textures/_n.png deleted file mode 100644 index ca5ea2787..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n_.png b/mods/ITEMS/mcl_signs/textures/_n_.png deleted file mode 100644 index b96f27c62..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n_tilde.png b/mods/ITEMS/mcl_signs/textures/_n_tilde.png deleted file mode 100644 index 471669116..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n_tilde.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n_tilde_.png b/mods/ITEMS/mcl_signs/textures/_n_tilde_.png deleted file mode 100644 index 0dba0d471..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n_tilde_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_not.png b/mods/ITEMS/mcl_signs/textures/_not.png deleted file mode 100644 index a98f885e9..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_not.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o.png b/mods/ITEMS/mcl_signs/textures/_o.png deleted file mode 100644 index 2a579385d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_.png b/mods/ITEMS/mcl_signs/textures/_o_.png deleted file mode 100644 index 44ac3cbca..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_acute.png b/mods/ITEMS/mcl_signs/textures/_o_acute.png deleted file mode 100644 index cda99b3a6..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_acute_.png b/mods/ITEMS/mcl_signs/textures/_o_acute_.png deleted file mode 100644 index e25a3a7f4..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_circumflex.png b/mods/ITEMS/mcl_signs/textures/_o_circumflex.png deleted file mode 100644 index 2f7a188df..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_o_circumflex_.png deleted file mode 100644 index 5e4c6be6a..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_dash.png b/mods/ITEMS/mcl_signs/textures/_o_dash.png deleted file mode 100644 index 9e5de53d1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_dash.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_dash_.png b/mods/ITEMS/mcl_signs/textures/_o_dash_.png deleted file mode 100644 index badbe9b88..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_dash_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_grave.png b/mods/ITEMS/mcl_signs/textures/_o_grave.png deleted file mode 100644 index b6b31a9a6..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_grave_.png b/mods/ITEMS/mcl_signs/textures/_o_grave_.png deleted file mode 100644 index d34e9d71c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_sup.png b/mods/ITEMS/mcl_signs/textures/_o_sup.png deleted file mode 100644 index eeff0a295..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_tilde.png b/mods/ITEMS/mcl_signs/textures/_o_tilde.png deleted file mode 100644 index 6cbd7cec0..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_tilde.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_tilde_.png b/mods/ITEMS/mcl_signs/textures/_o_tilde_.png deleted file mode 100644 index bb0616918..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_tilde_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_oe.png b/mods/ITEMS/mcl_signs/textures/_oe.png deleted file mode 100644 index 9b6892155..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_oe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_oe_.png b/mods/ITEMS/mcl_signs/textures/_oe_.png deleted file mode 100644 index 73b4da80e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_oe_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_p.png b/mods/ITEMS/mcl_signs/textures/_p.png deleted file mode 100644 index 08f8534d0..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_p.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_p_.png b/mods/ITEMS/mcl_signs/textures/_p_.png deleted file mode 100644 index 2ff300509..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_p_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_paragraph.png b/mods/ITEMS/mcl_signs/textures/_paragraph.png deleted file mode 100644 index 52c162120..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_paragraph.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_pilcrow.png b/mods/ITEMS/mcl_signs/textures/_pilcrow.png deleted file mode 100644 index 9764ff8b5..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_pilcrow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_plus_minus.png b/mods/ITEMS/mcl_signs/textures/_plus_minus.png deleted file mode 100644 index e7c3f1200..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_plus_minus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_pound.png b/mods/ITEMS/mcl_signs/textures/_pound.png deleted file mode 100644 index 31d38d392..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_pound.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_pr.png b/mods/ITEMS/mcl_signs/textures/_pr.png deleted file mode 100644 index c8783948d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_pr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ps.png b/mods/ITEMS/mcl_signs/textures/_ps.png deleted file mode 100644 index 74b1f5b8e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ps.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_q.png b/mods/ITEMS/mcl_signs/textures/_q.png deleted file mode 100644 index b5fbcc27d..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_q.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_q_.png b/mods/ITEMS/mcl_signs/textures/_q_.png deleted file mode 100644 index 674799413..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_q_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_qo.png b/mods/ITEMS/mcl_signs/textures/_qo.png deleted file mode 100644 index c7b87be68..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_qo.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_qu.png b/mods/ITEMS/mcl_signs/textures/_qu.png deleted file mode 100644 index 1458c7e10..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_qu.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_qu_inv.png b/mods/ITEMS/mcl_signs/textures/_qu_inv.png deleted file mode 100644 index 757bd06db..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_qu_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_r.png b/mods/ITEMS/mcl_signs/textures/_r.png deleted file mode 100644 index 709c53889..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_r.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_r_.png b/mods/ITEMS/mcl_signs/textures/_r_.png deleted file mode 100644 index f8b472755..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_r_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_rc.png b/mods/ITEMS/mcl_signs/textures/_rc.png deleted file mode 100644 index 8b66915e6..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_rc.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_re.png b/mods/ITEMS/mcl_signs/textures/_re.png deleted file mode 100644 index 8fdaf4d24..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_re.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_registered.png b/mods/ITEMS/mcl_signs/textures/_registered.png deleted file mode 100644 index 9a78dda3c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_registered.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_s.png b/mods/ITEMS/mcl_signs/textures/_s.png deleted file mode 100644 index 4c47aee01..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_s.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_s_.png b/mods/ITEMS/mcl_signs/textures/_s_.png deleted file mode 100644 index 08cf6ff68..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_s_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sl.png b/mods/ITEMS/mcl_signs/textures/_sl.png deleted file mode 100644 index 413aa5778..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sm.png b/mods/ITEMS/mcl_signs/textures/_sm.png deleted file mode 100644 index 460c5d6dd..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sm.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sp.png b/mods/ITEMS/mcl_signs/textures/_sp.png deleted file mode 100644 index 4aae0ea85..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sp.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sr.png b/mods/ITEMS/mcl_signs/textures/_sr.png deleted file mode 100644 index afefa91b2..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sz.png b/mods/ITEMS/mcl_signs/textures/_sz.png deleted file mode 100644 index 56d2847a1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sz.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_t.png b/mods/ITEMS/mcl_signs/textures/_t.png deleted file mode 100644 index e750dd98e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_t.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_t_.png b/mods/ITEMS/mcl_signs/textures/_t_.png deleted file mode 100644 index d7aabd04a..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_t_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_thorn.png b/mods/ITEMS/mcl_signs/textures/_thorn.png deleted file mode 100644 index e44f23d85..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_thorn.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_thorn_.png b/mods/ITEMS/mcl_signs/textures/_thorn_.png deleted file mode 100644 index 1b6d2558b..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_thorn_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_times_cross.png b/mods/ITEMS/mcl_signs/textures/_times_cross.png deleted file mode 100644 index 25af91b68..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_times_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_times_dot.png b/mods/ITEMS/mcl_signs/textures/_times_dot.png deleted file mode 100644 index 42dac52bc..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_times_dot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_tl.png b/mods/ITEMS/mcl_signs/textures/_tl.png deleted file mode 100644 index 5f1b4fb43..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_tl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u.png b/mods/ITEMS/mcl_signs/textures/_u.png deleted file mode 100644 index 2665e5685..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_.png b/mods/ITEMS/mcl_signs/textures/_u_.png deleted file mode 100644 index d04ff5481..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_acute.png b/mods/ITEMS/mcl_signs/textures/_u_acute.png deleted file mode 100644 index 580f61042..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_acute_.png b/mods/ITEMS/mcl_signs/textures/_u_acute_.png deleted file mode 100644 index 9237d3caf..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_circumflex.png b/mods/ITEMS/mcl_signs/textures/_u_circumflex.png deleted file mode 100644 index 2b238be12..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_u_circumflex_.png deleted file mode 100644 index 1608ecf17..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_grave.png b/mods/ITEMS/mcl_signs/textures/_u_grave.png deleted file mode 100644 index 051280428..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_grave_.png b/mods/ITEMS/mcl_signs/textures/_u_grave_.png deleted file mode 100644 index 668685793..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ue.png b/mods/ITEMS/mcl_signs/textures/_ue.png deleted file mode 100644 index 6249aaebb..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ue_.png b/mods/ITEMS/mcl_signs/textures/_ue_.png deleted file mode 100644 index 3193a9412..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ue_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_un.png b/mods/ITEMS/mcl_signs/textures/_un.png deleted file mode 100644 index d65f12d4e..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_un.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_v.png b/mods/ITEMS/mcl_signs/textures/_v.png deleted file mode 100644 index 888b2f1cf..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_v.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_v_.png b/mods/ITEMS/mcl_signs/textures/_v_.png deleted file mode 100644 index f2ecbf143..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_v_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_vb.png b/mods/ITEMS/mcl_signs/textures/_vb.png deleted file mode 100644 index ca2e5667a..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_vb.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_w.png b/mods/ITEMS/mcl_signs/textures/_w.png deleted file mode 100644 index 6c2eea3e1..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_w.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_w_.png b/mods/ITEMS/mcl_signs/textures/_w_.png deleted file mode 100644 index f1e26c108..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_w_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_x.png b/mods/ITEMS/mcl_signs/textures/_x.png deleted file mode 100644 index 3eb2d52d7..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_x.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_x_.png b/mods/ITEMS/mcl_signs/textures/_x_.png deleted file mode 100644 index bcb351d56..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_x_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y.png b/mods/ITEMS/mcl_signs/textures/_y.png deleted file mode 100644 index 7cd1d87b7..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_.png b/mods/ITEMS/mcl_signs/textures/_y_.png deleted file mode 100644 index b5f49850c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_acute.png b/mods/ITEMS/mcl_signs/textures/_y_acute.png deleted file mode 100644 index 37cb54b30..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_acute_.png b/mods/ITEMS/mcl_signs/textures/_y_acute_.png deleted file mode 100644 index bcc15c41c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_diaresis.png b/mods/ITEMS/mcl_signs/textures/_y_diaresis.png deleted file mode 100644 index 135a8ce25..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_diaresis.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_yen.png b/mods/ITEMS/mcl_signs/textures/_yen.png deleted file mode 100644 index ec4ad65ee..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_yen.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_z.png b/mods/ITEMS/mcl_signs/textures/_z.png deleted file mode 100644 index 8a710780a..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_z.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_z_.png b/mods/ITEMS/mcl_signs/textures/_z_.png deleted file mode 100644 index 6192800b4..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_z_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/default_sign.png b/mods/ITEMS/mcl_signs/textures/default_sign.png deleted file mode 100644 index 077983118..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/default_sign.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/mcl_signs_sign.png b/mods/ITEMS/mcl_signs/textures/mcl_signs_sign.png deleted file mode 100644 index e312cb52c..000000000 Binary files a/mods/ITEMS/mcl_signs/textures/mcl_signs_sign.png and /dev/null differ diff --git a/mods/ITEMS/mcl_smoker/README.md b/mods/ITEMS/mcl_smoker/README.md deleted file mode 100644 index 895a8dd81..000000000 --- a/mods/ITEMS/mcl_smoker/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Smoker for MineClone 2. -Heavily based on Minetest Game (default/furnace.lua) and the MineClone 2 Furnaces. - -License of source code ----------------------- -LGPLv2.1 -Based on code from Minetest Game. -Modified by Wuzzy. -MCl 2 Furances modified by PrairieWind. - -License of media ----------------- -See the main MineClone 2 README.md file. diff --git a/mods/ITEMS/mcl_smoker/init.lua b/mods/ITEMS/mcl_smoker/init.lua deleted file mode 100644 index e45a2712c..000000000 --- a/mods/ITEMS/mcl_smoker/init.lua +++ /dev/null @@ -1,575 +0,0 @@ - -local S = minetest.get_translator(minetest.get_current_modname()) - -local LIGHT_ACTIVE_FURNACE = 13 - --- --- Formspecs --- - -local function active_formspec(fuel_percent, item_percent) - return "size[9,8.75]".. - "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Smoker"))).."]".. - "list[context;src;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;fuel;2.75,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[context;dst;5.75,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. - "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. - (100-fuel_percent)..":default_furnace_fire_fg.png]".. - "image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[lowpart:".. - (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. - -- Craft guide button temporarily removed due to Minetest bug. - -- TODO: Add it back when the Minetest bug is fixed. - --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. - --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[context;dst]".. - "listring[current_player;main]".. - "listring[context;src]".. - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[current_player;main]" -end - -local inactive_formspec = "size[9,8.75]".. - "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Smoker"))).."]".. - "list[context;src;2.75,0.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[context;fuel;2.75,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[context;dst;5.75,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. - "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. - "image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]".. - -- Craft guide button temporarily removed due to Minetest bug. - -- TODO: Add it back when the Minetest bug is fixed. - --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. - --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[context;dst]".. - "listring[current_player;main]".. - "listring[context;src]".. - "listring[current_player;main]".. - "listring[context;fuel]".. - "listring[current_player;main]" - -local receive_fields = function(pos, formname, fields, sender) - if fields.craftguide then - mcl_craftguide.show(sender:get_player_name()) - end -end - -local function give_xp(pos, player) - local meta = minetest.get_meta(pos) - local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2),-1.95) - local xp = meta:get_int("xp") - if xp > 0 then - if player then - mcl_experience.add_xp(player, xp) - else - mcl_experience.throw_xp(vector.add(pos, dir), xp) - end - meta:set_int("xp", 0) - end -end - --- --- Node callback functions that are the same for active and inactive furnace --- - -local function allow_metadata_inventory_put(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - -- Test stack with size 1 because we burn one fuel at a time - local teststack = ItemStack(stack) - teststack:set_count(1) - local output, decremented_input = minetest.get_craft_result({method="fuel", width=1, items={teststack}}) - if output.time ~= 0 then - -- Only allow to place 1 item if fuel get replaced by recipe. - -- This is the case for lava buckets. - local replace_item = decremented_input.items[1] - if replace_item:is_empty() then - -- For most fuels, just allow to place everything - return stack:get_count() - else - if inv:get_stack(listname, index):get_count() == 0 then - return 1 - else - return 0 - end - end - else - return 0 - end - elseif listname == "src" then - return stack:get_count() - elseif listname == "dst" then - return 0 - end -end - -local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local stack = inv:get_stack(from_list, from_index) - return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) -end - -local function allow_metadata_inventory_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - return stack:get_count() -end - -local function on_metadata_inventory_take(pos, listname, index, stack, player) - -- Award smelting achievements - if listname == "dst" then - if stack:get_name() == "mcl_fishing:fish_cooked" then - awards.unlock(player:get_player_name(), "mcl:cookFish") - end - give_xp(pos, player) - end -end - -local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - if from_list == "dst" then - give_xp(pos, player) - end -end - -local function spawn_flames(pos, param2) - local minrelpos, maxrelpos - local dir = minetest.facedir_to_dir(param2) - if dir.x > 0 then - minrelpos = { x = -0.6, y = -0.05, z = -0.25 } - maxrelpos = { x = -0.55, y = -0.45, z = 0.25 } - elseif dir.x < 0 then - minrelpos = { x = 0.55, y = -0.05, z = -0.25 } - maxrelpos = { x = 0.6, y = -0.45, z = 0.25 } - elseif dir.z > 0 then - minrelpos = { x = -0.25, y = -0.05, z = -0.6 } - maxrelpos = { x = 0.25, y = -0.45, z = -0.55 } - elseif dir.z < 0 then - minrelpos = { x = -0.25, y = -0.05, z = 0.55 } - maxrelpos = { x = 0.25, y = -0.45, z = 0.6 } - else - return - end - mcl_particles.add_node_particlespawner(pos, { - amount = 4, - time = 0, - minpos = vector.add(pos, minrelpos), - maxpos = vector.add(pos, maxrelpos), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.4, - maxsize = 0.8, - texture = "mcl_particles_flame.png", - glow = LIGHT_ACTIVE_FURNACE, - }, "low") -end - -local function swap_node(pos, name) - local node = minetest.get_node(pos) - if node.name == name then - return - end - node.name = name - minetest.swap_node(pos, node) - if name == "mcl_smoker:smoker_active" then - spawn_flames(pos, node.param2) - else - mcl_particles.delete_node_particlespawners(pos) - end -end - -local function smoker_reset_delta_time(pos) - local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get("time_speed") or 72) - if (time_speed < 0.1) then - return - end - local time_multiplier = 86400 / time_speed - local current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - - -- TODO: Change meta:get/set_string() to get/set_float() for "last_gametime". - -- In Windows *_float() works OK but under Linux it returns rounded unusable values like 449540.000000000 - local last_game_time = meta:get_string("last_gametime") - if last_game_time then - last_game_time = tonumber(last_game_time) - end - if not last_game_time or last_game_time < 1 or math.abs(last_game_time - current_game_time) <= 1.5 then - return - end - - meta:set_string("last_gametime", tostring(current_game_time)) -end - -local function smoker_get_delta_time(pos, elapsed) - local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get("time_speed") or 72) - local current_game_time - if (time_speed < 0.1) then - return meta, elapsed - else - local time_multiplier = 86400 / time_speed - current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - end - - local last_game_time = meta:get_string("last_gametime") - if last_game_time then - last_game_time = tonumber(last_game_time) - end - if not last_game_time or last_game_time < 1 then - last_game_time = current_game_time - 0.1 - elseif last_game_time == current_game_time then - current_game_time = current_game_time + 1.0 - end - - local elapsed_game_time = .0 + current_game_time - last_game_time - - meta:set_string("last_gametime", tostring(current_game_time)) - - return meta, elapsed_game_time -end - -local function smoker_node_timer(pos, elapsed) - -- - -- Inizialize metadata - -- - local meta, elapsed_game_time = smoker_get_delta_time(pos, elapsed) - - local fuel_time = meta:get_float("fuel_time") or 0 - local src_time = meta:get_float("src_time") or 0 - local src_item = meta:get_string("src_item") or "" - local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - - local inv = meta:get_inventory() - local srclist, fuellist - - local cookable, cooked - local active = true - local fuel - - srclist = inv:get_list("src") - fuellist = inv:get_list("fuel") - - -- Check if src item has been changed - if srclist[1]:get_name() ~= src_item then - -- Reset cooking progress in this case - src_time = 0 - src_item = srclist[1]:get_name() - end - - local update = true - while elapsed_game_time > 0.00001 and update do - -- - -- Cooking - -- - - local el = elapsed_game_time - - -- Check if we have cookable content: cookable - local aftercooked - cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - cookable = minetest.get_item_group(inv:get_stack("src", 1):get_name(), "smoker_cookable") == 1 - if cookable then - -- Successful cooking requires space in dst slot and time - if not inv:room_for_item("dst", cooked.item) then - cookable = false - end - end - - if cookable then -- fuel lasts long enough, adjust el to cooking duration - el = math.min(el, cooked.time - src_time) - end - - -- Check if we have enough fuel to burn - active = fuel_time < fuel_totaltime - if cookable and not active then - -- We need to get new fuel - local afterfuel - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - - if fuel.time == 0 then - -- No valid fuel in fuel list -- stop - fuel_totaltime = 0 - src_time = 0 - update = false - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - fuel_time = 0 - fuel_totaltime = fuel.time - el = math.min(el, fuel_totaltime) - active = true - fuellist = inv:get_list("fuel") - end - elseif active then - el = math.min(el, fuel_totaltime - fuel_time) - -- The furnace is currently active and has enough fuel - fuel_time = ( fuel_time + el ) * 2 - end - - -- If there is a cookable item then check if it is ready yet - if cookable and active then - -- In the src_time variable, the *2 is the multiplication that makes the smoker work faster than a normal furnace. - src_time = (src_time + el)*2 - -- Place result in dst list if done - if src_time >= cooked.time then - inv:add_item("dst", cooked.item) - inv:set_stack("src", 1, aftercooked.items[1]) - - srclist = inv:get_list("src") - src_time = 0 - - meta:set_int("xp", meta:get_int("xp") + 1) -- ToDo give each recipe an idividial XP count - end - end - - elapsed_game_time = elapsed_game_time - el - end - - if fuel and fuel_totaltime > fuel.time then - fuel_totaltime = fuel.time - end - if srclist and srclist[1]:is_empty() then - src_time = 0 - end - - -- - -- Update formspec and node - -- - local formspec = inactive_formspec - local item_percent = 0 - if cookable then - item_percent = math.floor(src_time / cooked.time * 100) - end - - local result = false - - if active then - local fuel_percent = 0 - if fuel_totaltime > 0 then - fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) - end - formspec = active_formspec(fuel_percent, item_percent) - swap_node(pos, "mcl_smoker:smoker_active") - -- make sure timer restarts automatically - result = true - else - swap_node(pos, "mcl_smoker:smoker") - -- stop timer on the inactive furnace - minetest.get_node_timer(pos):stop() - end - - -- - -- Set meta values - -- - meta:set_float("fuel_totaltime", fuel_totaltime) - meta:set_float("fuel_time", fuel_time) - meta:set_float("src_time", src_time) - if srclist then - meta:set_string("src_item", src_item) - else - meta:set_string("src_item", "") - end - meta:set_string("formspec", formspec) - - return result -end - -local on_rotate, after_rotate_active -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple - after_rotate_active = function(pos) - local node = minetest.get_node(pos) - mcl_particles.delete_node_particlespawners(pos) - if node.name == "mcl_smoker:smoker" then - return - end - spawn_flames(pos, node.param2) - end -end - -minetest.register_node("mcl_smoker:smoker", { - description = S("Smoker"), - _tt_help = S("Cooks food faster than furnace"), - _doc_items_longdesc = S("Smokers cook several items, using a furnace fuel, into something else, but twice as fast as a normal furnace"), - _doc_items_usagehelp = - S([[ - Use the smoker to open the furnace menu. - Place a furnace fuel in the lower slot and the source material in the upper slot. - The smoker will slowly use its fuel to smelt the item. - The result will be placed into the output slot at the right side. - ]]).."\n".. - S("Use the recipe book to see what foods you can smelt, what you can use as fuel and how long it will burn."), - _doc_items_hidden = false, - tiles = { - "smoker_top.png", "smoker_bottom.png", - "smoker_side.png", "smoker_side.png", - "smoker_side.png", "smoker_front.png" - }, - paramtype2 = "facedir", - groups = {pickaxey=1, container=4, deco_block=1, material_stone=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - - on_timer = smoker_node_timer, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for _, listname in ipairs({"src", "dst", "fuel"}) do - local stack = inv:get_stack(listname, 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", inactive_formspec) - local inv = meta:get_inventory() - inv:set_size("src", 1) - inv:set_size("fuel", 1) - inv:set_size("dst", 1) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - give_xp(pos) - end, - - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - -- Reset accumulated game time when player works with furnace: - smoker_reset_delta_time(pos) - minetest.get_node_timer(pos):start(1.0) - - on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - end, - on_metadata_inventory_put = function(pos) - -- Reset accumulated game time when player works with furnace: - smoker_reset_delta_time(pos) - -- start timer function, it will sort out whether furnace can burn or not. - minetest.get_node_timer(pos):start(1.0) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - -- Reset accumulated game time when player works with furnace: - smoker_reset_delta_time(pos) - -- start timer function, it will helpful if player clears dst slot - minetest.get_node_timer(pos):start(1.0) - - on_metadata_inventory_take(pos, listname, index, stack, player) - end, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - on_receive_fields = receive_fields, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - on_rotate = on_rotate, -}) - -minetest.register_node("mcl_smoker:smoker_active", { - description = S("Burning Smoker"), - _doc_items_create_entry = false, - tiles = { - "smoker_top.png", "smoker_bottom.png", - "smoker_side.png", "smoker_side.png", - "smoker_side.png", {name = "smoker_front_on.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 48}}, - }, - paramtype2 = "facedir", - paramtype = "light", - light_source = LIGHT_ACTIVE_FURNACE, - drop = "mcl_smoker:smoker", - groups = {pickaxey=1, container=4, deco_block=1, not_in_creative_inventory=1, material_stone=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_timer = smoker_node_timer, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for _, listname in ipairs({"src", "dst", "fuel"}) do - local stack = inv:get_stack(listname, 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2:to_table()) - end, - - on_construct = function(pos) - local node = minetest.get_node(pos) - spawn_flames(pos, node.param2) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - give_xp(pos) - end, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - on_metadata_inventory_move = on_metadata_inventory_move, - on_metadata_inventory_take = on_metadata_inventory_take, - on_receive_fields = receive_fields, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - on_rotate = on_rotate, - after_rotate = after_rotate_active, -}) - -minetest.register_craft({ - output = "mcl_smoker:smoker", - recipe = { - { "", "group:tree", "" }, - { "group:tree", "mcl_furnaces:furnace", "group:tree" }, - { "", "group:tree", "" }, - } -}) - --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_smoker:smoker", "nodes", "mcl_smoker:smoker_active") -end - -minetest.register_lbm({ - label = "Active smoker flame particles", - name = "mcl_smoker:flames", - nodenames = {"mcl_smoker:smoker_active"}, - run_at_every_load = true, - action = function(pos, node) - spawn_flames(pos, node.param2) - end, -}) diff --git a/mods/ITEMS/mcl_smoker/mod.conf b/mods/ITEMS/mcl_smoker/mod.conf deleted file mode 100644 index c6bda0fc1..000000000 --- a/mods/ITEMS/mcl_smoker/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_smoker -depends = mcl_init, mcl_formspec, mcl_core, mcl_furnaces, mcl_sounds, mcl_craftguide, mcl_achievements, mcl_particles -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_smoker/textures/smoker_bottom.png b/mods/ITEMS/mcl_smoker/textures/smoker_bottom.png deleted file mode 100644 index cccc5a697..000000000 Binary files a/mods/ITEMS/mcl_smoker/textures/smoker_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_smoker/textures/smoker_front.png b/mods/ITEMS/mcl_smoker/textures/smoker_front.png deleted file mode 100644 index 37f43c306..000000000 Binary files a/mods/ITEMS/mcl_smoker/textures/smoker_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_smoker/textures/smoker_front_on.png b/mods/ITEMS/mcl_smoker/textures/smoker_front_on.png deleted file mode 100644 index 502fdb983..000000000 Binary files a/mods/ITEMS/mcl_smoker/textures/smoker_front_on.png and /dev/null differ diff --git a/mods/ITEMS/mcl_smoker/textures/smoker_side.png b/mods/ITEMS/mcl_smoker/textures/smoker_side.png deleted file mode 100644 index f1e57a751..000000000 Binary files a/mods/ITEMS/mcl_smoker/textures/smoker_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_smoker/textures/smoker_top.png b/mods/ITEMS/mcl_smoker/textures/smoker_top.png deleted file mode 100644 index bc5a0dba7..000000000 Binary files a/mods/ITEMS/mcl_smoker/textures/smoker_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_sponges/init.lua b/mods/ITEMS/mcl_sponges/init.lua deleted file mode 100644 index e9755479b..000000000 --- a/mods/ITEMS/mcl_sponges/init.lua +++ /dev/null @@ -1,211 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local absorb = function(pos) - local change = false - -- Count number of absorbed river water vs other nodes - -- to determine the wet sponge type. - local river_water = 0 - local non_river_water = 0 - local p, n - for i=-3,3 do - for j=-3,3 do - for k=-3,3 do - p = {x=pos.x+i, y=pos.y+j, z=pos.z+k} - n = minetest.get_node(p) - if minetest.get_item_group(n.name, "water") ~= 0 then - minetest.add_node(p, {name="air"}) - change = true - if n.name == "mclx_core:river_water_source" or n.name == "mclx_core:river_water_flowing" then - river_water = river_water + 1 - else - non_river_water = non_river_water + 1 - end - end - end - end - end - -- The dominant water type wins. In case of a tie, normal water wins. - -- This slight bias is intentional. - local sponge_type - if river_water > non_river_water then - sponge_type = "mcl_sponges:sponge_wet_river_water" - else - sponge_type = "mcl_sponges:sponge_wet" - end - return change, sponge_type -end - -minetest.register_node("mcl_sponges:sponge", { - description = S("Sponge"), - _tt_help = S("Removes water on contact"), - _doc_items_longdesc = S("Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge."), - drawtype = "normal", - is_ground_content = false, - tiles = {"mcl_sponges_sponge.png"}, - walkable = true, - pointable = true, - diggable = true, - buildable_to = false, - stack_max = 64, - sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, hoey=1, building_block=1}, - on_place = function(itemstack, placer, pointed_thing) - local pn = placer:get_player_name() - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - if minetest.is_protected(pointed_thing.above, pn) then - return itemstack - end - - local pos = pointed_thing.above - local on_water = false - if minetest.get_item_group(minetest.get_node(pos).name, "water") ~= 0 then - on_water = true - end - local water_found = minetest.find_node_near(pos, 1, "group:water") - if water_found then - on_water = true - end - if on_water then - -- Absorb water - -- FIXME: pos is not always the right placement position because of pointed_thing - local absorbed, wet_sponge = absorb(pos) - if absorbed then - minetest.item_place_node(ItemStack(wet_sponge), placer, pointed_thing) - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end - end - return minetest.item_place_node(itemstack, placer, pointed_thing) - end, - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, -}) - -function place_wet_sponge(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local name = placer:get_player_name() - - if minetest.is_protected(pointed_thing.above, name) then - return itemstack - end - - if mcl_worlds.pos_to_dimension(pointed_thing.above) == "nether" then - minetest.item_place_node(ItemStack("mcl_sponges:sponge"), placer, pointed_thing) - local pos = pointed_thing.above - - for n = 1, 5 do - minetest.add_particlespawner({ - amount = 5, - time = 0.1, - minpos = vector.offset(pos, -0.5, 0.6, -0.5), - maxpos = vector.offset(pos, 0.5, 0.6, 0.5), - minvel = vector.new(0, 0.1, 0), - maxvel = vector.new(0, 1, 0), - minexptime = 0.1, - maxexptime = 1, - minsize = 2, - maxsize = 5, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_sponge" .. n .. ".png", - }) - end - if not minetest.is_creative_enabled(name) then - itemstack:take_item() - end - return itemstack - end - - return minetest.item_place_node(itemstack, placer, pointed_thing) -end - -minetest.register_node("mcl_sponges:sponge_wet", { - description = S("Waterlogged Sponge"), - _tt_help = S("Can be dried in furnace"), - _doc_items_longdesc = S("A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket."), - drawtype = "normal", - is_ground_content = false, - tiles = {"mcl_sponges_sponge_wet.png"}, - walkable = true, - pointable = true, - diggable = true, - buildable_to = false, - stack_max = 64, - sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, hoey=1, building_block=1}, - on_place = place_wet_sponge, - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, -}) - -if minetest.get_modpath("mclx_core") then - minetest.register_node("mcl_sponges:sponge_wet_river_water", { - description = S("Riverwaterlogged Sponge"), - _tt_help = S("Can be dried in furnace"), - _doc_items_longdesc = S("This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.") .. "\n" .. S("A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water."), - drawtype = "normal", - is_ground_content = false, - tiles = {"mcl_sponges_sponge_wet_river_water.png"}, - walkable = true, - pointable = true, - diggable = true, - buildable_to = false, - stack_max = 64, - sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, building_block=1}, - on_place = place_wet_sponge, - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, - }) - - minetest.register_craft({ - type = "cooking", - output = "mcl_sponges:sponge", - recipe = "mcl_sponges:sponge_wet_river_water", - cooktime = 10, - }) -end - -minetest.register_craft({ - type = "cooking", - output = "mcl_sponges:sponge", - recipe = "mcl_sponges:sponge_wet", - cooktime = 10, -}) - -minetest.register_abm({ - label = "Sponge water absorbtion", - nodenames = { "mcl_sponges:sponge" }, - neighbors = { "group:water" }, - interval = 1, - chance = 1, - action = function(pos) - local absorbed, wet_sponge = absorb(pos) - if absorbed then - minetest.add_node(pos, {name = wet_sponge}) - end - end, -}) diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.de.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.de.tr deleted file mode 100644 index 4f0b827f5..000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.de.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Schwamm -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Schwämme sind Blöcke, die Wasser um sie herum entfernen, wenn sie platziert wurden oder in Berührung mit Wasser kommen, was sie in einen nassen Schwamm verwandelt. -Waterlogged Sponge=Wassergetränkter Schwamm -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Ein wassergetränkter Schwamm kann in einem Ofen getrocknet werden, um ihn zu einem (trockenem) Schwamm zu verwandeln. Wenn es einen leeren Eimer im Brennstoffplatz des Ofens gibt, wird das Wasser in den Eimer fließen. -Riverwaterlogged Sponge=Flusswassergetränkter Schwamm -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Dies ist ein Schwamm, der triefend nass und voller Flusswasser ist. Er kann in einem Ofen getrocknet werden, um ihn zu einem (trockenem) Schwamm zu verwandeln. Wenn es einen leeren Eimer im Brennstoffplatz des Ofens gibt, wird das Flusswasser in den Eimer fließen. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Ein Schwamm wird flusswassergetränkt (statt wassergetränkt), wenn er mehr Flusswasser als (normales) Wasser aufsaugt. -Removes water on contact=Entfernt Wasser bei Berührung -Can be dried in furnace=Kann im Ofen getrocknet werden diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.es.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.es.tr deleted file mode 100644 index 4ee44838a..000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Esponja -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Las esponjas son bloques que eliminan el agua a su alrededor cuando se colocan o entran en contacto con el agua, convirtiéndola en una esponja húmeda. -Waterlogged Sponge=Esponja mojada -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Se puede secar una esponja mojada de agua en el horno para convertirla en una esponja (seca). Cuando hay un cubo vacío en la ranura de combustible de un horno, el agua se vierte en el cubo. -Riverwaterlogged Sponge=Esponja mojada con agua de rio -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Esta es una esponja mojada con agua de río. Se puede secar en el horno para convertirlo en una esponja (seca). Cuando hay un balde vacío en la ranura de combustible del horno, el agua del río se vierte en el balde. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Una esponja se inunda de río (en lugar de inundarse) si absorbe más agua de río que el agua (normal). diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.fr.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.fr.tr deleted file mode 100644 index 58dd74bee..000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.fr.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Éponge -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Les éponges sont des blocs qui éliminent l'eau autour d'eux lorsqu'ils sont placés ou entrent en contact avec l'eau, la transformant en une éponge humide. -Waterlogged Sponge=Éponge gorgée d'eau -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Une éponge gorgée d'eau peut être séchée dans le four pour la transformer en éponge (sèche). Lorsqu'il y a un seau vide dans la fente de combustible d'un four, l'eau se déversera dans le seau. -Riverwaterlogged Sponge=Éponge gorgée d'eau de rivière -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Il s'agit d'une éponge trempée d'eau de rivière. Elle peut être séché dans le four pour le transformer en éponge (sèche). Lorsqu'il y a un seau vide dans la fente de combustible du four, l'eau de la rivière se déversera dans le seau. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Une éponge devient gorgée d'eau de rivière (au lieu d'être gorgée d'eau) si elle aspire plus d'eau de rivière que d'eau (normale). -Removes water on contact=Élimine l'eau au contact -Can be dried in furnace=Peut être séché au four diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr deleted file mode 100644 index 6cb6bf474..000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Gąbka -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Gąbki to bloki które usuwają wodę wokół siebie gdy są postawione, lub gdy wejdą w kontakt z wodą, zamieniając się w mokre gąbki. -Waterlogged Sponge=Nasiąknięta gąbka -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Nasiąknięta gąbka może zostać wysuszona w piecu by zamienić się w (suchą) gąbkę. Jeśli w miejscu na paliwo jest puste wiadro, to woda wyleje się do wiaderka. -Riverwaterlogged Sponge=Gąbka nasiąknięta wodą rzeczną -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=To jest gąbka, która wchłonęła wodę rzeczną. Może zostać wysuszona w piecu by zamienić się w (suchą) gąbkę. Jeśli w miejscu na paliwo jest puste wiadro, to woda rzeczna wyleje się do wiaderka. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Gąbka zostanie nasiąknięta wodą rzeczną jeśli nasiąknie większą ilością wody z rzeki niż normalnej wody. -Removes water on contact=Usuwa dotkniętą wodę -Can be dried in furnace=Może zostać wysuszona w piecu diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.ru.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.ru.tr deleted file mode 100644 index c3b1749d6..000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.ru.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Губка -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Губки это блоки, которые убирают воду вокруг себя, превращаясь в намокшие губки. -Waterlogged Sponge=Намокшая губка -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Намокшая губка может быть высушена в печи, тогда она превратится обратно в (сухую) губку. Если поставить пустое ведро в топливный отсек печи, это ведро наполнится водой. -Riverwaterlogged Sponge=Губка с речной водой -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Это губка, пропитанная речной водой. Она может быть высушена в печи, тогда она превратится обратно в (сухую) губку. Если поставить пустое ведро в топливный отсек печи, это ведро наполнится речной водой. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Губка становится губкой с речной водой, если она втягивает в себя больше речной воды, чем обыкновенной. -Removes water on contact=Убирает воду при контакте -Can be dried in furnace=Может быть просушена в печи diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.zh_TW.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.zh_TW.tr deleted file mode 100644 index 3b466dff4..000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.zh_TW.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=海綿 -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=海綿是一種方塊,當它們被放置或與水接觸時,會去除它們周圍的水,使其變成濕海綿。 -Waterlogged Sponge=濕海綿 -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=濕海綿可以在熔爐裡烘乾,變成(乾)海綿。當爐子的燃料槽裡有一個空桶時,水會倒進桶裡。 -Riverwaterlogged Sponge=濕河水海綿 -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=濕河水海綿是含有濕河水的海綿。可以在爐子裡曬乾,變成(乾)海綿。當爐子的燃料槽裡有一個空桶時,水會倒進桶裡。 -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.= -Removes water on contact=如果海綿吸的河水比(正常的)水多,它就會變成濕河水海綿(而不是濕海綿)。 -Can be dried in furnace=可以在熔爐裏烘乾 diff --git a/mods/ITEMS/mcl_sponges/locale/template.txt b/mods/ITEMS/mcl_sponges/locale/template.txt deleted file mode 100644 index 9307c2cdf..000000000 --- a/mods/ITEMS/mcl_sponges/locale/template.txt +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge= -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.= -Waterlogged Sponge= -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.= -Riverwaterlogged Sponge= -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.= -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.= -Removes water on contact= -Can be dried in furnace= diff --git a/mods/ITEMS/mcl_sponges/mod.conf b/mods/ITEMS/mcl_sponges/mod.conf deleted file mode 100644 index d833493b3..000000000 --- a/mods/ITEMS/mcl_sponges/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_sponges -description = A sponge which sucks in water (WIP). -depends = mcl_sounds -optional_depends = mcl_core, mclx_core diff --git a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge.png b/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge.png deleted file mode 100644 index 0d68d872f..000000000 Binary files a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge.png and /dev/null differ diff --git a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet.png b/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet.png deleted file mode 100644 index 7f4e84206..000000000 Binary files a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet.png and /dev/null differ diff --git a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet_river_water.png b/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet_river_water.png deleted file mode 100644 index 5d9475a56..000000000 Binary files a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet_river_water.png and /dev/null differ diff --git a/mods/ITEMS/mcl_stairs/API.md b/mods/ITEMS/mcl_stairs/API.md deleted file mode 100644 index 6c91754b7..000000000 --- a/mods/ITEMS/mcl_stairs/API.md +++ /dev/null @@ -1,83 +0,0 @@ -# API for `mcl_stairs` - -Register your own stairs and slabs! - -## Quick start - -Register platinum stair and slab based on node `example:platinum`: - -``` -mcl_stairs.register_stair_and_slab_simple("platinum", "example:platinum", "Platinum Stair", "Platinum Slab", "Double Platinum Slab") -``` - -## `mcl_stairs.register_stair_and_slab_simple(subname, sourcenode, desc_stair, desc_slab, double_description, corner_stair_texture_override)` -Register a simple stair and a slab. The stair and slab will inherit all attributes from `sourcenode`. The `sourcenode` is also used as the item for crafting recipes. - -This function is meant for simple nodes; if you need more flexibility, use one of the other functions instead. - -See `register_stair` and `register_slab` for the itemstrings of the registered nodes. - -### Parameters -* `subname`: Name fragment for node itemstrings (see `register_stair` and `register_slab`) -* `sourcenode`: The node on which this stair is based on -* `desc_stair`: Description of stair node -* `desc_slab`: Description of slab node -* `double_description`: Description of double slab node -* `corner_stair_texture_override`: Optional, see `register_stair` - -## `mcl_stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds, hardness, double_description, corner_stair_texture_override)` -Register a simple stair and a slab, plus crafting recipes. In this function, you need to specify most things explicitly. - -### Parameters -* `desc_stair`: Description of stair node -* `desc_slab`: Description of slab node -* Other parameters: Same as for `register_stair` and `register_slab` - -## `mcl_stairs.register_stair(subname, recipeitem, groups, images, description, sounds, hardness, corner_stair_texture_override)` -Registers a stair. This also includes the inner and outer corner stairs, they are added automatically. Also adds crafting recipes. - -The itemstrings for the registered nodes will be of the form: - -* `mcl_stairs:stair_`: Normal stair -* `mcl_stairs:stair__inner`: Inner stair -* `mcl_stairs:stair__outer`: Outer stair - -### Parameters -* `subname`: Name fragment for node itemstrings (see above) -* `recipeitem`: Item for crafting recipe. Use `group:` prefix to use a group instead -* `groups`: Groups used for stair -* `images`: Textures -* `description`: Stair description/tooltip -* `sounds`: Sounds table -* `hardness`: MCL2 block hardness value -* `corner_stair_texture_override`: Optional. Custom textures for corner stairs, see below - -`groups`, `images`, `sounds` or `hardness` can be `nil`, in which case the value is inhereted from the `recipeitem`. - -#### `corner_stair_texture_override` -This optional parameter specifies the textures to be used for corner stairs. - -It can be one of the following data types: - -* string: one of: - * "default": Use same textures as original node - * "woodlike": Take first frame of the original tiles, then take a triangle piece - of the texture, rotate it by 90° and overlay it over the original texture -* table: Specify textures explicitly. Table of tiles to override textures for - inner and outer stairs. Table format: - { tiles_def_for_outer_stair, tiles_def_for_inner_stair } -* nil: Equivalent to "default" - -## `mcl_stairs.register_slab(subname, recipeitem, groups, images, description, sounds, hardness, double_description)` -Registers a slab and a corresponding double slab. Also adds crafting recipe. - -The itemstrings for the registered nodes will be of the form: - -* `mcl_stairs:slab_`: Slab -* `mcl_stairs:slab__top`: Upper slab, used internally -* `mcl_stairs:slab__double`: Double slab - -### Parameters -* `double_description`: Node description/tooltip for double slab -* Other parameters: Same as for `register_stair` - diff --git a/mods/ITEMS/mcl_stairs/README.txt b/mods/ITEMS/mcl_stairs/README.txt deleted file mode 100644 index 9607b5d00..000000000 --- a/mods/ITEMS/mcl_stairs/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -MineClone 2 mod: mcl_stairs -========================= -Forked from stairs mod in Minetest Game 0.4.16. -See license.txt for license information. - -Authors of source code ----------------------- -Originally by Kahrl (LGPL 2.1) and -celeron55, Perttu Ahola (LGPL 2.1) -Various Minetest developers and contributors (LGPL 2.1) - -Authors of media (models) -------------------------- -Jean-Patrick G. (kilbith) (CC BY-SA 3.0): - stairs_stair.obj - - - diff --git a/mods/ITEMS/mcl_stairs/alias.lua b/mods/ITEMS/mcl_stairs/alias.lua deleted file mode 100644 index 1865b5779..000000000 --- a/mods/ITEMS/mcl_stairs/alias.lua +++ /dev/null @@ -1,20 +0,0 @@ --- Aliases for backwards-compability with 0.21.0 - -local materials = { - "wood", "junglewood", "sprucewood", "acaciawood", "birchwood", "darkwood", - "cobble", "brick_block", "sandstone", "redsandstone", "stonebrick", - "quartzblock", "purpur_block", "nether_brick" -} - -for m=1, #materials do - local mat = materials[m] - minetest.register_alias("stairs:slab_"..mat, "mcl_stairs:slab_"..mat) - minetest.register_alias("stairs:stair_"..mat, "mcl_stairs:stair_"..mat) - - -- corner stairs - minetest.register_alias("stairs:stair_"..mat.."_inner", "mcl_stairs:stair_"..mat.."_inner") - minetest.register_alias("stairs:stair_"..mat.."_outer", "mcl_stairs:stair_"..mat.."_outer") -end - -minetest.register_alias("stairs:slab_stone", "mcl_stairs:slab_stone") -minetest.register_alias("stairs:slab_stone_double", "mcl_stairs:slab_stone_double") diff --git a/mods/ITEMS/mcl_stairs/api.lua b/mods/ITEMS/mcl_stairs/api.lua deleted file mode 100644 index 34afb018e..000000000 --- a/mods/ITEMS/mcl_stairs/api.lua +++ /dev/null @@ -1,379 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Core mcl_stairs API - --- Wrapper around mintest.pointed_thing_to_face_pos. -local function get_fpos(placer, pointed_thing) - local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) - return finepos.y % 1 -end - -local function place_slab_normal(itemstack, placer, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local p0 = pointed_thing.under - local p1 = pointed_thing.above - - --local placer_pos = placer:get_pos() - - local fpos = get_fpos(placer, pointed_thing) - - local place = ItemStack(itemstack) - local origname = itemstack:get_name() - if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) - or (fpos < -0.5 and fpos > -0.999999999) then - place:set_name(origname .. "_top") - end - local ret = minetest.item_place(place, placer, pointed_thing, 0) - ret:set_name(origname) - return ret -end - -local function place_stair(itemstack, placer, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:get_pos() - if placer_pos then - param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) - end - - local fpos = get_fpos(placer, pointed_thing) - - if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) - or (fpos < -0.5 and fpos > -0.999999999) then - param2 = param2 + 20 - if param2 == 21 then - param2 = 23 - elseif param2 == 23 then - param2 = 21 - end - end - return minetest.item_place(itemstack, placer, pointed_thing, param2) -end - --- Register stairs. --- Node will be called mcl_stairs:stair_ - -function mcl_stairs.register_stair(subname, recipeitem, groups, images, description, sounds, blast_resistance, hardness, corner_stair_texture_override) - groups.stair = 1 - groups.building_block = 1 - - if recipeitem then - if not images then - images = minetest.registered_items[recipeitem].tiles - end - if not groups then - groups = minetest.registered_items[recipeitem].groups - end - if not sounds then - sounds = minetest.registered_items[recipeitem].sounds - end - if not hardness then - hardness = minetest.registered_items[recipeitem]._mcl_hardness - end - if not blast_resistance then - blast_resistance = minetest.registered_items[recipeitem]._mcl_blast_resistance - end - end - - minetest.register_node(":mcl_stairs:stair_" .. subname, { - description = description, - _doc_items_longdesc = S("Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down."), - drawtype = "mesh", - mesh = "stairs_stair.obj", - tiles = images, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - groups = groups, - sounds = sounds, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, - }, - }, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - return place_stair(itemstack, placer, pointed_thing) - end, - on_rotate = function(pos, node, user, mode, param2) - -- Flip stairs vertically - if mode == screwdriver.ROTATE_AXIS then - local minor = node.param2 - if node.param2 >= 20 then - minor = node.param2 - 20 - if minor == 3 then - minor = 1 - elseif minor == 1 then - minor = 3 - end - node.param2 = minor - else - if minor == 3 then - minor = 1 - elseif minor == 1 then - minor = 3 - end - node.param2 = minor - node.param2 = node.param2 + 20 - end - minetest.set_node(pos, node) - return true - end - end, - _mcl_blast_resistance = blast_resistance, - _mcl_hardness = hardness, - }) - - if recipeitem then - minetest.register_craft({ - output = "mcl_stairs:stair_" .. subname .. " 4", - recipe = { - {recipeitem, "", ""}, - {recipeitem, recipeitem, ""}, - {recipeitem, recipeitem, recipeitem}, - }, - }) - - -- Flipped recipe - minetest.register_craft({ - output = "mcl_stairs:stair_" .. subname .. " 4", - recipe = { - {"", "", recipeitem}, - {"", recipeitem, recipeitem}, - {recipeitem, recipeitem, recipeitem}, - }, - }) - end - - mcl_stairs.cornerstair.add("mcl_stairs:stair_"..subname, corner_stair_texture_override) -end - - --- Slab facedir to placement 6d matching table ---local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} - --- Register slabs. --- Node will be called mcl_stairs:slab_ - --- double_description: NEW argument, not supported in Minetest Game --- double_description: Description of double slab -function mcl_stairs.register_slab(subname, recipeitem, groups, images, description, sounds, blast_resistance, hardness, double_description) - local lower_slab = "mcl_stairs:slab_"..subname - local upper_slab = lower_slab.."_top" - local double_slab = lower_slab.."_double" - - if recipeitem then - if not images then - images = minetest.registered_items[recipeitem].tiles - end - if not groups then - groups = minetest.registered_items[recipeitem].groups - end - if not sounds then - sounds = minetest.registered_items[recipeitem].sounds - end - if not hardness then - hardness = minetest.registered_items[recipeitem]._mcl_hardness - end - if not blast_resistance then - blast_resistance = minetest.registered_items[recipeitem]._mcl_blast_resistance - end - end - - -- Automatically generate double slab description - if not double_description then - double_description = S("Double @1", description) - minetest.log("warning", "[stairs] No explicit description for double slab '"..double_slab.."' added. Using auto-generated description.") - end - - groups.slab = 1 - groups.building_block = 1 - local longdesc = S("Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.") - - local slabdef = { - description = description, - _doc_items_longdesc = longdesc, - drawtype = "nodebox", - tiles = images, - paramtype = "light", - -- Facedir intentionally left out (see below) - is_ground_content = false, - groups = groups, - sounds = sounds, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - }, - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - local wield_item = itemstack:get_name() - local creative_enabled = minetest.is_creative_enabled(placer:get_player_name()) - - -- place slab using under node orientation - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - - local p2 = under.param2 - - -- combine two slabs if possible - -- Requirements: Same slab material, must be placed on top of lower slab, or on bottom of upper slab - if (wield_item == under.name or (minetest.registered_nodes[under.name] and wield_item == minetest.registered_nodes[under.name]._mcl_other_slab_half)) and - not ((dir.y >= 0 and minetest.get_item_group(under.name, "slab_top") == 1) or - (dir.y <= 0 and minetest.get_item_group(under.name, "slab_top") == 0)) then - - local player_name = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, player_name) and not - minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(pointed_thing.under, - player_name) - return - end - local newnode = double_slab - minetest.set_node(pointed_thing.under, {name = newnode, param2 = p2}) - if not creative_enabled then - itemstack:take_item() - end - return itemstack - -- No combination possible: Place slab normally - else - return place_slab_normal(itemstack, placer, pointed_thing) - end - end, - _mcl_hardness = hardness, - _mcl_blast_resistance = blast_resistance, - _mcl_other_slab_half = upper_slab, - on_rotate = function(pos, node, user, mode, param2) - -- Flip slab - if mode == screwdriver.ROTATE_AXIS then - node.name = upper_slab - minetest.set_node(pos, node) - return true - end - return false - end, - } - - minetest.register_node(":"..lower_slab, slabdef) - - -- Register the upper slab. - -- Using facedir is not an option, as this would rotate the textures as well and would make - -- e.g. upper sandstone slabs look completely wrong. - local topdef = table.copy(slabdef) - topdef.groups.slab = 1 - topdef.groups.slab_top = 1 - topdef.groups.not_in_creative_inventory = 1 - topdef.groups.not_in_craft_guide = 1 - topdef.description = S("Upper @1", description) - topdef._doc_items_create_entry = false - topdef._doc_items_longdesc = nil - topdef._doc_items_usagehelp = nil - topdef.drop = lower_slab - topdef._mcl_other_slab_half = lower_slab - function topdef.on_rotate(pos, node, user, mode, param2) - -- Flip slab - if mode == screwdriver.ROTATE_AXIS then - node.name = lower_slab - minetest.set_node(pos, node) - return true - end - return false - end - topdef.node_box = { - type = "fixed", - fixed = {-0.5, 0, -0.5, 0.5, 0.5, 0.5}, - } - topdef.selection_box = { - type = "fixed", - fixed = {-0.5, 0, -0.5, 0.5, 0.5, 0.5}, - } - minetest.register_node(":"..upper_slab, topdef) - - - -- Double slab node - local dgroups = table.copy(groups) - dgroups.not_in_creative_inventory = 1 - dgroups.not_in_craft_guide = 1 - dgroups.slab = nil - dgroups.double_slab = 1 - minetest.register_node(":"..double_slab, { - description = double_description, - _doc_items_longdesc = S("Double slabs are full blocks which are created by placing two slabs of the same kind on each other."), - tiles = images, - is_ground_content = false, - groups = dgroups, - sounds = sounds, - drop = lower_slab .. " 2", - _mcl_hardness = hardness, - _mcl_blast_resistance = blast_resistance, - }) - - if recipeitem then - minetest.register_craft({ - output = lower_slab .. " 6", - recipe = { - {recipeitem, recipeitem, recipeitem}, - }, - }) - - end - - -- Help alias for the upper slab - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", lower_slab, "nodes", upper_slab) - end -end - - --- Stair/slab registration function. --- Nodes will be called mcl_stairs:{stair,slab}_ - -function mcl_stairs.register_stair_and_slab(subname, recipeitem, - groups, images, desc_stair, desc_slab, sounds, blast_resistance, hardness, - double_description, corner_stair_texture_override) - mcl_stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds, blast_resistance, hardness, corner_stair_texture_override) - mcl_stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds, blast_resistance, hardness, double_description) -end - --- Very simple registration function --- Makes stair and slab out of a source node -function mcl_stairs.register_stair_and_slab_simple(subname, sourcenode, desc_stair, desc_slab, desc_double_slab, corner_stair_texture_override) - local def = minetest.registered_nodes[sourcenode] - local groups = {} - -- Only allow a strict set of groups to be added to stairs and slabs for more predictable results - local allowed_groups = { "dig_immediate", "handy", "pickaxey", "axey", "shovely", "shearsy", "shearsy_wool", "swordy", "swordy_wool" } - for a=1, #allowed_groups do - if def.groups[allowed_groups[a]] then - groups[allowed_groups[a]] = def.groups[allowed_groups[a]] - end - end - mcl_stairs.register_stair_and_slab(subname, sourcenode, groups, def.tiles, desc_stair, desc_slab, def.sounds, def._mcl_blast_resistance, def._mcl_hardness, desc_double_slab, corner_stair_texture_override) -end - diff --git a/mods/ITEMS/mcl_stairs/cornerstair.lua b/mods/ITEMS/mcl_stairs/cornerstair.lua deleted file mode 100644 index ae3eb4ea3..000000000 --- a/mods/ITEMS/mcl_stairs/cornerstair.lua +++ /dev/null @@ -1,700 +0,0 @@ --- Corner stairs handling - --- This code originally copied from the [mcstair] mod and merged into this mod. --- This file is licensed under CC0. - -mcl_stairs.cornerstair = {} - -local function get_stair_param(node) - local stair = minetest.get_item_group(node.name, "stair") - if stair == 1 then - return node.param2 - elseif stair == 2 then - if node.param2 < 12 then - return node.param2 + 4 - else - return node.param2 - 4 - end - elseif stair == 3 then - if node.param2 < 12 then - return node.param2 + 8 - else - return node.param2 - 8 - end - end -end - -local function get_stair_from_param(param, stairs) - if param < 12 then - if param < 4 then - return {name = stairs[1], param2 = param} - elseif param < 8 then - return {name = stairs[2], param2 = param - 4} - else - return {name = stairs[3], param2 = param - 8} - end - else - if param >= 20 then - return {name = stairs[1], param2 = param} - elseif param >= 16 then - return {name = stairs[2], param2 = param + 4} - else - return {name = stairs[3], param2 = param + 8} - end - end -end - -local function stair_param_to_connect(param, ceiling) - local out = {false, false, false, false, false, false, false, false} - if not ceiling then - if param == 0 then - out[3] = true - out[8] = true - elseif param == 1 then - out[2] = true - out[5] = true - elseif param == 2 then - out[4] = true - out[7] = true - elseif param == 3 then - out[1] = true - out[6] = true - elseif param == 4 then - out[1] = true - out[8] = true - elseif param == 5 then - out[2] = true - out[3] = true - elseif param == 6 then - out[4] = true - out[5] = true - elseif param == 7 then - out[6] = true - out[7] = true - elseif param == 8 then - out[3] = true - out[6] = true - elseif param == 9 then - out[5] = true - out[8] = true - elseif param == 10 then - out[2] = true - out[7] = true - elseif param == 11 then - out[1] = true - out[4] = true - end - else - if param == 12 then - out[5] = true - out[8] = true - elseif param == 13 then - out[3] = true - out[6] = true - elseif param == 14 then - out[1] = true - out[4] = true - elseif param == 15 then - out[2] = true - out[7] = true - elseif param == 16 then - out[2] = true - out[3] = true - elseif param == 17 then - out[1] = true - out[8] = true - elseif param == 18 then - out[6] = true - out[7] = true - elseif param == 19 then - out[4] = true - out[5] = true - elseif param == 20 then - out[3] = true - out[8] = true - elseif param == 21 then - out[1] = true - out[6] = true - elseif param == 22 then - out[4] = true - out[7] = true - elseif param == 23 then - out[2] = true - out[5] = true - end - end - return out -end - -local function stair_connect_to_param(connect, ceiling) - local param - if not ceiling then - if connect[3] and connect[8] then - param = 0 - elseif connect[2] and connect[5] then - param = 1 - elseif connect[4] and connect[7] then - param = 2 - elseif connect[1] and connect[6] then - param = 3 - elseif connect[1] and connect[8] then - param = 4 - elseif connect[2] and connect[3] then - param = 5 - elseif connect[4] and connect[5] then - param = 6 - elseif connect[6] and connect[7] then - param = 7 - elseif connect[3] and connect[6] then - param = 8 - elseif connect[5] and connect[8] then - param = 9 - elseif connect[2] and connect[7] then - param = 10 - elseif connect[1] and connect[4] then - param = 11 - end - else - if connect[5] and connect[8] then - param = 12 - elseif connect[3] and connect[6] then - param = 13 - elseif connect[1] and connect[4] then - param = 14 - elseif connect[2] and connect[7] then - param = 15 - elseif connect[2] and connect[3] then - param = 16 - elseif connect[1] and connect[8] then - param = 17 - elseif connect[6] and connect[7] then - param = 18 - elseif connect[4] and connect[5] then - param = 19 - elseif connect[3] and connect[8] then - param = 20 - elseif connect[1] and connect[6] then - param = 21 - elseif connect[4] and connect[7] then - param = 22 - elseif connect[2] and connect[5] then - param = 23 - end - end - return param -end - ---[[ -mcl_stairs.cornerstair.add(name, stairtiles) - -NOTE: This function is used internally. If you register a stair, this function is already called, no -need to call it again! - -Usage: -* name is the name of the node to make corner stairs for. -* stairtiles is optional, can specify textures for inner and outer stairs. 3 data types are accepted: - * string: one of: - * "default": Use same textures as original node - * "woodlike": Take first frame of the original tiles, then take a triangle piece - of the texture, rotate it by 90° and overlay it over the original texture - * table: Specify textures explicitly. Table of tiles to override textures for - inner and outer stairs. Table format: - { tiles_def_for_outer_stair, tiles_def_for_inner_stair } - * nil: Equivalent to "default" -]] - -function mcl_stairs.cornerstair.add(name, stairtiles) - local node_def = minetest.registered_nodes[name] - local outer_tiles - local inner_tiles - if stairtiles == "woodlike" then - outer_tiles = table.copy(node_def.tiles) - inner_tiles = table.copy(node_def.tiles) - for i=2,6 do - if outer_tiles[i] == nil then - outer_tiles[i] = outer_tiles[i-1] - end - if inner_tiles[i] == nil then - inner_tiles[i] = inner_tiles[i-1] - end - end - local t = node_def.tiles[1] - outer_tiles[1] = t.."^("..t.."^[transformR90^mcl_stairs_turntexture.png^[makealpha:255,0,255)" - outer_tiles[2] = t.."^("..t.."^mcl_stairs_turntexture.png^[transformR270^[makealpha:255,0,255)" - outer_tiles[3] = t - inner_tiles[1] = t.."^("..t.."^[transformR90^(mcl_stairs_turntexture.png^[transformR180)^[makealpha:255,0,255)" - inner_tiles[2] = t.."^("..t.."^[transformR270^(mcl_stairs_turntexture.png^[transformR90)^[makealpha:255,0,255)" - inner_tiles[3] = t - elseif stairtiles == nil or stairtiles == "default" then - outer_tiles = node_def.tiles - inner_tiles = node_def.tiles - else - outer_tiles = stairtiles[1] - inner_tiles = stairtiles[2] - end - local outer_groups = table.copy(node_def.groups) - outer_groups.not_in_creative_inventory = 1 - local inner_groups = table.copy(outer_groups) - outer_groups.stair = 2 - outer_groups.not_in_craft_guide = 1 - inner_groups.stair = 3 - inner_groups.not_in_craft_guide = 1 - local drop = node_def.drop or name - local function after_dig_node(pos, oldnode) - local param = get_stair_param(oldnode) - local ceiling - if param < 12 then - ceiling = false - else - ceiling = true - end - local connect = stair_param_to_connect(param, ceiling) - local t = { - {pos = {x = pos.x, y = pos.y, z = pos.z + 2}}, - {pos = {x = pos.x - 1, y = pos.y, z = pos.z + 1}}, {pos = {x = pos.x, y = pos.y, z = pos.z + 1}}, {pos = {x = pos.x + 1, y = pos.y, z = pos.z + 1}}, - {pos = {x = pos.x - 2, y = pos.y, z = pos.z}}, {pos = {x = pos.x - 1, y = pos.y, z = pos.z}}, - {pos = pos, connect = connect}, - {pos = {x = pos.x + 1, y = pos.y, z = pos.z}}, {pos = {x = pos.x + 2, y = pos.y, z = pos.z}}, - {pos = {x = pos.x - 1, y = pos.y, z = pos.z - 1}}, {pos = {x = pos.x, y = pos.y, z = pos.z - 1}}, {pos = {x = pos.x + 1, y = pos.y, z = pos.z - 1}}, - {pos = {x = pos.x, y = pos.y, z = pos.z - 2}} - } - for i,v in ipairs(t) do - if not v.connect then - local node = minetest.get_node(v.pos) - local node_def = minetest.registered_nodes[node.name] - if not node_def then - return - end - if node_def.stairs then - t[i].stairs = node_def.stairs - t[i].connect = stair_param_to_connect(get_stair_param(node), ceiling) - else - t[i].connect = {false, false, false, false, false, false, false, false} - end - end - end - local function swap_stair(index, n1, n2) - local connect = {false, false, false, false, false, false, false, false} - connect[n1] = true - connect[n2] = true - local node = get_stair_from_param(stair_connect_to_param(connect, ceiling), t[index].stairs) - minetest.swap_node(t[index].pos, node) - end - if t[3].stairs then - if t[7].connect[1] and t[3].connect[6] then - if t[3].connect[1] and t[1].connect[6] then - if t[2].connect[3] then - swap_stair(3, 1, 8) - elseif t[4].connect[7] then - swap_stair(3, 1, 4) - end - elseif t[3].connect[7] then - swap_stair(3, 4, 7) - elseif t[3].connect[3] then - swap_stair(3, 3, 8) - end - elseif t[7].connect[2] and t[3].connect[5] then - if t[3].connect[2] and t[1].connect[5] then - if t[4].connect[8] then - swap_stair(3, 2, 3) - elseif t[2].connect[4] then - swap_stair(3, 2, 7) - end - elseif t[3].connect[4] then - swap_stair(3, 4, 7) - elseif t[3].connect[8] then - swap_stair(3, 3, 8) - end - end - end - if t[8].stairs then - if t[7].connect[3] and t[8].connect[8] then - if t[8].connect[3] and t[9].connect[8] then - if t[4].connect[5] then - swap_stair(8, 2, 3) - elseif t[12].connect[1] then - swap_stair(8, 3, 6) - end - elseif t[8].connect[1] then - swap_stair(8, 1, 6) - elseif t[8].connect[5] then - swap_stair(8, 2, 5) - end - elseif t[7].connect[4] and t[8].connect[7] then - if t[8].connect[4] and t[9].connect[7] then - if t[12].connect[2] then - swap_stair(8, 4, 5) - elseif t[4].connect[6] then - swap_stair(8, 1, 4) - end - elseif t[8].connect[6] then - swap_stair(8, 1, 6) - elseif t[8].connect[2] then - swap_stair(8, 2, 5) - end - end - end - if t[11].stairs then - if t[7].connect[5] and t[11].connect[2] then - if t[11].connect[5] and t[13].connect[2] then - if t[12].connect[7] then - swap_stair(11, 4, 5) - elseif t[10].connect[3] then - swap_stair(11, 5, 8) - end - elseif t[11].connect[3] then - swap_stair(11, 3, 8) - elseif t[11].connect[7] then - swap_stair(11, 4, 7) - end - elseif t[7].connect[6] and t[11].connect[1] then - if t[11].connect[6] and t[13].connect[1] then - if t[10].connect[4] then - swap_stair(11, 6, 7) - elseif t[12].connect[8] then - swap_stair(11, 3, 6) - end - elseif t[11].connect[8] then - swap_stair(11, 3, 8) - elseif t[11].connect[4] then - swap_stair(11, 4, 7) - end - end - end - if t[6].stairs then - if t[7].connect[7] and t[6].connect[4] then - if t[6].connect[7] and t[5].connect[4] then - if t[10].connect[1] then - swap_stair(6, 6, 7) - elseif t[2].connect[5] then - swap_stair(6, 2, 7) - end - elseif t[6].connect[5] then - swap_stair(6, 2, 5) - elseif t[6].connect[1] then - swap_stair(6, 1, 6) - end - elseif t[7].connect[8] and t[6].connect[3] then - if t[6].connect[8] and t[5].connect[3] then - if t[2].connect[6] then - swap_stair(6, 1, 8) - elseif t[10].connect[2] then - swap_stair(6, 5, 8) - end - elseif t[6].connect[2] then - swap_stair(6, 2, 5) - elseif t[6].connect[6] then - swap_stair(6, 1, 6) - end - end - end - end - minetest.override_item(name, { - stairs = {name, name.."_outer", name.."_inner"}, - after_dig_node = function(pos, oldnode) after_dig_node(pos, oldnode) end, - on_place = nil, - after_place_node = function(pos, placer, itemstack, pointed_thing) - local node = minetest.get_node(pos) - local ceiling = false - if pointed_thing.under.y > pointed_thing.above.y then - ceiling = true - if node.param2 == 0 then node.param2 = 20 - elseif node.param2 == 1 then node.param2 = 23 - elseif node.param2 == 2 then node.param2 = 22 - elseif node.param2 == 3 then node.param2 = 21 - end - end - local connect = stair_param_to_connect(get_stair_param(node), ceiling) - local t = { - {pos = {x = pos.x - 1, y = pos.y, z = pos.z + 1}}, {pos = {x = pos.x, y = pos.y, z = pos.z + 1}}, {pos = {x = pos.x + 1, y = pos.y, z = pos.z + 1}}, - {pos = {x = pos.x - 1, y = pos.y, z = pos.z}}, {pos = pos, stairs = {name, name.."_outer", name.."_inner"}, connect = connect}, {pos = {x = pos.x + 1, y = pos.y, z = pos.z}}, - {pos = {x = pos.x - 1, y = pos.y, z = pos.z - 1}}, {pos = {x = pos.x, y = pos.y, z = pos.z - 1}}, {pos = {x = pos.x + 1, y = pos.y, z = pos.z - 1}}, - } - for i,v in ipairs(t) do - if not v.connect then - local node = minetest.get_node(v.pos) - local node_def = minetest.registered_nodes[node.name] - if not node_def then - return - end - if node_def.stairs then - t[i].stairs = node_def.stairs - t[i].connect = stair_param_to_connect(get_stair_param(node), ceiling) - else - t[i].connect = {false, false, false, false, false, false, false, false} - end - end - end - local function reset_node(n1, n2) - local connect = {false, false, false, false, false, false, false, false} - connect[n1] = true - connect[n2] = true - node = get_stair_from_param(stair_connect_to_param(connect, ceiling), t[5].stairs) - end - local function swap_stair(index, n1, n2) - local connect = {false, false, false, false, false, false, false, false} - connect[n1] = true - connect[n2] = true - local node = get_stair_from_param(stair_connect_to_param(connect, ceiling), t[index].stairs) - t[index].connect = connect - minetest.swap_node(t[index].pos, node) - end - if connect[3] then - if t[4].connect[2] and t[4].connect[5] and t[1].connect[5] and not t[7].connect[2] then - swap_stair(4, 2, 3) - elseif t[4].connect[1] and t[4].connect[6] and t[7].connect[1] and not t[1].connect[6] then - swap_stair(4, 3, 6) - end - if t[6].connect[1] and t[6].connect[6] and t[3].connect[6] and not t[9].connect[1] then - swap_stair(6, 1, 8) - elseif t[6].connect[2] and t[6].connect[5] and t[9].connect[2] and not t[3].connect[5] then - swap_stair(6, 5, 8) - end - if t[4].connect[3] ~= t[6].connect[8] then - if t[4].connect[3] then - if t[2].connect[6] then - reset_node(1, 8) - elseif t[8].connect[2] then - reset_node(5, 8) - elseif t[2].connect[4] and t[2].connect[7] and t[1].connect[4] and not t[3].connect[7] then - swap_stair(2, 6, 7) - reset_node(1, 8) - elseif t[2].connect[3] and t[2].connect[8] and t[3].connect[8] and not t[1].connect[3] then - swap_stair(2, 3, 6) - reset_node(1, 8) - elseif t[8].connect[3] and t[8].connect[8] and t[9].connect[8] and not t[7].connect[3] then - swap_stair(8, 2, 3) - reset_node(5, 8) - elseif t[8].connect[4] and t[8].connect[7] and t[7].connect[4] and not t[9].connect[7] then - swap_stair(8, 2, 7) - reset_node(5, 8) - end - else - if t[2].connect[5] then - reset_node(2, 3) - elseif t[8].connect[1] then - reset_node(3, 6) - elseif t[2].connect[4] and t[2].connect[7] and t[3].connect[7] and not t[1].connect[4] then - swap_stair(2, 4, 5) - reset_node(2, 3) - elseif t[2].connect[3] and t[2].connect[8] and t[1].connect[3] and not t[3].connect[8] then - swap_stair(2, 5, 8) - reset_node(2, 3) - elseif t[8].connect[3] and t[8].connect[8] and t[7].connect[3] and not t[9].connect[8] then - swap_stair(8, 1, 8) - reset_node(3, 6) - elseif t[8].connect[4] and t[8].connect[7] and t[9].connect[7] and not t[7].connect[4] then - swap_stair(8, 1, 4) - reset_node(3, 6) - end - end - end - elseif connect[2] then - if t[2].connect[4] and t[2].connect[7] and t[3].connect[7] and not t[1].connect[4] then - swap_stair(2, 4, 5) - elseif t[2].connect[3] and t[2].connect[8] and t[1].connect[3] and not t[3].connect[8] then - swap_stair(2, 5, 8) - end - if t[8].connect[3] and t[8].connect[8] and t[9].connect[8] and not t[7].connect[3] then - swap_stair(8, 2, 3) - elseif t[8].connect[4] and t[8].connect[7] and t[7].connect[4] and not t[9].connect[7] then - swap_stair(8, 2, 7) - end - if t[2].connect[5] ~= t[8].connect[2] then - if t[2].connect[5] then - if t[6].connect[8] then - reset_node(2, 3) - elseif t[4].connect[4] then - reset_node(2, 7) - elseif t[6].connect[1] and t[6].connect[6] and t[3].connect[6] and not t[9].connect[1] then - swap_stair(6, 1, 8) - reset_node(2, 3) - elseif t[6].connect[2] and t[6].connect[5] and t[9].connect[2] and not t[3].connect[5] then - swap_stair(6, 5, 8) - reset_node(2, 3) - elseif t[4].connect[2] and t[4].connect[5] and t[7].connect[2] and not t[1].connect[5] then - swap_stair(4, 4, 5) - reset_node(2, 7) - elseif t[4].connect[1] and t[4].connect[6] and t[1].connect[6] and not t[7].connect[1] then - swap_stair(4, 1, 4) - reset_node(2, 7) - end - else - if t[6].connect[7] then - reset_node(4, 5) - elseif t[4].connect[3] then - reset_node(5, 8) - elseif t[6].connect[1] and t[6].connect[6] and t[9].connect[1] and not t[3].connect[6] then - swap_stair(6, 6, 7) - reset_node(4, 5) - elseif t[6].connect[2] and t[6].connect[5] and t[3].connect[5] and not t[9].connect[2] then - swap_stair(6, 2, 7) - reset_node(4, 5) - elseif t[4].connect[2] and t[4].connect[5] and t[1].connect[5] and not t[7].connect[2] then - swap_stair(4, 2, 3) - reset_node(5, 8) - elseif t[4].connect[1] and t[4].connect[6] and t[7].connect[1] and not t[1].connect[6] then - swap_stair(4, 3, 6) - reset_node(5, 8) - end - end - end - elseif connect[4] then - if t[6].connect[1] and t[6].connect[6] and t[9].connect[1] and not t[3].connect[6] then - swap_stair(6, 6, 7) - elseif t[6].connect[2] and t[6].connect[5] and t[3].connect[5] and not t[9].connect[2] then - swap_stair(6, 2, 7) - end - if t[4].connect[2] and t[4].connect[5] and t[7].connect[2] and not t[1].connect[5] then - swap_stair(4, 4, 5) - elseif t[4].connect[1] and t[4].connect[6] and t[1].connect[6] and not t[7].connect[1] then - swap_stair(4, 1, 4) - end - if t[4].connect[4] ~= t[6].connect[7] then - if t[4].connect[4] then - if t[8].connect[1] then - reset_node(6, 7) - elseif t[2].connect[5] then - reset_node(2, 7) - elseif t[8].connect[3] and t[8].connect[8] and t[7].connect[3] and not t[9].connect[8] then - swap_stair(8, 1, 8) - reset_node(6, 7) - elseif t[8].connect[4] and t[8].connect[7] and t[9].connect[7] and not t[7].connect[4] then - swap_stair(8, 1, 4) - reset_node(6, 7) - elseif t[2].connect[4] and t[2].connect[7] and t[3].connect[7] and not t[1].connect[4] then - swap_stair(2, 4, 5) - reset_node(2, 7) - elseif t[2].connect[3] and t[2].connect[8] and t[1].connect[3] and not t[3].connect[8] then - swap_stair(2, 5, 8) - reset_node(2, 7) - end - else - if t[8].connect[2] then - reset_node(4, 5) - elseif t[2].connect[6] then - reset_node(1, 4) - elseif t[8].connect[3] and t[8].connect[8] and t[9].connect[8] and not t[7].connect[3] then - swap_stair(8, 2, 3) - reset_node(4, 5) - elseif t[8].connect[4] and t[8].connect[7] and t[7].connect[4] and not t[9].connect[7] then - swap_stair(8, 2, 7) - reset_node(4, 5) - elseif t[2].connect[4] and t[2].connect[7] and t[1].connect[4] and not t[3].connect[7] then - swap_stair(2, 6, 7) - reset_node(1, 4) - elseif t[2].connect[3] and t[2].connect[8] and t[3].connect[8] and not t[1].connect[3] then - swap_stair(2, 3, 6) - reset_node(1, 4) - end - end - end - elseif connect[1] then - if t[8].connect[3] and t[8].connect[8] and t[7].connect[3] and not t[9].connect[8] then - swap_stair(8, 1, 8) - elseif t[8].connect[4] and t[8].connect[7] and t[9].connect[7] and not t[7].connect[4] then - swap_stair(8, 1, 4) - end - if t[2].connect[4] and t[2].connect[7] and t[1].connect[4] and not t[3].connect[7] then - swap_stair(2, 6, 7) - elseif t[2].connect[3] and t[2].connect[8] and t[3].connect[8] and not t[1].connect[3] then - swap_stair(2, 3, 6) - end - if t[2].connect[6] ~= t[8].connect[1] then - if t[2].connect[6] then - if t[4].connect[3] then - reset_node(1, 8) - elseif t[6].connect[7] then - reset_node(1, 4) - elseif t[4].connect[2] and t[4].connect[5] and t[1].connect[5] and not t[7].connect[2] then - swap_stair(4, 2, 3) - reset_node(1, 8) - elseif t[4].connect[1] and t[4].connect[6] and t[7].connect[1] and not t[1].connect[6] then - swap_stair(4, 3, 6) - reset_node(1, 8) - elseif t[6].connect[1] and t[6].connect[6] and t[9].connect[1] and not t[3].connect[6] then - swap_stair(6, 6, 7) - reset_node(1, 4) - elseif t[6].connect[2] and t[6].connect[5] and t[3].connect[5] and not t[9].connect[2] then - swap_stair(6, 2, 7) - reset_node(1, 4) - end - else - if t[4].connect[4] then - reset_node(6, 7) - elseif t[6].connect[8] then - reset_node(3, 6) - elseif t[4].connect[2] and t[4].connect[5] and t[7].connect[2] and not t[1].connect[5] then - swap_stair(4, 4, 5) - reset_node(6, 7) - elseif t[4].connect[1] and t[4].connect[6] and t[1].connect[6] and not t[7].connect[1] then - swap_stair(4, 1, 4) - reset_node(6, 7) - elseif t[6].connect[1] and t[6].connect[6] and t[3].connect[6] and not t[9].connect[1] then - swap_stair(6, 1, 8) - reset_node(3, 6) - elseif t[6].connect[2] and t[6].connect[5] and t[9].connect[2] and not t[3].connect[5] then - swap_stair(6, 5, 8) - reset_node(3, 6) - end - end - end - end - minetest.swap_node(pos, node) - end - }) - minetest.register_node(":"..name.."_outer", { - description = node_def.description, - _doc_items_create_entry = false, - drawtype = "nodebox", - tiles = outer_tiles, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - groups = outer_groups, - sounds = node_def.sounds, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0, 0.5, 0.5} - } - }, - drop = drop, - stairs = {name, name.."_outer", name.."_inner"}, - after_dig_node = function(pos, oldnode) after_dig_node(pos, oldnode) end, - _mcl_hardness = node_def._mcl_hardness, - on_rotate = false, - }) - minetest.register_node(":"..name.."_inner", { - description = node_def.description, - _doc_items_create_entry = false, - drawtype = "nodebox", - tiles = inner_tiles, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - groups = inner_groups, - sounds = node_def.sounds, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, - {-0.5, 0, -0.5, 0, 0.5, 0} - } - }, - drop = drop, - stairs = {name, name.."_outer", name.."_inner"}, - after_dig_node = function(pos, oldnode) after_dig_node(pos, oldnode) end, - _mcl_hardness = node_def._mcl_hardness, - on_rotate = false, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", name, "nodes", name.."_inner") - doc.add_entry_alias("nodes", name, "nodes", name.."_outer") - end -end - - diff --git a/mods/ITEMS/mcl_stairs/crafting.lua b/mods/ITEMS/mcl_stairs/crafting.lua deleted file mode 100644 index f31237eed..000000000 --- a/mods/ITEMS/mcl_stairs/crafting.lua +++ /dev/null @@ -1,53 +0,0 @@ -minetest.register_craft({ - output = "mcl_core:sandstonecarved", - recipe = { - {"mcl_stairs:slab_sandstone"}, - {"mcl_stairs:slab_sandstone"} - } -}) - -minetest.register_craft({ - output = "mcl_core:redsandstonecarved", - recipe = { - {"mcl_stairs:slab_redsandstone"}, - {"mcl_stairs:slab_redsandstone"} - } -}) - -minetest.register_craft({ - output = "mcl_core:stonebrickcarved", - recipe = { - {"mcl_stairs:slab_stonebrick"}, - {"mcl_stairs:slab_stonebrick"} - } -}) - -minetest.register_craft({ - output = "mcl_end:purpur_pillar", - recipe = { - {"mcl_stairs:slab_purpur_block"}, - {"mcl_stairs:slab_purpur_block"} - } -}) - -minetest.register_craft({ - output = "mcl_nether:quartz_chiseled 2", - recipe = { - {"mcl_stairs:slab_quartzblock"}, - {"mcl_stairs:slab_quartzblock"}, - } -}) - --- Fuel -minetest.register_craft({ - type = "fuel", - recipe = "group:wood_stairs", - burntime = 15, -}) -minetest.register_craft({ - type = "fuel", - recipe = "group:wood_slab", - -- Original burn time: 7.5 (PC edition) - burntime = 8, -}) - diff --git a/mods/ITEMS/mcl_stairs/init.lua b/mods/ITEMS/mcl_stairs/init.lua deleted file mode 100644 index 92f0640b3..000000000 --- a/mods/ITEMS/mcl_stairs/init.lua +++ /dev/null @@ -1,16 +0,0 @@ --- Minetest 0.4 mod: mcl_stairs --- See README.txt for licensing and other information. - --- Global namespace for functions - -mcl_stairs = {} - --- Load other files - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(modpath.."/api.lua") -dofile(modpath.."/cornerstair.lua") -dofile(modpath.."/register.lua") -dofile(modpath.."/crafting.lua") -dofile(modpath.."/alias.lua") diff --git a/mods/ITEMS/mcl_stairs/license.txt b/mods/ITEMS/mcl_stairs/license.txt deleted file mode 100644 index 8f16bbd7b..000000000 --- a/mods/ITEMS/mcl_stairs/license.txt +++ /dev/null @@ -1,51 +0,0 @@ -License of source code ----------------------- - -GNU Lesser General Public License, version 2.1 -Copyright (C) 2011-2016 Kahrl -Copyright (C) 2011-2016 celeron55, Perttu Ahola -Copyright (C) 2012-2016 Various Minetest developers and contributors - -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. - -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 Lesser General Public License for more details: -https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - - -Licenses of media (models) --------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.de.tr b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.de.tr deleted file mode 100644 index 8b53d8d13..000000000 --- a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.de.tr +++ /dev/null @@ -1,101 +0,0 @@ -# textdomain: mcl_stairs -Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down.=Treppen sind nützlich, um auf höheres Gelände nur mit Gehen zu kommen, man muss nicht springen. Wenn Treppen in einem Eckmuster platziert werden, werden Ecktreppen erzeugt. Treppen, die an die Decke oder der oberen Hälfte eines Blocks platziert werden, werden verkehrt herum platziert. -Double @1=@1 (doppelt) -Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.=Eine Platte ist halb so hoch wie ihr Vollblock-Gegenstück und belegt entweder den unteren oder unteren Teil eines Blocks, je nach dem, wie er platziert wurde. Platten können leicht betreten werden, ohne springen zu müssen. Wird eine Platte auf einer anderen gleichen Platte platziert, ergibt das eine Doppelplatte. -Upper @1=@1 (oben) -Double slabs are full blocks which are created by placing two slabs of the same kind on each other.=Doppelplatten sind ganze Blöcke, die entstehen, wenn zwei gleiche Platten aufeinander gestapelt werden. -Oak Wood Stairs=Eichenholztreppe -Oak Wood Slab=Eichenholzplatte -Double Oak Wood Slab=Doppeleichenholzplatte -Jungle Wood Stairs=Dschungelholztreppe -Jungle Wood Slab=Dschungelholzplatte -Double Jungle Wood Slab=Doppeldschungelholzplatte -Acacia Wood Stairs=Akazienholztreppe -Acacia Wood Slab=Akazienholzplatte -Double Acacia Wood Slab=Doppelakazienholzplatte -Spruce Wood Stairs=Fichtenholztreppe -Spruce Wood Slab=Fichtenholzplatte -Double Spruce Wood Slab=Doppelfichtenholzplatte -Birch Wood Stairs=Birkenholztreppe -Birch Wood Slab=Birkenholzplatte -Double Birch Wood Slab=Doppelbirkenholzplatte -Dark Oak Wood Stairs=Schwarzeichenholzstreppe -Dark Oak Wood Slab=Schwarzeichenholzplatte -Double Dark Oak Wood Slab=Doppelschwarzeichenholzplatte -Stone Stairs=Steintreppe -Stone Slab=Steinplatte -Double Stone Slab=Doppelsteinplatte -Polished Stone Slab=Polierte Steinplatte -Double Polished Stone Slab=Doppelte polierte Steinplatte -Andesite Stairs=Andesittreppe -Andesite Slab=Andesitplatte -Double Andesite Slab=Doppelandesitplatte -Granite Stairs=Granittreppe -Granite Slab=Granitplatte -Double Granite Slab=Doppelgranitplatte -Diorite Stairs=Diorittreppe -Diorite Slab=Dioritplatte -Double Diorite Slab=Doppeldioritplatte -Cobblestone Stairs=Kopfsteinpflastertreppe -Cobblestone Slab=Kopfsteinpflasterplatte -Double Cobblestone Slab=Doppelkopfsteinpflasterplatte -Mossy Cobblestone Slab=Moosige Kopfsteinpflasterplatte -Mossy Cobblestone Stairs=Moosige Kopfsteinpflastertreppe -Double Mossy Cobblestone Slab=Doppelte moosige Kopfsteinpflasterplatte -Brick Stairs=Ziegeltreppe -Brick Slab=Ziegelplatte -Double Brick Slab=Doppelziegelplatte -Sandstone Stairs=Sandsteintreppe -Sandstone Slab=Sandsteinplatte -Double Sandstone Slab=Doppelsandsteinplatte -Smooth Sandstone Stairs=Glatte Sandsteintreppe -Smooth Sandstone Slab=Glatte Sandsteinplatte -Double Smooth Sandstone Slab=Doppelte glatte Sandsteinplatte -Red Sandstone Stairs=Rote Sandsteintreppe -Red Sandstone Slab=Rote Sandsteinplatte -Double Red Sandstone Slab=Doppelte rote Sandsteinplatte -Smooth Red Sandstone Stairs=Glatte rote Sandsteintreppe -Smooth Red Sandstone Slab=Glatte rote Sandsteinplatte -Double Smooth Red Sandstone Slab=Doppelte glatte rote Sandsteinplatte -Stone Bricks Stairs=Steinziegeltreppe -Stone Bricks Slab=Steinziegelplatte -Double Stone Bricks Slab=Doppelsteinziegelplatte -Quartz Stairs=Quarztreppe -Quartz Slab=Quarzplatte -Double Quartz Slab=Doppelquarzplatte -Smooth Quartz Stairs=Glatte Quarztreppe -Smooth Quartz Slab=Glatte Quarzplatte -Double Smooth Quartz Slab=Doppelte glatte Quarzplatte -Nether Brick Stairs=Netherziegeltreppe -Nether Brick Slab=Netherziegelplatte -Double Nether Brick Slab=Doppelte Netherziegelplatte -Red Nether Brick Stairs=Rote Netherbricktreppe -Red Nether Brick Slab=Rote Netherbrickplatte -Double Red Nether Brick Slab=Doppelte rote Netherbricktreppe -End Stone Brick Stairs=Endsteinziegeltreppe -End Stone Brick Slab=Endsteinziegelplatte -Double End Stone Brick Slab=Doppelte Endsteinziegelplatte -Purpur Stairs=Purpurtreppe -Purpur Slab=Purpurplatte -Double Purpur Slab=Doppelte Purpurplatte -Prismarine Stairs=Prismarintreppe -Prismarine Slab=Prismarinplatte -Double Prismarine Slab=Doppelte Prismarinplatte -Prismarine Brick Stairs=Prismarinziegeltreppe -Prismarine Brick Slab=Prismarinziegelplatte -Double Prismarine Brick Slab=Doppelte Prismarinziegelplatte -Dark Prismarine Stairs=Dunkelprismarintreppe -Dark Prismarine Slab=Dunkelprismarinplatte -Double Dark Prismarine Slab=Doppeldunkelprismarinplatte -Polished Andesite Slab=Polierte Andesitplatte -Double Polished Andesite Slab=Doppelte polierte Andesitplatte -Polished Andesite Stairs=Polierte Andesittreppe -Polished Granite Slab=Polierte Granitplatte -Double Polished Granite Slab=Doppelte polierte Granitplatte -Polished Granite Stairs=Polierte Granittreppe -Polished Diorite Slab=Polierte Dioritplatte -Double Polished Diorite Slab=Doppelte polierte Dioritplatte -Polished Diorite Stairs=Polierte Diorittreppe -Mossy Stone Brick Stairs=Moosige Steinziegeltreppe -Mossy Stone Brick Slab=Moosige Steinziegelplatte -Double Mossy Stone Brick Slab=Doppelte moosige Steinziegelplatte diff --git a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.es.tr b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.es.tr deleted file mode 100644 index 1a17a816a..000000000 --- a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.es.tr +++ /dev/null @@ -1,101 +0,0 @@ -# textdomain: mcl_stairs -Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down.=Las escaleras son útiles para llegar a lugares más altos al caminar sobre ellas; No se requiere saltar. Colocar escaleras en un patrón de esquina creará escaleras de esquina. Las escaleras colocadas en el techo o en la mitad superior del lado de un bloque se colocarán boca abajo. -Double @1=@1 (Doble) -Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.=Las losas son la mitad de altas que sus contrapartes de bloque completo y ocupan la parte inferior o superior de un bloque, dependiendo de cómo se haya colocado. Las losas se pueden pisar fácilmente sin necesidad de saltar. Cuando se coloca una losa en otra losa del mismo tipo, se crea una losa doble. -Upper @1=@1 (Superior) -Double slabs are full blocks which are created by placing two slabs of the same kind on each other.=Las losas dobles son bloques completos que se crean colocando dos losas del mismo tipo entre sí -Oak Wood Stairs=Escaleras de roble -Oak Wood Slab=Losa de roble -Double Oak Wood Slab=Losa doble de roble -Jungle Wood Stairs=Escaleras de la selva -Jungle Wood Slab=Losa de la selva -Double Jungle Wood Slab=Losa doble de la selva -Acacia Wood Stairs=Escaleras de acacia -Acacia Wood Slab=Losa de acacia -Double Acacia Wood Slab=Losa doble de acacia -Spruce Wood Stairs=Escaleras de abeto -Spruce Wood Slab=Losa de abeto -Double Spruce Wood Slab=Losa doble de abeto -Birch Wood Stairs=Escaleras de abedul -Birch Wood Slab=Losa de abedul -Double Birch Wood Slab=Losa doble de abedul -Dark Oak Wood Stairs=Escaleras de roble oscuro -Dark Oak Wood Slab=Losa de roble oscuro -Double Dark Oak Wood Slab=Losa doble de roble oscuro -Stone Stairs=Escaleras de piedra -Stone Slab=Losa de piedra -Double Stone Slab=Losa doble de piedra -Polished Stone Slab=Losa de piedra pulida -Double Polished Stone Slab=Losa doble de piedra pulida -Andesite Stairs=Escaleras de andesita -Andesite Slab=Losa de andesita -Double Andesite Slab=Losa doble de andesita -Granite Stairs=Escaleras de granito -Granite Slab=Losa de granito -Double Granite Slab=Losa doble de granito -Diorite Stairs=Escaleras de diorita -Diorite Slab=Losa de diorita -Double Diorite Slab=Losa doble de diorita -Cobblestone Stairs=Escaleras de roca -Cobblestone Slab=Losa de roca -Double Cobblestone Slab=Losa doble de roca -Mossy Cobblestone Slab=Losa de roca musgosa -Mossy Cobblestone Stairs=Escaleras de roca musgosa -Double Mossy Cobblestone Slab=Losa doble de roca musgosa -Brick Stairs=Escaleras de ladrillos -Brick Slab=Losa de ladrillos -Double Brick Slab=Losa doble de ladrillos -Sandstone Stairs=Escaleras de arenisca -Sandstone Slab=Losa de arenisca -Double Sandstone Slab=Losa doble de arenisca -Smooth Sandstone Stairs=Escaleras de arenisca lisa -Smooth Sandstone Slab=Losa de arenisca lisa -Double Smooth Sandstone Slab=Losa doble de arenisca lisa -Red Sandstone Stairs=Escaleras de arenisca roja -Red Sandstone Slab=Losa de arenisca roja -Double Red Sandstone Slab=Losa doble de arenisca roja -Smooth Red Sandstone Stairs=Escaleras de arenisca roja lisa -Smooth Red Sandstone Slab=Losa de arenisca roja lisa -Double Smooth Red Sandstone Slab=Losa doble de arenisca roja lisa -Stone Bricks Stairs=Escaleras de ladrillos de piedra -Stone Bricks Slab=Losa de ladrillos de piedra -Double Stone Bricks Slab=Losa doble de ladrillos de piedra -Quartz Stairs=Escaleras de cuarzo -Quartz Slab=Losa de cuarzo -Double Quartz Slab=Losa doble de cuarzo -Smooth Quartz Stairs=Escaleras de cuarzo liso -Smooth Quartz Slab=Losa de cuarzo liso -Double Smooth Quartz Slab=Losa doble de cuarzo liso -Nether Brick Stairs=Escaleras de ladrillos del Nether -Nether Brick Slab=Losa de ladrillos del Nether -Double Nether Brick Slab=Losa doble de ladrillos del Nether -Red Nether Brick Stairs=Escaleras de ladrillos del Nether rojos -Red Nether Brick Slab=Losa de ladrillos del Nether roja -Double Red Nether Brick Slab=Losa doble de ladrillos del Nether roja -End Stone Brick Stairs=Escaleras de ladrillos de piedra del End -End Stone Brick Slab=Losa de ladrillos de piedra del End -Double End Stone Brick Slab=Losa doble de ladrillos de piedra del End -Purpur Stairs=Escaleras de púrpur -Purpur Slab=Losa de púrpur -Double Purpur Slab=Losa doble de púrpur -Prismarine Stairs=Escaleras de prismarina -Prismarine Slab=Losa de prismarina -Double Prismarine Slab=Losa doble de prismarina -Prismarine Brick Stairs=Escaleras de ladrillos de prismarina -Prismarine Brick Slab=Losa de ladrillos de prismarina -Double Prismarine Brick Slab=Losa doble de ladrillos de prismarina -Dark Prismarine Stairs=Escaleras de prismarina oscura -Dark Prismarine Slab=Losa de prismarina oscura -Double Dark Prismarine Slab=Losa doble de prismarina oscura -Polished Andesite Slab=Losa de andesita pulida -Double Polished Andesite Slab=Losa doble de andesita pulida -Polished Andesite Stairs=Escaleras de andesita pulida -Polished Granite Slab=Losa de granito pulido -Double Polished Granite Slab=Losa doble de granito pulido -Polished Granite Stairs=Escaleras de granito pulido -Polished Diorite Slab=Losa de diorita pulida -Double Polished Diorite Slab=Losa doble de diorita pulida -Polished Diorite Stairs=Escaleras de diorita pulida -Mossy Stone Brick Stairs=Escaleras de ladrillos de piedra musgosos -Mossy Stone Brick Slab=Losa de ladrillos de piedra musgosos -Double Mossy Stone Brick Slab=Losa de ladrillo de piedra doble musgo diff --git a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr deleted file mode 100644 index 4892122f6..000000000 --- a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr +++ /dev/null @@ -1,101 +0,0 @@ -# textdomain: mcl_stairs -Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down.=Les escaliers sont utiles pour atteindre des endroits plus élevés en marchant dessus; le saut n'est pas obligatoire. Placer les escaliers dans un motif d'angle créera des escaliers d'angle. Les escaliers placés au plafond ou dans la moitié supérieure du côté d'un bloc seront placés à l'envers. -Double @1=Double @1 -Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.=Les dalles sont deux fois moins hautes que leurs homologues de bloc complet et occupent la partie inférieure ou supérieure d'un bloc, selon la façon dont il a été placé. Les dalles peuvent être facilement franchies sans avoir à sauter. Lorsqu'une dalle est placée sur une autre dalle du même type, une double dalle est créée. -Upper @1=@1 Supérieur -Double slabs are full blocks which are created by placing two slabs of the same kind on each other.=Les dalles doubles sont des blocs entiers qui sont créés en plaçant deux dalles du même type l'une sur l'autre. -Oak Wood Stairs=Escalier en Bois de Chêne -Oak Wood Slab=Dalle en Bois de Chêne -Double Oak Wood Slab=Double Dalle en Bois de Chêne -Jungle Wood Stairs=Escalier en Bois d'Acajou -Jungle Wood Slab=Dalle en Bois d'Acajou -Double Jungle Wood Slab=Double Dalle en Bois d'Acajou -Acacia Wood Stairs=Escalier en Bois d'Acacia -Acacia Wood Slab=Dalle en Bois d'Acacia -Double Acacia Wood Slab=Double Dalle en Bois d'Acacia -Spruce Wood Stairs=Escalier en Bois de Sapin -Spruce Wood Slab=Dalle en Bois de Sapin -Double Spruce Wood Slab=Double Dalle en Bois de Sapin -Birch Wood Stairs=Escalier en Bois de Bouleau -Birch Wood Slab=Dalle en Bois de Bouleau -Double Birch Wood Slab=Double Dalle en Bois de Bouleau -Dark Oak Wood Stairs=Escalier en Bois de Chêne Noir -Dark Oak Wood Slab=Dalle en Bois de Chêne Noir -Double Dark Oak Wood Slab=Double Dalle en Bois de Chêne Noir -Stone Stairs=Escalier en Roche -Stone Slab=Dalle en Roche -Double Stone Slab=Double Dalle en Roche -Polished Stone Slab=Dalle en Pierre Polie -Double Polished Stone Slab=Double Dalle en Pierre Polie -Andesite Stairs=Escalier en Andésite -Andesite Slab=Dalle en Andésite -Double Andesite Slab=Double Dalle en Andésite -Granite Stairs=Escalier en Granit -Granite Slab=Dalle en Granit -Double Granite Slab=Double Dalle en Granit -Diorite Stairs=Escalier en Diorite -Diorite Slab=Dalle en Diorite -Double Diorite Slab=Double Dalle en Diorite -Cobblestone Stairs=Escalier en Pierre -Cobblestone Slab=Dalle en Pierre -Double Cobblestone Slab=Double Dalle en Pierre -Mossy Cobblestone Stairs=Escalier en Pierre Moussue -Mossy Cobblestone Slab=Dalle en Pierre Moussue -Double Mossy Cobblestone Slab=Double Dalle en Pierre Moussue -Brick Stairs=Escalier de Brique -Brick Slab=Dalle en Brique -Double Brick Slab=Double Dalle en Brique -Sandstone Stairs=Escalier en Grès -Sandstone Slab=Dalle en Grès -Double Sandstone Slab=Double Dalle en Grès -Smooth Sandstone Stairs=Escalier en Grès Poli -Smooth Sandstone Slab=Dalle en Grès Poli -Double Smooth Sandstone Slab=Double Dalle en Grès Poli -Red Sandstone Stairs=Escalier en Grès Rouge -Red Sandstone Slab=Dalle en Grès Rouge -Double Red Sandstone Slab=Double Dalle en Grès Rouge -Smooth Red Sandstone Stairs=Escalier en Grès Rouge Poli -Smooth Red Sandstone Slab=Dalle en Grès Rouge Poli -Double Smooth Red Sandstone Slab=Double Dalle en Grès Rouge Poli -Stone Bricks Stairs=Escalier en Pierre Taillée -Stone Bricks Slab=Dalle en Pierre Taillée -Double Stone Bricks Slab=Double Dalle en Pierre Taillée -Quartz Stairs=Escalier en Quartz -Quartz Slab=Dalle en Quartz -Double Quartz Slab=Double Dalle en Quartz -Smooth Quartz Stairs=Escalier en Quartz Poli -Smooth Quartz Slab=Dallle en Quartz Poli -Double Smooth Quartz Slab=Double Dalle en Quartz Poli -Nether Brick Stairs=Escalier en Brique du Nether -Nether Brick Slab=Dalle en Brique du Nether -Double Nether Brick Slab=Double Dalle en Brique du Nether -Red Nether Brick Stairs=Escalier en Brique Rouge du Nether -Red Nether Brick Slab=Dalle en Brique Rouge du Nether -Double Red Nether Brick Slab=Double Dalle en Brique Rouge du Nether -End Stone Brick Stairs=Escalier en Pierre de l'End -End Stone Brick Slab=Dalle en Pierre de l'End -Double End Stone Brick Slab=Double Dalle en Pierre de l'End -Purpur Stairs=Escalier en Purpur -Purpur Slab=Dalle en Purpur -Double Purpur Slab=Double Dalle en Purpur -Prismarine Stairs=Escalier en Prismarine -Prismarine Slab=Dalle en Prismarine -Double Prismarine Slab=Double Dalle en Prismarine -Prismarine Brick Stairs=Escalier en Brique Prismarine -Prismarine Brick Slab=Dalle en Brique Prismarine -Double Prismarine Brick Slab=Double Dalle en Brique Prismarine -Dark Prismarine Stairs=Escalier en Prismarine Sombre -Dark Prismarine Slab=Dalle en Prismarine Sombre -Double Dark Prismarine Slab=Double Dalle en Prismarine Sombre -Polished Andesite Slab=Dalle en Andésite Polie -Double Polished Andesite Slab=Double Dalle en Andésite Polie -Polished Andesite Stairs=Escalier en Andésite Polie -Polished Granite Slab=Dalle en Granit Poli -Double Polished Granite Slab=Double Dalle en Granit Poli -Polished Granite Stairs=Escalier en Granit Poli -Polished Diorite Slab=Dalle en Diorite Polie -Double Polished Diorite Slab=Double Dalle en Diorite Polie -Polished Diorite Stairs=Escalier en Diorite Polie -Mossy Stone Brick Stairs=Escalier en Pierre Taillée Moussue -Mossy Stone Brick Slab=Dalle en Pierre Taillée Moussue -Double Mossy Stone Brick Slab=Double Dalle en Pierre Taillée Moussue diff --git a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr deleted file mode 100644 index 2b2b52486..000000000 --- a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr +++ /dev/null @@ -1,101 +0,0 @@ -# textdomain: mcl_stairs -Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down.=Schody są użyteczne by wspiąć się do wyższych miejsc poprzez chodzenie po nich. Nie trzeba na nich skakać. Umieszczenie schodów w rogu schodów dopasuje schodu do rogu. Schody postawione na suficie lub na górnej części bloku będą postawione do góry nogami. -Double @1=Podwójna @1 -Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.=Płyty są wysokości połowy odpowiadającego im bloku i zajmują górną lub dolną część bloku w zależności od tego jak są postawione. Na płyty można łatwo wejść bez konieczności skakania. Gdy płyta jest postawiona na innej płycie tego samego typu, podwójna płyta jest tworzona. -Upper @1=Górna @1 -Double slabs are full blocks which are created by placing two slabs of the same kind on each other.=Podwójne płyty są pełnymi blokami tworzonymi przez położenie dwóch płyt tego samego typu jedna na drugiej. -Oak Wood Stairs=Dębowe schody -Oak Wood Slab=Dębowa płyta -Double Oak Wood Slab=Podwójna dębowa płyta -Jungle Wood Stairs=Tropikalne schody -Jungle Wood Slab=Tropikalna płyta -Double Jungle Wood Slab=Podwójna tropikalna płyta -Acacia Wood Stairs=Akacjowe schody -Acacia Wood Slab=Akacjowa płyta -Double Acacia Wood Slab=Podwójna akacjowa płyta -Spruce Wood Stairs=Świerkowe schody -Spruce Wood Slab=Świerkowa płyta -Double Spruce Wood Slab=Podwójna świerkowa płyta -Birch Wood Stairs=Brzozowe schody -Birch Wood Slab=Brzozowa płyta -Double Birch Wood Slab=Podwójna brzozowa płyta -Dark Oak Wood Stairs=Ciemno-dębowe schody -Dark Oak Wood Slab=Ciemno-dębowa płyta -Double Dark Oak Wood Slab=Podwójna ciemno-dębowa płyta -Stone Stairs=Kamienne schody -Stone Slab=Kamienna płyta -Double Stone Slab=Podwójna kamienna płyta -Polished Stone Slab=Polerowana kamienna płyta -Double Polished Stone Slab=Podwójna polerowana kamienna płyta -Andesite Stairs=Andezytowe schody -Andesite Slab=Andezytowa płyta -Double Andesite Slab=Podwójne andezytowa płyta -Granite Stairs=Granitowe schody -Granite Slab=Granitowa płyta -Double Granite Slab=Podwójna granitowa płyta -Diorite Stairs=Diorytowe schody -Diorite Slab=Diorytowa płyta -Double Diorite Slab=Podwójna diorytowa płyta -Cobblestone Stairs=Brukowane schody -Cobblestone Slab=Brukowana płyta -Double Cobblestone Slab=Podwójna brukowana płyta -Mossy Cobblestone Stairs=Zamszone brukowane schody -Mossy Cobblestone Slab=Zamszona brukowana płyta -Double Mossy Cobblestone Slab=Podwójna zamszona brukowana płyta -Brick Stairs=Ceglane schody -Brick Slab=Ceglana płyta -Double Brick Slab=Podwójna ceglana płyta -Sandstone Stairs=Piaskowcowe schody -Sandstone Slab=Piaskowcowa płyta -Double Sandstone Slab=Podwójna piaskowcowa płyta -Smooth Sandstone Stairs=Polerowane piaskowcowe schody -Smooth Sandstone Slab=Polerowana piaskowcowa płyta -Double Smooth Sandstone Slab=Podwójna polerowana piaskowcowa płyta -Red Sandstone Stairs=Czerwone piaskowcowe schody -Red Sandstone Slab=Czerwona piaskowcowa płyta -Double Red Sandstone Slab=Podwójna czerwona piaskowcowa płyta -Smooth Red Sandstone Stairs=Polerowane czerwone piaskowcowe schody -Smooth Red Sandstone Slab=Polerowana czerwona piaskowcowa płyta -Double Smooth Red Sandstone Slab=Podwójna polerowana czerwona piaskowcowa płyta -Stone Bricks Stairs=Ceglane kamienne schody -Stone Bricks Slab=Ceglana kamienna płyta -Double Stone Bricks Slab=Podwójna ceglana kamienna płyta -Quartz Stairs=Kwarcowe schody -Quartz Slab=Kwarcowa płyta -Double Quartz Slab=Podwójna kwarcowa płyta -Smooth Quartz Stairs=Polerowane kwarcowe schody -Smooth Quartz Slab=Polerowana kwarcowa płyta -Double Smooth Quartz Slab=Podwójna polerowana kwarcowa płyta -Nether Brick Stairs=Netherowe ceglane schody -Nether Brick Slab=Netherowa ceglana płyta -Double Nether Brick Slab=Podwójna Netherowa ceglana płyta -Red Nether Brick Stairs=Czerwone Netherowe ceglane schody -Red Nether Brick Slab=Czerwona Netherowa ceglana płyta -Double Red Nether Brick Slab=Podwójna czerwona Netherowa ceglana płyta -End Stone Brick Stairs=Kresowe ceglane kamienne schody -End Stone Brick Slab=Kresowa ceglana kamienna płyta -Double End Stone Brick Slab=Podwójna kresowa ceglana kamienna płyta -Purpur Stairs=Purpurowe schody -Purpur Slab=Purpurowa płyta -Double Purpur Slab=Podwójna purpurowe płyta -Prismarine Stairs=Pryzmarynowe schody -Prismarine Slab=Pryzmarynowa płyta -Double Prismarine Slab=Podwójna pryzmarynowa płyta -Prismarine Brick Stairs=Pryzmarynowe ceglane schody -Prismarine Brick Slab=Pryzmarynowa ceglana płyta -Double Prismarine Brick Slab=Podwójna pryzmarynowa ceglana płyta -Dark Prismarine Stairs=Ciemne pryzmarynowe schody -Dark Prismarine Slab=Ciemna pryzmarynowa płyta -Double Dark Prismarine Slab=Podwójna ciemna pryzmarynowa płyta -Polished Andesite Slab=Polerowana andezytowa płyta -Double Polished Andesite Slab=Podwójna polerowana andezytowa płyta -Polished Andesite Stairs=Polerowane andezytowe schody -Polished Granite Slab=Polerowana granitowa płyta -Double Polished Granite Slab=Podwójna polerowana granitowa płyta -Polished Granite Stairs=Polerowane granitowe schody -Polished Diorite Slab=Polerowana diorytowa płyta -Double Polished Diorite Slab=Podwójna polerowana diorytowa płyta -Polished Diorite Stairs=Polerowane diorytowe schody -Mossy Stone Brick Stairs=Zamszone kamienne ceglane schody -Mossy Stone Brick Slab=Zamszona kamienna ceglana płyta -Double Mossy Stone Brick Slab=Podwójna zamszona kamienna ceglana płyta diff --git a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.ru.tr b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.ru.tr deleted file mode 100644 index 10d470fce..000000000 --- a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.ru.tr +++ /dev/null @@ -1,101 +0,0 @@ -# textdomain: mcl_stairs -Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down.=Ступеньки полезны, чтобы подниматься к высоким местам, идя по ним; прыжки при этом не требуются. Размещение ступенек по углам будет создавать угловые ступеньки. Ступеньки, устанавливаемые на потолке или в верхней половине боковой части блока, будет перевёрнуты вверх ногами. -Double @1=Двойная @1 -Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.=Плиты в два раза ниже, чем их блочные аналоги, и занимают либо нижнюю, либо верхнюю часть блока, в зависимости от того, как они размещались. На плиты можно легко подниматься без необходимости прыгать. Когда плита помещается на другую плиту того же типа, создается двойная плита. -Upper @1=Верхняя @1 -Double slabs are full blocks which are created by placing two slabs of the same kind on each other.=Двойные плиты это целые блоки, которые создаются путем размещения двух плит одного вида друг на друге. -Oak Wood Stairs=Дубовые ступеньки -Oak Wood Slab=Дубовая плита -Double Oak Wood Slab=Двойная дубовая плита -Jungle Wood Stairs=Ступеньки из дерева джунглей -Jungle Wood Slab=Плита из дерева джунглей -Double Jungle Wood Slab=Двойная плита из дерева джунглей -Acacia Wood Stairs=Ступеньки из акации -Acacia Wood Slab=Плита из акации -Double Acacia Wood Slab=Двойная плита из акации -Spruce Wood Stairs=Еловые ступеньки -Spruce Wood Slab=Еловая плита -Double Spruce Wood Slab=Двойная еловая плита -Birch Wood Stairs=Берёзовые ступеньки -Birch Wood Slab=Берёзовая плита -Double Birch Wood Slab=Двойная берёзовая плита -Dark Oak Wood Stairs=Ступеньки из тёмного дуба -Dark Oak Wood Slab=Плита из тёмного дуба -Double Dark Oak Wood Slab=Двойная плита из тёмного дуба -Stone Stairs=Каменные ступеньки -Stone Slab=Каменная плита -Double Stone Slab=Двойная каменная плита -Polished Stone Slab=Плита из гладкого камня -Double Polished Stone Slab=Двойная плита из гладкого камня -Andesite Stairs=Андезитовые ступеньки -Andesite Slab=Андезитовая плита -Double Andesite Slab=Двойная андезитовая плита -Granite Stairs=Гранитные ступеньки -Granite Slab=Гранитная плита -Double Granite Slab=Двойная гранитная плита -Diorite Stairs=Диоритовые ступеньки -Diorite Slab=Диоритовая плита -Double Diorite Slab=Двойная диоритовая плита -Cobblestone Stairs=Ступеньки из булыжника -Cobblestone Slab=Плита из булыжника -Double Cobblestone Slab=Двойная плита из булыжника -Mossy Cobblestone Stairs=Ступеньки из мшистого булыжника -Mossy Cobblestone Slab=Плита из мшистого булыжника -Double Mossy Cobblestone Slab=Двойная плита из мшистого булыжника -Brick Stairs=Кирпичные ступеньки -Brick Slab=Кирпичная плита -Double Brick Slab=Двойная кирпичная плита -Sandstone Stairs=Ступеньки из песчаника -Sandstone Slab=Плита из песчаника -Double Sandstone Slab=Двойная плита из песчаника -Smooth Sandstone Stairs=Ступеньки из гладкого песчаника -Smooth Sandstone Slab=Плита из гладкого песчаника -Double Smooth Sandstone Slab=Двойная плита из гладкого песчаника -Red Sandstone Stairs=Ступеньки из красного песчаника -Red Sandstone Slab=Плита из красного песчаника -Double Red Sandstone Slab=Двойная плита из красного песчаника -Smooth Red Sandstone Stairs=Ступеньки из гладкого красного песчаника -Smooth Red Sandstone Slab=Плита из гладкого красного песчаника -Double Smooth Red Sandstone Slab=Двойная плита из гладкого красного песчаника -Stone Bricks Stairs=Ступеньки из каменных блоков -Stone Bricks Slab=Плита из каменных блоков -Double Stone Bricks Slab=Двойная плита из каменных блоков -Quartz Stairs=Кварцевые ступеньки -Quartz Slab=Кварцевая плита -Double Quartz Slab=Двойная кварцевая плита -Smooth Quartz Stairs=Ступеньки из гладкого кварца -Smooth Quartz Slab=Плита из гладкого кварца -Double Smooth Quartz Slab=Двойная плита из гладкого кварца -Nether Brick Stairs=Ступеньки из адского кирпича -Nether Brick Slab=Плита из адского кирпича -Double Nether Brick Slab=Двойная плита из адского кирпича -Red Nether Brick Stairs=Ступеньки из красного адского кирпича -Red Nether Brick Slab=Плита из красного адского кирпича -Double Red Nether Brick Slab=Двойная из красного адского кирпича -End Stone Brick Stairs=Ступеньки из камня Предела -End Stone Brick Slab=Плита из камня Предела -Double End Stone Brick Slab=Двойная плита из камня Предела -Purpur Stairs=Пурпурные ступеньки -Purpur Slab=Пурпурная плита -Double Purpur Slab=Двойная пурпурная плита -Prismarine Stairs=Призмариновые ступеньки -Prismarine Slab=Призмариновая плита -Double Prismarine Slab=Двойная призмариновая плита -Prismarine Brick Stairs=Ступеньки из призмаринового кирпича -Prismarine Brick Slab=Плита из призмаринового кирпича -Double Prismarine Brick Slab=Двойная плита из призмаринового кирпича -Dark Prismarine Stairs=Ступеньки из тёмного призмарина -Dark Prismarine Slab=Плита из тёмного призмарина -Double Dark Prismarine Slab=Двойная плита из тёмного призмарина -Polished Andesite Slab=Плита из гладкого андезита -Double Polished Andesite Slab=Двойная плита из гладкого андезита -Polished Andesite Stairs=Ступеньки из гладкого андезита -Polished Granite Slab=Плита из гладкого гранита -Double Polished Granite Slab=Двойная плита из гладкого гранита -Polished Granite Stairs=Ступеньки из гладкого гранита -Polished Diorite Slab=Плита из гладкого диорита -Double Polished Diorite Slab=Двойная плита из гладкого диорита -Polished Diorite Stairs=Ступеньки из гладкого диорита -Mossy Stone Brick Stairs=Ступеньки из мшистого каменного блока -Mossy Stone Brick Slab=Плита из мшистого каменного блока -Double Mossy Stone Brick Slab=Двойная плита из мшистого каменного блока diff --git a/mods/ITEMS/mcl_stairs/locale/template.txt b/mods/ITEMS/mcl_stairs/locale/template.txt deleted file mode 100644 index 0638af3db..000000000 --- a/mods/ITEMS/mcl_stairs/locale/template.txt +++ /dev/null @@ -1,101 +0,0 @@ -# textdomain: mcl_stairs -Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down.= -Double @1= -Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.= -Upper @1= -Double slabs are full blocks which are created by placing two slabs of the same kind on each other.= -Oak Wood Stairs= -Oak Wood Slab= -Double Oak Wood Slab= -Jungle Wood Stairs= -Jungle Wood Slab= -Double Jungle Wood Slab= -Acacia Wood Stairs= -Acacia Wood Slab= -Double Acacia Wood Slab= -Spruce Wood Stairs= -Spruce Wood Slab= -Double Spruce Wood Slab= -Birch Wood Stairs= -Birch Wood Slab= -Double Birch Wood Slab= -Dark Oak Wood Stairs= -Dark Oak Wood Slab= -Double Dark Oak Wood Slab= -Stone Stairs= -Stone Slab= -Double Stone Slab= -Polished Stone Slab= -Double Polished Stone Slab= -Andesite Stairs= -Andesite Slab= -Double Andesite Slab= -Granite Stairs= -Granite Slab= -Double Granite Slab= -Diorite Stairs= -Diorite Slab= -Double Diorite Slab= -Cobblestone Stairs= -Cobblestone Slab= -Double Cobblestone Slab= -Mossy Cobblestone Stairs= -Mossy Cobblestone Slab= -Double Mossy Cobblestone Slab= -Brick Stairs= -Brick Slab= -Double Brick Slab= -Sandstone Stairs= -Sandstone Slab= -Double Sandstone Slab= -Smooth Sandstone Stairs= -Smooth Sandstone Slab= -Double Smooth Sandstone Slab= -Red Sandstone Stairs= -Red Sandstone Slab= -Double Red Sandstone Slab= -Smooth Red Sandstone Stairs= -Smooth Red Sandstone Slab= -Double Smooth Red Sandstone Slab= -Stone Bricks Stairs= -Stone Bricks Slab= -Double Stone Bricks Slab= -Quartz Stairs= -Quartz Slab= -Double Quartz Slab= -Smooth Quartz Stairs= -Smooth Quartz Slab= -Double Smooth Quartz Slab= -Nether Brick Stairs= -Nether Brick Slab= -Double Nether Brick Slab= -Red Nether Brick Stairs= -Red Nether Brick Slab= -Double Red Nether Brick Slab= -End Stone Brick Stairs= -End Stone Brick Slab= -Double End Stone Brick Slab= -Purpur Stairs= -Purpur Slab= -Double Purpur Slab= -Prismarine Stairs= -Prismarine Slab= -Double Prismarine Slab= -Prismarine Brick Stairs= -Prismarine Brick Slab= -Double Prismarine Brick Slab= -Dark Prismarine Stairs= -Dark Prismarine Slab= -Double Dark Prismarine Slab= -Polished Andesite Slab= -Double Polished Andesite Slab= -Polished Andesite Stairs= -Polished Granite Slab= -Double Polished Granite Slab= -Polished Granite Stairs= -Polished Diorite Slab= -Double Polished Diorite Slab= -Polished Diorite Stairs= -Mossy Stone Brick Stairs= -Mossy Stone Brick Slab= -Double Mossy Stone Brick Slab= diff --git a/mods/ITEMS/mcl_stairs/mod.conf b/mods/ITEMS/mcl_stairs/mod.conf deleted file mode 100644 index a357c2c79..000000000 --- a/mods/ITEMS/mcl_stairs/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_stairs -depends = mcl_core, mcl_sounds, mcl_nether, mcl_end, mcl_ocean diff --git a/mods/ITEMS/mcl_stairs/models/stairs_stair.obj b/mods/ITEMS/mcl_stairs/models/stairs_stair.obj deleted file mode 100644 index 198edf6e3..000000000 --- a/mods/ITEMS/mcl_stairs/models/stairs_stair.obj +++ /dev/null @@ -1,115 +0,0 @@ -# Blender v2.72 (sub 0) OBJ File: '' -# www.blender.org -mtllib stairs.mtl -o stairs_top -v -0.500000 0.000000 -0.500000 -v -0.500000 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v 0.500000 0.000000 -0.500000 -v -0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.000000 -v -0.500000 0.500000 0.500000 -v 0.500000 0.500000 0.500000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.000000 0.500000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.000000 1.000000 0.000000 -g stairs_top -usemtl None -s off -f 4/1/1 1/2/1 2/3/1 3/4/1 -f 7/5/1 8/6/1 6/4/1 5/3/1 -o stairs_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.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 0.000000 -1.000000 -0.000000 -g stairs_bottom -usemtl None -s off -f 11/7/2 9/8/2 10/9/2 12/10/2 -o stairs_right -v -0.500000 0.000000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.000000 0.000000 -v -0.500000 -0.500000 0.500000 -v -0.500000 0.500000 0.000000 -v -0.500000 0.500000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 0.500000 -vt 1.000000 1.000000 -vt 0.500000 1.000000 -vt 1.000000 0.000000 -vn -1.000000 0.000000 0.000000 -g stairs_right -usemtl None -s off -f 13/11/3 14/12/3 15/13/3 -f 15/13/3 18/14/3 17/15/3 -f 14/12/3 16/16/3 15/13/3 -f 16/16/3 18/14/3 15/13/3 -o stairs_left -v 0.500000 0.000000 0.000000 -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.000000 -v 0.500000 0.500000 0.500000 -vt 0.500000 0.500000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.500000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 1.000000 0.000000 0.000000 -g stairs_left -usemtl None -s off -f 19/17/4 20/18/4 21/19/4 -f 19/17/4 23/20/4 24/21/4 -f 20/18/4 19/17/4 22/22/4 -f 19/17/4 24/21/4 22/22/4 -o stairs_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.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 0.000000 -0.000000 1.000000 -g stairs_back -usemtl None -s off -f 26/23/5 28/24/5 27/25/5 25/26/5 -o stairs_front -v -0.500000 0.000000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 0.000000 -0.500000 -v -0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -g stairs_front -usemtl None -s off -f 30/27/6 29/28/6 34/29/6 33/30/6 -f 31/28/6 35/31/6 36/32/6 32/29/6 diff --git a/mods/ITEMS/mcl_stairs/register.lua b/mods/ITEMS/mcl_stairs/register.lua deleted file mode 100644 index 5de380585..000000000 --- a/mods/ITEMS/mcl_stairs/register.lua +++ /dev/null @@ -1,196 +0,0 @@ --- Register all Minecraft stairs and slabs --- Note about hardness: For some reason, the hardness of slabs and stairs don't always match nicely, so that some --- slabs actually take slightly longer to be dug than their stair counterparts. --- Note sure if it is a good idea to preserve this oddity. - -local S = minetest.get_translator(minetest.get_current_modname()) - -local woods = { - { "wood", "default_wood.png", S("Oak Wood Stairs"), S("Oak Wood Slab"), S("Double Oak Wood Slab") }, - { "junglewood", "default_junglewood.png", S("Jungle Wood Stairs"), S("Jungle Wood Slab"), S("Double Jungle Wood Slab") }, - { "acaciawood", "default_acacia_wood.png", S("Acacia Wood Stairs"), S("Acacia Wood Slab"), S("Double Acacia Wood Slab") }, - { "sprucewood", "mcl_core_planks_spruce.png", S("Spruce Wood Stairs"), S("Spruce Wood Slab"), S("Double Spruce Wood Slab") }, - { "birchwood", "mcl_core_planks_birch.png", S("Birch Wood Stairs"), S("Birch Wood Slab"), S("Double Birch Wood Slab") }, - { "darkwood", "mcl_core_planks_big_oak.png", S("Dark Oak Wood Stairs"), S("Dark Oak Wood Slab"), S("Double Dark Oak Wood Slab") }, -} - -for w=1, #woods do - local wood = woods[w] - mcl_stairs.register_stair(wood[1], "mcl_core:"..wood[1], - {handy=1,axey=1, flammable=3,wood_stairs=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, - {wood[2]}, - wood[3], - mcl_sounds.node_sound_wood_defaults(), 3, 2, - "woodlike") - mcl_stairs.register_slab(wood[1], "mcl_core:"..wood[1], - {handy=1,axey=1, flammable=3,wood_slab=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, - {wood[2]}, - wood[4], - mcl_sounds.node_sound_wood_defaults(), 3, 2, - wood[5]) -end - -mcl_stairs.register_stair_and_slab_simple("stone_rough", "mcl_core:stone", S("Stone Stairs"), S("Stone Slab"), S("Double Stone Slab")) - -mcl_stairs.register_slab("stone", "mcl_core:stone_smooth", - {pickaxey=1, material_stone=1}, - {"mcl_stairs_stone_slab_top.png", "mcl_stairs_stone_slab_top.png", "mcl_stairs_stone_slab_side.png"}, - S("Polished Stone Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Polished Stone Slab")) - -mcl_stairs.register_stair_and_slab_simple("andesite", "mcl_core:andesite", S("Andesite Stairs"), S("Andesite Slab"), S("Double Andesite Slab")) -mcl_stairs.register_stair_and_slab_simple("granite", "mcl_core:granite", S("Granite Stairs"), S("Granite Slab"), S("Double Granite Slab")) -mcl_stairs.register_stair_and_slab_simple("diorite", "mcl_core:diorite", S("Diorite Stairs"), S("Diorite Slab"), S("Double Diorite Slab")) - -mcl_stairs.register_stair_and_slab_simple("cobble", "mcl_core:cobble", S("Cobblestone Stairs"), S("Cobblestone Slab"), S("Double Cobblestone Slab")) -mcl_stairs.register_stair_and_slab_simple("mossycobble", "mcl_core:mossycobble", S("Mossy Cobblestone Stairs"), S("Mossy Cobblestone Slab"), S("Double Mossy Cobblestone Slab")) - -mcl_stairs.register_stair_and_slab_simple("brick_block", "mcl_core:brick_block", S("Brick Stairs"), S("Brick Slab"), S("Double Brick Slab")) - - -mcl_stairs.register_stair("sandstone", "group:normal_sandstone", - {pickaxey=1, material_stone=1}, - {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_normal.png"}, - S("Sandstone Stairs"), - mcl_sounds.node_sound_stone_defaults(), 0.8, 0.8, - nil, "mcl_core:sandstone") --fixme: extra parameter from previous release -mcl_stairs.register_slab("sandstone", "group:normal_sandstone", - {pickaxey=1, material_stone=1}, - {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_normal.png"}, - S("Sandstone Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Sandstone Slab"), "mcl_core:sandstone") --fixme: extra parameter from previous release -mcl_stairs.register_stair_and_slab_simple("sandstonesmooth2", "mcl_core:sandstonesmooth2", S("Smooth Sandstone Stairs"), S("Smooth Sandstone Slab"), S("Double Smooth Sandstone Slab")) - -mcl_stairs.register_stair("redsandstone", "group:red_sandstone", - {pickaxey=1, material_stone=1}, - {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_normal.png"}, - S("Red Sandstone Stairs"), - mcl_sounds.node_sound_stone_defaults(), 0.8, 0.8, - nil, "mcl_core:redsandstone") --fixme: extra parameter from previous release -mcl_stairs.register_slab("redsandstone", "group:red_sandstone", - {pickaxey=1, material_stone=1}, - {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_normal.png"}, - S("Red Sandstone Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Red Sandstone Slab"), "mcl_core:redsandstone") --fixme: extra parameter from previous release -mcl_stairs.register_stair_and_slab_simple("redsandstonesmooth2", "mcl_core:redsandstonesmooth2", S("Smooth Red Sandstone Stairs"), S("Smooth Red Sandstone Slab"), S("Double Smooth Red Sandstone Slab")) - --- Intentionally not group:stonebrick because of mclx_stairs -mcl_stairs.register_stair("stonebrick", "mcl_core:stonebrick", - {pickaxey=1, material_stone=1}, - {"default_stone_brick.png"}, - S("Stone Bricks Stairs"), - mcl_sounds.node_sound_stone_defaults(), 6, 1.5, - nil, "mcl_core:stonebrick") --fixme: extra parameter from previous release -mcl_stairs.register_slab("stonebrick", "mcl_core:stonebrick", - {pickaxey=1, material_stone=1}, - {"default_stone_brick.png"}, - S("Stone Bricks Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Stone Bricks Slab"), "mcl_core:stonebrick") --fixme: extra parameter from previous release - -mcl_stairs.register_stair("quartzblock", "group:quartz_block", - {pickaxey=1, material_stone=1}, - {"mcl_nether_quartz_block_top.png", "mcl_nether_quartz_block_bottom.png", "mcl_nether_quartz_block_side.png"}, - S("Quartz Stairs"), - mcl_sounds.node_sound_stone_defaults(), 0.8, 0.8, - nil, "mcl_nether:quartz_block") --fixme: extra parameter from previous release -mcl_stairs.register_slab("quartzblock", "group:quartz_block", - {pickaxey=1, material_stone=1}, - {"mcl_nether_quartz_block_top.png", "mcl_nether_quartz_block_bottom.png", "mcl_nether_quartz_block_side.png"}, - S("Quartz Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Quartz Slab"), "mcl_nether:quartz_block") --fixme: extra parameter from previous release - -mcl_stairs.register_stair_and_slab_simple("quartz_smooth", "mcl_nether:quartz_smooth", S("Smooth Quartz Stairs"), S("Smooth Quartz Slab"), S("Double Smooth Quartz Slab")) - -mcl_stairs.register_stair_and_slab("nether_brick", "mcl_nether:nether_brick", - {pickaxey=1, material_stone=1}, - {"mcl_nether_nether_brick.png"}, - S("Nether Brick Stairs"), - S("Nether Brick Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Nether Brick Slab"), nil) -mcl_stairs.register_stair_and_slab("red_nether_brick", "mcl_nether:red_nether_brick", - {pickaxey=1, material_stone=1}, - {"mcl_nether_red_nether_brick.png"}, - S("Red Nether Brick Stairs"), - S("Red Nether Brick Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Red Nether Brick Slab"), nil) - -mcl_stairs.register_stair_and_slab_simple("end_bricks", "mcl_end:end_bricks", S("End Stone Brick Stairs"), S("End Stone Brick Slab"), S("Double End Stone Brick Slab")) - -mcl_stairs.register_stair("purpur_block", "group:purpur_block", - {pickaxey=1, material_stone=1}, - {"mcl_end_purpur_block.png"}, - S("Purpur Stairs"), - mcl_sounds.node_sound_stone_defaults(), 6, 1.5, - nil) -mcl_stairs.register_slab("purpur_block", "group:purpur_block", - {pickaxey=1, material_stone=1}, - {"mcl_end_purpur_block.png"}, - S("Purpur Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Purpur Slab")) - -mcl_stairs.register_stair_and_slab_simple("prismarine", "mcl_ocean:prismarine", S("Prismarine Stairs"), S("Prismarine Slab"), S("Double Prismarine Slab")) - -mcl_stairs.register_stair_and_slab_simple("prismarine_brick", "mcl_ocean:prismarine_brick", S("Prismarine Brick Stairs"), S("Prismarine Brick Slab"), S("Double Prismarine Brick Slab")) -mcl_stairs.register_stair_and_slab_simple("prismarine_dark", "mcl_ocean:prismarine_dark", S("Dark Prismarine Stairs"), S("Dark Prismarine Slab"), S("Double Dark Prismarine Slab")) - -mcl_stairs.register_slab("andesite_smooth", "mcl_core:andesite_smooth", - {pickaxey=1}, - {"mcl_core_andesite_smooth.png", "mcl_core_andesite_smooth.png", "mcl_stairs_andesite_smooth_slab.png"}, - S("Polished Andesite Slab"), - nil, 6, nil, - S("Double Polished Andesite Slab")) -mcl_stairs.register_stair("andesite_smooth", "mcl_core:andesite_smooth", - {pickaxey=1}, - {"mcl_stairs_andesite_smooth_slab.png", "mcl_core_andesite_smooth.png", "mcl_core_andesite_smooth.png", "mcl_core_andesite_smooth.png", "mcl_core_andesite_smooth.png", "mcl_stairs_andesite_smooth_slab.png"}, - S("Polished Andesite Stairs"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_slab("granite_smooth", "mcl_core:granite_smooth", - {pickaxey=1}, - {"mcl_core_granite_smooth.png", "mcl_core_granite_smooth.png", "mcl_stairs_granite_smooth_slab.png"}, - S("Polished Granite Slab"), - nil, 6, nil, - S("Double Polished Granite Slab")) -mcl_stairs.register_stair("granite_smooth", "mcl_core:granite_smooth", - {pickaxey=1}, - {"mcl_stairs_granite_smooth_slab.png", "mcl_core_granite_smooth.png", "mcl_core_granite_smooth.png", "mcl_core_granite_smooth.png", "mcl_core_granite_smooth.png", "mcl_stairs_granite_smooth_slab.png"}, - S("Polished Granite Stairs"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_slab("diorite_smooth", "mcl_core:diorite_smooth", - {pickaxey=1}, - {"mcl_core_diorite_smooth.png", "mcl_core_diorite_smooth.png", "mcl_stairs_diorite_smooth_slab.png"}, - S("Polished Diorite Slab"), - nil, 6, nil, - S("Double Polished Diorite Slab")) -mcl_stairs.register_stair("diorite_smooth", "mcl_core:diorite_smooth", - {pickaxey=1}, - {"mcl_stairs_diorite_smooth_slab.png", "mcl_core_diorite_smooth.png", "mcl_core_diorite_smooth.png", "mcl_core_diorite_smooth.png", "mcl_core_diorite_smooth.png", "mcl_stairs_diorite_smooth_slab.png"}, - S("Polished Diorite Stairs"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_stair("stonebrickmossy", "mcl_core:stonebrickmossy", - {pickaxey=1}, - {"mcl_core_stonebrick_mossy.png"}, - S("Mossy Stone Brick Stairs"), - mcl_sounds.node_sound_stone_defaults(), 6, 1.5, - nil) - -mcl_stairs.register_slab("stonebrickmossy", "mcl_core:stonebrickmossy", - {pickaxey=1}, - {"mcl_core_stonebrick_mossy.png"}, - S("Mossy Stone Brick Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Mossy Stone Brick Slab"), "mcl_core:stonebrickmossy") --fixme: extra parameter from previous release - diff --git a/mods/ITEMS/mcl_stairs/textures/mcl_stairs_stone_slab_side.png b/mods/ITEMS/mcl_stairs/textures/mcl_stairs_stone_slab_side.png deleted file mode 100644 index a72e10912..000000000 Binary files a/mods/ITEMS/mcl_stairs/textures/mcl_stairs_stone_slab_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_stairs/textures/mcl_stairs_stone_slab_top.png b/mods/ITEMS/mcl_stairs/textures/mcl_stairs_stone_slab_top.png deleted file mode 100644 index 8e5a355be..000000000 Binary files a/mods/ITEMS/mcl_stairs/textures/mcl_stairs_stone_slab_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_stairs/textures/mcl_stairs_turntexture.png b/mods/ITEMS/mcl_stairs/textures/mcl_stairs_turntexture.png deleted file mode 100644 index d59ff8924..000000000 Binary files a/mods/ITEMS/mcl_stairs/textures/mcl_stairs_turntexture.png and /dev/null differ diff --git a/mods/ITEMS/mcl_throwing/API.md b/mods/ITEMS/mcl_throwing/API.md deleted file mode 100644 index 41a47223a..000000000 --- a/mods/ITEMS/mcl_throwing/API.md +++ /dev/null @@ -1,41 +0,0 @@ -# mcl_throwing - -## mcl_throwing.throw(throw_item, pos, dir, velocity, thrower) -Throw a throwable item. - -* throw_item: itemstring of the throwable item -* pos: initial position of the entity -* dir: direction where the throwable item will be thrown -* velocity: (optional) will overide the default velocity value (can be nil) -* thrower: (optional) player/entity who throw the object (can be nil) - -## mcl_throwing.register_throwable_object(name, entity, velocity) -Register a throwable item. - -* name: itemname of the throwable object -* entity: entity thrown -* velocity: initial velocity of the entity - -## mcl_throwing.dispense_function(stack, dispenserpos, droppos, dropnode, dropdir) -Throw throwable item from dispencer. - -Shouldn't be called directly. - -Must be used in item definition: - -`_on_dispense = mcl_throwing.dispense_function,` - -## mcl_throwing.get_player_throw_function(entity_name, velocity) - -Return a function who handle item throwing (to be used in item definition) - -Handle creative mode, and throw params. - -* entity_name: the name of the entity to throw -* velocity: (optional) velocity overide (can be nil) - -## mcl_throwing.get_staticdata(self) -Must be used in entity def if you want the entity to be saved after unloading mapblock. - -## mcl_throwing.on_activate(self, staticdata, dtime_s) -Must be used in entity def if you want the entity to be saved after unloading mapblock. diff --git a/mods/ITEMS/mcl_throwing/README.md b/mods/ITEMS/mcl_throwing/README.md deleted file mode 100644 index a1ad06a8e..000000000 --- a/mods/ITEMS/mcl_throwing/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# `mcl_throwing` - -It's a MineClone 2 mod containing throwable items like snowballs. - -## License of code - -- MIT License - -## License of media - -- `mcl_throwing_snowball_impact_soft.ogg`: - - License: CC BY 3.0 - - Author: YleArkisto (freesound.org) - - Source: - - Original title: `sfx_snowball_hit-03.wav` (file was edited) -- `mcl_throwing_snowball_impact_hard.ogg`: - - License: CC0 - - Author: Julien Matthey (freesound.org) - - Source: - - Original title: `JM_IMPACT_01c - Snow on cement.wav` (file was edited) -- `mcl_throwing_egg_impact.ogg`: - - License: CC0 - - Author: dav0r (freesound.org) - - Source: - - Original title: `d0_step_on_egg_04` (file was edited) -- `mcl_throwing_throw.ogg`: - - License: CC0 - - Author: kretopi (freesound.org) - - Source: - - Original title: `Arrow002.wav` (file was edited) - -- Everything else: See MineClone 2 license infos diff --git a/mods/ITEMS/mcl_throwing/init.lua b/mods/ITEMS/mcl_throwing/init.lua deleted file mode 100644 index c468946dd..000000000 --- a/mods/ITEMS/mcl_throwing/init.lua +++ /dev/null @@ -1,80 +0,0 @@ -mcl_throwing = {} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - --- --- Snowballs and other throwable items --- - -local GRAVITY = tonumber(minetest.settings:get("movement_gravity")) - -local entity_mapping = {} -local velocities = {} - -function mcl_throwing.register_throwable_object(name, entity, velocity) - entity_mapping[name] = entity - velocities[name] = velocity -end - -function mcl_throwing.throw(throw_item, pos, dir, velocity, thrower) - if velocity == nil then - velocity = velocities[throw_item] - end - if velocity == nil then - velocity = 22 - end - minetest.sound_play("mcl_throwing_throw", {pos=pos, gain=0.4, max_hear_distance=16}, true) - - local itemstring = ItemStack(throw_item):get_name() - local obj = minetest.add_entity(pos, entity_mapping[itemstring]) - obj:set_velocity({x=dir.x*velocity, y=dir.y*velocity, z=dir.z*velocity}) - obj:set_acceleration({x=dir.x*-3, y=-GRAVITY, z=dir.z*-3}) - if thrower then - obj:get_luaentity()._thrower = thrower - end - return obj -end - --- Throw item -function mcl_throwing.get_player_throw_function(entity_name, velocity) - local function func(item, player, pointed_thing) - local playerpos = player:get_pos() - local dir = player:get_look_dir() - mcl_throwing.throw(item, {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, velocity, player:get_player_name()) - if not minetest.is_creative_enabled(player:get_player_name()) then - item:take_item() - end - return item - end - return func -end - -function mcl_throwing.dispense_function(stack, dispenserpos, droppos, dropnode, dropdir) - -- Launch throwable item - local shootpos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51)) - mcl_throwing.throw(stack:get_name(), shootpos, dropdir) -end - --- Staticdata handling because objects may want to be reloaded -function mcl_throwing.get_staticdata(self) - local thrower - -- Only save thrower if it's a player name - if type(self._thrower) == "string" then - thrower = self._thrower - end - local data = { - _lastpos = self._lastpos, - _thrower = thrower, - } - return minetest.serialize(data) -end - -function mcl_throwing.on_activate(self, staticdata, dtime_s) - local data = minetest.deserialize(staticdata) - if data then - self._lastpos = data._lastpos - self._thrower = data._thrower - end -end - -dofile(modpath.."/register.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.de.tr b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.de.tr deleted file mode 100644 index f896c2ed3..000000000 --- a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.de.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_throwing -@1 used the ender pearl too often.=@1 benutzte die Enderperle zu oft. -Use the punch key to throw.=Benutzen Sie die Schlagtaste zum Werfen. -Snowball=Schneeball -Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=Schneebälle können geworfen werden oder zum Spaß aus einem Werfer abgefeuert werden. Bei einem Treffer mit einem Schneeball passiert nichts. -Egg=Ei -Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=Eier können geworfen werden oder aus einem Werfer abgefeuert werden. Sie zerbrechen beim Einschlag. Mit etwas Glück werden aus dem Ei eines oder sogar 4 Küken hinausfallen. -Ender Pearl=Enderperle -An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=Eine Enderperle ist ein Gegenstand, der zur Teleportation benutzt werden kann auf Kosten der Gesundheit. Sie kann geworfen werden und teleportiert den Werfer zur Einschlagsstelle, wenn sie einen Block oder eine Pflanze trifft. Jede Teleportation verletzt den Werfer um 5 Trefferpunkte. -Throwable=Wurfgeschoss -Chance to hatch chicks when broken=Chance, dass beim Aufprall Küken schlüpfen -Teleports you on impact for cost of 5 HP=Teleportiert Sie beim Aufprall, kostet 5 TP diff --git a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.es.tr b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.es.tr deleted file mode 100644 index 35d0bbd61..000000000 --- a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.es.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_throwing -@1 used the ender pearl too often.=@1 usó la perla de ender con demasiada frecuencia. -Use the punch key to throw.=Usa la tecla de golpe para lanzar. -Snowball=Bola de nieve -Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=Las bolas de nieve se pueden lanzar o lanzar desde un dispensador por diversión. Golpear algo con una bola de nieve no hace nada. -Egg=Huevo -Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=Los huevos pueden ser arrojados o lanzados desde un dispensador y se rompen al impactar. Hay una pequeña posibilidad de que 1 o incluso 4 pollitos salgan del huevo. -Ender Pearl=Perla de ender -An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=Una perla ender es un artículo que se puede usar para teletransportarse a costa de la salud. Se puede lanzar y teletransportar al lanzador a su ubicación de impacto cuando golpea un bloque sólido o una planta. Cada teletransportación perjudica al usuario por 5 puntos de daño. diff --git a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.fr.tr b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.fr.tr deleted file mode 100644 index bd78c031e..000000000 --- a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.fr.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_throwing -@1 used the ender pearl too often.=@1 a utilisé la perle ender trop souvent. -Use the punch key to throw.=Utilisez la touche frapper pour lancer. -Snowball=Boule de Neige -Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=Les boules de neige peuvent être lancées ou lancées à partir d'un distributeur pour le plaisir. Toucher quelque chose avec une boule de neige ne fait rien. -Egg=Oeuf -Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=Les œufs peuvent être jetés ou lancés à partir d'un distributeur et se cassent à l'impact. Il y a une petite chance que 1 ou même 4 poussins sortent de l'oeuf. -Ender Pearl=Ender Perle -An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=Une Perle d'Ender est un objet qui peut être utilisé pour la téléportation au détriment de la santé. Il peut être lancé et téléporter le lanceur vers son emplacement d'impact lorsqu'il frappe un bloc solide ou une plante. Chaque téléportation blesse l'utilisateur de 5 points de vie. -Throwable=Jetable -Chance to hatch chicks when broken=Possibilité d'éclosion de poussins lorsqu'ils sont brisés -Teleports you on impact for cost of 5 HP=Vous téléporte sur l'impact pour un coût de 5 PV diff --git a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.pl.tr b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.pl.tr deleted file mode 100644 index e27970424..000000000 --- a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.pl.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_throwing -@1 used the ender pearl too often.=@1 zbyt często używała perły kresu. -Use the punch key to throw.=Użyj przycisku ataku by rzucić. -Snowball=Śnieżka -Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=Śnieżki mogą być rzucone lub wystrzelone z dozownika dla zabawy. Uderzenie czegoś śnieżką niczego nie daje. -Egg=Jajo -Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=Jaja mogą być rzucone lub wystrzelone z dozownika i rozbiją się przy uderzeniu. Jest mała szansa, że 1 lub nawet 4 kurczęta wyskoczą z jaja. -Ender Pearl=Perła kresu -An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=Perła kresu jest przedmiotem, który można wykorzystać do teleportacji kosztem zdrowia. Może być rzucona, a rzucający zostanie przeteleportowany w miejsce gdzie uderzyła ona stały blok lub roślinę. -Throwable=Można rzucać -Chance to hatch chicks when broken=Szansa na wyklucie kurcząt po rozbiciu -Teleports you on impact for cost of 5 HP=Teleportuje przy uderzeniu za 5 HP diff --git a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.ru.tr b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.ru.tr deleted file mode 100644 index 7670f729c..000000000 --- a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.ru.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_throwing -@1 used the ender pearl too often.=@1 использовал(а) жемчужину Предела слишком часто. -Use the punch key to throw.=Используй клавишу удара для броска. -Snowball=Снежок -Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=Снежки можно бросать или запускать из диспенсера для веселья. Попадание снежком в кого-либо ни к чему не приводит. -Egg=Яйцо -Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=Яйца можно бросать или запускать из диспенсера, они ломаются при ударе. Есть небольшой шанс вылупления 1 или даже 4 цыплят из яйца. -Ender Pearl=Жемчужина Предела -An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=Жемчужина Предела это предмет, который можно использовать для телепортации за счёт единиц вашего здоровья. Его можно бросить, и это телепортирует бросившего в место удара, когда он попадает в сплошной блок или растение. Каждая телепортация ранит пользователя на 5 очков здоровья (HP). -Throwable=Можно бросать -Chance to hatch chicks when broken=Шанс вылупления цыплят при разбитии -Teleports you on impact for cost of 5 HP=Телепортирует вас при ударе за счёт 5 HP diff --git a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.zh_TW.tr b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.zh_TW.tr deleted file mode 100644 index 3ee220925..000000000 --- a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.zh_TW.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_throwing -@1 used the ender pearl too often.=@1 扔得太多終界珍珠了。 -Use the punch key to throw.=按下擊打鍵扔出 -Snowball=雪球 -Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=雪球可以被扔出或從發射器中發射出去取樂。用雪球打東西沒有任何作用。 -Egg=蛋 -Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=雞蛋可以被拋出或從發射器中發射出去,並在撞擊中破碎。有機會,1至4個小雞會從蛋裡跳出來。 -Ender Pearl=終界珍珠 -An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=末影珍珠是一種可以在損失生命值的情況下用於傳送的物品。可以將其扔出並將撞到實心塊或植物時將其傳送到其撞擊位置。每次傳送都會傷害使用者5點生命值。 -Throwable=可扔出 -Chance to hatch chicks when broken=破碎時有可能孵化小雞 -Teleports you on impact for cost of 5 HP=損失5點生命值以傳送 diff --git a/mods/ITEMS/mcl_throwing/locale/template.txt b/mods/ITEMS/mcl_throwing/locale/template.txt deleted file mode 100644 index 9bb4a5817..000000000 --- a/mods/ITEMS/mcl_throwing/locale/template.txt +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_throwing -@1 used the ender pearl too often.= -Use the punch key to throw.= -Snowball= -Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.= -Egg= -Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.= -Ender Pearl= -An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.= -Throwable= -Chance to hatch chicks when broken= -Teleports you on impact for cost of 5 HP= diff --git a/mods/ITEMS/mcl_throwing/mod.conf b/mods/ITEMS/mcl_throwing/mod.conf deleted file mode 100644 index 18248e76f..000000000 --- a/mods/ITEMS/mcl_throwing/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_throwing -depends = mcl_colors -optional_depends = mcl_core, mcl_mobitems, doc, mcl_target diff --git a/mods/ITEMS/mcl_throwing/register.lua b/mods/ITEMS/mcl_throwing/register.lua deleted file mode 100644 index 413bc9d5f..000000000 --- a/mods/ITEMS/mcl_throwing/register.lua +++ /dev/null @@ -1,348 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math -local vector = vector - -local mod_target = minetest.get_modpath("mcl_target") - --- The snowball entity -local snowball_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_throwing_snowball.png"}, - visual_size = {x=0.5, y=0.5}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = mcl_throwing.get_staticdata, - on_activate = mcl_throwing.on_activate, - _thrower = nil, - - _lastpos={}, -} - -local egg_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_throwing_egg.png"}, - visual_size = {x=0.45, y=0.45}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = mcl_throwing.get_staticdata, - on_activate = mcl_throwing.on_activate, - _thrower = nil, - - _lastpos={}, -} - --- Ender pearl entity -local pearl_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_throwing_ender_pearl.png"}, - visual_size = {x=0.9, y=0.9}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = mcl_throwing.get_staticdata, - on_activate = mcl_throwing.on_activate, - - _lastpos={}, - _thrower = nil, -- Player ObjectRef of the player who threw the ender pearl -} - -local function check_object_hit(self, pos, dmg) - for _,object in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do - - local entity = object:get_luaentity() - - if entity - and entity.name ~= self.object:get_luaentity().name then - - if object:is_player() and self._thrower ~= object:get_player_name() then - -- TODO: Deal knockback - self.object:remove() - return true - elseif (entity.is_mob == true or entity._hittable_by_projectile) and (self._thrower ~= object) then - -- FIXME: Knockback is broken - object:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = dmg, - }, nil) - return true - end - end - end - return false -end - -local function snowball_particles(pos, vel) - local vel = vector.normalize(vector.multiply(vel, -1)) - minetest.add_particlespawner({ - amount = 20, - time = 0.001, - minpos = pos, - maxpos = pos, - minvel = vector.add({x=-2, y=3, z=-2}, vel), - maxvel = vector.add({x=2, y=5, z=2}, vel), - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 1, - maxexptime = 3, - minsize = 0.7, - maxsize = 0.7, - collisiondetection = true, - collision_removal = true, - object_collision = false, - texture = "weather_pack_snow_snowflake"..math.random(1,2)..".png", - }) -end - --- Snowball on_step()--> called when snowball is moving. -local function snowball_on_step(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:get_pos() - local vel = self.object:get_velocity() - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] - - -- Destroy when hitting a solid node - if self._lastpos.x~=nil then - if (def and def.walkable) or not def then - minetest.sound_play("mcl_throwing_snowball_impact_hard", { pos = pos, max_hear_distance=16, gain=0.7 }, true) - snowball_particles(self._lastpos, vel) - self.object:remove() - if mod_target and node.name == "mcl_target:target_off" then - mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks - end - return - end - end - if check_object_hit(self, pos, {snowball_vulnerable = 3}) then - minetest.sound_play("mcl_throwing_snowball_impact_soft", { pos = pos, max_hear_distance=16, gain=0.7 }, true) - snowball_particles(pos, vel) - self.object:remove() - return - end - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set _lastpos-->Node will be added at last pos outside the node -end - --- Movement function of egg -local function egg_on_step(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] - - -- Destroy when hitting a solid node with chance to spawn chicks - if self._lastpos.x then - if (def and def.walkable) or not def then - -- 1/8 chance to spawn a chick - -- FIXME: Chicks have a quite good chance to spawn in walls - local r = math.random(1,8) - - -- Turn given object into a child - local function make_child(object) - local ent = object:get_luaentity() - object:set_properties({ - visual_size = { x = ent.base_size.x/2, y = ent.base_size.y/2 }, - collisionbox = { - ent.base_colbox[1]/2, - ent.base_colbox[2]/2, - ent.base_colbox[3]/2, - ent.base_colbox[4]/2, - ent.base_colbox[5]/2, - ent.base_colbox[6]/2, - } - }) - ent.child = true - end - if r == 1 then - make_child(minetest.add_entity(self._lastpos, "mobs_mc:chicken")) - - -- BONUS ROUND: 1/32 chance to spawn 3 additional chicks - local r = math.random(1,32) - if r == 1 then - local offsets = { - { x=0.7, y=0, z=0 }, - { x=-0.7, y=0, z=-0.7 }, - { x=-0.7, y=0, z=0.7 }, - } - for o=1, 3 do - local pos = vector.add(self._lastpos, offsets[o]) - make_child(minetest.add_entity(pos, "mobs_mc:chicken")) - end - end - end - minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true) - self.object:remove() - if mod_target and node.name == "mcl_target:target_off" then - mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks - end - return - end - end - - -- Destroy when hitting a mob or player (no chick spawning) - if check_object_hit(self, pos) then - minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true) - self.object:remove() - return - end - - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node -end - --- Movement function of ender pearl -local function pearl_on_step(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:get_pos() - pos.y = math.floor(pos.y) - local node = minetest.get_node(pos) - local nn = node.name - local def = minetest.registered_nodes[node.name] - - -- Destroy when hitting a solid node - if self._lastpos.x~=nil then - local walkable = (def and def.walkable) - - -- No teleport for hitting ignore for now. Otherwise the player could get stuck. - -- FIXME: This also means the player loses an ender pearl for throwing into unloaded areas - if node.name == "ignore" then - self.object:remove() - -- Activate when hitting a solid node or a plant - elseif walkable or nn == "mcl_core:vine" or nn == "mcl_core:deadbush" or minetest.get_item_group(nn, "flower") ~= 0 or minetest.get_item_group(nn, "sapling") ~= 0 or minetest.get_item_group(nn, "plant") ~= 0 or minetest.get_item_group(nn, "mushroom") ~= 0 or not def then - local player = self._thrower and minetest.get_player_by_name(self._thrower) - if player then - -- Teleport and hurt player - - -- First determine good teleport position - local dir = {x=0, y=0, z=0} - - local v = self.object:get_velocity() - if walkable then - local vc = table.copy(v) -- vector for calculating - -- Node is walkable, we have to find a place somewhere outside of that node - vc = vector.normalize(vc) - - -- Zero-out the two axes with a lower absolute value than - -- the axis with the strongest force - local lv, ld - lv, ld = math.abs(vc.y), "y" - if math.abs(vc.x) > lv then - lv, ld = math.abs(vc.x), "x" - end - if math.abs(vc.z) > lv then - ld = "z" --math.abs(vc.z) - end - if ld ~= "x" then vc.x = 0 end - if ld ~= "y" then vc.y = 0 end - if ld ~= "z" then vc.z = 0 end - - -- Final tweaks to the teleporting pos, based on direction - -- Impact from the side - dir.x = vc.x * -1 - dir.z = vc.z * -1 - - -- Special case: top or bottom of node - if vc.y > 0 then - -- We need more space when impact is from below - dir.y = -2.3 - elseif vc.y < 0 then - -- Standing on top - dir.y = 0.5 - end - end - -- If node was not walkable, no modification to pos is made. - - -- Final teleportation position - local telepos = vector.add(pos, dir) - local telenode = minetest.get_node(telepos) - - --[[ It may be possible that telepos is walkable due to the algorithm. - Especially when the ender pearl is faster horizontally than vertical. - This applies final fixing, just to be sure we're not in a walkable node ]] - if not minetest.registered_nodes[telenode.name] or minetest.registered_nodes[telenode.name].walkable then - if v.y < 0 then - telepos.y = telepos.y + 0.5 - else - telepos.y = telepos.y - 2.3 - end - end - - local oldpos = player:get_pos() - -- Teleport and hurt player - player:set_pos(telepos) - player:set_hp(player:get_hp() - 5, { type = "fall", from = "mod" }) - - -- 5% chance to spawn endermite at the player's origin - local r = math.random(1,20) - if r == 1 then - minetest.add_entity(oldpos, "mobs_mc:endermite") - end - - end - self.object:remove() - if mod_target and node.name == "mcl_target:target_off" then - mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks - end - return - end - end - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node -end - -snowball_ENTITY.on_step = snowball_on_step -egg_ENTITY.on_step = egg_on_step -pearl_ENTITY.on_step = pearl_on_step - -minetest.register_entity("mcl_throwing:snowball_entity", snowball_ENTITY) -minetest.register_entity("mcl_throwing:egg_entity", egg_ENTITY) -minetest.register_entity("mcl_throwing:ender_pearl_entity", pearl_ENTITY) - - -local how_to_throw = S("Use the punch key to throw.") - --- Snowball -minetest.register_craftitem("mcl_throwing:snowball", { - description = S("Snowball"), - _tt_help = S("Throwable"), - _doc_items_longdesc = S("Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing."), - _doc_items_usagehelp = how_to_throw, - inventory_image = "mcl_throwing_snowball.png", - stack_max = 16, - groups = { weapon_ranged = 1 }, - on_use = mcl_throwing.get_player_throw_function("mcl_throwing:snowball_entity"), - _on_dispense = mcl_throwing.dispense_function, -}) - --- Egg -minetest.register_craftitem("mcl_throwing:egg", { - description = S("Egg"), - _tt_help = S("Throwable").."\n"..S("Chance to hatch chicks when broken"), - _doc_items_longdesc = S("Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg."), - _doc_items_usagehelp = how_to_throw, - inventory_image = "mcl_throwing_egg.png", - stack_max = 16, - on_use = mcl_throwing.get_player_throw_function("mcl_throwing:egg_entity"), - _on_dispense = mcl_throwing.dispense_function, - groups = { craftitem = 1 }, -}) - --- Ender Pearl -minetest.register_craftitem("mcl_throwing:ender_pearl", { - description = S("Ender Pearl"), - _tt_help = S("Throwable").."\n"..minetest.colorize(mcl_colors.YELLOW, S("Teleports you on impact for cost of 5 HP")), - _doc_items_longdesc = S("An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points."), - _doc_items_usagehelp = how_to_throw, - wield_image = "mcl_throwing_ender_pearl.png", - inventory_image = "mcl_throwing_ender_pearl.png", - stack_max = 16, - on_use = mcl_throwing.get_player_throw_function("mcl_throwing:ender_pearl_entity"), - groups = { transport = 1 }, -}) - -mcl_throwing.register_throwable_object("mcl_throwing:snowball", "mcl_throwing:snowball_entity", 22) -mcl_throwing.register_throwable_object("mcl_throwing:egg", "mcl_throwing:egg_entity", 22) -mcl_throwing.register_throwable_object("mcl_throwing:ender_pearl", "mcl_throwing:ender_pearl_entity", 22) diff --git a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_egg_impact.ogg b/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_egg_impact.ogg deleted file mode 100644 index c4adf57a4..000000000 Binary files a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_egg_impact.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_snowball_impact_hard.ogg b/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_snowball_impact_hard.ogg deleted file mode 100644 index a3e0a00ab..000000000 Binary files a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_snowball_impact_hard.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_snowball_impact_soft.ogg b/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_snowball_impact_soft.ogg deleted file mode 100644 index 260cdb91a..000000000 Binary files a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_snowball_impact_soft.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_throw.ogg b/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_throw.ogg deleted file mode 100644 index acd9c0450..000000000 Binary files a/mods/ITEMS/mcl_throwing/sounds/mcl_throwing_throw.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_throwing/textures/mcl_throwing_egg.png b/mods/ITEMS/mcl_throwing/textures/mcl_throwing_egg.png deleted file mode 100644 index bc2e9fe35..000000000 Binary files a/mods/ITEMS/mcl_throwing/textures/mcl_throwing_egg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_throwing/textures/mcl_throwing_ender_pearl.png b/mods/ITEMS/mcl_throwing/textures/mcl_throwing_ender_pearl.png deleted file mode 100644 index 61e1786d2..000000000 Binary files a/mods/ITEMS/mcl_throwing/textures/mcl_throwing_ender_pearl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_throwing/textures/mcl_throwing_snowball.png b/mods/ITEMS/mcl_throwing/textures/mcl_throwing_snowball.png deleted file mode 100644 index 5fcc76f2f..000000000 Binary files a/mods/ITEMS/mcl_throwing/textures/mcl_throwing_snowball.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tnt/README.txt b/mods/ITEMS/mcl_tnt/README.txt deleted file mode 100644 index 5b1c10798..000000000 --- a/mods/ITEMS/mcl_tnt/README.txt +++ /dev/null @@ -1,19 +0,0 @@ -=== TNT mod for Minetest === -by PilzAdam. HEAVILY modified for MineClone 2. - -Introduction: -This mod adds TNT. TNT is a tool to help the player in mining. - -How to use the mod: -There are different ways to blow up TNT: -1. Hit it with flint and steel. -2. Activate it with redstone circuits -Be aware of the damage radius! - -License of mod code and media: -MIT License - -Sound credits: - -* tnt_explode.ogg: Jose Ortiz 'MindChamber' (CC0) -* tnt_ignite.ogg: Own derivate work of sound by Ned Bouhalassa (CC0) created in 2005, source: diff --git a/mods/ITEMS/mcl_tnt/init.lua b/mods/ITEMS/mcl_tnt/init.lua deleted file mode 100644 index bf7b52385..000000000 --- a/mods/ITEMS/mcl_tnt/init.lua +++ /dev/null @@ -1,202 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local tnt_griefing = minetest.settings:get_bool("mcl_tnt_griefing", true) - -local function spawn_tnt(pos, entname) - minetest.sound_play("tnt_ignite", {pos = pos,gain = 1.0,max_hear_distance = 15,}, true) - local tnt = minetest.add_entity(pos, entname) - tnt:set_armor_groups({immortal=1}) - return tnt -end - -tnt = {} - -function tnt.ignite(pos) - minetest.remove_node(pos) - local e = spawn_tnt(pos, "mcl_tnt:tnt") - minetest.check_for_falling(pos) - return e -end - --- Add smoke particle of entity at pos. --- Intended to be called every step -function tnt.smoke_step(pos) - minetest.add_particle({ - pos = {x=pos.x,y=pos.y+0.5,z=pos.z}, - velocity = vector.new(math.random() * 0.2 - 0.1, 1.0 + math.random(), math.random() * 0.2 - 0.1), - acceleration = vector.new(0, -0.1, 0), - expirationtime = 0.15 + math.random() * 0.25, - size = 1.0 + math.random(), - collisiondetection = false, - texture = "mcl_particles_smoke.png" - }) -end - -tnt.BOOMTIMER = 4 -tnt.BLINKTIMER = 0.25 - -local TNT_RANGE = 3 - -local sounds -if minetest.get_modpath("mcl_sounds") then - sounds = mcl_sounds.node_sound_wood_defaults() -end -local tnt_mesecons -if minetest.get_modpath("mesecons") then - tnt_mesecons = {effector = { - action_on = tnt.ignite, - rules = mesecon.rules.alldirs, - }} -end - -local longdesc -if tnt_griefing then - longdesc = S("An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.", TNT_RANGE) -else - longdesc = S("An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.", TNT_RANGE) -end - -minetest.register_node("mcl_tnt:tnt", { - tiles = {"default_tnt_top.png", "default_tnt_bottom.png", - "default_tnt_side.png", "default_tnt_side.png", - "default_tnt_side.png", "default_tnt_side.png"}, - is_ground_content = false, - stack_max = 64, - description = S("TNT"), - paramtype = "light", - sunlight_propagates = true, - _tt_help = S("Ignited by tools, explosions, fire, lava, redstone power").."\n"..S("Explosion radius: @1", tostring(TNT_RANGE)), - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = S("Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds."), - groups = { dig_immediate = 3, tnt = 1, enderman_takable=1, flammable=-1 }, - mesecons = tnt_mesecons, - on_blast = function(pos) - local e = tnt.ignite(pos) - e:get_luaentity().timer = tnt.BOOMTIMER - (0.5 + math.random()) - end, - _on_ignite = function(player, pointed_thing) - tnt.ignite(pointed_thing.under) - return true - end, - _on_burn = function(pos) - tnt.ignite(pos) - return true - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Place and ignite TNT - if minetest.registered_nodes[dropnode.name].buildable_to then - minetest.set_node(droppos, {name = stack:get_name()}) - tnt.ignite(droppos) - end - end, - sounds = sounds, -}) - -local TNT = { - -- Static definition - physical = true, -- Collides with things - --weight = -100, - collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, - visual = "cube", - textures = {"default_tnt_top.png", "default_tnt_bottom.png", - "default_tnt_side.png", "default_tnt_side.png", - "default_tnt_side.png", "default_tnt_side.png"}, - -- Initial value for our timer - timer = 0, - blinktimer = 0, - tnt_knockback = true, - blinkstatus = true,} - -function TNT:on_activate(staticdata) - local phi = math.random(0, 65535) / 65535 * 2*math.pi - local hdir_x = math.cos(phi) * 0.02 - local hdir_z = math.sin(phi) * 0.02 - self.object:set_velocity({x=hdir_x, y=2, z=hdir_z}) - self.object:set_acceleration({x=0, y=-10, z=0}) - self.object:set_texture_mod("^mcl_tnt_blink.png") -end - ---[[local function add_effects(pos, radius, drops) - minetest.add_particlespawner({ - amount = 64, - time = 0.5, - minpos = vector.subtract(pos, radius / 2), - maxpos = vector.add(pos, radius / 2), - minvel = {x = -10, y = -10, z = -10}, - maxvel = {x = 10, y = 10, z = 10}, - minacc = vector.new(), - maxacc = vector.new(), - minexptime = 1, - maxexptime = 2.5, - minsize = radius * 1, - maxsize = radius * 3, - texture = "mcl_particles_smoke.png", - }) - - -- we just dropped some items. Look at the items entities and pick - -- one of them to use as texture - local texture = "mcl_particles_smoke.png" --fallback texture - local most = 0 - for name, stack in pairs(drops) do - local count = stack:get_count() - if count > most then - most = count - local def = minetest.registered_nodes[name] - if def and def.tiles and def.tiles[1] then - texture = def.tiles[1] - end - end - end - - minetest.add_particlespawner({ - amount = 32, - time = 0.1, - minpos = vector.subtract(pos, radius / 2), - maxpos = vector.add(pos, radius / 2), - minvel = {x = -3, y = 0, z = -3}, - maxvel = {x = 3, y = 5, z = 3}, - minacc = {x = 0, y = -10, z = 0}, - minexptime = 0.8, - maxexptime = 2.0, - minsize = radius * 0.66, - maxsize = radius * 2, - texture = texture, - collisiondetection = true, - }) -end]] - -function TNT:on_step(dtime) - local pos = self.object:get_pos() - tnt.smoke_step(pos) - self.timer = self.timer + dtime - self.blinktimer = self.blinktimer + dtime - if self.blinktimer > tnt.BLINKTIMER then - self.blinktimer = self.blinktimer - tnt.BLINKTIMER - if self.blinkstatus then - self.object:set_texture_mod("") - else - self.object:set_texture_mod("^mcl_tnt_blink.png") - end - self.blinkstatus = not self.blinkstatus - end - if self.timer > tnt.BOOMTIMER then - mcl_explosions.explode(self.object:get_pos(), 4, {}, self.object) - self.object:remove() - end -end - -minetest.register_entity("mcl_tnt:tnt", TNT) - -if minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - output = "mcl_tnt:tnt", - recipe = { - {"mcl_mobitems:gunpowder", "group:sand", "mcl_mobitems:gunpowder"}, - {"group:sand", "mcl_mobitems:gunpowder", "group:sand"}, - {"mcl_mobitems:gunpowder", "group:sand", "mcl_mobitems:gunpowder"} - } - }) -end - -if minetest.get_modpath("doc_identifier") then - doc.sub.identifier.register_object("mcl_tnt:tnt", "nodes", "mcl_tnt:tnt") -end diff --git a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.de.tr b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.de.tr deleted file mode 100644 index 71c99cded..000000000 --- a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_tnt -@1 was caught in an explosion.=@1 wurde Opfer einer Explosion. -TNT=TNT -An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Ein Sprengstoff. Wenn er explodiert, wird er Lebewesen verletzen und Blöcke in der Nähe zerstören. TNT hat einen Explosionsradius von @1. Mit einer geringen Wahrscheinlichkeit werden Blöcke als Gegenstand abfallen (als ob sie abgebaut worden wären), anstatt völlig zerstört zu werden. TNT kann mit Werkzeugen, Explosionen, Feuer, Lava und Redstone-Signalen angezündet werden. -An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Ein Sprengstoff. Wenn er explodiert, wird er Lebewesen verletzen. TNT hat einen Explosionsradius von @1. TNT kann mit Werkzeugen, Explosionen, Feuer, Lava und Redstone-Signalen angezündet werden. -Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.=Platizeren sie das TNT und zünden Sie es mit einer der obigen Methoden an. Begeben Sie sich rasch in eine sichere Entfernung. Das TNT wird anfangen, von der Schwerkraft beeinflusst zu sein und explodiert in 4 Sekunden. -Ignited by tools, explosions, fire, lava, redstone power=Anzündbar von Werkzeugen, Explosionen, Feuer, Redstoneeergie -Explosion radius: @1=Explosionsradius: @1 diff --git a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.es.tr b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.es.tr deleted file mode 100644 index 81d30dcd7..000000000 --- a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.es.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_tnt -@1 was caught in an explosion.=@1 wurde Opfer einer Explosion. -TNT=Dinamita -An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Un artefacto explosivo. Cuando explota, dañará a los seres vivos y destruirá los bloques a su alrededor. La dinamita tiene un radio de explosión de @1. Con una pequeña posibilidad, los bloques pueden caer como un elemento (como si se extrajera) en lugar de ser destruidos. La dinamita puede encenderse con herramientas, explosiones, fuego, lava y señales de redstone. -Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.=Coloque el dinamita y enciéndalo con uno de los métodos anteriores. Aléjese rápidamente a una distancia segura. La dinamita comenzará a verse afectada por la gravedad y explotará en 4 segundos. diff --git a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.fr.tr b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.fr.tr deleted file mode 100644 index b5cba53bf..000000000 --- a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_tnt -@1 was caught in an explosion.=@1 a été pris dans une explosion. -TNT=TNT -An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Un engin explosif. Quand il explose, il blessera les êtres vivants et détruira les blocs autour de lui. La TNT a un rayon d'explosion de @1. Avec une petite chance, les blocs peuvent tomber comme un objet (comme s'ils étaient minés) plutôt que d'être détruits. La TNT peut être enflammée par des outils, des explosions, des feux d'incendie, de la lave et de la redstone. -An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Un engin explosif. Quand elle explose, elle blessera les êtres vivants. La TNT a un rayon d'explosion de @1. La TNT peut être enflammée par des outils, des explosions, des feux d'incendie, de la lave et de la redstone. -Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.=Placez la TNT et allumez-la avec l'une des méthodes ci-dessus. Déplacez-vous rapidement à une distance de sécurité. La TNT commencera à être affecté par la gravité et explose en 4 secondes. -Ignited by tools, explosions, fire, lava, redstone power=Enflammé par les outils, les explosions, le feu, la lave, la redstone -Explosion radius: @1=Rayon d'explosion: @1 diff --git a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr deleted file mode 100644 index 39e520684..000000000 --- a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_tnt -@1 was caught in an explosion.=@1 została wysadzona. -TNT=Trotyl -An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Wybuchowy materiał. Gdy wybucha rani żywe istoty w pobliżu i niszczy pobliskie bloki. Trotyl ma promień wybuchu równy @1. Trotyl może być zapalony narzędziami, eksplozjami, ogniem, lawą i energią z czerwienitu. -An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Materiał wybuchowy Gdy wybucha rani żywe istoty. Trotyl ma promień wybuchu równy @1. Trotyl może być zapalony narzędziami, eksplozjami, ogniem, lawą i energią z czerwienitu. -Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.=Postaw trotyl i zapal go za pomocą metod opisanych powyżej. Szybko oddal się na bezpieczny dystans. Na trotyl zacznie działać grawitacja, a po 4 sekundach wybuchnie. -Ignited by tools, explosions, fire, lava, redstone power=Zapalany przez narzędzia, eksplozję, ogień lawę, energię z czerwienitu -Explosion radius: @1=Promień wybuchu: @1 diff --git a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.ru.tr b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.ru.tr deleted file mode 100644 index 9724c7552..000000000 --- a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.ru.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_tnt -@1 was caught in an explosion.=@1 попал в радиус действия взрыва. -TNT=Тротил -An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Взрывное устройство. Когда оно взрывается, то причиняет вред живым существам и разрушает блоки вокруг себя. Тротил имеет радиус взрыва @1. С небольшой вероятностью блоки могут выпадать в качестве предметов (как при добыче), а не уничтожаться. Тротил может быть подорван инструментами, взрывами, огнём, лавой и сигналами редстоуна. -An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Взрывное устройство. Когда оно взрывается, то причиняет вред живым существам и разрушает блоки вокруг себя. Тротил имеет радиус взрыва @1. Тротил может быть подорван инструментами, взрывами, огнём, лавой и сигналами редстоуна. -Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.=Разместите тротил, зажгите его одним из методов, описанных выше. Отбегите на безопасное расстояние. Тротил начнет подвергаться воздействию силы тяжести и взорвётся через 4 секунды. -Ignited by tools, explosions, fire, lava, redstone power=Зажигается инструментами, взрывами, огнём, лавой, энергией редстоуна -Explosion radius: @1=Радиус взрыва: @1 diff --git a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.zh_TW.tr b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.zh_TW.tr deleted file mode 100644 index aaa4c1e52..000000000 --- a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.zh_TW.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_tnt -@1 was caught in an explosion.=@1被炸飛了。 -TNT= -An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=一個爆炸性裝置。當它爆炸時,會傷害生物,並摧毀周圍的方塊。TNT的爆炸半徑為@1。有很小的機率,方塊可能會作為物品掉落(就像被開採一樣)而不是被摧毀。TNT可以被工具、爆炸、火、熔岩和紅石信號點燃。 -An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=一個爆炸性裝置。當它爆炸時,會傷害生物,並摧毀周圍的方塊。TNT的爆炸半徑為@1。TNT可以被工具、爆炸、火、熔岩和紅石信號點燃。 -Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.=放置TNT,並用上述方法之一點燃它。迅速和TNT保持安全距離。TNT將開始受到重力的影響,並在4秒內爆炸。 -Ignited by tools, explosions, fire, lava, redstone power=被工具、爆炸、火、熔岩和紅石信號點燃。 -Explosion radius: @1=爆炸半徑:@1 diff --git a/mods/ITEMS/mcl_tnt/locale/template.txt b/mods/ITEMS/mcl_tnt/locale/template.txt deleted file mode 100644 index 0361b76bc..000000000 --- a/mods/ITEMS/mcl_tnt/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_tnt -@1 was caught in an explosion.= -TNT= -An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.= -An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.= -Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.= -Ignited by tools, explosions, fire, lava, redstone power= -Explosion radius: @1= diff --git a/mods/ITEMS/mcl_tnt/mod.conf b/mods/ITEMS/mcl_tnt/mod.conf deleted file mode 100644 index 2e90ddb80..000000000 --- a/mods/ITEMS/mcl_tnt/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_tnt -depends = mcl_explosions, mcl_particles -optional_depends = mcl_sounds, mcl_mobitems, doc_identifier, mesecons diff --git a/mods/ITEMS/mcl_tnt/sounds/tnt_explode.ogg b/mods/ITEMS/mcl_tnt/sounds/tnt_explode.ogg deleted file mode 100644 index 1691a41bc..000000000 Binary files a/mods/ITEMS/mcl_tnt/sounds/tnt_explode.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_tnt/sounds/tnt_ignite.ogg b/mods/ITEMS/mcl_tnt/sounds/tnt_ignite.ogg deleted file mode 100644 index aa232f0de..000000000 Binary files a/mods/ITEMS/mcl_tnt/sounds/tnt_ignite.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_tnt/textures/default_tnt_bottom.png b/mods/ITEMS/mcl_tnt/textures/default_tnt_bottom.png deleted file mode 100644 index 61b911be9..000000000 Binary files a/mods/ITEMS/mcl_tnt/textures/default_tnt_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tnt/textures/default_tnt_side.png b/mods/ITEMS/mcl_tnt/textures/default_tnt_side.png deleted file mode 100644 index 8eda266e6..000000000 Binary files a/mods/ITEMS/mcl_tnt/textures/default_tnt_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tnt/textures/default_tnt_top.png b/mods/ITEMS/mcl_tnt/textures/default_tnt_top.png deleted file mode 100644 index b8f8d39a6..000000000 Binary files a/mods/ITEMS/mcl_tnt/textures/default_tnt_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tnt/textures/mcl_tnt_blink.png b/mods/ITEMS/mcl_tnt/textures/mcl_tnt_blink.png deleted file mode 100644 index b6739757d..000000000 Binary files a/mods/ITEMS/mcl_tnt/textures/mcl_tnt_blink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/README.md b/mods/ITEMS/mcl_tools/README.md deleted file mode 100644 index 8089da923..000000000 --- a/mods/ITEMS/mcl_tools/README.md +++ /dev/null @@ -1,10 +0,0 @@ -This mod adds tools for MineClone 2. - -## Credits - -* `default_shears_cut.ogg:` - * Author: SmartWentCody (CC BY 3.0) - * Source: - -Other files: -See main MineClone 2 README. diff --git a/mods/ITEMS/mcl_tools/aliases.lua b/mods/ITEMS/mcl_tools/aliases.lua deleted file mode 100644 index 7aadabc15..000000000 --- a/mods/ITEMS/mcl_tools/aliases.lua +++ /dev/null @@ -1,21 +0,0 @@ -minetest.register_alias("mcl_core:pick_wood", "mcl_tools:pick_wood") -minetest.register_alias("mcl_core:pick_stone", "mcl_tools:pick_stone") -minetest.register_alias("mcl_core:pick_iron", "mcl_tools:pick_iron") -minetest.register_alias("mcl_core:pick_gold", "mcl_tools:pick_gold") -minetest.register_alias("mcl_core:pick_diamond", "mcl_tools:pick_diamond") -minetest.register_alias("mcl_core:shovel_wood", "mcl_tools:shovel_wood") -minetest.register_alias("mcl_core:shovel_stone", "mcl_tools:shovel_stone") -minetest.register_alias("mcl_core:shovel_iron", "mcl_tools:shovel_iron") -minetest.register_alias("mcl_core:shovel_gold", "mcl_tools:shovel_gold") -minetest.register_alias("mcl_core:shovel_diamond", "mcl_tools:shovel_diamond") -minetest.register_alias("mcl_core:axe_wood", "mcl_tools:axe_wood") -minetest.register_alias("mcl_core:axe_stone", "mcl_tools:axe_stone") -minetest.register_alias("mcl_core:axe_iron", "mcl_tools:axe_iron") -minetest.register_alias("mcl_core:axe_gold", "mcl_tools:axe_gold") -minetest.register_alias("mcl_core:axe_diamond", "mcl_tools:axe_diamond") -minetest.register_alias("mcl_core:sword_wood", "mcl_tools:sword_wood") -minetest.register_alias("mcl_core:sword_stone", "mcl_tools:sword_stone") -minetest.register_alias("mcl_core:sword_iron", "mcl_tools:sword_iron") -minetest.register_alias("mcl_core:sword_gold", "mcl_tools:sword_gold") -minetest.register_alias("mcl_core:sword_diamond", "mcl_tools:sword_diamond") -minetest.register_alias("mcl_core:shears", "mcl_tools:shears") diff --git a/mods/ITEMS/mcl_tools/crafting.lua b/mods/ITEMS/mcl_tools/crafting.lua deleted file mode 100644 index 07032b184..000000000 --- a/mods/ITEMS/mcl_tools/crafting.lua +++ /dev/null @@ -1,338 +0,0 @@ -minetest.register_craft({ - output = "mcl_tools:pick_wood", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"", "mcl_core:stick", ""}, - {"", "mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:pick_stone", - recipe = { - {"group:cobble", "group:cobble", "group:cobble"}, - {"", "mcl_core:stick", ""}, - {"", "mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:pick_iron", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"", "mcl_core:stick", ""}, - {"", "mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:pick_gold", - recipe = { - {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"", "mcl_core:stick", ""}, - {"", "mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:pick_diamond", - recipe = { - {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, - {"", "mcl_core:stick", ""}, - {"", "mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:shovel_wood", - recipe = { - {"group:wood"}, - {"mcl_core:stick"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:shovel_stone", - recipe = { - {"group:cobble"}, - {"mcl_core:stick"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:shovel_iron", - recipe = { - {"mcl_core:iron_ingot"}, - {"mcl_core:stick"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:shovel_gold", - recipe = { - {"mcl_core:gold_ingot"}, - {"mcl_core:stick"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:shovel_diamond", - recipe = { - {"mcl_core:diamond"}, - {"mcl_core:stick"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:axe_wood", - recipe = { - {"group:wood", "group:wood"}, - {"group:wood", "mcl_core:stick"}, - {"", "mcl_core:stick"}, - } -}) -minetest.register_craft({ - output = "mcl_tools:axe_wood", - recipe = { - {"group:wood", "group:wood"}, - {"mcl_core:stick", "group:wood"}, - {"mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:axe_stone", - recipe = { - {"group:cobble", "group:cobble"}, - {"group:cobble", "mcl_core:stick"}, - {"", "mcl_core:stick"}, - } -}) -minetest.register_craft({ - output = "mcl_tools:axe_stone", - recipe = { - {"group:cobble", "group:cobble"}, - {"mcl_core:stick", "group:cobble"}, - {"mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:axe_iron", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:stick"}, - {"", "mcl_core:stick"}, - } -}) -minetest.register_craft({ - output = "mcl_tools:axe_iron", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:stick", "mcl_core:iron_ingot"}, - {"mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:axe_gold", - recipe = { - {"mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mcl_core:stick"}, - {"", "mcl_core:stick"}, - } -}) -minetest.register_craft({ - output = "mcl_tools:axe_gold", - recipe = { - {"mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"mcl_core:stick", "mcl_core:gold_ingot"}, - {"mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:axe_diamond", - recipe = { - {"mcl_core:diamond", "mcl_core:diamond"}, - {"mcl_core:diamond", "mcl_core:stick"}, - {"", "mcl_core:stick"}, - } -}) -minetest.register_craft({ - output = "mcl_tools:axe_diamond", - recipe = { - {"mcl_core:diamond", "mcl_core:diamond"}, - {"mcl_core:stick", "mcl_core:diamond"}, - {"mcl_core:stick", ""}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:sword_wood", - recipe = { - {"group:wood"}, - {"group:wood"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:sword_stone", - recipe = { - {"group:cobble"}, - {"group:cobble"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:sword_iron", - recipe = { - {"mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:sword_gold", - recipe = { - {"mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:sword_diamond", - recipe = { - {"mcl_core:diamond"}, - {"mcl_core:diamond"}, - {"mcl_core:stick"}, - } -}) - -minetest.register_craft({ - output = "mcl_tools:shears", - recipe = { - { "mcl_core:iron_ingot", "" }, - { "", "mcl_core:iron_ingot", }, - } -}) -minetest.register_craft({ - output = "mcl_tools:shears", - recipe = { - { "", "mcl_core:iron_ingot" }, - { "mcl_core:iron_ingot", "" }, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:pick_wood", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:shovel_wood", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:sword_wood", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:axe_wood", - burntime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_nugget", - recipe = "mcl_tools:sword_gold", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_nugget", - recipe = "mcl_tools:axe_gold", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_nugget", - recipe = "mcl_tools:shovel_gold", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:gold_nugget", - recipe = "mcl_tools:pick_gold", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:iron_nugget", - recipe = "mcl_tools:sword_iron", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:iron_nugget", - recipe = "mcl_tools:axe_iron", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:iron_nugget", - recipe = "mcl_tools:shovel_iron", - cooktime = 10, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_core:iron_nugget", - recipe = "mcl_tools:pick_iron", - cooktime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:pick_wood", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:shovel_wood", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:sword_wood", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_tools:axe_wood", - burntime = 10, -}) diff --git a/mods/ITEMS/mcl_tools/init.lua b/mods/ITEMS/mcl_tools/init.lua deleted file mode 100644 index cbee8e3d0..000000000 --- a/mods/ITEMS/mcl_tools/init.lua +++ /dev/null @@ -1,616 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - --- mods/default/tools.lua - --- --- Tool definition --- - ---[[ -dig_speed_class group: -- 1: Painfully slow -- 2: Very slow -- 3: Slow -- 4: Fast -- 5: Very fast -- 6: Extremely fast -- 7: Instantaneous -]] - --- The hand -local groupcaps, hand_range, hand_groups - -if minetest.is_creative_enabled("") then - -- Instant breaking in creative mode - groupcaps = { creative_breakable = { times = {0}, uses = 0 } } - hand_range = 10 - hand_groups = { dig_speed_class = 7 } -else - groupcaps = {} - hand_range = 4 - hand_groups = { dig_speed_class = 1 } -end -minetest.register_tool(":", { - type = "none", - _doc_items_longdesc = S("You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.").."\n".. - S("When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.").."\n".. - S("In Creative Mode, the hand is able to break all blocks instantly."), - wield_image = "blank.png", - wield_scale = {x=1.0,y=1.0,z=2.0}, - -- According to Minecraft Wiki, the exact range is 3.975. - -- Minetest seems to only support whole numbers, so we use 4. - range = hand_range, - tool_capabilities = { - full_punch_interval = 0.25, - max_drop_level = 0, - groupcaps = groupcaps, - damage_groups = {fleshy=1}, - }, - groups = hand_groups, - _mcl_diggroups = { - handy = { speed = 1, level = 1, uses = 0 }, - axey = { speed = 1, level = 1, uses = 0 }, - shovely = { speed = 1, level = 1, uses = 0 }, - hoey = { speed = 1, level = 1, uses = 0 }, - pickaxey = { speed = 1, level = 0, uses = 0 }, - swordy = { speed = 1, level = 0, uses = 0 }, - swordy_cobweb = { speed = 1, level = 0, uses = 0 }, - shearsy = { speed = 1, level = 0, uses = 0 }, - shearsy_wool = { speed = 1, level = 0, uses = 0 }, - shearsy_cobweb = { speed = 1, level = 0, uses = 0 }, - } -}) - --- Help texts -local pickaxe_longdesc = S("Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.") -local axe_longdesc = S("An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.") -local sword_longdesc = S("Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.") -local shovel_longdesc = S("Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.") -local shovel_use = S("To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.") -local shears_longdesc = S("Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.") -local shears_use = S("To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.") - -local wield_scale = mcl_vars.tool_wield_scale - --- Picks -minetest.register_tool("mcl_tools:pick_wood", { - description = S("Wooden Pickaxe"), - _doc_items_longdesc = pickaxe_longdesc, - _doc_items_hidden = false, - inventory_image = "default_tool_woodpick.png", - wield_scale = wield_scale, - groups = { tool=1, pickaxe=1, dig_speed_class=2, enchantability=15 }, - tool_capabilities = { - -- 1/1.2 - full_punch_interval = 0.83333333, - max_drop_level=1, - damage_groups = {fleshy=2}, - punch_attack_uses = 30, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:wood", - _mcl_toollike_wield = true, - _mcl_diggroups = { - pickaxey = { speed = 2, level = 1, uses = 60 } - }, -}) -minetest.register_tool("mcl_tools:pick_stone", { - description = S("Stone Pickaxe"), - _doc_items_longdesc = pickaxe_longdesc, - inventory_image = "default_tool_stonepick.png", - wield_scale = wield_scale, - groups = { tool=1, pickaxe=1, dig_speed_class=3, enchantability=5 }, - tool_capabilities = { - -- 1/1.2 - full_punch_interval = 0.83333333, - max_drop_level=3, - damage_groups = {fleshy=3}, - punch_attack_uses = 66, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:cobble", - _mcl_toollike_wield = true, - _mcl_diggroups = { - pickaxey = { speed = 4, level = 3, uses = 132 } - }, -}) -minetest.register_tool("mcl_tools:pick_iron", { - description = S("Iron Pickaxe"), - _doc_items_longdesc = pickaxe_longdesc, - inventory_image = "default_tool_steelpick.png", - wield_scale = wield_scale, - groups = { tool=1, pickaxe=1, dig_speed_class=4, enchantability=14 }, - tool_capabilities = { - -- 1/1.2 - full_punch_interval = 0.83333333, - max_drop_level=4, - damage_groups = {fleshy=4}, - punch_attack_uses = 126, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:iron_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - pickaxey = { speed = 6, level = 4, uses = 251 } - }, -}) -minetest.register_tool("mcl_tools:pick_gold", { - description = S("Golden Pickaxe"), - _doc_items_longdesc = pickaxe_longdesc, - inventory_image = "default_tool_goldpick.png", - wield_scale = wield_scale, - groups = { tool=1, pickaxe=1, dig_speed_class=6, enchantability=22 }, - tool_capabilities = { - -- 1/1.2 - full_punch_interval = 0.83333333, - max_drop_level=2, - damage_groups = {fleshy=2}, - punch_attack_uses = 17, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:gold_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - pickaxey = { speed = 12, level = 2, uses = 33 } - }, -}) -minetest.register_tool("mcl_tools:pick_diamond", { - description = S("Diamond Pickaxe"), - _doc_items_longdesc = pickaxe_longdesc, - inventory_image = "default_tool_diamondpick.png", - wield_scale = wield_scale, - groups = { tool=1, pickaxe=1, dig_speed_class=5, enchantability=10 }, - tool_capabilities = { - -- 1/1.2 - full_punch_interval = 0.83333333, - max_drop_level=5, - damage_groups = {fleshy=5}, - punch_attack_uses = 781, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:diamond", - _mcl_toollike_wield = true, - _mcl_diggroups = { - pickaxey = { speed = 8, level = 5, uses = 1562 } - }, -}) - -local function make_grass_path(itemstack, placer, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - -- Only make grass path if tool used on side or top of target node - if pointed_thing.above.y < pointed_thing.under.y then - return itemstack - end - - if (minetest.get_item_group(node.name, "path_creation_possible") == 1) then - local above = table.copy(pointed_thing.under) - above.y = above.y + 1 - if minetest.get_node(above).name == "air" then - if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then - minetest.record_protection_violation(pointed_thing.under, placer:get_player_name()) - return itemstack - end - - if not minetest.is_creative_enabled(placer:get_player_name()) then - -- Add wear (as if digging a shovely node) - local toolname = itemstack:get_name() - local wear = mcl_autogroup.get_wear(toolname, "shovely") - itemstack:add_wear(wear) - end - minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true) - minetest.swap_node(pointed_thing.under, {name="mcl_core:grass_path"}) - end - end - return itemstack -end - -local carve_pumpkin -if minetest.get_modpath("mcl_farming") then - function carve_pumpkin(itemstack, placer, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - -- Only carve pumpkin if used on side - if pointed_thing.above.y ~= pointed_thing.under.y then - return - end - if node.name == "mcl_farming:pumpkin" then - if not minetest.is_creative_enabled(placer:get_player_name()) then - -- Add wear (as if digging a shearsy node) - local toolname = itemstack:get_name() - local wear = mcl_autogroup.get_wear(toolname, "shearsy") - itemstack:add_wear(wear) - end - minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pointed_thing.above}, true) - local dir = vector.subtract(pointed_thing.under, pointed_thing.above) - local param2 = minetest.dir_to_facedir(dir) - minetest.set_node(pointed_thing.under, {name="mcl_farming:pumpkin_face", param2 = param2}) - minetest.add_item(pointed_thing.above, "mcl_farming:pumpkin_seeds 4") - end - return itemstack - end -end - --- Shovels -minetest.register_tool("mcl_tools:shovel_wood", { - description = S("Wooden Shovel"), - _doc_items_longdesc = shovel_longdesc, - _doc_items_usagehelp = shovel_use, - _doc_items_hidden = false, - inventory_image = "default_tool_woodshovel.png", - wield_scale = wield_scale, - groups = { tool=1, shovel=1, dig_speed_class=2, enchantability=15 }, - tool_capabilities = { - full_punch_interval = 1, - max_drop_level=1, - damage_groups = {fleshy=2}, - punch_attack_uses = 30, - }, - on_place = make_grass_path, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:wood", - _mcl_toollike_wield = true, - _mcl_diggroups = { - shovely = { speed = 2, level = 1, uses = 60 } - }, -}) -minetest.register_tool("mcl_tools:shovel_stone", { - description = S("Stone Shovel"), - _doc_items_longdesc = shovel_longdesc, - _doc_items_usagehelp = shovel_use, - inventory_image = "default_tool_stoneshovel.png", - wield_scale = wield_scale, - groups = { tool=1, shovel=1, dig_speed_class=3, enchantability=5 }, - tool_capabilities = { - full_punch_interval = 1, - max_drop_level=3, - damage_groups = {fleshy=3}, - punch_attack_uses = 66, - }, - on_place = make_grass_path, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:cobble", - _mcl_toollike_wield = true, - _mcl_diggroups = { - shovely = { speed = 4, level = 3, uses = 132 } - }, -}) -minetest.register_tool("mcl_tools:shovel_iron", { - description = S("Iron Shovel"), - _doc_items_longdesc = shovel_longdesc, - _doc_items_usagehelp = shovel_use, - inventory_image = "default_tool_steelshovel.png", - wield_scale = wield_scale, - groups = { tool=1, shovel=1, dig_speed_class=4, enchantability=14 }, - tool_capabilities = { - full_punch_interval = 1, - max_drop_level=4, - damage_groups = {fleshy=4}, - punch_attack_uses = 126, - }, - on_place = make_grass_path, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:iron_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - shovely = { speed = 6, level = 4, uses = 251 } - }, -}) -minetest.register_tool("mcl_tools:shovel_gold", { - description = S("Golden Shovel"), - _doc_items_longdesc = shovel_longdesc, - _doc_items_usagehelp = shovel_use, - inventory_image = "default_tool_goldshovel.png", - wield_scale = wield_scale, - groups = { tool=1, shovel=1, dig_speed_class=6, enchantability=22 }, - tool_capabilities = { - full_punch_interval = 1, - max_drop_level=2, - damage_groups = {fleshy=2}, - punch_attack_uses = 17, - }, - on_place = make_grass_path, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:gold_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - shovely = { speed = 12, level = 2, uses = 33 } - }, -}) -minetest.register_tool("mcl_tools:shovel_diamond", { - description = S("Diamond Shovel"), - _doc_items_longdesc = shovel_longdesc, - _doc_items_usagehelp = shovel_use, - inventory_image = "default_tool_diamondshovel.png", - wield_scale = wield_scale, - groups = { tool=1, shovel=1, dig_speed_class=5, enchantability=10 }, - tool_capabilities = { - full_punch_interval = 1, - max_drop_level=5, - damage_groups = {fleshy=5}, - punch_attack_uses = 781, - }, - on_place = make_grass_path, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:diamond", - _mcl_toollike_wield = true, - _mcl_diggroups = { - shovely = { speed = 8, level = 5, uses = 1562 } - }, -}) - --- Axes -local function make_stripped_trunk(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then return end - - local node = minetest.get_node(pointed_thing.under) - local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] - - if not placer:get_player_control().sneak and noddef.on_rightclick then - return minetest.item_place(itemstack, placer, pointed_thing) - end - if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then - minetest.record_protection_violation(pointed_thing.under, placer:get_player_name()) - return itemstack - end - - if noddef._mcl_stripped_variant == nil then - return itemstack - else - minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2}) - if not minetest.is_creative_enabled(placer:get_player_name()) then - -- Add wear (as if digging a axey node) - local toolname = itemstack:get_name() - local wear = mcl_autogroup.get_wear(toolname, "axey") - itemstack:add_wear(wear) - end - end - return itemstack -end - -minetest.register_tool("mcl_tools:axe_wood", { - description = S("Wooden Axe"), - _doc_items_longdesc = axe_longdesc, - _doc_items_hidden = false, - inventory_image = "default_tool_woodaxe.png", - wield_scale = wield_scale, - groups = { tool=1, axe=1, dig_speed_class=2, enchantability=15 }, - tool_capabilities = { - full_punch_interval = 1.25, - max_drop_level=1, - damage_groups = {fleshy=7}, - punch_attack_uses = 30, - }, - on_place = make_stripped_trunk, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:wood", - _mcl_toollike_wield = true, - _mcl_diggroups = { - axey = { speed = 2, level = 1, uses = 60 } - }, -}) -minetest.register_tool("mcl_tools:axe_stone", { - description = S("Stone Axe"), - _doc_items_longdesc = axe_longdesc, - inventory_image = "default_tool_stoneaxe.png", - wield_scale = wield_scale, - groups = { tool=1, axe=1, dig_speed_class=3, enchantability=5 }, - tool_capabilities = { - full_punch_interval = 1.25, - max_drop_level=3, - damage_groups = {fleshy=9}, - punch_attack_uses = 66, - }, - on_place = make_stripped_trunk, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:cobble", - _mcl_toollike_wield = true, - _mcl_diggroups = { - axey = { speed = 4, level = 3, uses = 132 } - }, -}) -minetest.register_tool("mcl_tools:axe_iron", { - description = S("Iron Axe"), - _doc_items_longdesc = axe_longdesc, - inventory_image = "default_tool_steelaxe.png", - wield_scale = wield_scale, - groups = { tool=1, axe=1, dig_speed_class=4, enchantability=14 }, - tool_capabilities = { - -- 1/0.9 - full_punch_interval = 1.11111111, - max_drop_level=4, - damage_groups = {fleshy=9}, - punch_attack_uses = 126, - }, - on_place = make_stripped_trunk, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:iron_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - axey = { speed = 6, level = 4, uses = 251 } - }, -}) -minetest.register_tool("mcl_tools:axe_gold", { - description = S("Golden Axe"), - _doc_items_longdesc = axe_longdesc, - inventory_image = "default_tool_goldaxe.png", - wield_scale = wield_scale, - groups = { tool=1, axe=1, dig_speed_class=6, enchantability=22 }, - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=2, - damage_groups = {fleshy=7}, - punch_attack_uses = 17, - }, - on_place = make_stripped_trunk, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:gold_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - axey = { speed = 12, level = 2, uses = 33 } - }, -}) -minetest.register_tool("mcl_tools:axe_diamond", { - description = S("Diamond Axe"), - _doc_items_longdesc = axe_longdesc, - inventory_image = "default_tool_diamondaxe.png", - wield_scale = wield_scale, - groups = { tool=1, axe=1, dig_speed_class=5, enchantability=10 }, - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=5, - damage_groups = {fleshy=9}, - punch_attack_uses = 781, - }, - on_place = make_stripped_trunk, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:diamond", - _mcl_toollike_wield = true, - _mcl_diggroups = { - axey = { speed = 8, level = 5, uses = 1562 } - }, -}) - --- Swords -minetest.register_tool("mcl_tools:sword_wood", { - description = S("Wooden Sword"), - _doc_items_longdesc = sword_longdesc, - _doc_items_hidden = false, - inventory_image = "default_tool_woodsword.png", - wield_scale = wield_scale, - groups = { weapon=1, sword=1, dig_speed_class=2, enchantability=15 }, - tool_capabilities = { - full_punch_interval = 0.625, - max_drop_level=1, - damage_groups = {fleshy=4}, - punch_attack_uses = 60, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:wood", - _mcl_toollike_wield = true, - _mcl_diggroups = { - swordy = { speed = 2, level = 1, uses = 60 }, - swordy_cobweb = { speed = 2, level = 1, uses = 60 } - }, -}) -minetest.register_tool("mcl_tools:sword_stone", { - description = S("Stone Sword"), - _doc_items_longdesc = sword_longdesc, - inventory_image = "default_tool_stonesword.png", - wield_scale = wield_scale, - groups = { weapon=1, sword=1, dig_speed_class=3, enchantability=5 }, - tool_capabilities = { - full_punch_interval = 0.625, - max_drop_level=3, - damage_groups = {fleshy=5}, - punch_attack_uses = 132, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "group:cobble", - _mcl_toollike_wield = true, - _mcl_diggroups = { - swordy = { speed = 4, level = 3, uses = 132 }, - swordy_cobweb = { speed = 4, level = 3, uses = 132 } - }, -}) -minetest.register_tool("mcl_tools:sword_iron", { - description = S("Iron Sword"), - _doc_items_longdesc = sword_longdesc, - inventory_image = "default_tool_steelsword.png", - wield_scale = wield_scale, - groups = { weapon=1, sword=1, dig_speed_class=4, enchantability=14 }, - tool_capabilities = { - full_punch_interval = 0.625, - max_drop_level=4, - damage_groups = {fleshy=6}, - punch_attack_uses = 251, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:iron_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - swordy = { speed = 6, level = 4, uses = 251 }, - swordy_cobweb = { speed = 6, level = 4, uses = 251 } - }, -}) -minetest.register_tool("mcl_tools:sword_gold", { - description = S("Golden Sword"), - _doc_items_longdesc = sword_longdesc, - inventory_image = "default_tool_goldsword.png", - wield_scale = wield_scale, - groups = { weapon=1, sword=1, dig_speed_class=6, enchantability=22 }, - tool_capabilities = { - full_punch_interval = 0.625, - max_drop_level=2, - damage_groups = {fleshy=4}, - punch_attack_uses = 33, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:gold_ingot", - _mcl_toollike_wield = true, - _mcl_diggroups = { - swordy = { speed = 12, level = 2, uses = 33 }, - swordy_cobweb = { speed = 12, level = 2, uses = 33 } - }, -}) -minetest.register_tool("mcl_tools:sword_diamond", { - description = S("Diamond Sword"), - _doc_items_longdesc = sword_longdesc, - inventory_image = "default_tool_diamondsword.png", - wield_scale = wield_scale, - groups = { weapon=1, sword=1, dig_speed_class=5, enchantability=10 }, - tool_capabilities = { - full_punch_interval = 0.625, - max_drop_level=5, - damage_groups = {fleshy=7}, - punch_attack_uses = 1562, - }, - sound = { breaks = "default_tool_breaks" }, - _repair_material = "mcl_core:diamond", - _mcl_toollike_wield = true, - _mcl_diggroups = { - swordy = { speed = 8, level = 5, uses = 1562 }, - swordy_cobweb = { speed = 8, level = 5, uses = 1562 } - }, -}) - ---Shears -minetest.register_tool("mcl_tools:shears", { - description = S("Shears"), - _doc_items_longdesc = shears_longdesc, - _doc_items_usagehelp = shears_use, - inventory_image = "default_tool_shears.png", - wield_image = "default_tool_shears.png", - stack_max = 1, - groups = { tool=1, shears=1, dig_speed_class=4, }, - tool_capabilities = { - full_punch_interval = 0.5, - max_drop_level=1, - }, - on_place = carve_pumpkin, - sound = { breaks = "default_tool_breaks" }, - _mcl_toollike_wield = true, - _mcl_diggroups = { - shearsy = { speed = 1.5, level = 1, uses = 238 }, - shearsy_wool = { speed = 5, level = 1, uses = 238 }, - shearsy_cobweb = { speed = 15, level = 1, uses = 238 } - }, -}) - - -dofile(modpath.."/crafting.lua") -dofile(modpath.."/aliases.lua") diff --git a/mods/ITEMS/mcl_tools/locale/mcl_tools.de.tr b/mods/ITEMS/mcl_tools/locale/mcl_tools.de.tr deleted file mode 100644 index 6c061dd00..000000000 --- a/mods/ITEMS/mcl_tools/locale/mcl_tools.de.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_tools -You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.=Sie benutzen Ihre nackte Hand, wenn Sie keinen Gegenstand halten. Mit Ihrer Hand können Sie die meisten Blöcke abbauen, aber dies ist die langsamste Methode und nur aus den schwächsten Blöcken werden ihre brauchbaren Gegenstände hinausfallen. Die Hand richtet auch geringfügigen Schaden mit Schlägen an. Die Hand ist oft die letzte Wahl, da richtige Grabewerkzeuge und Waffen viel besser sind. -When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.=Wenn Sie einen Gegenstand tragen, der kein Grabewerkzeug oder eine Waffe ist, wird sie sich verhalten, als ob Sie die Hand benutzen würden, wenn Sie etwas abbauen oder schlagen. -In Creative Mode, the hand is able to break all blocks instantly.=Im Kreativmodus kann die Hand alle Blöcke sofort zerstören. -Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.=Spitzhacken sind Grabewerkzeuge, um harte Blöcke wie Stein abzubauen. Eine Spitzhacke kann auch als Waffe benutzt werden, aber das ist recht ineffizient. -An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.=Eine Axt ist das Werkzeug zum Abbauen von Bäumen, holzbasieren Blöcken und anderen Blöcken. Äxte richten auch viel Schaden an, aber sie sind ziemlich langsam. -Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.=Schwerter sind großartig im Nahkampf, da sie schnell sind, hohen Schaden anrichten und viele Schlachten schlagen können. Schwerter können auch benutzt werden, um bestimmte Blöcke abzuschneiden, so wie Spinnenweben. -Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.=Schaufeln sind Werkzeuge zum Ausgraben von groben Blöcken, wie Erde, Sand und Kies. Sie können auch benutzt werden, um Grasblöcke zu Graspfaden zu verwandeln. Schaufeln können als Waffen benutzt werden, aber sie sind sehr schwach. -To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.=Um einen Grasblock in einen Graspfad zu verwandeln, benutzen Sie sie auf der Oberseite oder einer Seite eines Grasblocks. Das funktioniert nur, wenn sich Luft über dem Grasblock befindet. -Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.=Eine Schere ist ein Werkzeug, um Schafe zu scheren und ein paar Blocktypen abzubauen. Sie ist ein besonderes Grabewerkzeug, das benutzt werden kann, um den ursprünglichen Gegenstand von Gras, Blättern und ähnlichen Blöcken, die abgeschnitten werden müssen, zu erhalten. -To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.=Um Schafe zu scheren oder gesichtslose Kürbisse zu schnitzen, benutzen Sie die „Platzieren“-Taste auf ihnen. Gesichter können nur an der Seite von gesichtslosen Kürbissen eingeschnitzt werden. Das Abbauen funktioniert wie bei anderen Werkzeugen, nur, dass die Abwürfe für ein paar Blöcke anders sind. -Wooden Pickaxe=Holzspitzhacke -Stone Pickaxe=Steinspitzhacke -Iron Pickaxe=Eisenspitzhacke -Golden Pickaxe=Goldspitzhacke -Diamond Pickaxe=Diamantspitzhacke -Wooden Shovel=Holzschaufel -Stone Shovel=Steinschaufel -Iron Shovel=Eisenschaufel -Golden Shovel=Goldschaufel -Diamond Shovel=Diamantschaufel -Wooden Axe=Holzaxt -Stone Axe=Steinaxt -Iron Axe=Eisenaxt -Golden Axe=Goldaxt -Diamond Axe=Diamantaxt -Wooden Sword=Holzschwert -Stone Sword=Steinschwert -Iron Sword=Eisenschwert -Golden Sword=Goldschwert -Diamond Sword=Diamantschwert -Shears=Schere diff --git a/mods/ITEMS/mcl_tools/locale/mcl_tools.es.tr b/mods/ITEMS/mcl_tools/locale/mcl_tools.es.tr deleted file mode 100644 index 40b1d709b..000000000 --- a/mods/ITEMS/mcl_tools/locale/mcl_tools.es.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_tools -You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.=Utiliza tu mano desnuda siempre que no estés empuñando ningún objeto. Con tu mano puedes extraer la mayoría de los bloques, pero este es el método más lento y solo los bloques más débiles producirán su caída útil. La mano también causa daños menores al golpear. El uso de la mano es a menudo un último recurso, ya que las herramientas y armas de minería adecuadas son mucho mejores. -When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.=Cuando empuñas un objeto que no es una herramienta de minería o un arma, se comportará como si fuera la mano cuando comiences a minar o golpear. -In Creative Mode, the hand is able to break all blocks instantly.=En el modo creativo, la mano puede romper todos los bloques al instante. -Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.=Los picos son herramientas de minería para extraer bloques duros, como la piedra. Un pico también se puede usar como arma, pero es bastante ineficiente. -An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.=Un hacha es su herramienta de elección para cortar árboles, bloques a base de madera y otros bloques. Las hachas también causan mucho daño, pero son bastante lentas. -Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.=Las espadas son excelentes en el combate cuerpo a cuerpo, ya que son rápidas, infligen mucho daño y pueden soportar innumerables batallas. Las espadas también se pueden usar para cortar algunos bloques en particular, como telarañas. -Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.=Las palas son herramientas para cavar bloques gruesos, como tierra, arena y grava. También se pueden usar para convertir bloques de hierba en senderos de hierba. Las palas pueden usarse como armas, pero son muy débiles. -To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.=Para convertir un bloque de hierba en un camino de hierba, sostenga la pala con la mano y luego use (clic derecho) en la parte superior o lateral de un bloque de hierba. Esto solo funciona cuando hay aire sobre el bloque de hierba. -Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.=Las tijeras son herramientas para esquilar ovejas y extraer algunos tipos de bloques. Las tijeras son una herramienta de minería especial y se pueden usar para obtener el artículo original de hierba, hojas y bloques similares que requieren corte. -To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.=Para esquilar ovejas o tallar calabazas sin rostro, use la tecla "colocar" en ellas. Las caras solo se pueden tallar al lado de las calabazas sin rostro. La minería funciona como de costumbre, pero las gotas son diferentes para algunos bloques. -Wooden Pickaxe=Pico de madera -Stone Pickaxe=Pico de piedra -Iron Pickaxe=Pico de hierro -Golden Pickaxe=Pico de oro -Diamond Pickaxe=Pico de diamante -Wooden Shovel=Pala de madera -Stone Shovel=Pala de piedra -Iron Shovel=Pala de hierro -Golden Shovel=Pala de oro -Diamond Shovel=Pala de diamante -Wooden Axe=Hacha de madera -Stone Axe=Hacha de piedra -Iron Axe=Hacha de hierro -Golden Axe=Hacha de oro -Diamond Axe=Hacha de diamante -Wooden Sword=Espada de madera -Stone Sword=Espada de piedra -Iron Sword=Espada de hierro -Golden Sword=Espada de oro -Diamond Sword=Espada de diamante -Shears=Tijeras diff --git a/mods/ITEMS/mcl_tools/locale/mcl_tools.fr.tr b/mods/ITEMS/mcl_tools/locale/mcl_tools.fr.tr deleted file mode 100644 index 02cd7f2bd..000000000 --- a/mods/ITEMS/mcl_tools/locale/mcl_tools.fr.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_tools -You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.=Vous utilisez votre main nue lorsque vous ne portez aucun objet. Avec votre main, vous pouvez miner la plupart des blocs, mais c'est la méthode la plus lente et seuls les blocs les plus faibles produiront un élément utile. La main inflige également des dégâts mineurs en frappant. L'utilisation de la main est souvent un dernier recours, car les outils et les armes d'extraction appropriés sont bien meilleurs. -When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.=Lorsque vous maniez un objet qui n'est ni un outil d'extraction ni une arme, il se comportera comme s'il s'agissait de la main lorsque vous commencez à extraire ou à frapper. -In Creative Mode, the hand is able to break all blocks instantly.=En mode créatif, la main est capable de briser tous les blocs instantanément. -Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.=Les pioches sont des outils d'extraction pour extraire des blocs durs, comme la pierre. Une pioche peut également être utilisée comme arme, mais elle est plutôt inefficace. -An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.=Une hache est votre outil de choix pour abattre des arbres, des blocs à base de bois et d'autres blocs. Les haches infligent également beaucoup de dégâts, mais elles sont plutôt lentes. -Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.=Les épées sont excellentes en combat de mêlée, car elles sont rapides, infligent des dégâts élevés et peuvent supporter d'innombrables batailles. Les épées peuvent également être utilisées pour couper quelques blocs particuliers, tels que les toiles d'araignées. -Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.=Les pelles sont des outils pour creuser des blocs grossiers, tels que la terre, le sable et le gravier. Ils peuvent également être utilisés pour transformer des blocs d'herbe en chemins de terre. Les pelles peuvent être utilisées comme armes, mais elles sont très faibles. -To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.=Pour transformer un bloc d'herbe en chemin de terre, tenez la pelle dans votre main, puis utilisez (clic droit) le haut ou le côté d'un bloc d'herbe. Cela ne fonctionne que lorsqu'il y a de l'air au-dessus du bloc d'herbe. -Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.=Les cisailles sont des outils pour tondre les moutons et pour extraire quelques types de blocs. Les cisailles sont un outil d'extraction spécial et peuvent être utilisées pour obtenir l'élément d'origine à partir d'herbe, de feuilles et de blocs similaires qui nécessitent une coupe. -To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.=Pour tondre des moutons ou tailler des citrouilles sans visage, utilisez la touche "placer" dessus. Les visages ne peuvent être sculptés que sur le côté des citrouilles sans visage. L'exploitation minière fonctionne comme d'habitude, mais les éléments sont différentes pour quelques blocs. -Wooden Pickaxe=Pioche en Bois -Stone Pickaxe=Pioche en Pierre -Iron Pickaxe=Pioche en Fer -Golden Pickaxe=Pioche en Or -Diamond Pickaxe=Pioche en Diamant -Wooden Shovel=Pelle en Bois -Stone Shovel=Pelle en Pierre -Iron Shovel=Pelle en Fer -Golden Shovel=Pelle en Or -Diamond Shovel=Pelle en Diamant -Wooden Axe=Hache en Bois -Stone Axe=Hache en Pierre -Iron Axe=Hache en Fer -Golden Axe=Hache en Or -Diamond Axe=Hache en Diamant -Wooden Sword=Épée en Bois -Stone Sword=Épée en Pierre -Iron Sword=Épée en Fer -Golden Sword=Épée en Or -Diamond Sword=Épée en Diamant -Shears=Cisailles diff --git a/mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr b/mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr deleted file mode 100644 index afe42593f..000000000 --- a/mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_tools -You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.=Gdy nie trzymasz żadnego przedmiotu używasz swoich gołych dłoni. Swoją dłonią możesz wykopać większość bloków, ale jest to najwolniejsza metoda i tylko najsłabsze bloki wyrzucą z siebie użyteczny zrzut. Ręce zadają również niewielkie obrażenia przy uderzaniu. Używanie ręki to często ostateczność, ponieważ porządne narzędzia do kopania i bronie są o wiele lepsze. -When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.=Gdy trzymasz przedmiot który nie jest narzędziem do kopania ani bronią, będzie się on zachowywał jakby był dłonią podczas kopania i uderzania. -In Creative Mode, the hand is able to break all blocks instantly.=W trybie kreatywnym ręka jest w stanie zniszczyć wszystkie bloki natychmiastowo. -Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.=Kilofy są narzędziami wykorzystywanymi do kopania twardych bloków, takich jak kamień. Mogą być również wykorzystane jako bronie, ale nie jest to bardzo efektywne. -An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.=Siekiera jest narzędziem do ścinania drzew, bloków z desek i innych bloków. Siekiery zadają duże obrażenia, ale są wolne. -Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.=Miecze są świetne do walki wręcz, ponieważ są szybkie, zadają duże obrażenia i mogą wytrzymać niezliczone pojedynki. Można je również wykorzystać do ścięcia niektórych bloków takich jak pajęczyny. -Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.=Łopaty są użyteczne do kopania sypkich bloków takich jak ziemia, piasek czy żwir. Można je również wykorzystać by zmienić bloki trawy w ścieżki. Mogą być również wykorzystane jako broń, ale są bardzo słabe. -To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.=Aby zmienić blok trawy w ścieżkę, weź łopatę do ręki, następnie użyj prawego przycisku myszy na wierzchu lub boku bloku trawy. To zadziała tylko pod warunkiem, że nad blokiem ziemi jest blok powietrza. -Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.=Nożyce są narzędziem do strzyżenia owiec i kopania kilku typów bloków. Są one specjalnym narzędziem do kopania i można je wykorzystać do uzyskania oryginalnych przedmiotów z trawy, liści i podobnych bloków wymagających ścinania. -To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.=Aby ostrzyc owcę lub wydrążyć dynię użyj przycisku "umieść" na nich. Twarze mogą zostać wydrążone na bokach dyń bez twarzy. Kopanie działa jak zwykle, ale zrzut jest inny dla niektórych bloków. -Wooden Pickaxe=Drewniany kilof -Stone Pickaxe=Kamienny kilof -Iron Pickaxe=Żelazny kilof -Golden Pickaxe=Złoty kilof -Diamond Pickaxe=Diamentowy kilof -Wooden Shovel=Drewniana łopata -Stone Shovel=Kamienna łopata -Iron Shovel=Żelazna łopata -Golden Shovel=Złota łopata -Diamond Shovel=Diamentowa łopata -Wooden Axe=Drewniana siekiera -Stone Axe=Kamienna siekiera -Iron Axe=Żelazna siekiera -Golden Axe=Złota siekiera -Diamond Axe=Diamentowa siekiera -Wooden Sword=Drewniany miecz -Stone Sword=Kamienny miecz -Iron Sword=Żelazny miecz -Golden Sword=Złoty miecz -Diamond Sword=Diamentowy miecz -Shears=Nożyce - diff --git a/mods/ITEMS/mcl_tools/locale/mcl_tools.ru.tr b/mods/ITEMS/mcl_tools/locale/mcl_tools.ru.tr deleted file mode 100644 index e82fa15ef..000000000 --- a/mods/ITEMS/mcl_tools/locale/mcl_tools.ru.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_tools -You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.=Вы используете пустую руку, если не держите в ней никакого предмета. Пустой рукой вашей стороны вы можете добывать большинство блоков, но это самый медленный метод, который позволит добыть что-то полезное только из самых слабых блоков Рука также наносит небольшой урон при ударе. Использование пустой руки часто является последним средством, поскольку гораздо предпочтительнее использовать правильные подобранные инструменты и оружие. -When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.=Когда вы держите предмет, не являющийся инструментом майнинга или оружием, то при майнинге или ударах он будет вести себя так, как если бы это была пустая рука. -In Creative Mode, the hand is able to break all blocks instantly.=В творческом режиме пустая рука мгновенно ломает любой блок. -Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.=Кирка это инструмент для добычи тяжёлых блоков - камней и т. п. Кирка также может использоваться в качестве оружия, но не особо эффективного. -An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.=Топор это ваш лучший выбор для рубки деревьев, деревянных и других блоков. Топор также причиняет высокий урон, но бьёт довольно медленно. -Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.=Меч это оружие ближнего боя, он быстр, он наносит высокий урон и может выдержать множество битв. Меч также можно использовать для разрубания специфических блоков, например, паутины. -Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.=Лопата - инструмент для выкапывания заборных блоков, таких как грязь, песок и гравий. Их также можно использовать, чтобы превращать блоки травы в тропинки. Лопату можно использовать и в качестве оружия, но очень слабого. -To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.=Чтобы превратить блок травы в тропинку, кликните правой по верхней его стороне, держа лопату в руке. Это сработает, только если над блоком травы есть воздух. -Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.=Ножницы это инструмент для стрижки овец, ими также можно добыть несколько других блоков. Ножницы это специальный инструмент, которым можно добывать оригинальные предметы травы, листьев и тому подобных, требующих стрижки. -To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.=Чтобы остричь овцу или вырезать безликую тыкву, нажмите клавишу “Разместить” на вашей цели. Лица могут быть вырезаны только на сторонах безликих тыкв. Добыча работает как обычно, но полученные предметы будут различаться для нескольких разных блоков. -Wooden Pickaxe=Деревянная кирка -Stone Pickaxe=Каменная кирка -Iron Pickaxe=Железная кирка -Golden Pickaxe=Золотая кирка -Diamond Pickaxe=Алмазная кирка -Wooden Shovel=Деревянная лопата -Stone Shovel=Каменная лопата -Iron Shovel=Железная лопата -Golden Shovel=Золотая лопата -Diamond Shovel=Алмазная лопата -Wooden Axe=Деревянный топор -Stone Axe=Каменный топор -Iron Axe=Железный топор -Golden Axe=Золотой топор -Diamond Axe=Алмазный топор -Wooden Sword=Деревянный меч -Stone Sword=Каменный меч -Iron Sword=Железный меч -Golden Sword=Золотой меч -Diamond Sword=Алмазный меч -Shears=Ножницы diff --git a/mods/ITEMS/mcl_tools/locale/mcl_tools.zh_TW.tr b/mods/ITEMS/mcl_tools/locale/mcl_tools.zh_TW.tr deleted file mode 100644 index ed40c64ba..000000000 --- a/mods/ITEMS/mcl_tools/locale/mcl_tools.zh_TW.tr +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_tools -You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.=只要你不揮舞任何物品,你就用你的手。用你的手可以開採大多數塊狀物,但這是最慢的方法,只有最弱的方塊才會產生有用的掉落物。手還可以通過打拳造成輕微的傷害。使用手往往是最後的手段,因為適當的採礦工具和武器要好得多。 -When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.=當你揮舞一個不是採礦工具或武器的物品時開始採礦或打拳時,它的行為就像手一樣。 -In Creative Mode, the hand is able to break all blocks instantly.=在創造模式式下,手能夠立即打破所有方塊。 -Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.=鎬是開採硬方塊的工具,如石頭。鎬也可以作為武器使用,但它的效率很低。 -An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.=斧頭是您砍伐樹木,木質方塊等的首選工具。斧頭也造成很多傷害,但是速度很慢。 -Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.=劍在近戰中非常好,因為它們速度快,傷害高,可以經受無數次的戰鬥。劍也可以用來開採一些特殊的方塊,如蜘蛛網。 -Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.=鏟子是挖掘粗方塊的工具,如泥土、沙子和礫石。它們也可以用來把草塊變成草路。鏟子可以作為武器使用,但它們非常弱。 -To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.=要把草塊變成草路,請用手握住鏟子,然後右擊草塊的頂部或側面。這只有在草塊上方的方塊是空氣時才有效。 -Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.=剪刀是剪羊毛的工具,也是開採一些方塊的工具。剪子是一種特殊的開採工具,可以用來從草、樹葉等方塊中獲得原始物品。 -To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.=要剪羊毛或雕刻南瓜,請在其上使用「放置」鍵。只能在南瓜側面雕刻臉部。開採照常進行,但是掉落物在部分方塊上是不同的。 -Wooden Pickaxe=木鎬 -Stone Pickaxe=石鎬 -Iron Pickaxe=鐵鎬 -Golden Pickaxe=金鎬 -Diamond Pickaxe=鑽石鎬 -Wooden Shovel=木鏟 -Stone Shovel=石鏟 -Iron Shovel=鐵鏟 -Golden Shovel=金鏟 -Diamond Shovel=鑽石鏟 -Wooden Axe=木斧 -Stone Axe=石斧 -Iron Axe=鐵斧 -Golden Axe=金斧 -Diamond Axe=鑽石斧 -Wooden Sword=木劍 -Stone Sword=石劍 -Iron Sword=鐵劍 -Golden Sword=金劍 -Diamond Sword=鑽石劍 -Shears=剪刀 diff --git a/mods/ITEMS/mcl_tools/locale/template.txt b/mods/ITEMS/mcl_tools/locale/template.txt deleted file mode 100644 index ecb94105f..000000000 --- a/mods/ITEMS/mcl_tools/locale/template.txt +++ /dev/null @@ -1,32 +0,0 @@ -# textdomain: mcl_tools -You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.= -When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.= -In Creative Mode, the hand is able to break all blocks instantly.= -Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.= -An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.= -Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.= -Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.= -To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.= -Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.= -To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.= -Wooden Pickaxe= -Stone Pickaxe= -Iron Pickaxe= -Golden Pickaxe= -Diamond Pickaxe= -Wooden Shovel= -Stone Shovel= -Iron Shovel= -Golden Shovel= -Diamond Shovel= -Wooden Axe= -Stone Axe= -Iron Axe= -Golden Axe= -Diamond Axe= -Wooden Sword= -Stone Sword= -Iron Sword= -Golden Sword= -Diamond Sword= -Shears= diff --git a/mods/ITEMS/mcl_tools/mod.conf b/mods/ITEMS/mcl_tools/mod.conf deleted file mode 100644 index d2d93197b..000000000 --- a/mods/ITEMS/mcl_tools/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_tools -depends = mcl_sounds, mcl_init diff --git a/mods/ITEMS/mcl_tools/sounds/mcl_tools_shears_cut.ogg b/mods/ITEMS/mcl_tools/sounds/mcl_tools_shears_cut.ogg deleted file mode 100644 index 8c32a649a..000000000 Binary files a/mods/ITEMS/mcl_tools/sounds/mcl_tools_shears_cut.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_diamondaxe.png b/mods/ITEMS/mcl_tools/textures/default_tool_diamondaxe.png deleted file mode 100644 index 5dcc29689..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_diamondaxe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_diamondpick.png b/mods/ITEMS/mcl_tools/textures/default_tool_diamondpick.png deleted file mode 100644 index ccdd2fcf6..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_diamondpick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_diamondshovel.png b/mods/ITEMS/mcl_tools/textures/default_tool_diamondshovel.png deleted file mode 100644 index 6cc561115..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_diamondshovel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_diamondsword.png b/mods/ITEMS/mcl_tools/textures/default_tool_diamondsword.png deleted file mode 100644 index bb18bcc49..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_diamondsword.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_goldaxe.png b/mods/ITEMS/mcl_tools/textures/default_tool_goldaxe.png deleted file mode 100644 index b874ff612..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_goldaxe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_goldpick.png b/mods/ITEMS/mcl_tools/textures/default_tool_goldpick.png deleted file mode 100644 index ceaa1d1d1..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_goldpick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_goldshovel.png b/mods/ITEMS/mcl_tools/textures/default_tool_goldshovel.png deleted file mode 100644 index 72ccd7f05..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_goldshovel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_goldsword.png b/mods/ITEMS/mcl_tools/textures/default_tool_goldsword.png deleted file mode 100644 index 13c1b0dd0..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_goldsword.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_shears.png b/mods/ITEMS/mcl_tools/textures/default_tool_shears.png deleted file mode 100644 index f4be712a4..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_shears.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_steelaxe.png b/mods/ITEMS/mcl_tools/textures/default_tool_steelaxe.png deleted file mode 100644 index 63b4ce589..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_steelaxe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_steelpick.png b/mods/ITEMS/mcl_tools/textures/default_tool_steelpick.png deleted file mode 100644 index 343cebc8c..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_steelpick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_steelshovel.png b/mods/ITEMS/mcl_tools/textures/default_tool_steelshovel.png deleted file mode 100644 index 593a3ebba..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_steelshovel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_steelsword.png b/mods/ITEMS/mcl_tools/textures/default_tool_steelsword.png deleted file mode 100644 index 28e45d641..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_steelsword.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_stoneaxe.png b/mods/ITEMS/mcl_tools/textures/default_tool_stoneaxe.png deleted file mode 100644 index 95e8bcf47..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_stoneaxe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_stonepick.png b/mods/ITEMS/mcl_tools/textures/default_tool_stonepick.png deleted file mode 100644 index 45715aaab..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_stonepick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_stoneshovel.png b/mods/ITEMS/mcl_tools/textures/default_tool_stoneshovel.png deleted file mode 100644 index 7cd8ca42a..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_stoneshovel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_stonesword.png b/mods/ITEMS/mcl_tools/textures/default_tool_stonesword.png deleted file mode 100644 index b319829db..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_stonesword.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_woodaxe.png b/mods/ITEMS/mcl_tools/textures/default_tool_woodaxe.png deleted file mode 100644 index 33de850f4..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_woodaxe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_woodpick.png b/mods/ITEMS/mcl_tools/textures/default_tool_woodpick.png deleted file mode 100644 index 33fde14e1..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_woodpick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_woodshovel.png b/mods/ITEMS/mcl_tools/textures/default_tool_woodshovel.png deleted file mode 100644 index e1855b5ae..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_woodshovel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_woodsword.png b/mods/ITEMS/mcl_tools/textures/default_tool_woodsword.png deleted file mode 100644 index 8f583e0c0..000000000 Binary files a/mods/ITEMS/mcl_tools/textures/default_tool_woodsword.png and /dev/null differ diff --git a/mods/ITEMS/mcl_torches/LICENSE.txt b/mods/ITEMS/mcl_torches/LICENSE.txt deleted file mode 100644 index 4362b4915..000000000 --- a/mods/ITEMS/mcl_torches/LICENSE.txt +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. 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 not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the 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 -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library 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. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/mods/ITEMS/mcl_torches/README.txt b/mods/ITEMS/mcl_torches/README.txt deleted file mode 100644 index a1dd8eb77..000000000 --- a/mods/ITEMS/mcl_torches/README.txt +++ /dev/null @@ -1,61 +0,0 @@ -Minetest mod "Torches" -====================== - -(c) Copyright BlockMen (2013-2015) -(C) Copyright sofar (2016) - - -About this mod: -~~~~~~~~~~~~~~~ -This mod changes the default torch drawtype from "torchlike" to "mesh", -giving the torch a three dimensional appearance. The mesh contains the -proper pixel mapping to make the animation appear as a particle above -the torch, while in fact the animation is just the texture of the mesh. - -Originally, this mod created in-game alternatives with several -draw styles. The alternatives have been removed and instead of -providing alternate nodes, this mod now directly modifies the existing -nodes. Conversion from the wallmounted style is done through an LBM. - -Torches is meant for minetest-0.4.14, and does not directly support -older minetest releases. You'll need a recent git, or nightly build. - -Changes for MineClone: -~~~~~~~~~~~~~~~~~~~~~~ -- Torch does not generate light when wielding -- Torch drops when near water -- Torch can't be placed on ceiling -- Simple API (WIP) - -License: -~~~~~~~~ -(c) Copyright BlockMen (2013-2015) - -Models: -CC-BY 3.0 by 22i - -Code: -Licensed under the GNU LGPL version 2.1 or higher. -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; - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt - - -Github: -~~~~~~~ -https://github.com/BlockMen/torches - -Forum: -~~~~~~ -https://forum.minetest.net/viewtopic.php?id=6099 - - -Changelog: -~~~~~~~~~~ -see changelog.txt diff --git a/mods/ITEMS/mcl_torches/api.lua b/mods/ITEMS/mcl_torches/api.lua deleted file mode 100644 index dab508795..000000000 --- a/mods/ITEMS/mcl_torches/api.lua +++ /dev/null @@ -1,267 +0,0 @@ -local smoke_pdef = { - amount = 0.5, - maxexptime = 2.0, - minvel = { x = 0.0, y = 0.5, z = 0.0 }, - maxvel = { x = 0.0, y = 0.6, z = 0.0 }, - minsize = 1.5, - maxsize = 1.5, - minrelpos = { x = -1/16, y = 0.04, z = -1/16 }, - maxrelpos = { x = 1/16, y = 0.06, z = 1/16 }, -} - -local function spawn_flames_floor(pos) - -- Flames - mcl_particles.add_node_particlespawner(pos, { - amount = 8, - time = 0, - minpos = vector.add(pos, { x = -0.1, y = 0.05, z = -0.1 }), - maxpos = vector.add(pos, { x = 0.1, y = 0.15, z = 0.1 }), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.7, - maxsize = 2, - texture = "mcl_particles_flame.png", - glow = minetest.registered_nodes[minetest.get_node(pos).name].light_source, - }, "low") - -- Smoke - mcl_particles.spawn_smoke(pos, "torch", smoke_pdef) -end - -local function spawn_flames_wall(pos) - --local minrelpos, maxrelpos - local node = minetest.get_node(pos) - local dir = minetest.wallmounted_to_dir(node.param2) - - local smoke_pdef = table.copy(smoke_pdef) - - if dir.x < 0 then - smoke_pdef.minrelpos = { x = -0.38, y = 0.04, z = -0.1 } - smoke_pdef.maxrelpos = { x = -0.2, y = 0.14, z = 0.1 } - elseif dir.x > 0 then - smoke_pdef.minrelpos = { x = 0.2, y = 0.04, z = -0.1 } - smoke_pdef.maxrelpos = { x = 0.38, y = 0.14, z = 0.1 } - elseif dir.z < 0 then - smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = -0.38 } - smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = -0.2 } - elseif dir.z > 0 then - smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = 0.2 } - smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = 0.38 } - else - return - end - - - -- Flames - mcl_particles.add_node_particlespawner(pos, { - amount = 8, - time = 0, - minpos = vector.add(pos, smoke_pdef.minrelpos), - maxpos = vector.add(pos, smoke_pdef.maxrelpos), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.7, - maxsize = 2, - texture = "mcl_particles_flame.png", - glow = minetest.registered_nodes[node.name].light_source, - }, "low") - -- Smoke - mcl_particles.spawn_smoke(pos, "torch", smoke_pdef) -end - -local function remove_flames(pos) - mcl_particles.delete_node_particlespawners(pos) -end - --- --- 3d torch part --- - --- Check if placement at given node is allowed -local function check_placement_allowed(node, wdir) - -- Torch placement rules: Disallow placement on some nodes. General rule: Solid, opaque, full cube collision box nodes are allowed. - -- Special allowed nodes: - -- * soul sand - -- * mob spawner - -- * chorus flower - -- * glass, barrier, ice - -- * Fence, wall, end portal frame with ender eye: Only on top - -- * Slab, stairs: Only on top if upside down - - -- Special forbidden nodes: - -- * Piston, sticky piston - local def = minetest.registered_nodes[node.name] - if not def then - return false - -- No ceiling torches - elseif wdir == 0 then - return false - elseif not def.buildable_to then - if node.name ~= "mcl_core:ice" and node.name ~= "mcl_nether:soul_sand" and node.name ~= "mcl_mobspawners:spawner" and node.name ~= "mcl_core:barrier" and node.name ~= "mcl_end:chorus_flower" and node.name ~= "mcl_end:chorus_flower_dead" and (not def.groups.glass) and - ((not def.groups.solid) or (not def.groups.opaque)) then - -- Only allow top placement on these nodes - if node.name == "mcl_end:dragon_egg" or node.name == "mcl_portals:end_portal_frame_eye" or def.groups.fence == 1 or def.groups.wall or def.groups.slab_top == 1 or def.groups.anvil or def.groups.pane or (def.groups.stair == 1 and minetest.facedir_to_dir(node.param2).y ~= 0) then - if wdir ~= 1 then - return false - end - else - return false - end - elseif minetest.get_item_group(node.name, "piston") >= 1 then - return false - end - end - return true -end - -function mcl_torches.register_torch(def) - local itemstring = minetest.get_current_modname() .. ":" .. def.name - local itemstring_wall = itemstring .. "_wall" - - def.light = def.light or minetest.LIGHT_MAX - def.mesh_floor = def.mesh_floor or "mcl_torches_torch_floor.obj" - def.mesh_wall = def.mesh_wall or "mcl_torches_torch_wall.obj" - - local groups = def.groups or {} - - groups.attached_node = 1 - groups.torch = 1 - groups.torch_particles = def.particles and 1 - groups.dig_by_water = 1 - groups.destroy_by_lava_flow = 1 - groups.dig_by_piston = 1 - - local floordef = { - description = def.description, - _doc_items_longdesc = def.doc_items_longdesc, - _doc_items_usagehelp = def.doc_items_usagehelp, - _doc_items_hidden = def.doc_items_hidden, - _doc_items_create_entry = def._doc_items_create_entry, - drawtype = "mesh", - mesh = def.mesh_floor, - inventory_image = def.icon, - wield_image = def.icon, - tiles = def.tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - liquids_pointable = false, - light_source = def.light, - groups = groups, - drop = def.drop or itemstring, - selection_box = { - type = "wallmounted", - wall_top = {-1/16, -1/16, -1/16, 1/16, 0.5, 1/16}, - wall_bottom = {-1/16, -0.5, -1/16, 1/16, 1/16, 1/16}, - }, - sounds = def.sounds, - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities, for now. - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return itemstack end - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(under, node, placer, itemstack) or itemstack - end - end - - local above = pointed_thing.above - local wdir = minetest.dir_to_wallmounted({x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}) - - if check_placement_allowed(node, wdir) == false then - return itemstack - end - - local itemstring = itemstack:get_name() - local fakestack = ItemStack(itemstack) - local idef = fakestack:get_definition() - local retval - - if wdir == 1 then - retval = fakestack:set_name(itemstring) - else - retval = fakestack:set_name(itemstring_wall) - end - if not retval then - return itemstack - end - - local success - itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name(itemstring) - - if success and idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=under, gain=1}, true) - end - return itemstack - end, - on_rotate = false, - on_construct = def.particles and spawn_flames_floor, - on_destruct = def.particles and remove_flames, - } - minetest.register_node(itemstring, floordef) - - local groups_wall = table.copy(groups) - groups_wall.torch = 2 - - local walldef = { - drawtype = "mesh", - mesh = def.mesh_wall, - tiles = def.tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - light_source = def.light, - groups = groups_wall, - drop = def.drop or itemstring, - selection_box = { - type = "wallmounted", - wall_top = {-0.1, -0.1, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, 0.1, 0.1}, - wall_side = {-0.5, -0.5, -0.1, -0.2, 0.1, 0.1}, - }, - sounds = def.sounds, - on_rotate = false, - on_construct = def.particles and spawn_flames_wall, - on_destruct = def.particles and remove_flames, - } - minetest.register_node(itemstring_wall, walldef) - - -- Add entry alias for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", itemstring, "nodes", itemstring_wall) - end -end - -minetest.register_lbm({ - label = "Torch flame particles", - name = "mcl_torches:flames", - nodenames = {"group:torch_particles"}, - run_at_every_load = true, - action = function(pos, node) - local torch_group = minetest.get_item_group(node.name, "torch") - if torch_group == 1 then - spawn_flames_floor(pos) - elseif torch_group == 2 then - spawn_flames_wall(pos) - end - end, -}) diff --git a/mods/ITEMS/mcl_torches/init.lua b/mods/ITEMS/mcl_torches/init.lua deleted file mode 100644 index 6b6ebcae9..000000000 --- a/mods/ITEMS/mcl_torches/init.lua +++ /dev/null @@ -1,6 +0,0 @@ -mcl_torches = {} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(modpath .. "/api.lua") -dofile(modpath .. "/register.lua") diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.de.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.de.tr deleted file mode 100644 index 224106abf..000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Fackel -Torches are light sources which can be placed at the side or on the top of most blocks.=Fackeln sind Lichtquellen, die an der Seite oder der Oberseite der meisten Blöcke platziert werden können. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.es.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.es.tr deleted file mode 100644 index 18a81f5ca..000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Antorcha -Torches are light sources which can be placed at the side or on the top of most blocks.=Las antorchas son fuentes de luz que se pueden colocar a un lado, en el suelo, o en la parte superior de la mayoría de los bloques. \ No newline at end of file diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.fr.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.fr.tr deleted file mode 100644 index 394d58d4d..000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.fr.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Torche -Torches are light sources which can be placed at the side or on the top of most blocks.=Les torches sont des sources lumineuses qui peuvent être placées sur le côté ou sur le dessus de la plupart des blocs. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr deleted file mode 100644 index ae1c118ae..000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Pochodnia -Torches are light sources which can be placed at the side or on the top of most blocks.=Pochodnie są źródłami światła, które może zostać postawione na boku lub na górze większości bloków. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.ru.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.ru.tr deleted file mode 100644 index c3812eaad..000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.ru.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Факел -Torches are light sources which can be placed at the side or on the top of most blocks.=Факелы это источники света, которые можно вешать на стены или ставить на верхние части большинства блоков. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.zh_TW.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.zh_TW.tr deleted file mode 100644 index 01088cd96..000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.zh_TW.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=火把 -Torches are light sources which can be placed at the side or on the top of most blocks.=火把是光源,可以放在大多數方塊的側面或頂部。 diff --git a/mods/ITEMS/mcl_torches/locale/template.txt b/mods/ITEMS/mcl_torches/locale/template.txt deleted file mode 100644 index 447fba747..000000000 --- a/mods/ITEMS/mcl_torches/locale/template.txt +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch= -Torches are light sources which can be placed at the side or on the top of most blocks.= diff --git a/mods/ITEMS/mcl_torches/mod.conf b/mods/ITEMS/mcl_torches/mod.conf deleted file mode 100644 index b383df2a7..000000000 --- a/mods/ITEMS/mcl_torches/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_torches -description = Mesh-based torches - three dimensional torches for minetest. -depends = mcl_core, mcl_sounds, mcl_particles -optional_depends = doc diff --git a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_floor.obj b/mods/ITEMS/mcl_torches/models/mcl_torches_torch_floor.obj deleted file mode 100644 index ac4234d3e..000000000 --- a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_floor.obj +++ /dev/null @@ -1,29 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'torch_on_floor_node.blend' -# www.blender.org -o torch_Cube_Cube.001_Cube_Cube.001_Material.001 -v 0.062500 0.062500 0.062500 -v 0.062500 0.062500 -0.062500 -v -0.062500 0.062500 -0.062500 -v -0.062500 0.062500 0.062500 -v -0.062500 -0.500000 0.062500 -v 0.062500 -0.500000 0.062500 -v 0.062500 -0.500000 -0.062500 -v -0.062500 -0.500000 -0.062500 -vt 0.562500 0.500000 -vt 0.562500 0.625000 -vt 0.437500 0.625000 -vt 0.437500 0.500000 -vt 0.437500 0.000000 -vt 0.562500 0.000000 -vt 0.562500 0.125000 -vt 0.437500 0.125000 -vn 0.000000 1.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 1.000000 0.000000 0.000000 -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/1 6/6/1 7/7/1 8/8/1 -f 1/2/2 6/6/2 5/5/2 4/3/2 -f 2/3/3 1/2/3 6/6/3 7/5/3 -f 3/2/2 2/3/2 7/5/2 8/6/2 -f 4/3/3 5/5/3 8/6/3 3/2/3 diff --git a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_wall.obj b/mods/ITEMS/mcl_torches/models/mcl_torches_torch_wall.obj deleted file mode 100644 index 824223e6d..000000000 --- a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_wall.obj +++ /dev/null @@ -1,29 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'torch_on_wall_node.blend' -# www.blender.org -o torch_wall_Cube_Cube.001_Cube_Cube.001_Material.001 -v 0.062469 -0.303502 0.086070 -v 0.062469 -0.195248 0.023570 -v -0.062531 -0.195248 0.023570 -v -0.062531 -0.303502 0.086070 -v -0.062531 -0.584752 -0.401070 -v 0.062469 -0.584752 -0.401070 -v 0.062469 -0.476498 -0.463570 -v -0.062531 -0.476498 -0.463570 -vt 0.562500 0.500000 -vt 0.562500 0.625000 -vt 0.437500 0.625000 -vt 0.437500 0.500000 -vt 0.437500 0.000000 -vt 0.562500 0.000000 -vt 0.562500 0.125000 -vt 0.437500 0.125000 -vn 0.000000 0.500000 0.866000 -vn 0.000000 0.866000 -0.500000 -vn 1.000000 -0.000000 0.000000 -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/1 6/6/1 7/7/1 8/8/1 -f 1/2/2 6/6/2 5/5/2 4/3/2 -f 2/3/3 1/2/3 6/6/3 7/5/3 -f 3/2/2 2/3/2 7/5/2 8/6/2 -f 4/3/3 5/5/3 8/6/3 3/2/3 diff --git a/mods/ITEMS/mcl_torches/register.lua b/mods/ITEMS/mcl_torches/register.lua deleted file mode 100644 index f8c34e6b5..000000000 --- a/mods/ITEMS/mcl_torches/register.lua +++ /dev/null @@ -1,27 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_torches.register_torch({ - name = "torch", - description = S("Torch"), - doc_items_longdesc = S("Torches are light sources which can be placed at the side or on the top of most blocks."), - doc_items_hidden = false, - icon = "default_torch_on_floor.png", - tiles = {{ - name = "default_torch_on_floor_animated.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, - -- this is 15 in minecraft - light = 14, - groups = {dig_immediate = 3, deco_block = 1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - particles = true, -}) - -minetest.register_craft({ - output = "mcl_torches:torch 4", - recipe = { - {"group:coal"}, - {"mcl_core:stick"}, - } -}) - diff --git a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor.png b/mods/ITEMS/mcl_torches/textures/default_torch_on_floor.png deleted file mode 100644 index cb0ce15f1..000000000 Binary files a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor_animated.png b/mods/ITEMS/mcl_torches/textures/default_torch_on_floor_animated.png deleted file mode 100644 index 28cdc64c7..000000000 Binary files a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_totems/init.lua b/mods/ITEMS/mcl_totems/init.lua deleted file mode 100644 index 8e529c5d5..000000000 --- a/mods/ITEMS/mcl_totems/init.lua +++ /dev/null @@ -1,106 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local hud_totem = {} - -minetest.register_on_leaveplayer(function(player) - hud_totem[player] = nil -end) - -minetest.register_craftitem("mcl_totems:totem", { - description = S("Totem of Undying"), - _tt_help = minetest.colorize(mcl_colors.GREEN, S("Protects you from death while wielding it")), - _doc_items_longdesc = S("A totem of undying is a rare artifact which may safe you from certain death."), - _doc_items_usagehelp = S("The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however."), - inventory_image = "mcl_totems_totem.png", - wield_image = "mcl_totems_totem.png", - stack_max = 1, - groups = {combat_item = 1, offhand_item = 1}, -}) -minetest.register_alias("mobs_mc:totem", "mcl_totems:totem") - -local particle_colors = {"98BF22", "C49E09", "337D0B", "B0B021", "1E9200"} -- TODO: real MC colors - --- Save the player from death when holding totem of undying in hand -mcl_damage.register_modifier(function(obj, damage, reason) - if obj:is_player() and not reason.bypasses_totem then - local hp = obj:get_hp() - if hp - damage <= 0 then - local wield = obj:get_wielded_item() - local in_offhand = false - if not (wield:get_name() == "mcl_totems:totem") then - local inv = obj:get_inventory() - if inv then - wield = obj:get_inventory():get_stack("offhand", 1) - in_offhand = true - end - end - if wield:get_name() == "mcl_totems:totem" then - local ppos = obj:get_pos() - local pnname = minetest.get_node(ppos).name - - if obj:get_breath() < 11 then - obj:set_breath(10) - end - - if not minetest.is_creative_enabled(obj:get_player_name()) then - wield:take_item() - if in_offhand then - obj:get_inventory():set_stack("offhand", 1, wield) - mcl_inventory.update_inventory_formspec(obj) - else - obj:set_wielded_item(wield) - end - end - - -- Effects - minetest.sound_play({name = "mcl_totems_totem", gain = 1}, {pos=ppos, max_hear_distance = 16}, true) - - for i = 1, 4 do - for c = 1, #particle_colors do - minetest.add_particlespawner({ - amount = math.floor(100 / (4 * #particle_colors)), - time = 1, - minpos = vector.offset(ppos, 0, -1, 0), - maxpos = vector.offset(ppos, 0, 1, 0), - minvel = vector.new(-1.5, 0, -1.5), - maxvel = vector.new(1.5, 1.5, 1.5), - minacc = vector.new(0, -0.1, 0), - maxacc = vector.new(0, -1, 0), - minexptime = 1, - maxexptime = 3, - minsize = 1, - maxsize = 2, - collisiondetection = true, - collision_removal = true, - object_collision = false, - vertical = false, - texture = "mcl_particles_totem" .. i .. ".png^[colorize:#" .. particle_colors[c], - glow = 10, - }) - end - end - - -- Big totem overlay - if not hud_totem[obj] then - hud_totem[obj] = obj:hud_add({ - hud_elem_type = "image", - text = "mcl_totems_totem.png", - position = {x = 0.5, y = 1}, - scale = {x = 17, y = 17}, - offset = {x = 0, y = -178}, - z_index = 100, - }) - minetest.after(3, function() - if obj:is_player() then - obj:hud_remove(hud_totem[obj]) - hud_totem[obj] = nil - end - end) - end - - -- Set HP to exactly 1 - return hp - 1 - end - end - end -end, 1000) diff --git a/mods/ITEMS/mcl_totems/locale/mcl_totems.de.tr b/mods/ITEMS/mcl_totems/locale/mcl_totems.de.tr deleted file mode 100644 index e0ac4f2f1..000000000 --- a/mods/ITEMS/mcl_totems/locale/mcl_totems.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_totems -Totem of Undying=Totem der Unsterblichkeit -A totem of undying is a rare artifact which may safe you from certain death.=Ein Totem der Unsterblichkeit ist ein seltenes Artefakt, dass Sie vor dem sicheren Tod bewahren kann. -The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Der Totem funktioniert nur, während Sie ihn halten. Wenn Sie normalerweise tödlich hohen Schaden erhalten, werden Sie vor dem Tod bewahrt und Sie erhalten eine zweite Chance mit 1 TP. Der Totem wird dabei zerstört. -Protects you from death while wielding it=Schützt vor dem Tod, wenn es gehalten wird diff --git a/mods/ITEMS/mcl_totems/locale/mcl_totems.es.tr b/mods/ITEMS/mcl_totems/locale/mcl_totems.es.tr deleted file mode 100644 index 2b451ccb1..000000000 --- a/mods/ITEMS/mcl_totems/locale/mcl_totems.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_totems -Totem of Undying=Tótem de la inmortalidad -A totem of undying is a rare artifact which may safe you from certain death.=Un tótem de la inmortalidad es un artefacto raro que puede salvarte de una muerte segura. -The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=El tótem solo funciona mientras lo sostienes en tu mano. Si recibes un daño crítico, no mueres y obtienes una segunda oportunidad con 1 HP. Sin embargo, el tótem se destruye en el proceso. diff --git a/mods/ITEMS/mcl_totems/locale/mcl_totems.fr.tr b/mods/ITEMS/mcl_totems/locale/mcl_totems.fr.tr deleted file mode 100644 index 174251f3c..000000000 --- a/mods/ITEMS/mcl_totems/locale/mcl_totems.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_totems -Totem of Undying=Totem d'immortalité -A totem of undying is a rare artifact which may safe you from certain death.=Un totem d'immortalité est un artefact rare qui peut vous protéger d'une mort certaine. -The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Le totem ne fonctionne que lorsque vous le tenez dans votre main. Si vous recevez des dégâts mortels, vous êtes sauvé de la mort et vous obtenez une seconde chance avec 1 HP. Cependant, le totem est détruit. -Protects you from death while wielding it=Vous protège de la mort en la maniant diff --git a/mods/ITEMS/mcl_totems/locale/mcl_totems.ru.tr b/mods/ITEMS/mcl_totems/locale/mcl_totems.ru.tr deleted file mode 100644 index d293efe01..000000000 --- a/mods/ITEMS/mcl_totems/locale/mcl_totems.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_totems -Totem of Undying=Тотем бессмертия -A totem of undying is a rare artifact which may safe you from certain death.=Тотем бессмертия это редкий артефакт, способный спасти вас от смерти. -The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Тотем работает только когда вы держите его в руке. Если вы получаете смертельный урон, вы спасаетесь от смерти и получаете второй шанс с 1 HP. Однако тотем при этом уничтожается. -Protects you from death while wielding it=Защищает вас от смерти, пока вы владеете им diff --git a/mods/ITEMS/mcl_totems/locale/template.txt b/mods/ITEMS/mcl_totems/locale/template.txt deleted file mode 100644 index 7afebc44c..000000000 --- a/mods/ITEMS/mcl_totems/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_totems -Totem of Undying= -A totem of undying is a rare artifact which may safe you from certain death.= -The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.= -Protects you from death while wielding it= diff --git a/mods/ITEMS/mcl_totems/mod.conf b/mods/ITEMS/mcl_totems/mod.conf deleted file mode 100644 index 4ba94defc..000000000 --- a/mods/ITEMS/mcl_totems/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_totems -depends = mobs_mc, mcl_damage diff --git a/mods/ITEMS/mcl_totems/textures/mcl_totems_totem.png b/mods/ITEMS/mcl_totems/textures/mcl_totems_totem.png deleted file mode 100644 index 603a86768..000000000 Binary files a/mods/ITEMS/mcl_totems/textures/mcl_totems_totem.png and /dev/null differ diff --git a/mods/ITEMS/mcl_walls/API.md b/mods/ITEMS/mcl_walls/API.md deleted file mode 100644 index e6956ac47..000000000 --- a/mods/ITEMS/mcl_walls/API.md +++ /dev/null @@ -1,38 +0,0 @@ -# API for MineClone 2 walls - -This API allows you to add more walls (like the cobblestone wall) to MineClone 2. - -## `mcl_walls.register_wall(nodename, description, craft_material, tiles, invtex, groups, sounds)` - -Adds a new wall type. This is optimized for stone-based walls, but other materials are theoretically possible, too. - -The current implementation registers a couple of nodes for the different nodeboxes. -All walls connect to solid nodes and all other wall nodes. - -If `craft_material` is not `nil` it also adds a crafting recipe of the following form: - - CCC - CCC - - Yields 6 walls - C = craft_material (can be group) - -### Parameters -* `nodename`: Full itemstring of the new wall node (base node only). ***Must not have an underscore!*** -* `description`: Item description of item (tooltip), visible to user -* `source`: Node on which the wall is based off, use for texture and crafting recipe (optional) -* `tiles`: Wall textures table, same syntax as for `minetest.register_node` (optional if `source` is set) -* `inventory_image`: Inventory image (optional if `source` is set) -* `groups`: Base group memberships (optional, default is `{pickaxey=1}`) -* `sounds`: Sound table (optional, by default default uses stone sounds) - -The following groups will automatically be added to the nodes (where applicable), you do not need to add them -to the `groups` table: - -* `deco_block=1` -* `not_in_creative_inventory=1` (except for the base node which the player can take) -* `wall=1` - -### Example - - mcl_walls.register_wall("mymod:granitewall", "Granite Wall", {"mymod_granite.png"}, "mymod_granite_wall_inv.png") diff --git a/mods/ITEMS/mcl_walls/init.lua b/mods/ITEMS/mcl_walls/init.lua deleted file mode 100644 index 14b512ffd..000000000 --- a/mods/ITEMS/mcl_walls/init.lua +++ /dev/null @@ -1,275 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - -mcl_walls = {} - -local function rshift(x, by) - return math.floor(x / 2 ^ by) -end - -local directions = { - {x = 1, y = 0, z = 0}, - {x = 0, y = 0, z = 1}, - {x = -1, y = 0, z = 0}, - {x = 0, y = 0, z = -1}, - {x = 0, y = -1, z = 0}, -} - -local function connectable(itemstring) - return (minetest.get_item_group(itemstring, "wall") == 1) or (minetest.get_item_group(itemstring, "solid") == 1) -end - -local function update_wall(pos) - local thisnode = minetest.get_node(pos) - - if minetest.get_item_group(thisnode.name, "wall") == 0 then - return - end - - -- Get the node's base name, including the underscore since we will need it - local colonpos = thisnode.name:find(":") - local underscorepos - local itemname, basename, modname - if colonpos then - itemname = thisnode.name:sub(colonpos+1) - modname = thisnode.name:sub(1, colonpos-1) - end - underscorepos = itemname:find("_") - if underscorepos == nil then -- New wall - basename = thisnode.name .. "_" - else -- Already placed wall - basename = modname .. ":" .. itemname:sub(1, underscorepos) - end - - local sum = 0 - - -- Neighbouring walkable nodes - for i = 1, 4 do - local dir = directions[i] - local node = minetest.get_node({x = pos.x + dir.x, y = pos.y + dir.y, z = pos.z + dir.z}) - if connectable(node.name) then - sum = sum + 2 ^ (i - 1) - end - end - - -- Torches or walkable nodes above the wall - local upnode = minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z}) - if sum == 5 or sum == 10 then - if (connectable(upnode.name)) or (minetest.get_item_group(upnode.name, "torch") == 1) then - sum = sum + 11 - end - end - - --[[if sum == 0 then - sum = 15 - end]] - - minetest.add_node(pos, {name = basename..sum}) -end - -local function update_wall_global(pos) - for i = 1,5 do - local dir = directions[i] - update_wall({x = pos.x + dir.x, y = pos.y + dir.y, z = pos.z + dir.z}) - end -end - -local half_blocks = { - {4/16, -0.5, -3/16, 0.5, 5/16, 3/16}, - {-3/16, -0.5, 4/16, 3/16, 5/16, 0.5}, - {-0.5, -0.5, -3/16, -4/16, 5/16, 3/16}, - {-3/16, -0.5, -0.5, 3/16, 5/16, -4/16} -} - -local pillar = {-4/16, -0.5, -4/16, 4/16, 0.5, 4/16} - -local full_blocks = { - {-0.5, -0.5, -3/16, 0.5, 5/16, 3/16}, - {-3/16, -0.5, -0.5, 3/16, 5/16, 0.5} -} - ---[[ Adds a new wall type. -* nodename: Itemstring of base node to add. Must not contain an underscore -* description: Item description (tooltip), visible to user -* source: Source block to craft this thing, for graphics, tiles and crafting (optional) -* tiles: Wall textures table -* inventory_image: Inventory image (optional) -* groups: Base group memberships (optional, default is {pickaxey=1}) -* sounds: Sound table (optional, default is stone) -]] -function mcl_walls.register_wall(nodename, description, source, tiles, inventory_image, groups, sounds) - - local base_groups = groups - if not base_groups then - base_groups = {pickaxey=1} - end - base_groups.wall = 1 - - local internal_groups = table.copy(base_groups) - internal_groups.not_in_creative_inventory = 1 - - local main_node_groups = table.copy(base_groups) - main_node_groups.deco_block = 1 - - -- TODO: Stop hardcoding blast resistance - - if not sounds then - sounds = mcl_sounds.node_sound_stone_defaults() - end - - if (not tiles) and source then - if minetest.registered_nodes[source] then - tiles = minetest.registered_nodes[source].tiles - end - end - - for i = 0, 15 do - local need = {} - local need_pillar = false - for j = 1, 4 do - if rshift(i, j - 1) % 2 == 1 then - need[j] = true - end - end - - local take = {} - if need[1] == true and need[3] == true then - need[1] = nil - need[3] = nil - table.insert(take, full_blocks[1]) - end - if need[2] == true and need[4] == true then - need[2] = nil - need[4] = nil - table.insert(take, full_blocks[2]) - end - for k in pairs(need) do - table.insert(take, half_blocks[k]) - need_pillar = true - end - if i == 15 or i == 0 then need_pillar = true end - if need_pillar then table.insert(take, pillar) end - - minetest.register_node(nodename.."_"..i, { - collision_box = { - type = "fixed", - fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} - }, - drawtype = "nodebox", - is_ground_content = false, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - sunlight_propagates = true, - groups = internal_groups, - drop = nodename, - node_box = { - type = "fixed", - fixed = take - }, - sounds = sounds, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, - }) - - -- Add entry alias for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", nodename, "nodes", nodename.."_"..i) - end - end - - minetest.register_node(nodename.."_16", { - drawtype = "nodebox", - collision_box = { - type = "fixed", - fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} - }, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - groups = internal_groups, - drop = nodename, - node_box = { - type = "fixed", - fixed = {pillar, full_blocks[1]} - }, - sounds = sounds, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, - }) - -- Add entry alias for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", nodename, "nodes", nodename.."_16") - end - - minetest.register_node(nodename.."_21", { - drawtype = "nodebox", - collision_box = { - type = "fixed", - fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} - }, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - groups = internal_groups, - drop = nodename, - node_box = { - type = "fixed", - fixed = {pillar, full_blocks[2]} - }, - sounds = sounds, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, - }) - -- Add entry alias for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", nodename, "nodes", nodename.."_21") - end - - -- Inventory item - minetest.register_node(nodename, { - description = description, - _doc_items_longdesc = S("A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure."), - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - groups = main_node_groups, - tiles = tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - inventory_image = inventory_image, - stack_max = 64, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = pillar - }, - collision_box = { - type = "fixed", - fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} - }, - collisionbox = {-0.2, 0, -0.2, 0.2, 1.4, 0.2}, - on_construct = update_wall, - sounds = sounds, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, - }) - if source then - minetest.register_craft({ - output = nodename .. " 6", - recipe = { - {source, source, source}, - {source, source, source}, - } - }) - end -end - -dofile(modpath.."/register.lua") - -minetest.register_on_placenode(update_wall_global) -minetest.register_on_dignode(update_wall_global) diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.de.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.de.tr deleted file mode 100644 index d4e7a6400..000000000 --- a/mods/ITEMS/mcl_walls/locale/mcl_walls.de.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_walls -A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.=Ein Stück Mauer. Mit einem einfachen Sprung kann es nicht übersprungen werden. Wenn mehrere von diesen Blöcken nebeneinander platziert werden, werden sie automatisch ein nettes Mauerbauwerk ergeben. -Cobblestone Wall=Kopfsteinpflastermauer -Mossy Cobblestone Wall=Moosige Kopfsteinpflastermauer -Andesite Wall=Andesitmauer -Granite Wall=Granitmauer -Diorite Wall=Dioritmauer -Brick Wall=Ziegelmauer -Sandstone Wall=Sandsteinmauer -Red Sandstone Wall=Rote Sandsteinmauer -Stone Brick Wall=Steinziegelmauer -Mossy Stone Brick Wall=Moosige Steinziegelmauer -Prismarine Wall=Prismarinmauer -End Stone Brick Wall=Endsteinziegelmauer -Nether Brick Wall=Netherziegelmauer -Red Nether Brick Wall=Rote Netherziegelmauer diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.es.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.es.tr deleted file mode 100644 index 3fb3d6adb..000000000 --- a/mods/ITEMS/mcl_walls/locale/mcl_walls.es.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_walls -A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.=Un pedazo de pared. No se puede saltar con un simple salto. Cuando varios de estos se colocan uno al lado del otro, construirán automáticamente una bonita estructura de pared. -Cobblestone Wall=Muro de roca -Mossy Cobblestone Wall=Muro de roca musgosa -Andesite Wall=Muro de andesita -Granite Wall=Muro de granito -Diorite Wall=Muro de diorita -Brick Wall=Muro de ladrillos -Sandstone Wall=Muro de arenisca -Red Sandstone Wall=Muro de arenisca roja -Stone Brick Wall=Muro de ladrillos de piedra -Mossy Stone Brick Wall=Muro de ladrillos de piedra musgosos -Prismarine Wall=Muro de prismarina -End Stone Brick Wall=Muro de ladrillos de piedra del End -Nether Brick Wall=Muro de ladrillos del Nether -Red Nether Brick Wall=Muro de ladrillos del Nether rojos diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr deleted file mode 100644 index 445c8f7b3..000000000 --- a/mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_walls -A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.=Un morceau de mur. Il ne peut pas être sauté par un simple saut. Lorsque plusieurs d'entre eux sont placés les uns à côté des autres, ils construiront automatiquement une belle structure de mur. -Cobblestone Wall=Muret de Pierres -Mossy Cobblestone Wall=Muret de Pierres Moussu -Andesite Wall=Muret d'Andésite -Granite Wall=Muret de Granit -Diorite Wall=Muret de Diorite -Brick Wall=Muret en Brique -Sandstone Wall=Muret de Grès -Red Sandstone Wall=Muret de Grès Rouge -Stone Brick Wall=Muret de Pierre Taillé -Mossy Stone Brick Wall=Muret de Pierre Taillé Moussue -Prismarine Wall=Muret de Prismarine -End Stone Brick Wall=Muret de Brique de l'End -Nether Brick Wall=Muret de Brique du Nether -Red Nether Brick Wall=Muret de Brique Rouge du Nether diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr deleted file mode 100644 index 9d75eb18d..000000000 --- a/mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_walls -A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.=Kawałek ściany. Nie może być przeskoczony pojedynczym skokiem. Gdy kilka z nich jest położonych obok siebie, automatycznie połączą się one w ścianę. -Cobblestone Wall=Ściana z brukowca -Mossy Cobblestone Wall=Ściana z zamszonego brukowca -Andesite Wall=Andezytowa ściana -Granite Wall=Granitowa ściana -Diorite Wall=Diorytowa ściana -Brick Wall=Ceglana ściana -Sandstone Wall=Ściana z piaskowca -Red Sandstone Wall=Ściana z czerwienitu -Stone Brick Wall=Ściana z ceglanego kamienia -Mossy Stone Brick Wall=Ściana z zamszonego ceglanego kamienia -Prismarine Wall=Pryzmarynowa ściana -End Stone Brick Wall=Ściana z ceglanego kamienia Kresu -Nether Brick Wall=Ściana z Netherowej cegły -Red Nether Brick Wall=Ściana z czerwonej Netherowej cegły - diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.ru.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.ru.tr deleted file mode 100644 index deb0fa289..000000000 --- a/mods/ITEMS/mcl_walls/locale/mcl_walls.ru.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_walls -A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.=Часть стены. Её нельзя перепрыгнуть простым прыжком. Когда несколько из них будут расположены рядом друг с другом, они автоматически создадут хорошую структуру стены. -Cobblestone Wall=Стена из булыжника -Mossy Cobblestone Wall=Стена из мшистого булыжника -Andesite Wall=Андезитовая стена -Granite Wall=Гранитная стена -Diorite Wall=Диоритовая стена -Brick Wall=Кирпичная стена -Sandstone Wall=Стена из песчаника -Red Sandstone Wall=Стена из красного песчаника -Stone Brick Wall=Стена из каменного блока -Mossy Stone Brick Wall=Стена из мшистого каменного блока -Prismarine Wall=Призмариновая стена -End Stone Brick Wall=Стена из камня Предела -Nether Brick Wall=Стена из адского кирпича -Red Nether Brick Wall=Стена из красного адского кирпича diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.zh_TW.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.zh_TW.tr deleted file mode 100644 index 111241e04..000000000 --- a/mods/ITEMS/mcl_walls/locale/mcl_walls.zh_TW.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_walls -A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.=一塊牆。它不能用簡單的跳躍方式跳過去。當多個這樣的東西被放在一起時,它們會自動建立一個漂亮的牆體結構。 -Cobblestone Wall=鵝卵石牆 -Mossy Cobblestone Wall=青苔鵝卵石牆 -Andesite Wall=安山岩牆 -Granite Wall=花崗岩牆 -Diorite Wall=閃長岩牆 -Brick Wall=紅磚牆 -Sandstone Wall=砂岩牆 -Red Sandstone Wall=紅砂岩牆 -Stone Brick Wall=石磚牆 -Mossy Stone Brick Wall=青苔石磚牆 -Prismarine Wall=海磷石牆 -End Stone Brick Wall=終界石磚牆 -Nether Brick Wall=地獄磚牆 -Red Nether Brick Wall=紅地獄磚牆 diff --git a/mods/ITEMS/mcl_walls/locale/template.txt b/mods/ITEMS/mcl_walls/locale/template.txt deleted file mode 100644 index 765365997..000000000 --- a/mods/ITEMS/mcl_walls/locale/template.txt +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_walls -A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.= -Cobblestone Wall= -Mossy Cobblestone Wall= -Andesite Wall= -Granite Wall= -Diorite Wall= -Brick Wall= -Sandstone Wall= -Red Sandstone Wall= -Stone Brick Wall= -Mossy Stone Brick Wall= -Prismarine Wall= -End Stone Brick Wall= -Nether Brick Wall= -Red Nether Brick Wall= diff --git a/mods/ITEMS/mcl_walls/mod.conf b/mods/ITEMS/mcl_walls/mod.conf deleted file mode 100644 index 8839312de..000000000 --- a/mods/ITEMS/mcl_walls/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_walls -depends = mcl_core, mcl_end, mcl_ocean, mcl_nether, mcl_sounds -optional_depends = doc diff --git a/mods/ITEMS/mcl_walls/register.lua b/mods/ITEMS/mcl_walls/register.lua deleted file mode 100644 index 483af493e..000000000 --- a/mods/ITEMS/mcl_walls/register.lua +++ /dev/null @@ -1,16 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_walls.register_wall("mcl_walls:cobble", S("Cobblestone Wall"), "mcl_core:cobble", {"mcl_walls_cobble_wall_top.png", "default_cobble.png", "mcl_walls_cobble_wall_side.png"}) -mcl_walls.register_wall("mcl_walls:mossycobble", S("Mossy Cobblestone Wall"), "mcl_core:mossycobble", {"mcl_walls_cobble_mossy_wall_top.png", "default_mossycobble.png", "mcl_walls_cobble_mossy_wall_side.png"}) -mcl_walls.register_wall("mcl_walls:andesite", S("Andesite Wall"), "mcl_core:andesite") -mcl_walls.register_wall("mcl_walls:granite", S("Granite Wall"), "mcl_core:granite") -mcl_walls.register_wall("mcl_walls:diorite", S("Diorite Wall"), "mcl_core:diorite") -mcl_walls.register_wall("mcl_walls:brick", S("Brick Wall"), "mcl_core:brick_block") -mcl_walls.register_wall("mcl_walls:sandstone", S("Sandstone Wall"), "mcl_core:sandstone") -mcl_walls.register_wall("mcl_walls:redsandstone", S("Red Sandstone Wall"), "mcl_core:redsandstone") -mcl_walls.register_wall("mcl_walls:stonebrick", S("Stone Brick Wall"), "mcl_core:stonebrick") -mcl_walls.register_wall("mcl_walls:stonebrickmossy", S("Mossy Stone Brick Wall"), "mcl_core:stonebrickmossy") -mcl_walls.register_wall("mcl_walls:prismarine", S("Prismarine Wall"), "mcl_ocean:prismarine") -mcl_walls.register_wall("mcl_walls:endbricks", S("End Stone Brick Wall"), "mcl_end:end_bricks") -mcl_walls.register_wall("mcl_walls:netherbrick", S("Nether Brick Wall"), "mcl_nether:nether_brick") -mcl_walls.register_wall("mcl_walls:rednetherbrick", S("Red Nether Brick Wall"), "mcl_nether:red_nether_brick") diff --git a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_mossy_wall_side.png b/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_mossy_wall_side.png deleted file mode 100644 index 69d575d98..000000000 Binary files a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_mossy_wall_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_mossy_wall_top.png b/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_mossy_wall_top.png deleted file mode 100644 index c6ca4c364..000000000 Binary files a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_mossy_wall_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_wall_side.png b/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_wall_side.png deleted file mode 100644 index 01937236d..000000000 Binary files a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_wall_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_wall_top.png b/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_wall_top.png deleted file mode 100644 index bdde29c6c..000000000 Binary files a/mods/ITEMS/mcl_walls/textures/mcl_walls_cobble_wall_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/README.txt b/mods/ITEMS/mcl_wool/README.txt deleted file mode 100644 index ae902b951..000000000 --- a/mods/ITEMS/mcl_wool/README.txt +++ /dev/null @@ -1,15 +0,0 @@ -Minetest 0.4 mod: wool -====================== - -Mostly backward-compatible with jordach's 16-color wool mod. - -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - diff --git a/mods/ITEMS/mcl_wool/credit.txt b/mods/ITEMS/mcl_wool/credit.txt deleted file mode 100644 index e35ec0252..000000000 --- a/mods/ITEMS/mcl_wool/credit.txt +++ /dev/null @@ -1 +0,0 @@ -jojoa1997:carpet diff --git a/mods/ITEMS/mcl_wool/init.lua b/mods/ITEMS/mcl_wool/init.lua deleted file mode 100644 index 65cbb8708..000000000 --- a/mods/ITEMS/mcl_wool/init.lua +++ /dev/null @@ -1,129 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - --- minetest/wool/init.lua - --- Backwards compatibility with jordach's 16-color wool mod -minetest.register_alias("mcl_wool:dark_blue", "wool:blue") -minetest.register_alias("mcl_wool:gold", "wool:yellow") - -local wool = {} --- This uses a trick: you can first define the recipes using all of the base --- colors, and then some recipes using more specific colors for a few non-base --- colors available. When crafting, the last recipes will be checked first. -wool.dyes = { - -- name, texture, wool desc., carpet desc., dye, color_group - {"white", "wool_white", S("White Wool"), S("White Carpet"), nil, "unicolor_white"}, - {"grey", "wool_dark_grey", S("Grey Wool"), S("Grey Carpet"), "dark_grey", "unicolor_darkgrey"}, - {"silver", "wool_grey", S("Light Grey Wool"), S("Light Grey Carpet"), "grey", "unicolor_grey"}, - {"black", "wool_black", S("Black Wool"), S("Black Carpet"), "black", "unicolor_black"}, - {"red", "wool_red", S("Red Wool"), S("Red Carpet"), "red", "unicolor_red"}, - {"yellow", "wool_yellow", S("Yellow Wool"), S("Yellow Carpet"), "yellow", "unicolor_yellow"}, - {"green", "wool_dark_green", S("Green Wool"), S("Green Carpet"), "dark_green", "unicolor_dark_green"}, - {"cyan", "wool_cyan", S("Cyan Wool"), S("Cyan Carpet"), "cyan", "unicolor_cyan"}, - {"blue", "wool_blue", S("Blue Wool"), S("Blue Carpet"), "blue", "unicolor_blue"}, - {"magenta", "wool_magenta", S("Magenta Wool"), S("Magenta Carpet"), "magenta", "unicolor_red_violet"}, - {"orange", "wool_orange", S("Orange Wool"), S("Orange Carpet"), "orange", "unicolor_orange"}, - {"purple", "wool_violet", S("Purple Wool"), S("Purple Carpet"), "violet", "unicolor_violet"}, - {"brown", "wool_brown", S("Brown Wool"), S("Brown Carpet"), "brown", "unicolor_dark_orange"}, - {"pink", "wool_pink", S("Pink Wool"), S("Pink Carpet"), "pink", "unicolor_light_red"}, - {"lime", "mcl_wool_lime", S("Lime Wool"), S("Lime Carpet"), "green", "unicolor_green"}, - {"light_blue", "mcl_wool_light_blue", S("Light Blue Wool"), S("Light Blue Carpet"), "lightblue", "unicolor_light_blue"}, -} -local canonical_color = "white" - -for _, row in ipairs(wool.dyes) do - local name = row[1] - local texture = row[2] - local desc_wool = row[3] - local desc_carpet = row[4] - local dye = row[5] - local color_group = row[6] - local longdesc_wool, longdesc_carpet, create_entry, name_wool, name_carpet - local is_canonical = name == canonical_color - if mod_doc then - if is_canonical then - longdesc_wool = S("Wool is a decorative block which comes in many different colors.") - longdesc_carpet = S("Carpets are thin floor covers which come in many different colors.") - name_wool = S("Wool") - name_carpet = S("Carpet") - else - create_entry = false - end - end - -- Node Definition - minetest.register_node("mcl_wool:"..name, { - description = desc_wool, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = name_wool, - _doc_items_longdesc = longdesc_wool, - stack_max = 64, - is_ground_content = false, - tiles = {texture..".png"}, - groups = {handy=1,shearsy_wool=1, flammable=1,fire_encouragement=30, fire_flammability=60, wool=1,building_block=1,[color_group]=1}, - sounds = mcl_sounds.node_sound_wool_defaults(), - _mcl_hardness = 0.8, - _mcl_blast_resistance = 0.8, - }) - minetest.register_node("mcl_wool:"..name.."_carpet", { - description = desc_carpet, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = name_carpet, - _doc_items_longdesc = longdesc_carpet, - - is_ground_content = false, - tiles = {texture..".png"}, - wield_image = texture..".png", - wield_scale = { x=1, y=1, z=0.5 }, - groups = {handy=1, carpet=1,supported_node=1,flammable=1,fire_encouragement=60, fire_flammability=20, dig_by_water=1,deco_block=1,[color_group]=1}, - sounds = mcl_sounds.node_sound_wool_defaults(), - paramtype = "light", - sunlight_propagates = true, - stack_max = 64, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, - }, - }, - _mcl_hardness = 0.1, - _mcl_blast_resistance = 0.1, - }) - if mod_doc and not is_canonical then - doc.add_entry_alias("nodes", "mcl_wool:"..canonical_color, "nodes", "mcl_wool:"..name) - doc.add_entry_alias("nodes", "mcl_wool:"..canonical_color.."_carpet", "nodes", "mcl_wool:"..name.."_carpet") - end - if dye then - -- Crafting from dye and white wool - minetest.register_craft({ - type = "shapeless", - output = "mcl_wool:"..name, - recipe = {"mcl_dye:"..dye, "mcl_wool:white"}, - }) - end - minetest.register_craft({ - output = "mcl_wool:"..name.."_carpet 3", - recipe = {{"mcl_wool:"..name, "mcl_wool:"..name}}, - }) -end - -minetest.register_craft({ - output = "mcl_wool:white", - recipe = { - { "mcl_mobitems:string", "mcl_mobitems:string" }, - { "mcl_mobitems:string", "mcl_mobitems:string" }, - }, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:wool", - burntime = 5, -}) -minetest.register_craft({ - type = "fuel", - recipe = "group:carpet", - -- Original value: 3.35 - burntime = 3, -}) diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr deleted file mode 100644 index 9f67a52fb..000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Wolle -Carpet=Teppich -White Wool=Weiße Wolle -White Carpet=Weißer Teppich -Grey Wool=Graue Wolle -Grey Carpet=Grauer Teppich -Light Grey Wool=Hellgraue Wolle -Light Grey Carpet=Hellgrauer Teppich -Black Wool=Schwarze Wolle -Black Carpet=Schwarzer Teppich -Red Wool=Rote Wolle -Red Carpet=Roter Teppich -Yellow Wool=Gelbe Wolle -Yellow Carpet=Gelber Teppich -Green Wool=Grüne Wolle -Green Carpet=Grüner Teppich -Cyan Wool=Türkise Wolle -Cyan Carpet=Türkiser Teppich -Blue Wool=Blaue Wolle -Blue Carpet=Blauer Teppich -Magenta Wool=Magenta Wolle -Magenta Carpet=Magenta Teppich -Orange Wool=Orange Wolle -Orange Carpet=Oranger Teppich -Purple Wool=Violette Wolle -Purple Carpet=Violetter Teppich -Brown Wool=Braune Wolle -Brown Carpet=Brauner Teppich -Pink Wool=Rosa Wolle -Pink Carpet=Rosa Teppich -Lime Wool=Lindgrüne Wolle -Lime Carpet=Lindgrüner Teppich -Light Blue Wool=Hellblaue Wolle -Light Blue Carpet=Hellblauer Teppich -Wool is a decorative block which comes in many different colors.=Wolle ist ein dekorativer Block, den es in vielen verschiedenen Farben gibt. -Carpets are thin floor covers which come in many different colors.=Teppiche sind dünne Bodenbeläge, die es in vielen verschiedenen Farben gibt. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.es.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.es.tr deleted file mode 100644 index fa9253eed..000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.es.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Lana -Carpet=Alfombra -White Wool=Lana blanca -White Carpet=Alfombra blanca -Grey Wool=Lana gris -Grey Carpet=Alfombra gris -Light Grey Wool=Lana gris claro -Light Grey Carpet=Alfombra gris claro -Black Wool=Lana negra -Black Carpet=Alfombra negra -Red Wool=Lana roja -Red Carpet=Alfombra roja -Yellow Wool=Lana amarilla -Yellow Carpet=Alfombra amarilla -Green Wool=Lana verde -Green Carpet=Alfombra verde -Cyan Wool=Lana cian -Cyan Carpet=Alfombra cian -Blue Wool=Lana azul -Blue Carpet=Alfombra azul -Magenta Wool=Lana magenta -Magenta Carpet=Alfombra magenta -Orange Wool=Lana naranja -Orange Carpet=Alfombra naranja -Purple Wool=Lana morada -Purple Carpet=Alfombra morada -Brown Wool=Lana marrón -Brown Carpet=Alfombra marrón -Pink Wool=Lana rosa -Pink Carpet=Alfombra rosa -Lime Wool=Lana verde lima -Lime Carpet=Alfombra verde lima -Light Blue Wool=Lana azul claro -Light Blue Carpet=Alfombra azul claro -Wool is a decorative block which comes in many different colors.=WLa lana es un bloque decorativo que viene en muchos colores diferentes. -Carpets are thin floor covers which come in many different colors.=Las alfombras son finas cubiertas para el suelo que vienen en muchos colores diferentes. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.fr.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.fr.tr deleted file mode 100644 index 6b93eab08..000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.fr.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Laine -Carpet=Tapis -White Wool=Laine Blanche -White Carpet=Tapis Blanc -Grey Wool=Laine Grise -Grey Carpet=Tapis Gris -Light Grey Wool=Laine Gris Clair -Light Grey Carpet=Tapis Gris Clair -Black Wool=Laine Noire -Black Carpet=Tapis Noir -Red Wool=Laine Rouge -Red Carpet=Tapis Rouge -Yellow Wool=Laine Jaune -Yellow Carpet=Tapis Jaune -Green Wool=Laine Verte -Green Carpet=Tapis Vert -Cyan Wool=Lain Cyan -Cyan Carpet=Tapis Cyan -Blue Wool=Laine Bleue -Blue Carpet=Tapis Bleu -Magenta Wool=Laine Magenta -Magenta Carpet=Tapis Magenta -Orange Wool=Laine Orange -Orange Carpet=Tapis Orange -Purple Wool=Laine Violette -Purple Carpet=Tapis Violet -Brown Wool=Laine Marron -Brown Carpet=Tapis Marron -Pink Wool=Laine Rose -Pink Carpet=Tapis Rose -Lime Wool=Laine Vert Clair -Lime Carpet=Tapis Vert Clair -Light Blue Wool=Laine Bleu Clair -Light Blue Carpet=Tapis Bleu Clair -Wool is a decorative block which comes in many different colors.=La laine est un bloc décoratif disponible en différentes couleurs. -Carpets are thin floor covers which come in many different colors.=Les tapis sont des revêtements de sol minces qui viennent dans de nombreuses couleurs différentes. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr deleted file mode 100644 index ac92171d1..000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Wełna -Carpet=Dywan -White Wool=Biała wełna -White Carpet=Biały dywan -Grey Wool=Szara wełna -Grey Carpet=Szary dywan -Light Grey Wool=Jasnoszara wełna -Light Grey Carpet=Jasnoszary dywan -Black Wool=Czarna wełna -Black Carpet=Czarny dywan -Red Wool=Czerwona wełna -Red Carpet=Czerwony dywan -Yellow Wool=Żółta wełna -Yellow Carpet=Żółty dywan -Green Wool=Zielona wełna -Green Carpet=Zielony dywan -Cyan Wool=Błękitna wełna -Cyan Carpet=Błękitny dywan -Blue Wool=Niebieska wełna -Blue Carpet=Niebieski dywan -Magenta Wool=Karmazynowa wełna -Magenta Carpet=Karmazynowy dywan -Orange Wool=Pomarańczowa wełna -Orange Carpet=Pomarańczowy dywan -Purple Wool=Fioletowa wełna -Purple Carpet=Fioletowy dywan -Brown Wool=Brązowa wełna -Brown Carpet=Brązowy dywan -Pink Wool=Różowa wełna -Pink Carpet=Różowy dywan -Lime Wool=Jasnozielona wełna -Lime Carpet=Jasnozielony dywan -Light Blue Wool=Jasnoniebieska wełna -Light Blue Carpet=Jasnoniebieski dywan -Wool is a decorative block which comes in many different colors.=Wełna jest blokiem dekoracyjnym, który może mieć wiele różnych kolorów. -Carpets are thin floor covers which come in many different colors.=Dywany są cienkimi pokrywami na podłogi, które mogą mieć wiele różnych kolorów. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.ru.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.ru.tr deleted file mode 100644 index 6b05812a2..000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.ru.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Шерсть -Carpet=Ковёр -White Wool=Белая шерсть -White Carpet=Белый ковёр -Grey Wool=Серая шерсть -Grey Carpet=Серый ковёр -Light Grey Wool=Светло-серая шерсть -Light Grey Carpet=Светло-серый ковёр -Black Wool=Чёрная шерсть -Black Carpet=Чёрный ковёр -Red Wool=Красная шерсть -Red Carpet=Красный ковёр -Yellow Wool=Жёлтая шерсть -Yellow Carpet=Жёлтый ковёр -Green Wool=Зелёная шерсть -Green Carpet=Зелёный ковёр -Cyan Wool=Голубая шерсть -Cyan Carpet=Голубой ковёр -Blue Wool=Синяя шерсть -Blue Carpet=Синий ковёр -Magenta Wool=Фиолетовая шерсть -Magenta Carpet=Фиолетовый ковёр -Orange Wool=Оранжевая шерсть -Orange Carpet=Оранжевый ковёр -Purple Wool=Пурпурная шерсть -Purple Carpet=Пурпурный ковёр -Brown Wool=Коричневая шерсть -Brown Carpet=Коричневый ковёр -Pink Wool=Розовая шерсть -Pink Carpet=Розовый ковёр -Lime Wool=Зелёная лаймовая шерсть -Lime Carpet=Зелёный лаймовый ковёр -Light Blue Wool=Светло-голубая шерсть -Light Blue Carpet=Светло-голубой ковёр -Wool is a decorative block which comes in many different colors.=Шерсть это декоративный блок, который может быть разных цветов. -Carpets are thin floor covers which come in many different colors.=Ковры это тонкие напольные покрытия, которые бывают разных цветов. diff --git a/mods/ITEMS/mcl_wool/locale/template.txt b/mods/ITEMS/mcl_wool/locale/template.txt deleted file mode 100644 index 26de1ec7a..000000000 --- a/mods/ITEMS/mcl_wool/locale/template.txt +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool= -Carpet= -White Wool= -White Carpet= -Grey Wool= -Grey Carpet= -Light Grey Wool= -Light Grey Carpet= -Black Wool= -Black Carpet= -Red Wool= -Red Carpet= -Yellow Wool= -Yellow Carpet= -Green Wool= -Green Carpet= -Cyan Wool= -Cyan Carpet= -Blue Wool= -Blue Carpet= -Magenta Wool= -Magenta Carpet= -Orange Wool= -Orange Carpet= -Purple Wool= -Purple Carpet= -Brown Wool= -Brown Carpet= -Pink Wool= -Pink Carpet= -Lime Wool= -Lime Carpet= -Light Blue Wool= -Light Blue Carpet= -Wool is a decorative block which comes in many different colors.= -Carpets are thin floor covers which come in many different colors.= diff --git a/mods/ITEMS/mcl_wool/mod.conf b/mods/ITEMS/mcl_wool/mod.conf deleted file mode 100644 index b7e9a4dab..000000000 --- a/mods/ITEMS/mcl_wool/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_wool -depends = mcl_sounds -optional_depends = doc diff --git a/mods/ITEMS/mcl_wool/textures/mcl_wool_light_blue.png b/mods/ITEMS/mcl_wool/textures/mcl_wool_light_blue.png deleted file mode 100644 index 3d37d909e..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/mcl_wool_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/mcl_wool_lime.png b/mods/ITEMS/mcl_wool/textures/mcl_wool_lime.png deleted file mode 100644 index 6d57a55d4..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/mcl_wool_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_black.png b/mods/ITEMS/mcl_wool/textures/wool_black.png deleted file mode 100644 index 88d2b587e..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_blue.png b/mods/ITEMS/mcl_wool/textures/wool_blue.png deleted file mode 100644 index d8f687f88..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_brown.png b/mods/ITEMS/mcl_wool/textures/wool_brown.png deleted file mode 100644 index 04cf6eb83..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_cyan.png b/mods/ITEMS/mcl_wool/textures/wool_cyan.png deleted file mode 100644 index d4e48d6ad..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_dark_green.png b/mods/ITEMS/mcl_wool/textures/wool_dark_green.png deleted file mode 100644 index 9e3c29f2e..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_dark_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_dark_grey.png b/mods/ITEMS/mcl_wool/textures/wool_dark_grey.png deleted file mode 100644 index e2af0870c..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_dark_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_grey.png b/mods/ITEMS/mcl_wool/textures/wool_grey.png deleted file mode 100644 index 69273bfe0..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_magenta.png b/mods/ITEMS/mcl_wool/textures/wool_magenta.png deleted file mode 100644 index 6f727a973..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_orange.png b/mods/ITEMS/mcl_wool/textures/wool_orange.png deleted file mode 100644 index 45e0059f6..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_pink.png b/mods/ITEMS/mcl_wool/textures/wool_pink.png deleted file mode 100644 index bd6ae334b..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_red.png b/mods/ITEMS/mcl_wool/textures/wool_red.png deleted file mode 100644 index 4c84133a1..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_violet.png b/mods/ITEMS/mcl_wool/textures/wool_violet.png deleted file mode 100644 index 12fb3ebb7..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_violet.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_white.png b/mods/ITEMS/mcl_wool/textures/wool_white.png deleted file mode 100644 index 794cbb15f..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_yellow.png b/mods/ITEMS/mcl_wool/textures/wool_yellow.png deleted file mode 100644 index f736967fe..000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mclx_core/init.lua b/mods/ITEMS/mclx_core/init.lua deleted file mode 100644 index 4bb40184a..000000000 --- a/mods/ITEMS/mclx_core/init.lua +++ /dev/null @@ -1,54 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Liquids: River Water - -local source = table.copy(minetest.registered_nodes["mcl_core:water_source"]) -source.description = S("River Water Source") -source.liquid_range = 2 -source.liquid_alternative_flowing = "mclx_core:river_water_flowing" -source.liquid_alternative_source = "mclx_core:river_water_source" -source.liquid_renewable = false -source._doc_items_longdesc = S("River water has the same properties as water, but has a reduced flowing distance and is not renewable.") -source._doc_items_entry_name = S("River Water") --- Auto-expose entry only in valleys mapgen -source._doc_items_hidden = minetest.get_mapgen_setting("mg_name") ~= "valleys" -source.post_effect_color = {a=192, r=0x2c, g=0x88, b=0x8c} -source.tiles = { - {name="default_river_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}} -} -source.special_tiles = { - -- New-style water source material (mostly unused) - { - name="default_river_water_source_animated.png", - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}, - backface_culling = false, - } -} - -local flowing = table.copy(minetest.registered_nodes["mcl_core:water_flowing"]) -flowing.description = S("Flowing River Water") -flowing.liquid_range = 2 -flowing.liquid_alternative_flowing = "mclx_core:river_water_flowing" -flowing.liquid_alternative_source = "mclx_core:river_water_source" -flowing.liquid_renewable = false -flowing.tiles = {"default_river_water_flowing_animated.png^[verticalframe:64:0"} -flowing.post_effect_color = {a=192, r=0x2c, g=0x88, b=0x8c} -flowing.special_tiles = { - { - image="default_river_water_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0} - }, - { - image="default_river_water_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0} - }, -} - -minetest.register_node("mclx_core:river_water_source", source) -minetest.register_node("mclx_core:river_water_flowing", flowing) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mclx_core:river_water_source", "nodes", "mclx_core:river_water_flowing") -end diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.de.tr b/mods/ITEMS/mclx_core/locale/mclx_core.de.tr deleted file mode 100644 index f4591810c..000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Flusswasserquelle -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=Flusswasser hat die gleichen Eigenschaften wie Wasser, aber es hat eine reduzierte Fließweite und ist nicht erneuerbar. -River Water=Flusswasser -Flowing River Water=Fließendes Flusswasser diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.es.tr b/mods/ITEMS/mclx_core/locale/mclx_core.es.tr deleted file mode 100644 index 0f50a08cb..000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.es.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Fuente de agua de río -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=El agua del río tiene las mismas propiedades que el agua, pero tiene una distancia de flujo reducida y no es renovable. -River Water=Agua de rio -Flowing River Water=Agua de río que fluye diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.fr.tr b/mods/ITEMS/mclx_core/locale/mclx_core.fr.tr deleted file mode 100644 index eaabebecf..000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Source d'eau de rivière -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=L'eau de rivière a les mêmes propriétés que l'eau, mais a une distance d'écoulement réduite et n'est pas renouvelable. -River Water=L'eau de rivière -Flowing River Water=Eau de rivière qui coule diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr b/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr deleted file mode 100644 index 757507065..000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Źródło wody rzecznej -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=Woda rzeczna ma takie same własności jak woda, ale ma zmniejszony zasięg płynięcia i nie jest odnawialna. -River Water=Woda rzeczna -Flowing River Water=Płynąca woda rzeczna diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.ru.tr b/mods/ITEMS/mclx_core/locale/mclx_core.ru.tr deleted file mode 100644 index 1f3155b58..000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Источник речной воды -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=Речная вода имеет все свойства простой воды, но течёт не так далеко и не возобновляется. -River Water=Речная вода -Flowing River Water=Текущая речная вода diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.zh_TW.tr b/mods/ITEMS/mclx_core/locale/mclx_core.zh_TW.tr deleted file mode 100644 index 649fc353d..000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.zh_TW.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=河水源頭 -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=河水具有與水相同的特性,但流動距離較短,且不可再生。 -River Water=河水 -Flowing River Water=流動的河水 diff --git a/mods/ITEMS/mclx_core/locale/template.txt b/mods/ITEMS/mclx_core/locale/template.txt deleted file mode 100644 index 1486ee301..000000000 --- a/mods/ITEMS/mclx_core/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source= -River water has the same properties as water, but has a reduced flowing distance and is not renewable.= -River Water= -Flowing River Water= diff --git a/mods/ITEMS/mclx_core/mod.conf b/mods/ITEMS/mclx_core/mod.conf deleted file mode 100644 index 62e8d5fb3..000000000 --- a/mods/ITEMS/mclx_core/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mclx_core -description = Core items not found in Minecraft -depends = mcl_core -optional_depends = doc diff --git a/mods/ITEMS/mclx_core/textures/default_river_water_flowing_animated.png b/mods/ITEMS/mclx_core/textures/default_river_water_flowing_animated.png deleted file mode 100644 index 9e126d3c1..000000000 Binary files a/mods/ITEMS/mclx_core/textures/default_river_water_flowing_animated.png and /dev/null differ diff --git a/mods/ITEMS/mclx_core/textures/default_river_water_source_animated.png b/mods/ITEMS/mclx_core/textures/default_river_water_source_animated.png deleted file mode 100644 index fb8ae17bd..000000000 Binary files a/mods/ITEMS/mclx_core/textures/default_river_water_source_animated.png and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/README.txt b/mods/ITEMS/mclx_fences/README.txt deleted file mode 100644 index 784e8b6c5..000000000 --- a/mods/ITEMS/mclx_fences/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -## Extra fences -This mod adds a few extra fences to MCL2. - -## Licensing -The sound files - - mcl_fences_nether_brick_fence_gate_open.ogg - -and - - mcl_fences_nether_brick_fence_gate_close.ogg - -were derived from sounds made by Freesound.org user Slanesh. -The license is CC BY 3.0 . - -Source: - -Everything else is under the MIT License. diff --git a/mods/ITEMS/mclx_fences/init.lua b/mods/ITEMS/mclx_fences/init.lua deleted file mode 100644 index e78c7ef7f..000000000 --- a/mods/ITEMS/mclx_fences/init.lua +++ /dev/null @@ -1,66 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Red Nether Brick Fence - -mcl_fences.register_fence_and_fence_gate( - "red_nether_brick_fence", - S("Red Nether Brick Fence"), S("Red Nether Brick Fence Gate"), - "mcl_fences_fence_red_nether_brick.png", - {pickaxey=1, deco_block=1, fence_nether_brick=1}, - minetest.registered_nodes["mcl_nether:red_nether_brick"]._mcl_hardness, - minetest.registered_nodes["mcl_nether:red_nether_brick"]._mcl_blast_resistance, - {"group:fence_nether_brick"}, - mcl_sounds.node_sound_stone_defaults(), "mcl_fences_nether_brick_fence_gate_open", "mcl_fences_nether_brick_fence_gate_close", 1, 1, - "mcl_fences_fence_gate_red_nether_brick.png") - -mcl_fences.register_fence_gate( - "nether_brick_fence", - S("Nether Brick Fence Gate"), - "mcl_fences_fence_gate_nether_brick.png", - {pickaxey=1, deco_block=1, fence_nether_brick=1}, - minetest.registered_nodes["mcl_nether:nether_brick"]._mcl_hardness, - minetest.registered_nodes["mcl_nether:nether_brick"]._mcl_blast_resistance, - mcl_sounds.node_sound_stone_defaults(), "mcl_fences_nether_brick_fence_gate_open", "mcl_fences_nether_brick_fence_gate_close", 1, 1) - --- Crafting - -minetest.register_craft({ - output = "mclx_fences:red_nether_brick_fence 6", - recipe = { - {"mcl_nether:red_nether_brick", "mcl_nether:netherbrick", "mcl_nether:red_nether_brick"}, - {"mcl_nether:red_nether_brick", "mcl_nether:netherbrick", "mcl_nether:red_nether_brick"}, - } -}) - -minetest.register_craft({ - output = "mclx_fences:red_nether_brick_fence_gate", - recipe = { - {"mcl_nether:nether_wart_item", "mcl_nether:red_nether_brick", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:red_nether_brick", "mcl_nether:nether_wart_item"}, - } -}) -minetest.register_craft({ - output = "mclx_fences:red_nether_brick_fence_gate", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:red_nether_brick", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:red_nether_brick", "mcl_nether:netherbrick"}, - } -}) - -minetest.register_craft({ - output = "mclx_fences:nether_brick_fence_gate 2", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:nether_brick", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:nether_brick", "mcl_nether:netherbrick"}, - } -}) - - --- Aliases for mcl_supplemental -minetest.register_alias("mcl_supplemental:red_nether_brick_fence", "mclx_fences:red_nether_brick_fence") - -minetest.register_alias("mcl_supplemental:nether_brick_fence_gate", "mclx_fences:nether_brick_fence_gate") -minetest.register_alias("mcl_supplemental:nether_brick_fence_gate_open", "mclx_fences:nether_brick_fence_gate_open") - -minetest.register_alias("mcl_supplemental:red_nether_brick_fence_gate", "mclx_fences:red_nether_brick_fence_gate") -minetest.register_alias("mcl_supplemental:red_nether_brick_fence_gate_open", "mclx_fences:red_nether_brick_fence_gate_open") diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.de.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.de.tr deleted file mode 100644 index 9aab02648..000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.de.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Roter Netherziegelzaun -Red Nether Brick Fence Gate=Rotes Netherziegelzauntor -Nether Brick Fence Gate=Netherziegelzauntor diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.es.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.es.tr deleted file mode 100644 index 4531435bf..000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Valla de ladrillo abisal rojo -Red Nether Brick Fence Gate=Puerta de ladrillo abisal rojo -Nether Brick Fence Gate=Puerta de ladrillo abisal diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.fr.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.fr.tr deleted file mode 100644 index 244b588c1..000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Barrière en Brique Rouge du Nether -Red Nether Brick Fence Gate=Porte de Barrière en Brique Rouge du Nether -Nether Brick Fence Gate=Porte de Barrière en Brique du Nether diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr deleted file mode 100644 index ecdd84562..000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Płot z czerwonej netherowej cegły -Red Nether Brick Fence Gate=Furtka z czerwonej netherowej cegły -Nether Brick Fence Gate=Furtka z netherowej cegły diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.ru.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.ru.tr deleted file mode 100644 index 146fb4dd7..000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Забор из красного адского кирпича -Red Nether Brick Fence Gate=Ворота из красного адского кирпича -Nether Brick Fence Gate=Ворота из адского кирпича diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.zh_TW.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.zh_TW.tr deleted file mode 100644 index bf06d7240..000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.zh_TW.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=紅地獄磚柵欄 -Red Nether Brick Fence Gate=紅地獄磚柵欄門 -Nether Brick Fence Gate=地獄磚柵欄門 diff --git a/mods/ITEMS/mclx_fences/locale/template.txt b/mods/ITEMS/mclx_fences/locale/template.txt deleted file mode 100644 index e6c05c7f7..000000000 --- a/mods/ITEMS/mclx_fences/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence= -Red Nether Brick Fence Gate= -Nether Brick Fence Gate= diff --git a/mods/ITEMS/mclx_fences/mod.conf b/mods/ITEMS/mclx_fences/mod.conf deleted file mode 100644 index a4795159d..000000000 --- a/mods/ITEMS/mclx_fences/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mclx_fences -description = Additional fences and fence gates -depends = mcl_fences diff --git a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_close.ogg b/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_close.ogg deleted file mode 100644 index 4e7b3fe7f..000000000 Binary files a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_open.ogg b/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_open.ogg deleted file mode 100644 index 4c2108e6b..000000000 Binary files a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_nether_brick.png b/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_nether_brick.png deleted file mode 100644 index 58bc85dbe..000000000 Binary files a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_red_nether_brick.png b/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_red_nether_brick.png deleted file mode 100644 index 2436408bd..000000000 Binary files a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_red_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_red_nether_brick.png b/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_red_nether_brick.png deleted file mode 100644 index ee7501818..000000000 Binary files a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_red_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mclx_stairs/init.lua b/mods/ITEMS/mclx_stairs/init.lua deleted file mode 100644 index effa87f13..000000000 --- a/mods/ITEMS/mclx_stairs/init.lua +++ /dev/null @@ -1,145 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local doc_mod = minetest.get_modpath("doc") - - -local barks = { - { "", S("Oak Bark Stairs"), S("Oak Bark Slab"), S("Double Oak Bark Slab") }, - { "jungle", S("Jungle Bark Stairs"), S("Jungle Bark Slab"), S("Double Jungle Bark Slab") }, - { "acacia", S("Acacia Bark Stairs"), S("Acacia Bark Slab"), S("Double Acacia Bark Slab") }, - { "spruce", S("Spruce Bark Stairs"), S("Spruce Bark Slab"), S("Double Spruce Bark Slab") }, - { "birch", S("Birch Bark Stairs"), S("Birch Bark Slab"), S("Double Birch Bark Slab") }, - { "dark", S("Dark Oak Bark Stairs"), S("Dark Oak Bark Slab"), S("Double Dark Oak Bark Slab") }, -} - -for b=1, #barks do - local bark = barks[b] - local sub = bark[1].."tree_bark" - local id = "mcl_core:tree" - if bark[1] ~= "" then - id = "mcl_core:"..bark[1].."tree" - end - mcl_stairs.register_stair(sub, id, - {handy=1,axey=1, flammable=3, bark_stairs=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, - {minetest.registered_nodes[id].tiles[3]}, - bark[2], - mcl_sounds.node_sound_wood_defaults(), 3, 2, - "woodlike") - mcl_stairs.register_slab(sub, id, - {handy=1,axey=1, flammable=3, bark_slab=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, - {minetest.registered_nodes[id].tiles[3]}, - bark[3], - mcl_sounds.node_sound_wood_defaults(), 3, 2, - bark[4]) -end - -mcl_stairs.register_slab("lapisblock", "mcl_core:lapisblock", - {pickaxey=3}, - {"mcl_core_lapis_block.png", "mcl_core_lapis_block.png", "mcl_stairs_lapis_block_slab.png"}, - S("Lapis Lazuli Slab"), - nil, nil, nil, - S("Double Lapis Lazuli Slab")) -mcl_stairs.register_stair("lapisblock", "mcl_core:lapisblock", - {pickaxey=3}, - {"mcl_stairs_lapis_block_slab.png", "mcl_core_lapis_block.png", "mcl_core_lapis_block.png", "mcl_core_lapis_block.png", "mcl_core_lapis_block.png", "mcl_stairs_lapis_block_slab.png"}, - S("Lapis Lazuli Stairs"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_slab("goldblock", "mcl_core:goldblock", - {pickaxey=4}, - {"default_gold_block.png", "default_gold_block.png", "mcl_stairs_gold_block_slab.png"}, - S("Slab of Gold"), - nil, nil, nil, - S("Double Slab of Gold")) -mcl_stairs.register_stair("goldblock", "mcl_core:goldblock", - {pickaxey=4}, - {"mcl_stairs_gold_block_slab.png", "default_gold_block.png", "default_gold_block.png", "default_gold_block.png", "default_gold_block.png", "mcl_stairs_gold_block_slab.png"}, - S("Stairs of Gold"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_slab("ironblock", "mcl_core:ironblock", - {pickaxey=2}, - {"default_steel_block.png", "default_steel_block.png", "mcl_stairs_iron_block_slab.png"}, - S("Slab of Iron"), - nil, nil, nil, - S("Double Slab of Iron")) -mcl_stairs.register_stair("ironblock", "mcl_core:ironblock", - {pickaxey=2}, - {"mcl_stairs_iron_block_slab.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "mcl_stairs_iron_block_slab.png"}, - S("Stairs of Iron"), - nil, 6, nil, - "woodlike") - -mcl_stairs.register_stair("stonebrickcracked", "mcl_core:stonebrickcracked", - {pickaxey=1}, - {"mcl_core_stonebrick_cracked.png"}, - S("Cracked Stone Brick Stairs"), - mcl_sounds.node_sound_stone_defaults(), 6, 1.5, - "woodlike") - -mcl_stairs.register_slab("stonebrickcracked", "mcl_core:stonebrickcracked", - {pickaxey=1}, - {"mcl_core_stonebrick_cracked.png"}, - S("Cracked Stone Brick Slab"), - mcl_sounds.node_sound_stone_defaults(), 6, 2, - S("Double Cracked Stone Brick Slab")) - -local block = {} -block.dyes = { - {"white", S("White Concrete Stairs"), S("White Concrete Slab"), S("Double White Concrete Slab"), "white"}, - {"grey", S("Grey Concrete Stairs"), S("Grey Concrete Slab"), S("Double Grey Concrete Slab"), "dark_grey"}, - {"silver", S("Light Grey Concrete Stairs"), S("Light Grey Concrete Slab"), S("Double Light Grey Concrete Slab"), "grey"}, - {"black", S("Black Concrete Stairs"), S("Black Concrete Slab"), S("Double Black Concrete Slab"), "black"}, - {"red", S("Red Concrete Stairs"), S("Red Concrete Slab"), S("Double Red Concrete Slab"), "red"}, - {"yellow", S("Yellow Concrete Stairs"), S("Yellow Concrete Slab"), S("Double Yellow Concrete Slab"), "yellow"}, - {"green", S("Green Concrete Stairs"), S("Green Concrete Slab"), S("Double Green Concrete Slab"), "dark_green"}, - {"cyan", S("Cyan Concrete Stairs"), S("Cyan Concrete Slab"), S("Double Cyan Concrete Slab"), "cyan"}, - {"blue", S("Blue Concrete Stairs"), S("Blue Concrete Slab"), S("Double Blue Concrete Slab"), "blue"}, - {"magenta", S("Magenta Concrete Stairs"), S("Magenta Concrete Slab"), S("Double Magenta Concrete Slab"), "magenta"}, - {"orange", S("Orange Concrete Stairs"), S("Orange Concrete Slab"), S("Double Orange Concrete Slab"), "orange"}, - {"purple", S("Purple Concrete Stairs"), S("Purple Concrete Slab"), S("Double Purple Concrete Slab"), "violet"}, - {"brown", S("Brown Concrete Stairs"), S("Brown Concrete Slab"), S("Double Brown Concrete Slab"), "brown"}, - {"pink", S("Pink Concrete Stairs"), S("Pink Concrete Slab"), S("Double Pink Concrete Slab"), "pink"}, - {"lime", S("Lime Concrete Stairs"), S("Lime Concrete Slab"), S("Double Lime Concrete Slab"), "green"}, - {"light_blue", S("Light Blue Concrete Stairs"), S("Light Blue Concrete Slab"), S("Double Light Blue Concrete Slab"), "lightblue"}, -} -local canonical_color = "yellow" - -for i=1, #block.dyes do - local c = block.dyes[i][1] - local is_canonical = c == canonical_color - mcl_stairs.register_stair_and_slab_simple("concrete_"..c, "mcl_colorblocks:concrete_"..c, - block.dyes[i][2], - block.dyes[i][3], - block.dyes[i][4]) - - if doc_mod then - if not is_canonical then - doc.add_entry_alias("nodes", "mcl_stairs:slab_concrete_"..canonical_color, "nodes", "mcl_stairs:slab_concrete_"..c) - doc.add_entry_alias("nodes", "mcl_stairs:slab_concrete_"..canonical_color.."_double", "nodes", "mcl_stairs:slab_concrete_"..c.."_double") - doc.add_entry_alias("nodes", "mcl_stairs:stair_concrete_"..canonical_color, "nodes", "mcl_stairs:stair_concrete_"..c) - minetest.override_item("mcl_stairs:slab_concrete_"..c, { _doc_items_create_entry = false }) - minetest.override_item("mcl_stairs:slab_concrete_"..c.."_double", { _doc_items_create_entry = false }) - minetest.override_item("mcl_stairs:stair_concrete_"..c, { _doc_items_create_entry = false }) - else - minetest.override_item("mcl_stairs:slab_concrete_"..c, { _doc_items_entry_name = S("Concrete Slab") }) - minetest.override_item("mcl_stairs:slab_concrete_"..c.."_double", { _doc_items_entry_name = S("Double Concrete Slab") }) - minetest.override_item("mcl_stairs:stair_concrete_"..c, { _doc_items_entry_name = S("Concrete Stairs") }) - end - end -end - --- Fuel -minetest.register_craft({ - type = "fuel", - recipe = "group:bark_stairs", - -- Same as wood stairs - burntime = 15, -}) -minetest.register_craft({ - type = "fuel", - recipe = "group:bark_slab", - -- Same as wood slab - burntime = 8, -}) diff --git a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.de.tr b/mods/ITEMS/mclx_stairs/locale/mclx_stairs.de.tr deleted file mode 100644 index c6f9f65d7..000000000 --- a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.de.tr +++ /dev/null @@ -1,82 +0,0 @@ -# textdomain: mclx_stairs -Oak Bark Stairs=Eichenrindentreppe -Oak Bark Slab=Eichenrindenplatte -Double Oak Bark Slab=Doppeleichenrindenplatte -Acacia Bark Stairs=Akazienrindentreppe -Acacia Bark Slab=Akazienrindenplatte -Double Acacia Bark Slab=Doppelakazienrindenplatte -Spruce Bark Stairs=Fichtenrindentreppe -Spruce Bark Slab=Fichtenrindenplatte -Double Spruce Bark Slab=Doppelfichtenrindenplatte -Birch Bark Stairs=Birkenrindentreppe -Birch Bark Slab=Birkenrindenplatte -Double Birch Bark Slab=Doppelbirkenrindenplatte -Jungle Bark Stairs=Dschungelrindentreppe -Jungle Bark Slab=Dschungelrindenplatte -Double Jungle Bark Slab=Doppelschungelbirkenplatte -Dark Oak Bark Stairs=Schwarzeichenrindentreppe -Dark Oak Bark Slab=Schwarzeichenrindenplatte -Double Dark Oak Bark Slab=Doppelschwarzeichenrindenplatte -Lapis Lazuli Slab=Lapislazuliplatte -Double Lapis Lazuli Slab=Doppellapislazuliplatte -Lapis Lazuli Stairs=Lapislazulitreppe -Slab of Gold=Goldplatte -Double Slab of Gold=Doppelgoldplatte -Stairs of Gold=Goldtreppe -Slab of Iron=Eisenplatte -Double Slab of Iron=Doppeleisenplatte -Stairs of Iron=Eisentreppe -Cracked Stone Brick Stairs=Rissige Steinziegeltreppe -Cracked Stone Brick Slab=Rissige Steinziegelplatte -Double Cracked Stone Brick Slab=Doppelte rissige Steinziegelplatte -White Concrete Stairs=Weiße Betontreppe -White Concrete Slab=Weiße Betonplatte -Double White Concrete Slab=Doppelte weiße Betonplatte -Grey Concrete Stairs=Graue Betontreppe -Grey Concrete Slab=Graue Betonplatte -Double Grey Concrete Slab=Doppelte graue Betonplatte -Light Grey Concrete Stairs=Hellgraue Betontreppe -Light Grey Concrete Slab=Hellgraue Betonplatte -Double Light Grey Concrete Slab=Doppelte hellgraue Betonplatte -Black Concrete Stairs=Schwarze Betontreppe -Black Concrete Slab=Schwarze Betonplatte -Double Black Concrete Slab=Doppelte schwarze Betonplatte -Red Concrete Stairs=Rote Betontreppe -Red Concrete Slab=Rote Betonplatte -Double Red Concrete Slab=Doppelte rote Betonplatte -Yellow Concrete Stairs=Gelbe Betontreppe -Yellow Concrete Slab=Gelbe Betonplatte -Double Yellow Concrete Slab=Doppelte gelbe Betonplatte -Green Concrete Stairs=Grüne Betontreppe -Green Concrete Slab=Grüne Betonplatte -Double Green Concrete Slab=Doppelte grüne Betonplatte -Cyan Concrete Stairs=Türkise Betontreppe -Cyan Concrete Slab=Türkise Betonplatte -Double Cyan Concrete Slab=Doppelte Türkise Betonplatte -Blue Concrete Stairs=Blaue Betontreppe -Blue Concrete Slab=Blaue Betonplatte -Double Blue Concrete Slab=Doppelte blaue Betonplatte -Magenta Concrete Stairs=Magenta Betontreppe -Magenta Concrete Slab=Magenta Betonplatte -Double Magenta Concrete Slab=Doppelte magenta Betonplatte -Orange Concrete Stairs=Orange Betontreppe -Orange Concrete Slab=Orange Betonplatte -Double Orange Concrete Slab=Doppelte orange Betonplatte -Purple Concrete Stairs=Violette Betontreppe -Purple Concrete Slab=Violette Betonplatte -Double Purple Concrete Slab=Doppelte violette Betonplatte -Brown Concrete Stairs=Braune Betontreppe -Brown Concrete Slab=Braune Betonplatte -Double Brown Concrete Slab=Doppelte braune Betonplatte -Pink Concrete Stairs=Rosa Betontreppe -Pink Concrete Slab=Rosa Betonplatte -Double Pink Concrete Slab=Doppelte rosa Betonplatte -Lime Concrete Stairs=Lindgrüne Betontreppe -Lime Concrete Slab=Lindgrüne Betonplatte -Double Lime Concrete Slab=Doppelte Betonplatte -Light Blue Concrete Stairs=Hellblaue Betontreppe -Light Blue Concrete Slab=Hellblaue Betonplatte -Double Light Blue Concrete Slab=Doppelte hellblaue Betonplatte -Concrete Slab=Betonplatte -Double Concrete Slab=Doppelte Betonplatte -Concrete Stairs=Betontreppe diff --git a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.es.tr b/mods/ITEMS/mclx_stairs/locale/mclx_stairs.es.tr deleted file mode 100644 index 302ae7f24..000000000 --- a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.es.tr +++ /dev/null @@ -1,82 +0,0 @@ -# textdomain: mclx_stairs -Oak Bark Stairs=Escaleras de roble -Oak Bark Slab=Losa de roble -Double Oak Bark Slab=Losa doble de roble -Acacia Bark Stairs=Escaleras de acacia -Acacia Bark Slab=Losa de acacia -Double Acacia Bark Slab=Losa doble de acacia -Spruce Bark Stairs=Escaleras de abeto -Spruce Bark Slab=Losa de abeto -Double Spruce Bark Slab=Losa doble de abeto -Birch Bark Stairs=Escaleras de abedul -Birch Bark Slab=Losa de abedul -Double Birch Bark Slab=Losa doble de abedul -Jungle Bark Stairs=Escaleras de jungla -Jungle Bark Slab=Losa de jungla -Double Jungle Bark Slab=Losa doble de jungla -Dark Oak Bark Stairs=Escaleras de roble oscuro -Dark Oak Bark Slab=Losa de roble oscuro -Double Dark Oak Bark Slab=Losa doble de roble oscuro -Lapis Lazuli Slab=Losa de lapislázuli -Double Lapis Lazuli Slab=Losa doble de lapislázuli -Lapis Lazuli Stairs=Escaleras de lapislázuli -Slab of Gold=Losa de oro -Double Slab of Gold=Losa doble de oro -Stairs of Gold=Escaleras de oro -Slab of Iron=Losa de hierro -Double Slab of Iron=Losa doble de hierro -Stairs of Iron=Escaleras de hierro -Cracked Stone Brick Stairs=Escaleras de ladrillo de piedra agrietada -Cracked Stone Brick Slab=Losa de ladrillo de piedra agrietada -Double Cracked Stone Brick Slab=Losa doble de ladrillo de piedra agrietada -White Concrete Stairs=Escaleras de hormigón blanco -White Concrete Slab=Losa de hormigón blanco -Double White Concrete Slab=Losa doble de hormigón blanco -Grey Concrete Stairs=Escaleras de hormigón gris -Grey Concrete Slab=Losas de hormigón gris -Double Grey Concrete Slab=Losa doble de hormigón gris -Light Grey Concrete Stairs=Escaleras de hormigón gris claro -Light Grey Concrete Slab=Losa de hormigón gris claro -Double Light Grey Concrete Slab=Losa doble de hormigón gris claro -Black Concrete Stairs=Escaleras de hormigón negro -Black Concrete Slab=Losa de hormigón negro -Double Black Concrete Slab=Losa doble de hormigón negro -Red Concrete Stairs=Escaleras de hormigón rojo -Red Concrete Slab=Losa de hormigón rojo -Double Red Concrete Slab=Losa doble de hormigón rojo -Yellow Concrete Stairs=Escaleras de hormigón amarillo -Yellow Concrete Slab=Losa de hormigón amarillo -Double Yellow Concrete Slab=Losa doble de hormigón amarillo -Green Concrete Stairs=Escaleras de hormigón verde -Green Concrete Slab=Losa de hormigón verde -Double Green Concrete Slab=Losa doble de hormigón verde -Cyan Concrete Stairs=Escaleras de hormigón cian -Cyan Concrete Slab=Losa de hormigón cian -Double Cyan Concrete Slab=Losa doble de hormigón cian -Blue Concrete Stairs=Escaleras de hormigón azul -Blue Concrete Slab=Losa de hormigón azul -Double Blue Concrete Slab=Losa doble de hormigón azul -Magenta Concrete Stairs=Escaleras de hormigón magenta -Magenta Concrete Slab=Losa de hormigón magenta -Double Magenta Concrete Slab=Losa doble de hormigón magenta -Orange Concrete Stairs=Escaleras de hormigón naranja -Orange Concrete Slab=Losa de hormigón naranja -Double Orange Concrete Slab=Losa doble de hormigón naranja -Purple Concrete Stairs=Escaleras de hormigón morado -Purple Concrete Slab=Losa de hormigón morado -Double Purple Concrete Slab=Losa doble de hormigón morado -Brown Concrete Stairs=Escaleras de hormigón marrón -Brown Concrete Slab=Losa de hormigón marrón -Double Brown Concrete Slab=Losa doble de hormigón marrón -Pink Concrete Stairs=Escaleras de hormigón rosa -Pink Concrete Slab=Losa de hormigón rosa -Double Pink Concrete Slab=Losa doble de hormigón rosa -Lime Concrete Stairs=Escaleras de hormigón verde lima -Lime Concrete Slab=Losa de hormigón verde lima -Double Lime Concrete Slab=Losa doble de hormigón verde lima -Light Blue Concrete Stairs=Escaleras de hormigón azul claro -Light Blue Concrete Slab=Losa de hormigón azul claro -Double Light Blue Concrete Slab=Losa doble de hormigón azul claro -Concrete Slab=Losa de hormigón -Double Concrete Slab=Losa doble de hormigón -Concrete Stairs=Escaleras de hormigón diff --git a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.fr.tr b/mods/ITEMS/mclx_stairs/locale/mclx_stairs.fr.tr deleted file mode 100644 index 98becd492..000000000 --- a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.fr.tr +++ /dev/null @@ -1,82 +0,0 @@ -# textdomain: mclx_stairs -Oak Bark Stairs=Escalier en écorse de Chêne -Oak Bark Slab=Plaque d'écorce de Chêne -Double Oak Bark Slab=Double Dalle d'écorce de Chêne -Acacia Bark Stairs=Escalier en écorce d'Acacia -Acacia Bark Slab=Plaque d'écorce d'Acacia -Double Acacia Bark Slab=Double Dalle d'écorce d'Acacia -Spruce Bark Stairs=Escalier en écorse de Sapin -Spruce Bark Slab=Plaque d'écorce de Sapin -Double Spruce Bark Slab=Double Dalle d'écorce de Sapin -Birch Bark Stairs=Escalier en écorse de Bouleau -Birch Bark Slab=Plaque d'écorce de Bouleau -Double Birch Bark Slab=Double Dalle d'écorce de Bouleau -Jungle Bark Stairs=Escalier en écorse d'Acajou -Jungle Bark Slab=Plaque d'écorce d'Acajou -Double Jungle Bark Slab=Double Dalle d'écorce d'Acajou -Dark Oak Bark Stairs=Escalier en écorse de Chêne Noir -Dark Oak Bark Slab=Plaque d'écorce de Chêne Noir -Double Dark Oak Bark Slab=Double Dalle d'écorce de Chêne Noir -Lapis Lazuli Slab=Dalle de Lapis Lazuli -Double Lapis Lazuli Slab=Double Dalle de Lapis Lazuli -Lapis Lazuli Stairs=Escalier de Lapis Lazuli -Slab of Gold=Dalle en Or -Double Slab of Gold=Double Dalle en Or -Stairs of Gold=Escalier en Or -Slab of Iron=Dalle en Fer -Double Slab of Iron=Double Dalle en Fer -Stairs of Iron=Escalier en Fer -Cracked Stone Brick Stairs=Escalier en Brique de Pierre Fissurée -Cracked Stone Brick Slab=Dalle de Brique de Pierre Fissurée -Double Cracked Stone Brick Slab=Double Dalle de Brique de Pierre Fissurée -White Concrete Stairs=Escalier en Béton Blanc -White Concrete Slab=Dalle en Béton Blanc -Double White Concrete Slab=Double Dalle en Béton Blanc -Grey Concrete Stairs=Escalier en Béton Gris -Grey Concrete Slab=Dalle en Béton Gris -Double Grey Concrete Slab=Double Dalle en Béton Gris -Light Grey Concrete Stairs=Escalier en Béton Gris Clair -Light Grey Concrete Slab=Dalle en Béton Gris Clair -Double Light Grey Concrete Slab=Double Dalle en Béton Gris Clair -Black Concrete Stairs=Escalier en Béton Noir -Black Concrete Slab=Dalle en Béton Noir -Double Black Concrete Slab=Double Dalle en Béton Noir -Red Concrete Stairs=Escalier en Béton Rouge -Red Concrete Slab=Dalle en Béton Rouge -Double Red Concrete Slab=Double Dalle en Béton Rouge -Yellow Concrete Stairs=Escalier en Béton Jaune -Yellow Concrete Slab=Dalle en Béton Jaune -Double Yellow Concrete Slab=Double Dalle en Béton Jaune -Green Concrete Stairs=Escalier en Béton Vert -Green Concrete Slab=Dalle en Béton Vert -Double Green Concrete Slab=Double Dalle en Béton Vert -Cyan Concrete Stairs=Escalier en Béton Cyan -Cyan Concrete Slab=Dalle en Béton Cyan -Double Cyan Concrete Slab=Double Dalle en Béton Cyan -Blue Concrete Stairs=Escalier en Béton Bleu -Blue Concrete Slab=Dalle en Béton Bleu -Double Blue Concrete Slab=Double Dalle en Béton Bleu -Magenta Concrete Stairs=Escalier en Béton Magenta -Magenta Concrete Slab=Dalle en Béton Magenta -Double Magenta Concrete Slab=Double Dalle en Béton Magenta -Orange Concrete Stairs=Escalier en Béton Orange -Orange Concrete Slab=Dalle en Béton Orange -Double Orange Concrete Slab=Double Dalle en Béton Orange -Purple Concrete Stairs=Escalier en Béton Violet -Purple Concrete Slab=Dalle en Béton Violet -Double Purple Concrete Slab=Double Dalle en Béton Violet -Brown Concrete Stairs=Escalier en Béton Marron -Brown Concrete Slab=Dalle en Béton Marron -Double Brown Concrete Slab=Double Dalle en Béton Marron -Pink Concrete Stairs=Escalier en Béton Rose -Pink Concrete Slab=Dalle en Béton Rose -Double Pink Concrete Slab=Double Dalle en Béton Rose -Lime Concrete Stairs=Escalier en Béton Vert Clair -Lime Concrete Slab=Dalle en Béton Vert Clair -Double Lime Concrete Slab=Double Dalle en Béton Vert Clair -Light Blue Concrete Stairs=Escalier en Béton Bleu Clair -Light Blue Concrete Slab=Dalle en Béton Bleu Clair -Double Light Blue Concrete Slab=Double Dalle en Béton Bleu Clair -Concrete Slab=Dalle en Béton -Double Concrete Slab=Double Dalle en Béton -Concrete Stairs=Escalier en Béton diff --git a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.pl.tr b/mods/ITEMS/mclx_stairs/locale/mclx_stairs.pl.tr deleted file mode 100644 index 8a4c4d5e2..000000000 --- a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.pl.tr +++ /dev/null @@ -1,82 +0,0 @@ -# textdomain: mclx_stairs -Oak Bark Stairs=Schody z dębowej kory -Oak Bark Slab=Płyta z dębowej kory -Double Oak Bark Slab=Podwójna płyta z dębowej kory -Acacia Bark Stairs=Schody z akacjowej kory -Acacia Bark Slab=Płyta z akacjowej kory -Double Acacia Bark Slab=Podwójna płyta z akacjowej kory -Spruce Bark Stairs=Schody ze świerkowej kory -Spruce Bark Slab=Płyta ze świerkowej kory -Double Spruce Bark Slab=Podwójna płyta ze świerkowej kory -Birch Bark Stairs=Schody z brzozowej kory -Birch Bark Slab=Płyta z brzozowej kory -Double Birch Bark Slab=Podwójna płyta z brzozowej kory -Jungle Bark Stairs=Schody z tropikalnej kory -Jungle Bark Slab=Płyta z tropikalnej kory -Double Jungle Bark Slab=Podwójna płyta z tropikalnej kory -Dark Oak Bark Stairs=Schody z ciemno-dębowej kory -Dark Oak Bark Slab=Płyta z ciemno-dębowej kory -Double Dark Oak Bark Slab=Podwójna płyta z ciemno-dębowej kory -Lapis Lazuli Slab=Płyta lazurytu -Double Lapis Lazuli Slab=Podwójna płyta lazurytu -Lapis Lazuli Stairs=Lazurytowe schody -Slab of Gold=Płyta złota -Double Slab of Gold=Podwójna płyta złota -Stairs of Gold=Złote schody -Slab of Iron=Płyta żelaza -Double Slab of Iron=Podwójna płyta żelaza -Stairs of Iron=Żelazne schody -Cracked Stone Brick Stairs=Schody z pękniętych ceglanych kamieni -Cracked Stone Brick Slab=Płyta z pękniętych ceglanych kamieni -Double Cracked Stone Brick Slab=Podwójna płyta z pękniętych ceglanych kamieni -White Concrete Stairs=Schody z białego cementu -White Concrete Slab=Płyta z białego cementu -Double White Concrete Slab=Podwójna płyta z białego cementu -Grey Concrete Stairs=Schody z szarego cementu -Grey Concrete Slab=Płyta z szarego cementu -Double Grey Concrete Slab=Podwójna płyta z szarego cementu -Light Grey Concrete Stairs=Schody z jasnoszarego cementu -Light Grey Concrete Slab=Płyta z jasnoszarego cementu -Double Light Grey Concrete Slab=Podwójna płyta z jasnoszarego cementu -Black Concrete Stairs=Schody z czarnego cementu -Black Concrete Slab=Płyta z czarnego cementu -Double Black Concrete Slab=Podwójna płyta z czarnego cementu -Red Concrete Stairs=Schody z czerwonego cementu -Red Concrete Slab=Płyta z czerwonego cementu -Double Red Concrete Slab=Podwójna płyta z czerwonego cementu -Yellow Concrete Stairs=Schody z żółtego cementu -Yellow Concrete Slab=Płyta z żółtego cementu -Double Yellow Concrete Slab=Podwójna płyta z żółtego cementu -Green Concrete Stairs=Schody z zielonego cementu -Green Concrete Slab=Płyta z zielonego cementu -Double Green Concrete Slab=Podwójna płyta z zielonego cementu -Cyan Concrete Stairs=Schody z błękitnego cementu -Cyan Concrete Slab=Płyta z błękitnego cementu -Double Cyan Concrete Slab=Podwójna płyta z błękitnego cementu -Blue Concrete Stairs=Schody z niebieskiego cementu -Blue Concrete Slab=Płyta z niebieskiego cementu -Double Blue Concrete Slab=Podwójna płyta z niebieskiego cementu -Magenta Concrete Stairs=Schody z karmazynowego cementu -Magenta Concrete Slab=Płyta z karmazynowego cementu -Double Magenta Concrete Slab=Podwójna płyta z karmazynowego cementu -Orange Concrete Stairs=Schody z pomarańczowego cementu -Orange Concrete Slab=Płyta z pomarańczowego cementu -Double Orange Concrete Slab=Podwójna płyta z pomarańczowego cementu -Purple Concrete Stairs=Schody z fioletowego cementu -Purple Concrete Slab=Płyta z fioletowego cementu -Double Purple Concrete Slab=Podwójna płyta z fioletowego cementu -Brown Concrete Stairs=Schody z brązowego cementu -Brown Concrete Slab=Płyta z brązowego cementu -Double Brown Concrete Slab=Podwójna płyta z brązowego cementu -Pink Concrete Stairs=Schody z różowego cementu -Pink Concrete Slab=Płyta z różowego cementu -Double Pink Concrete Slab=Podwójna płyta z różowego cementu -Lime Concrete Stairs=Schody z jasnozielonego cementu -Lime Concrete Slab=Płyta z jasnozielonego cementu -Double Lime Concrete Slab=Podwójna płyta z jasnozielonego cementu -Light Blue Concrete Stairs=Schody z jasnoniebieskiego cementu -Light Blue Concrete Slab=Płyta z jasnoniebieskiego cementu -Double Light Blue Concrete Slab=Podwójna płyta z jasnoniebieskiego cementu -Concrete Slab=płyta betonu -Double Concrete Slab=Podwójna płyta betonu -Concrete Stairs=Betonowe schody diff --git a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.ru.tr b/mods/ITEMS/mclx_stairs/locale/mclx_stairs.ru.tr deleted file mode 100644 index 7dca54dd1..000000000 --- a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.ru.tr +++ /dev/null @@ -1,82 +0,0 @@ -# textdomain: mclx_stairs -Oak Bark Stairs=Ступеньки из дубовой коры -Oak Bark Slab=Плита из дубовой коры -Double Oak Bark Slab=Двойная плита из дубовой коры -Acacia Bark Stairs=Ступеньки из коры акации -Acacia Bark Slab=Плита из коры акации -Double Acacia Bark Slab=Двойная плита из коры акации -Spruce Bark Stairs=Ступеньки из еловой коры -Spruce Bark Slab=Плита из еловой коры -Double Spruce Bark Slab=Двойная плита из еловой коры -Birch Bark Stairs=Ступеньки из берёзовой коры -Birch Bark Slab=Плита из берёзовой коры -Double Birch Bark Slab=Двойная плита из берёзовой коры -Jungle Bark Stairs=Ступеньки из коры дерева джунглей -Jungle Bark Slab=Плита из коры дерева джунглей -Double Jungle Bark Slab=Двойная плита из коры дерева джунглей -Dark Oak Bark Stairs=Ступеньки из коры тёмного дуба -Dark Oak Bark Slab=Плита из коры тёмного дуба -Double Dark Oak Bark Slab=Двойная плита из коры тёмного дуба -Lapis Lazuli Slab=Ляпис-лазурная плита -Double Lapis Lazuli Slab=Двойная ляпис-лазурная плита -Lapis Lazuli Stairs=Ляпис-лазурные ступеньки -Slab of Gold=Золотая плита -Double Slab of Gold=Двойная золотая плита -Stairs of Gold=Золотые ступеньки -Slab of Iron=Железная плита -Double Slab of Iron=Двойная железная плита -Stairs of Iron=Железные ступеньки -Cracked Stone Brick Stairs=Ступеньки из треснутого камня -Cracked Stone Brick Slab=Плита из треснутого камня -Double Cracked Stone Brick Slab=Двойная плита из треснутого камня -White Concrete Stairs=Белые бетонные ступеньки -White Concrete Slab=Белая бетонная панель -Double White Concrete Slab=Белая двойная бетонная панель -Grey Concrete Stairs=Серые бетонные ступеньки -Grey Concrete Slab=Серая бетонная панель -Double Grey Concrete Slab=Серая двойная бетонная панель -Light Grey Concrete Stairs=Светло-серые бетонные ступеньки -Light Grey Concrete Slab=Светло-серая бетонная панель -Double Light Grey Concrete Slab=Светло-серая двойная бетонная панель -Black Concrete Stairs=Чёрные бетонные ступеньки -Black Concrete Slab=Чёрная бетонная панель -Double Black Concrete Slab=Черная двойная бетонная панель -Red Concrete Stairs=Красные бетонные ступеньки -Red Concrete Slab=Красная бетонная панель -Double Red Concrete Slab=Красная двойная бетонная панель -Yellow Concrete Stairs=Жёлтые бетонные ступеньки -Yellow Concrete Slab=Жёлтая бетонная панель -Double Yellow Concrete Slab=Жёлтая двойная бетонная панель -Green Concrete Stairs=Зелёные бетонные ступеньки -Green Concrete Slab=Зелёная бетонная панель -Double Green Concrete Slab=Зелёная двойная бетонная панель -Cyan Concrete Stairs=Голубые бетонные ступеньки -Cyan Concrete Slab=Голубая бетонная панель -Double Cyan Concrete Slab=Голубая двойная бетонная панель -Blue Concrete Stairs=Синие бетонные ступеньки -Blue Concrete Slab=Синяя бетонная панель -Double Blue Concrete Slab=Синяя двойная бетонная панель -Magenta Concrete Stairs=Фиолетовые бетонные ступеньки -Magenta Concrete Slab=Фиолетовая бетонная панель -Double Magenta Concrete Slab=Фиолетовая двойная бетонная панель -Orange Concrete Stairs=Оранжевые бетонные ступеньки -Orange Concrete Slab=Оранжевая бетонная панель -Double Orange Concrete Slab=Оранжевая двойная бетонная панель -Purple Concrete Stairs=Пурпурные бетонные ступеньки -Purple Concrete Slab=Пурпурная бетонная панель -Double Purple Concrete Slab=Пурпурная двойная бетонная панель -Brown Concrete Stairs=Коричневые бетонные ступеньки -Brown Concrete Slab=Коричневая бетонная панель -Double Brown Concrete Slab=Коричневая двойная бетонная панель -Pink Concrete Stairs=Розовые бетонные ступеньки -Pink Concrete Slab=Розовая бетонная панель -Double Pink Concrete Slab=Розовая двойная бетонная панель -Lime Concrete Stairs=Зелёные лаймовые бетонные ступеньки -Lime Concrete Slab=Зелёная лаймовая бетонная панель -Double Lime Concrete Slab=Зелёная лаймовая двойная бетонная панель -Light Blue Concrete Stairs=Светло-голубые бетонные ступеньки -Light Blue Concrete Slab=Светло-голубая бетонная панель -Double Light Blue Concrete Slab=Светло-голубая двойная бетонная панель -Concrete Slab=Бетонная панель -Double Concrete Slab=Двойная бетонная панель -Concrete Stairs=Бетонные ступеньки diff --git a/mods/ITEMS/mclx_stairs/locale/template.txt b/mods/ITEMS/mclx_stairs/locale/template.txt deleted file mode 100644 index b6272dbcf..000000000 --- a/mods/ITEMS/mclx_stairs/locale/template.txt +++ /dev/null @@ -1,82 +0,0 @@ -# textdomain: mclx_stairs -Oak Bark Stairs= -Oak Bark Slab= -Double Oak Bark Slab= -Acacia Bark Stairs= -Acacia Bark Slab= -Double Acacia Bark Slab= -Spruce Bark Stairs= -Spruce Bark Slab= -Double Spruce Bark Slab= -Birch Bark Stairs= -Birch Bark Slab= -Double Birch Bark Slab= -Jungle Bark Stairs= -Jungle Bark Slab= -Double Jungle Bark Slab= -Dark Oak Bark Stairs= -Dark Oak Bark Slab= -Double Dark Oak Bark Slab= -Lapis Lazuli Slab= -Double Lapis Lazuli Slab= -Lapis Lazuli Stairs= -Slab of Gold= -Double Slab of Gold= -Stairs of Gold= -Slab of Iron= -Double Slab of Iron= -Stairs of Iron= -Cracked Stone Brick Stairs= -Cracked Stone Brick Slab= -Double Cracked Stone Brick Slab= -White Concrete Stairs= -White Concrete Slab= -Double White Concrete Slab= -Grey Concrete Stairs= -Grey Concrete Slab= -Double Grey Concrete Slab= -Light Grey Concrete Stairs= -Light Grey Concrete Slab= -Double Light Grey Concrete Slab= -Black Concrete Stairs= -Black Concrete Slab= -Double Black Concrete Slab= -Red Concrete Stairs= -Red Concrete Slab= -Double Red Concrete Slab= -Yellow Concrete Stairs= -Yellow Concrete Slab= -Double Yellow Concrete Slab= -Green Concrete Stairs= -Green Concrete Slab= -Double Green Concrete Slab= -Cyan Concrete Stairs= -Cyan Concrete Slab= -Double Cyan Concrete Slab= -Blue Concrete Stairs= -Blue Concrete Slab= -Double Blue Concrete Slab= -Magenta Concrete Stairs= -Magenta Concrete Slab= -Double Magenta Concrete Slab= -Orange Concrete Stairs= -Orange Concrete Slab= -Double Orange Concrete Slab= -Purple Concrete Stairs= -Purple Concrete Slab= -Double Purple Concrete Slab= -Brown Concrete Stairs= -Brown Concrete Slab= -Double Brown Concrete Slab= -Pink Concrete Stairs= -Pink Concrete Slab= -Double Pink Concrete Slab= -Lime Concrete Stairs= -Lime Concrete Slab= -Double Lime Concrete Slab= -Light Blue Concrete Stairs= -Light Blue Concrete Slab= -Double Light Blue Concrete Slab= -Concrete Slab= -Double Concrete Slab= -Concrete Stairs= diff --git a/mods/ITEMS/mclx_stairs/mod.conf b/mods/ITEMS/mclx_stairs/mod.conf deleted file mode 100644 index b3aecd806..000000000 --- a/mods/ITEMS/mclx_stairs/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mclx_stairs -description = Additional stairs and slabs not found in Minecraft 1.11 -depends = mcl_ocean, mcl_core, mcl_sounds, mcl_nether, mcl_end, mcl_colorblocks, mcl_stairs -optional_depends = doc diff --git a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_andesite_smooth_slab.png b/mods/ITEMS/mclx_stairs/textures/mcl_stairs_andesite_smooth_slab.png deleted file mode 100644 index daf6e96ca..000000000 Binary files a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_andesite_smooth_slab.png and /dev/null differ diff --git a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_diorite_smooth_slab.png b/mods/ITEMS/mclx_stairs/textures/mcl_stairs_diorite_smooth_slab.png deleted file mode 100644 index 57d147bae..000000000 Binary files a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_diorite_smooth_slab.png and /dev/null differ diff --git a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_gold_block_slab.png b/mods/ITEMS/mclx_stairs/textures/mcl_stairs_gold_block_slab.png deleted file mode 100644 index 7f490e704..000000000 Binary files a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_gold_block_slab.png and /dev/null differ diff --git a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_granite_smooth_slab.png b/mods/ITEMS/mclx_stairs/textures/mcl_stairs_granite_smooth_slab.png deleted file mode 100644 index 968d8b968..000000000 Binary files a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_granite_smooth_slab.png and /dev/null differ diff --git a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_iron_block_slab.png b/mods/ITEMS/mclx_stairs/textures/mcl_stairs_iron_block_slab.png deleted file mode 100644 index 101f62c46..000000000 Binary files a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_iron_block_slab.png and /dev/null differ diff --git a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_lapis_block_slab.png b/mods/ITEMS/mclx_stairs/textures/mcl_stairs_lapis_block_slab.png deleted file mode 100644 index 2690b4a02..000000000 Binary files a/mods/ITEMS/mclx_stairs/textures/mcl_stairs_lapis_block_slab.png and /dev/null differ diff --git a/mods/ITEMS/modpack.conf b/mods/ITEMS/modpack.conf deleted file mode 100644 index b37dc3020..000000000 --- a/mods/ITEMS/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = ITEMS -description = Meta-modpack containing items-related mods for MineClone 2 diff --git a/mods/ITEMS/screwdriver/API.md b/mods/ITEMS/screwdriver/API.md deleted file mode 100644 index 0c17ee683..000000000 --- a/mods/ITEMS/screwdriver/API.md +++ /dev/null @@ -1,28 +0,0 @@ -Screwdriver API ---------------- - -The screwdriver API allows you to control a node's behaviour when a screwdriver is used on it. -NOTE: This API is compatible with Minetest Game 5.1.0, but has some extensions. - -To use it, add the `on_rotate` function to the node definition. - -`on_rotate(pos, node, user, mode, new_param2)` - - * `pos`: Position of the node that the screwdriver is being used on - * `node`: that node - * `user`: The player who used the screwdriver - * `mode`: `screwdriver.ROTATE_FACE` or `screwdriver.ROTATE_AXIS` - * `new_param2` the new value of `param2` that would have been set if `on_rotate` wasn't there - * return value: false to disallow rotation, nil to keep default behaviour, true to allow - it but to indicate that changed have already been made (so the screwdriver will wear out) - * use `on_rotate = false` to always disallow rotation - * use `on_rotate = screwdriver.rotate_simple` to allow only face rotation - * use `on_rotate = screwdriver.rotate_3way` (MineClone 2 extension) for pillar-like nodes that should only have 3 possible orientations) - - - -`after_rotate(pos)` (MineClone 2 extension) - -Called after the rotation has been completed - - * `pos`: Position of the node that the screwdriver was used on diff --git a/mods/ITEMS/screwdriver/README.md b/mods/ITEMS/screwdriver/README.md deleted file mode 100644 index 7237c8471..000000000 --- a/mods/ITEMS/screwdriver/README.md +++ /dev/null @@ -1,13 +0,0 @@ -MineClone 2 mod: screwdriver -============================ -See license.txt for license information. - -License of source code ----------------------- -Originally by RealBadAngel, Maciej Kasatkin (LGPL 2.1) -Various Minetest developers and contributors (LGPL 2.1) - -License of media (textures) ---------------------------- -Created by Wuzzy (CC0): -* `screwdriver.png` diff --git a/mods/ITEMS/screwdriver/init.lua b/mods/ITEMS/screwdriver/init.lua deleted file mode 100644 index baa4ff9c5..000000000 --- a/mods/ITEMS/screwdriver/init.lua +++ /dev/null @@ -1,205 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -screwdriver = {} - -screwdriver.ROTATE_FACE = 1 -screwdriver.ROTATE_AXIS = 2 - -function screwdriver.disallow(pos, node, user, mode, new_param2) - return false -end - -function screwdriver.rotate_simple(pos, node, user, mode, new_param2) - if mode ~= screwdriver.ROTATE_FACE then - return false - end -end - -function screwdriver.rotate_3way(pos, node, user, mode, new_param2) - if mode == screwdriver.ROTATE_AXIS then - if node.param2 == 0 then - node.param2 = 6 - elseif node.param2 == 6 then - node.param2 = 12 - else - node.param2 = 0 - end - minetest.swap_node(pos, node) - return true - elseif mode == screwdriver.ROTATE_FACE then - if node.param2 == 6 then - node.param2 = 12 - minetest.swap_node(pos, node) - return true - else - node.param2 = 6 - minetest.swap_node(pos, node) - return true - end - end - return false -end - --- For attached wallmounted nodes: returns true if rotation is valid --- simplified version of minetest:builtin/game/falling.lua#L148. -local function check_attached_node(pos, rotation) - local d = minetest.wallmounted_to_dir(rotation) - local p2 = vector.add(pos, d) - local n = minetest.get_node(p2).name - local def2 = minetest.registered_nodes[n] - if def2 and not def2.walkable then - return false - end - return true -end - -screwdriver.rotate = {} - -local facedir_tbl = { - [screwdriver.ROTATE_FACE] = { - [0] = 1, [1] = 2, [2] = 3, [3] = 0, - [4] = 5, [5] = 6, [6] = 7, [7] = 4, - [8] = 9, [9] = 10, [10] = 11, [11] = 8, - [12] = 13, [13] = 14, [14] = 15, [15] = 12, - [16] = 17, [17] = 18, [18] = 19, [19] = 16, - [20] = 21, [21] = 22, [22] = 23, [23] = 20, - }, - [screwdriver.ROTATE_AXIS] = { - [0] = 4, [1] = 4, [2] = 4, [3] = 4, - [4] = 8, [5] = 8, [6] = 8, [7] = 8, - [8] = 12, [9] = 12, [10] = 12, [11] = 12, - [12] = 16, [13] = 16, [14] = 16, [15] = 16, - [16] = 20, [17] = 20, [18] = 20, [19] = 20, - [20] = 0, [21] = 0, [22] = 0, [23] = 0, - }, -} - -function screwdriver.rotate.facedir(pos, node, mode) - local rotation = node.param2 % 32 -- get first 5 bits - local other = node.param2 - rotation - rotation = facedir_tbl[mode][rotation] or 0 - return rotation + other -end - -screwdriver.rotate.colorfacedir = screwdriver.rotate.facedir - -local wallmounted_tbl = { - [screwdriver.ROTATE_FACE] = {[2] = 5, [3] = 4, [4] = 2, [5] = 3, [1] = 0, [0] = 1}, - [screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3}, -} - -function screwdriver.rotate.wallmounted(pos, node, mode) - local rotation = node.param2 % 8 -- get first 3 bits - local other = node.param2 - rotation - rotation = wallmounted_tbl[mode][rotation] or 0 - if minetest.get_item_group(node.name, "attached_node") ~= 0 then - -- find an acceptable orientation - for i = 1, 5 do - if not check_attached_node(pos, rotation) then - rotation = wallmounted_tbl[mode][rotation] or 0 - else - break - end - end - end - return rotation + other -end - -screwdriver.rotate.colorwallmounted = screwdriver.rotate.wallmounted - --- Handles rotation -function screwdriver.handler(itemstack, user, pointed_thing, mode, uses) - if pointed_thing.type ~= "node" then - return - end - - local pos = pointed_thing.under - local player_name = user and user:get_player_name() or "" - - if minetest.is_protected(pos, player_name) then - minetest.record_protection_violation(pos, player_name) - return - end - - local node = minetest.get_node(pos) - local ndef = minetest.registered_nodes[node.name] - if not ndef then - return itemstack - end - -- can we rotate this paramtype2? - local fn = screwdriver.rotate[ndef.paramtype2] - if not fn and not ndef.on_rotate then - return itemstack - end - - local should_rotate = true - local new_param2 - if fn then - new_param2 = fn(pos, node, mode) - else - new_param2 = node.param2 - end - - -- Node provides a handler, so let the handler decide instead if the node can be rotated - if ndef.on_rotate then - -- Copy pos and node because callback can modify it - local result = ndef.on_rotate(vector.new(pos), - {name = node.name, param1 = node.param1, param2 = node.param2}, - user, mode, new_param2) - if result == false then -- Disallow rotation - return itemstack - elseif result == true then - should_rotate = false - end - elseif ndef.on_rotate == false then - return itemstack - elseif ndef.can_dig and not ndef.can_dig(pos, user) then - return itemstack - end - - if should_rotate and new_param2 ~= node.param2 then - node.param2 = new_param2 - minetest.swap_node(pos, node) - minetest.check_for_falling(pos) - if ndef.after_rotate then - ndef.after_rotate(vector.new(pos)) - end - end - - if not (minetest.is_creative_enabled(user:get_player_name())) then - itemstack:add_wear(65535 / ((uses or 200) - 1)) - end - - return itemstack -end - --- Screwdriver -minetest.register_tool("screwdriver:screwdriver", { - description = S("Screwdriver"), - inventory_image = "screwdriver.png", - wield_image = "screwdriver.png^[transformFX", - groups = { tool = 1, not_in_creative_inventory = 1 }, - on_use = function(itemstack, user, pointed_thing) - screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 200) - return itemstack - end, - on_place = function(itemstack, user, pointed_thing) - screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 200) - return itemstack - end, -}) - -mcl_wip.register_wip_item("screwdriver:screwdriver") - -minetest.register_craft({ - output = "screwdriver:screwdriver", - recipe = { - {"mcl_core:iron_ingot"}, - {"mcl_core:stick"} - } -}) - -minetest.register_alias("screwdriver:screwdriver1", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver2", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver3", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver4", "screwdriver:screwdriver") diff --git a/mods/ITEMS/screwdriver/license.txt b/mods/ITEMS/screwdriver/license.txt deleted file mode 100644 index d9b721bb9..000000000 --- a/mods/ITEMS/screwdriver/license.txt +++ /dev/null @@ -1,50 +0,0 @@ -License of source code ----------------------- - -GNU Lesser General Public License, version 2.1 -Copyright (C) 2013-2016 RealBadAngel, Maciej Kasatkin -Copyright (C) 2013-2016 Various Minetest developers and contributors - -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. - -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 Lesser General Public License for more details: -https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - - -Licenses of media (textures) ----------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2013-2016 Gambit - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.de.tr b/mods/ITEMS/screwdriver/locale/screwdriver.de.tr deleted file mode 100644 index eaf44b0d6..000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.de.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: screwdriver -Screwdriver=Schraubenzieher diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.es.tr b/mods/ITEMS/screwdriver/locale/screwdriver.es.tr deleted file mode 100644 index f2c778cee..000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.es.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: screwdriver -Screwdriver=Destornillador diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.fr.tr b/mods/ITEMS/screwdriver/locale/screwdriver.fr.tr deleted file mode 100644 index ae014ea09..000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=Tournevis diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr b/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr deleted file mode 100644 index b9adac135..000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=Śrubokręt diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.ru.tr b/mods/ITEMS/screwdriver/locale/screwdriver.ru.tr deleted file mode 100644 index fb6321684..000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.ru.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=Отвёртка diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.zh_TW.tr b/mods/ITEMS/screwdriver/locale/screwdriver.zh_TW.tr deleted file mode 100644 index f29a4bf33..000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.zh_TW.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=螺絲刀 diff --git a/mods/ITEMS/screwdriver/locale/template.txt b/mods/ITEMS/screwdriver/locale/template.txt deleted file mode 100644 index b3871a116..000000000 --- a/mods/ITEMS/screwdriver/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver= diff --git a/mods/ITEMS/screwdriver/mod.conf b/mods/ITEMS/screwdriver/mod.conf deleted file mode 100644 index a18279839..000000000 --- a/mods/ITEMS/screwdriver/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = screwdriver -depends = mcl_wip \ No newline at end of file diff --git a/mods/ITEMS/screwdriver/textures/screwdriver.png b/mods/ITEMS/screwdriver/textures/screwdriver.png deleted file mode 100644 index 27d13db8c..000000000 Binary files a/mods/ITEMS/screwdriver/textures/screwdriver.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/init.lua b/mods/ITEMS/xpanes/init.lua deleted file mode 100644 index fe67934a1..000000000 --- a/mods/ITEMS/xpanes/init.lua +++ /dev/null @@ -1,254 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - -local function is_pane(pos) - return minetest.get_item_group(minetest.get_node(pos).name, "pane") > 0 -end - -local function connects_dir(pos, name, dir) - local aside = vector.add(pos, minetest.facedir_to_dir(dir)) - if is_pane(aside) then - return true - end - - local connects_to = minetest.registered_nodes[name].connects_to - if not connects_to then - return false - end - local list = minetest.find_nodes_in_area(aside, aside, connects_to) - - if #list > 0 then - return true - end - - return false -end - -local function swap(pos, node, name, param2) - if node.name == name and node.param2 == param2 then - return - end - - minetest.set_node(pos, {name = name, param2 = param2}) -end - -local function update_pane(pos) - if not is_pane(pos) then - return - end - local node = minetest.get_node(pos) - local name = node.name - if name:sub(-5) == "_flat" then - name = name:sub(1, -6) - end - - local any = node.param2 - local c = {} - local count = 0 - for dir = 0, 3 do - c[dir] = connects_dir(pos, name, dir) - if c[dir] then - any = dir - count = count + 1 - end - end - - if count == 0 then - swap(pos, node, name .. "_flat", any) - elseif count == 1 then - swap(pos, node, name .. "_flat", (any + 1) % 4) - elseif count == 2 then - if (c[0] and c[2]) or (c[1] and c[3]) then - swap(pos, node, name .. "_flat", (any + 1) % 4) - else - swap(pos, node, name, 0) - end - else - swap(pos, node, name, 0) - end -end - -minetest.register_on_placenode(function(pos, node) - if minetest.get_item_group(node, "pane") then - update_pane(pos) - end - for i = 0, 3 do - local dir = minetest.facedir_to_dir(i) - update_pane(vector.add(pos, dir)) - end -end) - -minetest.register_on_dignode(function(pos) - for i = 0, 3 do - local dir = minetest.facedir_to_dir(i) - update_pane(vector.add(pos, dir)) - end -end) - -xpanes = {} -function xpanes.register_pane(name, def) - for i = 1, 15 do - minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat") - end - - local flatgroups = table.copy(def.groups) - local drop = def.drop - if not drop then - drop = "xpanes:" .. name .. "_flat" - end - flatgroups.pane = 1 - flatgroups.deco_block = 1 - minetest.register_node(":xpanes:" .. name .. "_flat", { - description = def.description, - _doc_items_create_entry = def._doc_items_create_entry, - _doc_items_entry_name = def._doc_items_entry_name, - _doc_items_longdesc = def._doc_items_longdesc, - _doc_items_usagehelp = def._doc_items_usagehelp, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - inventory_image = def.inventory_image, - wield_image = def.wield_image, - paramtype2 = "facedir", - tiles = {def.textures[3], def.textures[2], def.textures[1]}, - use_texture_alpha = def.use_texture_alpha, - groups = flatgroups, - drop = drop, - sounds = def.sounds, - node_box = { - type = "fixed", - fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - selection_box = { - type = "fixed", - fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - connect_sides = { "left", "right" }, - _mcl_blast_resistance = def._mcl_blast_resistance, - _mcl_hardness = def._mcl_hardness, - _mcl_silk_touch_drop = def._mcl_silk_touch_drop and {"xpanes:" .. name .. "_flat"}, - }) - - local groups = table.copy(def.groups) - groups.pane = 1 - groups.not_in_creative_inventory = 1 - minetest.register_node(":xpanes:" .. name, { - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - _doc_items_create_entry = false, - tiles = {def.textures[3], def.textures[2], def.textures[1]}, - use_texture_alpha = def.use_texture_alpha, - groups = groups, - drop = drop, - sounds = def.sounds, - node_box = { - type = "connected", - fixed = {{-1/32, -1/2, -1/32, 1/32, 1/2, 1/32}}, - connect_front = {{-1/32, -1/2, -1/2, 1/32, 1/2, -1/32}}, - connect_left = {{-1/2, -1/2, -1/32, -1/32, 1/2, 1/32}}, - connect_back = {{-1/32, -1/2, 1/32, 1/32, 1/2, 1/2}}, - connect_right = {{1/32, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}, - _mcl_blast_resistance = def._mcl_blast_resistance, - _mcl_hardness = def._mcl_hardness, - _mcl_silk_touch_drop = def._mcl_silk_touch_drop and {"xpanes:" .. name .. "_flat"}, - }) - - minetest.register_craft({ - output = "xpanes:" .. name .. "_flat 16", - recipe = def.recipe - }) - - if mod_doc and def._doc_items_create_entry ~= false then - doc.add_entry_alias("nodes", "xpanes:" .. name .. "_flat", "nodes", "xpanes:" .. name) - end -end - -local canonical_color = "yellow" --- Register glass pane (stained and unstained) -local function pane(description, node, append) - local texture1, longdesc, entry_name, create_entry - local is_canonical = true - -- Special case: Default (unstained) glass texture - if append == "_natural" then - texture1 = "default_glass.png" - longdesc = S("Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.") - else - if append ~= "_"..canonical_color then - is_canonical = false - create_entry = false - else - longdesc = S("Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.") - entry_name = S("Stained Glass Pane") - end - texture1 = "mcl_core_glass"..append..".png" - end - xpanes.register_pane("pane"..append, { - description = description, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - textures = {texture1, texture1, "xpanes_top_glass"..append..".png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - inventory_image = texture1, - wield_image = texture1, - sounds = mcl_sounds.node_sound_glass_defaults(), - groups = {handy=1, material_glass=1}, - recipe = { - {node, node, node}, - {node, node, node}, - }, - drop = "", - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, - _mcl_silk_touch_drop = true, - }) - - if mod_doc and not is_canonical then - doc.add_entry_alias("nodes", "xpanes:pane_".. canonical_color .. "_flat", "nodes", "xpanes:pane"..append) - doc.add_entry_alias("nodes", "xpanes:pane_".. canonical_color .. "_flat", "nodes", "xpanes:pane"..append.."_flat") - end -end - --- Iron Bars -xpanes.register_pane("bar", { - description = S("Iron Bars"), - _doc_items_longdesc = S("Iron bars neatly connect to their neighbors as you build them."), - textures = {"xpanes_pane_iron.png","xpanes_pane_iron.png","xpanes_top_iron.png"}, - inventory_image = "xpanes_pane_iron.png", - wield_image = "xpanes_pane_iron.png", - groups = {pickaxey=1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - }, - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - --- Glass Pane -pane(S("Glass Pane"), "mcl_core:glass", "_natural") -- triggers special case - --- Stained Glass Pane -pane(S("Red Stained Glass Pane"), "mcl_core:glass_red", "_red") -pane(S("Green Stained Glass Pane"), "mcl_core:glass_green", "_green") -pane(S("Blue Stained Glass Pane"), "mcl_core:glass_blue", "_blue") -pane(S("Light Blue Stained Glass Pane"), "mcl_core:glass_light_blue", "_light_blue") -pane(S("Black Stained Glass Pane"), "mcl_core:glass_black", "_black") -pane(S("White Stained Glass Pane"), "mcl_core:glass_white", "_white") -pane(S("Yellow Stained Glass Pane"), "mcl_core:glass_yellow", "_yellow") -pane(S("Brown Stained Glass Pane"), "mcl_core:glass_brown", "_brown") -pane(S("Orange Stained Glass Pane"), "mcl_core:glass_orange", "_orange") -pane(S("Pink Stained Glass Pane"), "mcl_core:glass_pink", "_pink") -pane(S("Grey Stained Glass Pane"), "mcl_core:glass_gray", "_gray") -pane(S("Lime Stained Glass Pane"), "mcl_core:glass_lime", "_lime") -pane(S("Light Grey Stained Glass Pane"), "mcl_core:glass_silver", "_silver") -pane(S("Magenta Stained Glass Pane"), "mcl_core:glass_magenta", "_magenta") -pane(S("Purple Stained Glass Pane"), "mcl_core:glass_purple", "_purple") -pane(S("Cyan Stained Glass Pane"), "mcl_core:glass_cyan", "_cyan") diff --git a/mods/ITEMS/xpanes/locale/template.txt b/mods/ITEMS/xpanes/locale/template.txt deleted file mode 100644 index cae83797b..000000000 --- a/mods/ITEMS/xpanes/locale/template.txt +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.= -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.= -Iron Bars= -Iron bars neatly connect to their neighbors as you build them.= -Glass Pane= -Stained Glass Pane= -Red Stained Glass Pane= -Green Stained Glass Pane= -Blue Stained Glass Pane= -Light Blue Stained Glass Pane= -Black Stained Glass Pane= -White Stained Glass Pane= -Yellow Stained Glass Pane= -Brown Stained Glass Pane= -Orange Stained Glass Pane= -Pink Stained Glass Pane= -Grey Stained Glass Pane= -Lime Stained Glass Pane= -Light Grey Stained Glass Pane= -Magenta Stained Glass Pane= -Purple Stained Glass Pane= -Cyan Stained Glass Pane= diff --git a/mods/ITEMS/xpanes/locale/xpanes.de.tr b/mods/ITEMS/xpanes/locale/xpanes.de.tr deleted file mode 100644 index 3c840b08c..000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.de.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Glasscheiben sind dünne Glasschichten, die sich mit ihren Nachbarn automatisch verbinden. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Farbglasscheiben sind dünne Schichten aus Farbglas, die sich mit ihren Nachbarn automatisch verbinden. Es gibt sie in vielen verschiedenen Farben. -Iron Bars=Eisenstangen -Iron bars neatly connect to their neighbors as you build them.=Eisenstangen verbinden sich mit den Nachbarn, wenn sie gebaut werden. -Glass Pane=Glasscheibe -Stained Glass Pane=Buntglasscheibe -Red Stained Glass Pane=Rote Buntglasscheibe -Green Stained Glass Pane=Grüne Buntglasscheibe -Blue Stained Glass Pane=Blaue Buntglasscheibe -Light Blue Stained Glass Pane=Hellblaue Buntglasscheibe -Black Stained Glass Pane=Schwarze Buntglasscheibe -White Stained Glass Pane=Weiße Buntglasscheibe -Yellow Stained Glass Pane=Gelbe Buntglasscheibe -Brown Stained Glass Pane=Braune Buntglasscheibe -Orange Stained Glass Pane=Orange Buntglasscheibe -Pink Stained Glass Pane=Rosa Buntglasscheibe -Grey Stained Glass Pane=Graue Buntglasscheibe -Lime Stained Glass Pane=Lindgrüne Buntglasscheibe -Light Grey Stained Glass Pane=Hellgraue Buntglasscheibe -Magenta Stained Glass Pane=Magenta Buntglasscheibe -Purple Stained Glass Pane=Violette Buntglasscheibe -Cyan Stained Glass Pane=Türkise Buntglasscheibe diff --git a/mods/ITEMS/xpanes/locale/xpanes.es.tr b/mods/ITEMS/xpanes/locale/xpanes.es.tr deleted file mode 100644 index c90c6472d..000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.es.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Los paneles de cristal son capas delgadas de vidrio que se conectan perfectamente a otros cristales a medida que los construye. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Los paneles de cristal son capas delgadas de vidrio que se conectan perfectamente a otros cristales a medida que los construye. Vienen en muchos colores diferentes. -Iron Bars=Barrotes de hierro -Iron bars neatly connect to their neighbors as you build them.=Los barrotes de hierro se conectan perfectamente a sus vecinos a medida que los construyes. -Glass Pane=Panel de cristal -Stained Glass Pane=Panel de cristal tintado de manchado -Red Stained Glass Pane=Panel de cristal tintado de rojo -Green Stained Glass Pane=Panel de cristal tintado de verde -Blue Stained Glass Pane=Panel de cristal tintado de azul -Light Blue Stained Glass Pane=Panel de cristal tintado de azul claro -Black Stained Glass Pane=Panel de cristal tintado de negro -White Stained Glass Pane=Panel de cristal tintado de blanco -Yellow Stained Glass Pane=Panel de cristal tintado de amarillo -Brown Stained Glass Pane=Panel de cristal tintado de marrón -Orange Stained Glass Pane=Panel de cristal tintado de naranja -Pink Stained Glass Pane=Panel de cristal tintado de rosa -Grey Stained Glass Pane=Panel de cristal tintado de gris -Lime Stained Glass Pane=Panel de cristal tintado de verde lima -Light Grey Stained Glass Pane=Panel de cristal tintado de gris claro -Magenta Stained Glass Pane=Panel de cristal tintado de magenta -Purple Stained Glass Pane=Panel de cristal tintado de morado -Cyan Stained Glass Pane=Panel de cristal tintado de cian diff --git a/mods/ITEMS/xpanes/locale/xpanes.fr.tr b/mods/ITEMS/xpanes/locale/xpanes.fr.tr deleted file mode 100644 index 6b2fe43f3..000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.fr.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Les vitres sont de fines couches de verre qui se connectent parfaitement à leurs voisins lorsque vous les construisez. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Les vitres teintées sont de fines couches de verre teinté qui se connectent parfaitement à leurs voisins lorsque vous les construisez. Ils viennent dans de nombreuses couleurs différentes. -Iron Bars=Barres de fer -Iron bars neatly connect to their neighbors as you build them.=Les barres de fer se connectent parfaitement à leurs voisins lorsque vous les construisez. -Glass Pane=Vitre -Stained Glass Pane=Vitre Teintée -Red Stained Glass Pane=Vitre Teintée Rouge -Green Stained Glass Pane=Vitre Teintée Verte -Blue Stained Glass Pane=Vitre Teintée Bleue -Light Blue Stained Glass Pane=Vitre Teintée Bleu Clair -Black Stained Glass Pane=Vitre Teintée Noire -White Stained Glass Pane=Vitre Teintée Blanche -Yellow Stained Glass Pane=Vitre Teintée Jaune -Brown Stained Glass Pane=Vitre Teintée Marron -Orange Stained Glass Pane=Vitre Teintée Orange -Pink Stained Glass Pane=Vitre Teintée Rose -Grey Stained Glass Pane=Vitre Teintée Grise -Lime Stained Glass Pane=Vitre Teintée Vert Clair -Light Grey Stained Glass Pane=Vitre Teintée Gris Clair -Magenta Stained Glass Pane=Vitre Teintée Magenta -Purple Stained Glass Pane=Vitre Teintée Violette -Cyan Stained Glass Pane=Vitre Teintée Cyan diff --git a/mods/ITEMS/xpanes/locale/xpanes.pl.tr b/mods/ITEMS/xpanes/locale/xpanes.pl.tr deleted file mode 100644 index d169c1f97..000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.pl.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Szyby są cienkimi warstwami szkła które łączą się z sąsiadującymi blokami podczas budowania. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Kolorowe szyby są cienkimi warstwami kolorowego szkła które łączą się z sąsiadującymi blokami podczas budowania. Można je pokolorować na wiele kolorów. -Iron Bars=Żelazne kraty -Iron bars neatly connect to their neighbors as you build them.=Żelazne kraty łączą się z sąsiadującymi blokami podczas budowania. -Glass Pane=Szyba -Stained Glass Pane=Kolorowa szyba -Red Stained Glass Pane=Czerwona szyba -Green Stained Glass Pane=Zielona szyba -Blue Stained Glass Pane=Niebieska szyba -Light Blue Stained Glass Pane=Jasnoniebieska szyba -Black Stained Glass Pane=Czarna szyba -White Stained Glass Pane=Biała szyba -Yellow Stained Glass Pane=Żółta szyba -Brown Stained Glass Pane=Brązowa szyba -Orange Stained Glass Pane=Pomarańczowa szyba -Pink Stained Glass Pane=Różowa szyba -Grey Stained Glass Pane=Szara szyba -Lime Stained Glass Pane=Jasnozielona szyba -Light Grey Stained Glass Pane=Jasnoszara szyba -Magenta Stained Glass Pane=Karmazynowa szyba -Purple Stained Glass Pane=Fioletowa szyba -Cyan Stained Glass Pane=Błękitna szyba diff --git a/mods/ITEMS/xpanes/locale/xpanes.ru.tr b/mods/ITEMS/xpanes/locale/xpanes.ru.tr deleted file mode 100644 index 47702516d..000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.ru.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Стеклянные панели это тонкие стёкла, которые аккуратно присоединяются к соседним блокам, когда вы устанавливаете их. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Витражи это тонкие стёкла, которые аккуратно присоединяются к соседним блокам, когда вы устанавливаете их. Они могут быть разных цветов. -Iron Bars=Железные слитки -Iron bars neatly connect to their neighbors as you build them.=Железные слитки аккуратно присоединяются к соседним блокам, когда вы устанавливаете их. -Glass Pane=Стеклянная панель -Stained Glass Pane=Витраж -Red Stained Glass Pane=Красный витраж -Green Stained Glass Pane=Зелёный витраж -Blue Stained Glass Pane=Синий витраж -Light Blue Stained Glass Pane=Светло-голубой витраж -Black Stained Glass Pane=Чёрный витраж -White Stained Glass Pane=Белый витраж -Yellow Stained Glass Pane=Жёлтый витраж -Brown Stained Glass Pane=Коричневый витраж -Orange Stained Glass Pane=Оранжевый витраж -Pink Stained Glass Pane=Розовый витраж -Grey Stained Glass Pane=Серый витраж -Lime Stained Glass Pane=Зелёный лаймовый витраж -Light Grey Stained Glass Pane=Светло-серый витраж -Magenta Stained Glass Pane=Фиолетовый витраж -Purple Stained Glass Pane=Пурпурный витраж -Cyan Stained Glass Pane=Голубой витраж diff --git a/mods/ITEMS/xpanes/locale/xpanes.zh_TW.tr b/mods/ITEMS/xpanes/locale/xpanes.zh_TW.tr deleted file mode 100644 index bcf33c205..000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.zh_TW.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=玻璃板是薄薄的玻璃層,在你建造它們時,它們會整齊地連接到鄰近的方塊。 -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=染色玻璃片是薄薄的一層染色玻璃,在你建造它們時,它們會整齊地連接到它們的鄰居。它們有許多不同的顏色。 -Iron Bars=鐵柵欄 -Iron bars neatly connect to their neighbors as you build them.=在你建造鐵柵欄時,它們會整齊地連接到鄰近的方塊。 -Glass Pane=玻璃片 -Stained Glass Pane=染色玻璃片 -Red Stained Glass Pane=紅色玻璃片 -Green Stained Glass Pane=綠色玻璃片 -Blue Stained Glass Pane=藍色玻璃片 -Light Blue Stained Glass Pane=淺藍色玻璃片 -Black Stained Glass Pane=黑色玻璃片 -White Stained Glass Pane=白色玻璃片 -Yellow Stained Glass Pane=黃色玻璃片 -Brown Stained Glass Pane=棕色玻璃片 -Orange Stained Glass Pane=橙色玻璃片 -Pink Stained Glass Pane=粉紅色玻璃片 -Grey Stained Glass Pane=灰色玻璃片 -Lime Stained Glass Pane=淺綠色玻璃片 -Light Grey Stained Glass Pane=淺灰色玻璃片 -Magenta Stained Glass Pane=洋紅色玻璃片 -Purple Stained Glass Pane=紫色玻璃片 -Cyan Stained Glass Pane=青色玻璃片 diff --git a/mods/ITEMS/xpanes/mod.conf b/mods/ITEMS/xpanes/mod.conf deleted file mode 100644 index ba2147663..000000000 --- a/mods/ITEMS/xpanes/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = xpanes -depends = mcl_sounds, mcl_core -optional_depends = doc diff --git a/mods/ITEMS/xpanes/textures/xpanes_pane_iron.png b/mods/ITEMS/xpanes/textures/xpanes_pane_iron.png deleted file mode 100644 index 45c4bf13c..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_pane_iron.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_black.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_black.png deleted file mode 100644 index 84a68034b..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_black.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_blue.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_blue.png deleted file mode 100644 index c5bf8235e..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_blue.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_brown.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_brown.png deleted file mode 100644 index eafbb2f2f..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_brown.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_cyan.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_cyan.png deleted file mode 100644 index 315734e14..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_cyan.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_gray.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_gray.png deleted file mode 100644 index 2826e38d5..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_gray.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_green.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_green.png deleted file mode 100644 index 88d73ce04..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_green.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_light_blue.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_light_blue.png deleted file mode 100644 index 7244012ec..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_lime.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_lime.png deleted file mode 100644 index 3fb8ed2dd..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_lime.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_magenta.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_magenta.png deleted file mode 100644 index 6824b438f..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_magenta.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_natural.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_natural.png deleted file mode 100644 index db53c90dc..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_natural.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_orange.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_orange.png deleted file mode 100644 index 5d2fb60f2..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_orange.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_pink.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_pink.png deleted file mode 100644 index e6cef5507..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_pink.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_purple.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_purple.png deleted file mode 100644 index fa02e7f84..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_purple.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_red.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_red.png deleted file mode 100644 index 891de591c..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_red.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_silver.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_silver.png deleted file mode 100644 index 0b0e7d598..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_silver.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_white.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_white.png deleted file mode 100644 index 9244f361f..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_white.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_yellow.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_yellow.png deleted file mode 100644 index d2f0b3204..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_yellow.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_iron.png b/mods/ITEMS/xpanes/textures/xpanes_top_iron.png deleted file mode 100644 index 972cf737b..000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_iron.png and /dev/null differ diff --git a/mods/MAPGEN/mcl_biomes/LICENSE b/mods/MAPGEN/mcl_biomes/LICENSE deleted file mode 100644 index 1f95d26c5..000000000 --- a/mods/MAPGEN/mcl_biomes/LICENSE +++ /dev/null @@ -1,5 +0,0 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/mods/MAPGEN/mcl_biomes/README.md b/mods/MAPGEN/mcl_biomes/README.md deleted file mode 100644 index e4f3edc5e..000000000 --- a/mods/MAPGEN/mcl_biomes/README.md +++ /dev/null @@ -1 +0,0 @@ -Biomes mod. By Wuzzy and maikerumine. diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua deleted file mode 100644 index f198e09fa..000000000 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ /dev/null @@ -1,3997 +0,0 @@ -local mg_name = minetest.get_mapgen_setting("mg_name") -local mg_seed = minetest.get_mapgen_setting("seed") - --- Some mapgen settings -local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true" - -local generate_fallen_logs = minetest.settings:get_bool("mcl_generate_fallen_logs", false) - -local mod_mcl_structures = minetest.get_modpath("mcl_structures") -local mod_mcl_core = minetest.get_modpath("mcl_core") -local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms") - --- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves -local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts" - -local deco_id_chorus_plant - --- --- Register biomes --- - -local OCEAN_MIN = -15 -local DEEP_OCEAN_MAX = OCEAN_MIN - 1 -local DEEP_OCEAN_MIN = -31 - ---[[ Special biome field: _mcl_biome_type: -Rough categorization of biomes: One of "snowy", "cold", "medium" and "hot" -Based off ]] - -local function register_classic_superflat_biome() - -- Classic Superflat: bedrock (not part of biome), 2 dirt, 1 grass block - minetest.register_biome({ - name = "flat", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_stone = "mcl_core:dirt", - y_min = mcl_vars.mg_overworld_min - 512, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 50, - heat_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 0, - }) -end - --- All mapgens except mgv6, flat and singlenode -local function register_biomes() - --[[ OVERWORLD ]] - - --[[ These biomes try to resemble MC as good as possible. This means especially the floor cover and - the type of plants and structures (shapes might differ). The terrain itself will be of course different - and depends on the mapgen. - Important: MC also takes the terrain into account while MT biomes don't care about the terrain at all - (except height). - MC has many “M” and “Hills” variants, most of which only differ in terrain compared to their original - counterpart. - In MT, any biome can occour in any terrain, so these variants are implied and are therefore - not explicitly implmented in MCL2. “M” variants are only included if they have another unique feature, - such as a different land cover. - In MCL2, the MC Overworld biomes are split in multiple more parts (stacked by height): - * The main part, this represents the land. It begins at around sea level and usually goes all the way up - * _ocean: For the area covered by ocean water. The y_max may vary for various beach effects. - Has sand or dirt as floor. - * _deep_ocean: Like _ocean, but deeper and has gravel as floor - * _underground: - * Other modifiers: Some complex biomes require more layers to improve the landscape. - - The following naming conventions apply: - * The land biome name is equal to the MC biome name, as of Minecraft 1.11 (in camel case) - * Height modifiers and sub-biomes are appended with underscores and in lowercase. Example: “_ocean” - * Non-MC biomes are written in lowercase - * MC dimension biomes are named after their MC dimension - - Intentionally missing biomes: - * River (generated by valleys and v7) - * Frozen River (generated by valleys and v7) - * Hills biomes (shape only) - * Plateau (shape only) - * Plateau M (shape only) - * Cold Taiga M (mountain only) - * Taiga M (mountain only) - * Roofed Forest M (mountain only) - * Swampland M (mountain only) - * Extreme Hills Edge (unused in MC) - - TODO: - * Better beaches - * Improve Extreme Hills M - * Desert M - - ]] - - -- List of Overworld biomes without modifiers. - -- IMPORTANT: Don't forget to add new Overworld biomes to this list! - local overworld_biomes = { - "IcePlains", - "IcePlainsSpikes", - "ColdTaiga", - "ExtremeHills", - "ExtremeHillsM", - "ExtremeHills+", - "Taiga", - "MegaTaiga", - "MegaSpruceTaiga", - "StoneBeach", - "Plains", - "SunflowerPlains", - "Forest", - "FlowerForest", - "BirchForest", - "BirchForestM", - "RoofedForest", - "Swampland", - "Jungle", - "JungleM", - "JungleEdge", - "JungleEdgeM", - "MushroomIsland", - "Desert", - "Savanna", - "SavannaM", - "Mesa", - "MesaBryce", - "MesaPlateauF", - "MesaPlateauFM", - } - - -- Ice Plains Spikes (rare) - minetest.register_biome({ - name = "IcePlainsSpikes", - node_top = "mcl_core:snowblock", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 2, - node_water_top = "mcl_core:ice", - depth_water_top = 1, - node_river_water = "mcl_core:ice", - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 24, - heat_point = -5, - _mcl_biome_type = "snowy", - _mcl_palette_index = 2, - }) - minetest.register_biome({ - name = "IcePlainsSpikes_ocean", - node_top = "mcl_core:gravel", - depth_top = 2, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_river_water = "mcl_core:ice", - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 24, - heat_point = -5, - _mcl_biome_type = "snowy", - _mcl_palette_index = 2, - }) - - -- Cold Taiga - minetest.register_biome({ - name = "ColdTaiga", - node_dust = "mcl_core:snow", - node_top = "mcl_core:dirt_with_grass_snow", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 3, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 58, - heat_point = 8, - _mcl_biome_type = "snowy", - _mcl_palette_index = 3, - }) - - -- A cold beach-like biome, implemented as low part of Cold Taiga - minetest.register_biome({ - name = "ColdTaiga_beach", - node_dust = "mcl_core:snow", - node_top = "mcl_core:sand", - depth_top = 2, - node_water_top = "mcl_core:ice", - depth_water_top = 1, - node_filler = "mcl_core:sandstone", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = 2, - humidity_point = 58, - heat_point = 8, - _mcl_biome_type = "snowy", - _mcl_palette_index = 3, - }) - -- Water part of the beach. Added to prevent snow being on the ice. - minetest.register_biome({ - name = "ColdTaiga_beach_water", - node_top = "mcl_core:sand", - depth_top = 2, - node_water_top = "mcl_core:ice", - depth_water_top = 1, - node_filler = "mcl_core:sandstone", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = -4, - y_max = 0, - humidity_point = 58, - heat_point = 8, - _mcl_biome_type = "snowy", - _mcl_palette_index = 3, - }) - minetest.register_biome({ - name = "ColdTaiga_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -5, - humidity_point = 58, - heat_point = 8, - vertical_blend = 1, - _mcl_biome_type = "snowy", - _mcl_palette_index = 3, - }) - - -- Mega Taiga - minetest.register_biome({ - name = "MegaTaiga", - node_top = "mcl_core:podzol", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 76, - heat_point = 10, - _mcl_biome_type = "cold", - _mcl_palette_index = 4, - }) - minetest.register_biome({ - name = "MegaTaiga_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 76, - heat_point = 10, - _mcl_biome_type = "cold", - _mcl_palette_index = 4, - }) - - -- Mega Spruce Taiga - minetest.register_biome({ - name = "MegaSpruceTaiga", - node_top = "mcl_core:podzol", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 100, - heat_point = 8, - _mcl_biome_type = "cold", - _mcl_palette_index = 5, - }) - minetest.register_biome({ - name = "MegaSpruceTaiga_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 100, - heat_point = 8, - _mcl_biome_type = "cold", - _mcl_palette_index = 5, - }) - - -- Extreme Hills - -- Sparsely populated grasslands with little tallgras and trees. - minetest.register_biome({ - name = "ExtremeHills", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 4, - node_riverbed = "mcl_core:sand", - depth_riverbed = 4, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 10, - heat_point = 45, - _mcl_biome_type = "cold", - _mcl_palette_index = 6, - }) - minetest.register_biome({ - name = "ExtremeHills_beach", - node_top = "mcl_core:sand", - depth_top = 2, - depth_water_top = 1, - node_filler = "mcl_core:sandstone", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 4, - y_min = -4, - y_max = 3, - humidity_point = 10, - heat_point = 45, - _mcl_biome_type = "cold", - _mcl_palette_index = 6, - }) - minetest.register_biome({ - name = "ExtremeHills_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 4, - node_riverbed = "mcl_core:sand", - depth_riverbed = 4, - y_min = OCEAN_MIN, - y_max = -5, - vertical_blend = 1, - humidity_point = 10, - heat_point = 45, - _mcl_biome_type = "cold", - _mcl_palette_index = 6, - }) - - -- Extreme Hills M - -- Just gravel. - minetest.register_biome({ - name = "ExtremeHillsM", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:gravel", - depth_riverbed = 3, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 0, - heat_point = 25, - _mcl_biome_type = "cold", - _mcl_palette_index = 7, - }) - minetest.register_biome({ - name = "ExtremeHillsM_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 3, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 0, - heat_point = 25, - _mcl_biome_type = "cold", - _mcl_palette_index = 7, - }) - - -- Extreme Hills+ - -- This biome is near-identical to Extreme Hills on the surface but has snow-covered mountains with spruce/oak - -- forests above a certain height. - minetest.register_biome({ - name = "ExtremeHills+", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 4, - node_riverbed = "mcl_core:sand", - depth_riverbed = 4, - y_min = 1, - y_max = 41, - humidity_point = 24, - heat_point = 25, - vertical_blend = 6, - _mcl_biome_type = "cold", - _mcl_palette_index = 8, - }) - ---- Sub-biome for Extreme Hills+ for those snow forests - minetest.register_biome({ - name = "ExtremeHills+_snowtop", - node_dust = "mcl_core:snow", - node_top = "mcl_core:dirt_with_grass_snow", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 4, - node_river_water = "mcl_core:ice", - node_riverbed = "mcl_core:sand", - depth_riverbed = 4, - y_min = 42, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 24, - heat_point = 25, - _mcl_biome_type = "cold", - _mcl_palette_index = 8, - }) - minetest.register_biome({ - name = "ExtremeHills+_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 4, - node_riverbed = "mcl_core:sand", - depth_riverbed = 4, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 24, - heat_point = 25, - _mcl_biome_type = "cold", - _mcl_palette_index = 8, - }) - - -- Stone beach - -- Just stone. - -- Not neccessarily a beach at all, only named so according to MC - minetest.register_biome({ - name = "StoneBeach", - node_riverbed = "mcl_core:sand", - depth_riverbed = 1, - y_min = -7, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 0, - heat_point = 8, - _mcl_biome_type = "cold", - _mcl_palette_index = 9, - }) - - minetest.register_biome({ - name = "StoneBeach_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_riverbed = "mcl_core:sand", - depth_riverbed = 1, - y_min = OCEAN_MIN, - y_max = -8, - vertical_blend = 2, - humidity_point = 0, - heat_point = 8, - _mcl_biome_type = "cold", - _mcl_palette_index = 9, - }) - - -- Ice Plains - minetest.register_biome({ - name = "IcePlains", - node_dust = "mcl_core:snow", - node_top = "mcl_core:dirt_with_grass_snow", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 2, - node_water_top = "mcl_core:ice", - depth_water_top = 2, - node_river_water = "mcl_core:ice", - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 24, - heat_point = 8, - _mcl_biome_type = "snowy", - _mcl_palette_index = 10, - }) - minetest.register_biome({ - name = "IcePlains_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 24, - heat_point = 8, - _mcl_biome_type = "snowy", - _mcl_palette_index = 10, - }) - - -- Plains - minetest.register_biome({ - name = "Plains", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 3, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 39, - heat_point = 58, - _mcl_biome_type = "medium", - _mcl_palette_index = 0, - }) - minetest.register_biome({ - name = "Plains_beach", - node_top = "mcl_core:sand", - depth_top = 2, - node_filler = "mcl_core:sandstone", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 0, - y_max = 2, - humidity_point = 39, - heat_point = 58, - _mcl_biome_type = "medium", - _mcl_palette_index = 0, - }) - minetest.register_biome({ - name = "Plains_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -1, - humidity_point = 39, - heat_point = 58, - _mcl_biome_type = "medium", - _mcl_palette_index = 0, - }) - - -- Sunflower Plains - minetest.register_biome({ - name = "SunflowerPlains", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 28, - heat_point = 45, - _mcl_biome_type = "medium", - _mcl_palette_index = 11, - }) - minetest.register_biome({ - name = "SunflowerPlains_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:dirt", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 28, - heat_point = 45, - _mcl_biome_type = "medium", - _mcl_palette_index = 11, - }) - - -- Taiga - minetest.register_biome({ - name = "Taiga", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 58, - heat_point = 22, - _mcl_biome_type = "cold", - _mcl_palette_index = 12, - }) - minetest.register_biome({ - name = "Taiga_beach", - node_top = "mcl_core:sand", - depth_top = 2, - node_filler = "mcl_core:sandstone", - depth_filler = 1, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = 3, - humidity_point = 58, - heat_point = 22, - _mcl_biome_type = "cold", - _mcl_palette_index = 12, - }) - minetest.register_biome({ - name = "Taiga_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 58, - heat_point = 22, - _mcl_biome_type = "cold", - _mcl_palette_index = 12, - }) - - -- Forest - minetest.register_biome({ - name = "Forest", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 61, - heat_point = 45, - _mcl_biome_type = "medium", - _mcl_palette_index = 13, - }) - minetest.register_biome({ - name = "Forest_beach", - node_top = "mcl_core:sand", - depth_top = 2, - node_filler = "mcl_core:sandstone", - depth_filler = 1, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = -1, - y_max = 0, - humidity_point = 61, - heat_point = 45, - _mcl_biome_type = "medium", - _mcl_palette_index = 13, - }) - minetest.register_biome({ - name = "Forest_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -2, - humidity_point = 61, - heat_point = 45, - _mcl_biome_type = "medium", - _mcl_palette_index = 13, - }) - - -- Flower Forest - minetest.register_biome({ - name = "FlowerForest", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 3, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 44, - heat_point = 32, - _mcl_biome_type = "medium", - _mcl_palette_index = 14, - }) - minetest.register_biome({ - name = "FlowerForest_beach", - node_top = "mcl_core:sand", - depth_top = 2, - node_filler = "mcl_core:sandstone", - depth_filler = 1, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = -2, - y_max = 2, - humidity_point = 44, - heat_point = 32, - _mcl_biome_type = "medium", - _mcl_palette_index = 14, - }) - minetest.register_biome({ - name = "FlowerForest_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -3, - humidity_point = 44, - heat_point = 32, - _mcl_biome_type = "medium", - _mcl_palette_index = 14, - }) - - -- Birch Forest - minetest.register_biome({ - name = "BirchForest", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 78, - heat_point = 31, - _mcl_biome_type = "medium", - _mcl_palette_index = 15, - }) - minetest.register_biome({ - name = "BirchForest_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 78, - heat_point = 31, - _mcl_biome_type = "medium", - _mcl_palette_index = 15, - }) - - -- Birch Forest M - minetest.register_biome({ - name = "BirchForestM", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 77, - heat_point = 27, - _mcl_biome_type = "medium", - _mcl_palette_index = 16, - }) - minetest.register_biome({ - name = "BirchForestM_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 77, - heat_point = 27, - _mcl_biome_type = "medium", - _mcl_palette_index = 16, - }) - - -- Desert - minetest.register_biome({ - name = "Desert", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - node_stone = "mcl_core:sandstone", - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 26, - heat_point = 94, - _mcl_biome_type = "hot", - _mcl_palette_index = 17, - }) - minetest.register_biome({ - name = "Desert_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 26, - heat_point = 94, - _mcl_biome_type = "hot", - _mcl_palette_index = 17, - }) - - -- Roofed Forest - minetest.register_biome({ - name = "RoofedForest", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 94, - heat_point = 27, - _mcl_biome_type = "medium", - _mcl_palette_index = 18, - }) - minetest.register_biome({ - name = "RoofedForest_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 94, - heat_point = 27, - _mcl_biome_type = "medium", - _mcl_palette_index = 18, - }) - - -- Mesa: Starts with a couple of sand-covered layers (the "sandlevel"), - -- followed by terracotta with colorful (but imperfect) strata - minetest.register_biome({ - name = "Mesa", - node_top = "mcl_colorblocks:hardened_clay", - depth_top = 1, - node_filler = "mcl_colorblocks:hardened_clay", - node_riverbed = "mcl_core:redsand", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay", - y_min = 11, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 0, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 19, - }) - -- Helper biome for the red sand at the bottom of Mesas. - minetest.register_biome({ - name = "Mesa_sandlevel", - node_top = "mcl_core:redsand", - depth_top = 1, - node_filler = "mcl_colorblocks:hardened_clay_orange", - depth_filler = 3, - node_riverbed = "mcl_core:redsand", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay_orange", - y_min = -4, - y_max = 10, - humidity_point = 0, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 19, - }) - minetest.register_biome({ - name = "Mesa_ocean", - node_top = "mcl_core:sand", - depth_top = 3, - node_filler = "mcl_core:sand", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -5, - vertical_blend = 1, - humidity_point = 0, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 19, - }) - - -- Mesa Bryce: Variant of Mesa, but with perfect strata and a much smaller red sand desert - minetest.register_biome({ - name = "MesaBryce", - node_top = "mcl_colorblocks:hardened_clay", - depth_top = 1, - node_filler = "mcl_colorblocks:hardened_clay", - node_riverbed = "mcl_colorblocks:hardened_clay", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay", - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - humidity_point = -5, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 20, - }) - minetest.register_biome({ - name = "MesaBryce_sandlevel", - node_top = "mcl_core:redsand", - depth_top = 1, - node_filler = "mcl_colorblocks:hardened_clay_orange", - depth_filler = 3, - node_riverbed = "mcl_colorblocks:hardened_clay", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay_orange", - y_min = -4, - y_max = 3, - humidity_point = -5, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 20, - }) - minetest.register_biome({ - name = "MesaBryce_ocean", - node_top = "mcl_core:sand", - depth_top = 3, - node_filler = "mcl_core:sand", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -5, - vertical_blend = 1, - humidity_point = -5, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 20, - }) - - - - -- Mesa Plateau F - -- Identical to Mesa below Y=30. At Y=30 and above there is a "dry" oak forest - minetest.register_biome({ - name = "MesaPlateauF", - node_top = "mcl_colorblocks:hardened_clay", - depth_top = 1, - node_filler = "mcl_colorblocks:hardened_clay", - node_riverbed = "mcl_core:redsand", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay", - y_min = 11, - y_max = 29, - humidity_point = 0, - heat_point = 60, - vertical_blend = 0, -- we want a sharp transition - _mcl_biome_type = "hot", - _mcl_palette_index = 21, - }) - -- The oak forest plateau of this biome. - -- This is a plateau for grass blocks, dry shrubs, tall grass, coarse dirt and oaks. - -- Strata don't generate here. - minetest.register_biome({ - name = "MesaPlateauF_grasstop", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 1, - node_riverbed = "mcl_core:redsand", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay", - y_min = 30, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 0, - heat_point = 60, - _mcl_biome_type = "hot", - _mcl_palette_index = 21, - }) - minetest.register_biome({ - name = "MesaPlateauF_sandlevel", - node_top = "mcl_core:redsand", - depth_top = 2, - node_filler = "mcl_colorblocks:hardened_clay_orange", - depth_filler = 3, - node_riverbed = "mcl_core:redsand", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay_orange", - y_min = -5, - y_max = 10, - humidity_point = 0, - heat_point = 60, - _mcl_biome_type = "hot", - _mcl_palette_index = 21, - }) - minetest.register_biome({ - name = "MesaPlateauF_ocean", - node_top = "mcl_core:sand", - depth_top = 3, - node_filler = "mcl_core:sand", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -6, - vertical_blend = 1, - humidity_point = 0, - heat_point = 60, - _mcl_biome_type = "hot", - _mcl_palette_index = 21, - }) - - -- Mesa Plateau FM - -- Dryer and more "chaotic"/"weathered down" variant of MesaPlateauF: - -- oak forest is less dense, more coarse dirt, more erratic terrain, vertical blend, more red sand layers, - -- red sand as ores, red sandstone at sandlevel - minetest.register_biome({ - name = "MesaPlateauFM", - node_top = "mcl_colorblocks:hardened_clay", - depth_top = 1, - node_filler = "mcl_colorblocks:hardened_clay", - node_riverbed = "mcl_core:redsand", - depth_riverbed = 2, - node_stone = "mcl_colorblocks:hardened_clay", - y_min = 12, - y_max = 29, - humidity_point = -5, - heat_point = 60, - vertical_blend = 5, - _mcl_biome_type = "hot", - _mcl_palette_index = 22, - }) - -- Grass plateau - minetest.register_biome({ - name = "MesaPlateauFM_grasstop", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:coarse_dirt", - depth_filler = 2, - node_riverbed = "mcl_core:redsand", - depth_riverbed = 1, - node_stone = "mcl_colorblocks:hardened_clay", - y_min = 30, - y_max = mcl_vars.mg_overworld_max, - humidity_point = -5, - heat_point = 60, - _mcl_biome_type = "hot", - _mcl_palette_index = 22, - }) - minetest.register_biome({ - name = "MesaPlateauFM_sandlevel", - node_top = "mcl_core:redsand", - depth_top = 3, - node_filler = "mcl_colorblocks:hardened_clay_orange", - depth_filler = 3, - node_riverbed = "mcl_core:redsand", - depth_riverbed = 2, - node_stone = "mcl_colorblocks:hardened_clay", - -- red sand has wider reach than in other mesa biomes - y_min = -7, - y_max = 11, - humidity_point = -5, - heat_point = 60, - vertical_blend = 4, - _mcl_biome_type = "hot", - _mcl_palette_index = 22, - }) - minetest.register_biome({ - name = "MesaPlateauFM_ocean", - node_top = "mcl_core:sand", - depth_top = 3, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 3, - y_min = OCEAN_MIN, - y_max = -8, - vertical_blend = 2, - humidity_point = -5, - heat_point = 60, - _mcl_biome_type = "hot", - _mcl_palette_index = 22, - }) - - - -- Savanna - minetest.register_biome({ - name = "Savanna", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 36, - heat_point = 79, - _mcl_biome_type = "hot", - _mcl_palette_index = 1, - }) - minetest.register_biome({ - name = "Savanna_beach", - node_top = "mcl_core:sand", - depth_top = 3, - node_filler = "mcl_core:sandstone", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = -1, - y_max = 0, - humidity_point = 36, - heat_point = 79, - _mcl_biome_type = "hot", - _mcl_palette_index = 1, - }) - minetest.register_biome({ - name = "Savanna_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -2, - humidity_point = 36, - heat_point = 79, - _mcl_biome_type = "hot", - _mcl_palette_index = 1, - }) - - -- Savanna M - -- Changes to Savanna: Coarse Dirt. No sand beach. No oaks. - -- Otherwise identical to Savanna - minetest.register_biome({ - name = "SavannaM", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:coarse_dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 48, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 23, - }) - minetest.register_biome({ - name = "SavannaM_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 48, - heat_point = 100, - _mcl_biome_type = "hot", - _mcl_palette_index = 23, - }) - - -- Jungle - minetest.register_biome({ - name = "Jungle", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 88, - heat_point = 81, - _mcl_biome_type = "medium", - _mcl_palette_index = 24, - }) - minetest.register_biome({ - name = "Jungle_shore", - node_top = "mcl_core:dirt", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = -2, - y_max = 0, - humidity_point = 88, - heat_point = 81, - _mcl_biome_type = "medium", - _mcl_palette_index = 24, - }) - minetest.register_biome({ - name = "Jungle_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -3, - vertical_blend = 1, - humidity_point = 88, - heat_point = 81, - _mcl_biome_type = "medium", - _mcl_palette_index = 24, - }) - - -- Jungle M - -- Like Jungle but with even more dense vegetation - minetest.register_biome({ - name = "JungleM", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 92, - heat_point = 81, - _mcl_biome_type = "medium", - _mcl_palette_index = 25, - }) - minetest.register_biome({ - name = "JungleM_shore", - node_top = "mcl_core:dirt", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = -2, - y_max = 0, - humidity_point = 92, - heat_point = 81, - _mcl_biome_type = "medium", - _mcl_palette_index = 25, - }) - minetest.register_biome({ - name = "JungleM_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -3, - vertical_blend = 1, - humidity_point = 92, - heat_point = 81, - _mcl_biome_type = "medium", - _mcl_palette_index = 25, - }) - - -- Jungle Edge - minetest.register_biome({ - name = "JungleEdge", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 88, - heat_point = 76, - _mcl_biome_type = "medium", - _mcl_palette_index = 26, - }) - minetest.register_biome({ - name = "JungleEdge_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 2, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 88, - heat_point = 76, - _mcl_biome_type = "medium", - _mcl_palette_index = 26, - }) - - -- Jungle Edge M (very rare). - -- Almost identical to Jungle Edge. Has deeper dirt. Melons spawn here a lot. - -- This biome occours directly between Jungle M and Jungle Edge but also has a small border to Jungle. - -- This biome is very small in general. - minetest.register_biome({ - name = "JungleEdgeM", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 4, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - humidity_point = 90, - heat_point = 79, - _mcl_biome_type = "medium", - _mcl_palette_index = 27, - }) - minetest.register_biome({ - name = "JungleEdgeM_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 4, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 90, - heat_point = 79, - _mcl_biome_type = "medium", - _mcl_palette_index = 27, - }) - - -- Swampland - minetest.register_biome({ - name = "Swampland", - node_top = "mcl_core:dirt_with_grass", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - -- Note: Limited in height! - y_max = 23, - humidity_point = 90, - heat_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 28, - }) - minetest.register_biome({ - name = "Swampland_shore", - node_top = "mcl_core:dirt", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = -5, - y_max = 0, - humidity_point = 90, - heat_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 28, - }) - minetest.register_biome({ - name = "Swampland_ocean", - node_top = "mcl_core:sand", - depth_top = 1, - node_filler = "mcl_core:sand", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = -6, - vertical_blend = 1, - humidity_point = 90, - heat_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 28, - }) - - -- Mushroom Island / Mushroom Island Shore (rare) - -- Not neccessarily an island at all, only named after Minecraft's biome - minetest.register_biome({ - name = "MushroomIsland", - node_top = "mcl_core:mycelium", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 4, - -- Note: Limited in height! - y_max = 20, - vertical_blend = 1, - humidity_point = 106, - heat_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 29, - }) - - minetest.register_biome({ - name = "MushroomIslandShore", - node_top = "mcl_core:mycelium", - depth_top = 1, - node_filler = "mcl_core:dirt", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = 1, - y_max = 3, - humidity_point = 106, - heat_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 29, - }) - minetest.register_biome({ - name = "MushroomIsland_ocean", - node_top = "mcl_core:gravel", - depth_top = 1, - node_filler = "mcl_core:gravel", - depth_filler = 3, - node_riverbed = "mcl_core:sand", - depth_riverbed = 2, - y_min = OCEAN_MIN, - y_max = 0, - humidity_point = 106, - heat_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 29, - }) - - -- Add deep ocean and underground biomes automatically. - for i=1, #overworld_biomes do - local biome = overworld_biomes[i] - - -- Deep Ocean - minetest.register_biome({ - name = biome .. "_deep_ocean", - heat_point = minetest.registered_biomes[biome].heat_point, - humidity_point = minetest.registered_biomes[biome].humidity_point, - y_min = DEEP_OCEAN_MIN, - y_max = DEEP_OCEAN_MAX, - node_top = minetest.registered_biomes[biome.."_ocean"].node_top, - depth_top = 2, - node_filler = minetest.registered_biomes[biome.."_ocean"].node_filler, - depth_filler = 3, - node_riverbed = minetest.registered_biomes[biome.."_ocean"].node_riverbed, - depth_riverbed = 2, - vertical_blend = 5, - _mcl_biome_type = minetest.registered_biomes[biome]._mcl_biome_type, - _mcl_palette_index = minetest.registered_biomes[biome]._mcl_palette_index, - }) - - -- Underground biomes are used to identify the underground and to prevent nodes from the surface - -- (sand, dirt) from leaking into the underground. - minetest.register_biome({ - name = biome .. "_underground", - heat_point = minetest.registered_biomes[biome].heat_point, - humidity_point = minetest.registered_biomes[biome].humidity_point, - y_min = mcl_vars.mg_overworld_min, - y_max = DEEP_OCEAN_MIN - 1, - _mcl_biome_type = minetest.registered_biomes[biome]._mcl_biome_type, - _mcl_palette_index = minetest.registered_biomes[biome]._mcl_palette_index, - }) - - end -end - --- Register biomes of non-Overworld biomes -local function register_dimension_biomes() - --[[ REALMS ]] - - --[[ THE NETHER ]] - minetest.register_biome({ - name = "Nether", - node_filler = "mcl_nether:netherrack", - node_stone = "mcl_nether:netherrack", - node_water = "air", - node_river_water = "air", - node_cave_liquid = "air", - y_min = mcl_vars.mg_nether_min, - -- FIXME: For some reason the Nether stops generating early if this constant is not added. - -- Figure out why. - y_max = mcl_vars.mg_nether_max + 80, - heat_point = 100, - humidity_point = 0, - _mcl_biome_type = "hot", - _mcl_palette_index = 17, - }) - - --[[ THE END ]] - minetest.register_biome({ - name = "End", - node_stone = "air", - node_filler = "air", - node_water = "air", - node_river_water = "air", - node_cave_liquid = "air", - -- FIXME: For some reason the End stops generating early if this constant is not added. - -- Figure out why. - y_min = mcl_vars.mg_end_min, - y_max = mcl_vars.mg_end_max + 80, - heat_point = 50, - humidity_point = 50, - _mcl_biome_type = "medium", - _mcl_palette_index = 0, - }) - -end - --- Register ores which are limited by biomes. For all mapgens except flat and singlenode. -local function register_biome_ores() - local stonelike = {"mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite"} - - -- Emeralds - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_emerald", - wherein = stonelike, - clust_scarcity = 16384, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(4), - y_max = mcl_worlds.layer_to_y(32), - biomes = { - "ExtremeHills", "ExtremeHills_beach", "ExtremeHills_ocean", "ExtremeHills_deep_ocean", "ExtremeHills_underground", - "ExtremeHills+", "ExtremeHills+_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills+_underground", - "ExtremeHillsM", "ExtremeHillsM_ocean", "ExtremeHillsM_deep_ocean", "ExtremeHillsM_underground", - }, - }) - - -- Rarely replace stone with stone monster eggs. - -- In v6 this can happen anywhere, in other mapgens only in Extreme Hills. - local monster_egg_scarcity - if mg_name == "v6" then - monster_egg_scarcity = 28 * 28 * 28 - else - monster_egg_scarcity = 26 * 26 * 26 - end - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_monster_eggs:monster_egg_stone", - wherein = "mcl_core:stone", - clust_scarcity = monster_egg_scarcity, - clust_num_ores = 3, - clust_size = 2, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(61), - biomes = { - "ExtremeHills", "ExtremeHills_beach", "ExtremeHills_ocean", "ExtremeHills_deep_ocean", "ExtremeHills_underground", - "ExtremeHills+", "ExtremeHills+_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills+_underground", - "ExtremeHillsM", "ExtremeHillsM_ocean", "ExtremeHillsM_deep_ocean", "ExtremeHillsM_underground", - }, - }) - - -- Bonus gold spawn in Mesa - if mg_name ~= "v6" then - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_gold", - wherein = stonelike, - clust_scarcity = 3333, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(32), - y_max = mcl_worlds.layer_to_y(79), - biomes = { "Mesa", "Mesa_sandlevel", "Mesa_ocean", - "MesaBryce", "MesaBryce_sandlevel", "MesaBryce_ocean", - "MesaPlateauF", "MesaPlateauF_sandlevel", "MesaPlateauF_ocean", - "MesaPlateauFM", "MesaPlateauFM_sandlevel", "MesaPlateauFM_ocean", }, - }) - end -end - --- Register “fake” ores directly related to the biomes. These are mostly low-level landscape alternations -local function register_biomelike_ores() - - -- Random coarse dirt floor in Mega Taiga and Mesa Plateau F - minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_core:coarse_dirt", - wherein = {"mcl_core:podzol", "mcl_core:dirt"}, - clust_scarcity = 1, - clust_num_ores = 12, - clust_size = 10, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_threshold = 0.2, - noise_params = {offset=0, scale=15, spread={x=130, y=130, z=130}, seed=24, octaves=3, persist=0.70}, - biomes = { "MegaTaiga" }, - }) - - minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_core:coarse_dirt", - wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"}, - column_height_max = 1, - column_midpoint_factor = 0.0, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_threshold = 0.0, - noise_params = {offset=0, scale=15, spread={x=250, y=250, z=250}, seed=24, octaves=3, persist=0.70}, - biomes = { "MesaPlateauF_grasstop" }, - }) - minetest.register_ore({ - ore_type = "blob", - ore = "mcl_core:coarse_dirt", - wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"}, - clust_scarcity = 1500, - clust_num_ores = 25, - clust_size = 7, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - }, - biomes = { "MesaPlateauF_grasstop" }, - }) - minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_core:coarse_dirt", - wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"}, - column_height_max = 1, - column_midpoint_factor = 0.0, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_threshold = -2.5, - noise_params = {offset=1, scale=15, spread={x=250, y=250, z=250}, seed=24, octaves=3, persist=0.80}, - biomes = { "MesaPlateauFM_grasstop" }, - }) - minetest.register_ore({ - ore_type = "blob", - ore = "mcl_core:coarse_dirt", - wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"}, - clust_scarcity = 1800, - clust_num_ores = 65, - clust_size = 15, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - }, - biomes = { "MesaPlateauFM_grasstop" }, - }) - -- Occasionally dig out portions of MesaPlateauFM - minetest.register_ore({ - ore_type = "blob", - ore = "air", - wherein = {"group:hardened_clay", "group:sand","mcl_core:coarse_dirt"}, - clust_scarcity = 4000, - clust_size = 5, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - }, - biomes = { "MesaPlateauFM", "MesaPlateauFM_grasstop" }, - }) - minetest.register_ore({ - ore_type = "blob", - ore = "mcl_core:redsandstone", - wherein = {"mcl_colorblocks:hardened_clay_orange"}, - clust_scarcity = 300, - clust_size = 8, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - }, - biomes = { "MesaPlateauFM_sandlevel" }, - }) - -- More red sand in MesaPlateauFM - minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_core:redsand", - wherein = {"group:hardened_clay"}, - clust_scarcity = 1, - clust_num_ores = 12, - clust_size = 10, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_threshold = 0.1, - noise_params = {offset=0, scale=15, spread={x=130, y=130, z=130}, seed=95, octaves=3, persist=0.70}, - biomes = { "MesaPlateauFM" }, - }) - minetest.register_ore({ - ore_type = "blob", - ore = "mcl_core:redsand", - wherein = {"group:hardened_clay"}, - clust_scarcity = 1500, - clust_size = 4, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - }, - biomes = { "MesaPlateauFM", "MesaPlateauFM_grasstop", "MesaPlateauFM_sandlevel" }, - }) - - -- Small dirt patches in Extreme Hills M - minetest.register_ore({ - ore_type = "blob", - -- TODO: Should be grass block. But generating this as ore means gras blocks will spawn undeground. :-( - ore = "mcl_core:dirt", - wherein = {"mcl_core:gravel"}, - clust_scarcity = 5000, - clust_num_ores = 12, - clust_size = 4, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_threshold = 0.2, - noise_params = {offset=0, scale=5, spread={x=250, y=250, z=250}, seed=64, octaves=3, persist=0.60}, - biomes = { "ExtremeHillsM" }, - }) - -- For a transition from stone to hardened clay in mesa biomes that is not perfectly flat - minetest.register_ore({ - ore_type = "stratum", - ore = "mcl_core:stone", - wherein = {"group:hardened_clay"}, - noise_params = {offset=-6, scale=2, spread={x=25, y=25, z=25}, octaves=1, persist=0.60}, - stratum_thickness = 8, - biomes = { - "Mesa_sandlevel", "Mesa_ocean", - "MesaBryce_sandlevel", "MesaBryce_ocean", - "MesaPlateauF_sandlevel", "MesaPlateauF_ocean", - "MesaPlateauFM_sandlevel", "MesaPlateauFM_ocean", - }, - y_min = -4, - y_max = 0, - - }) - - -- Mesa strata (registered as sheet ores) - - -- Helper function to create strata. - local function stratum(y_min, height, color, seed, is_perfect) - if not height then - height = 1 - end - if not seed then - seed = 39 - end - local y_max = y_min + height-1 - local perfect_biomes - if is_perfect then - -- "perfect" means no erosion - perfect_biomes = { "MesaBryce", "Mesa", "MesaPlateauF", "MesaPlateauFM" } - else - perfect_biomes = { "MesaBryce" } - end - -- Full, perfect stratum - minetest.register_ore({ - ore_type = "stratum", - ore = "mcl_colorblocks:hardened_clay_"..color, - -- Only paint uncolored so the biome can choose - -- a color in advance. - wherein = {"mcl_colorblocks:hardened_clay"}, - y_min = y_min, - y_max = y_max, - biomes = perfect_biomes, - }) - if not is_perfect then - -- Slightly eroded stratum, only minor imperfections - minetest.register_ore({ - ore_type = "stratum", - ore = "mcl_colorblocks:hardened_clay_"..color, - wherein = {"mcl_colorblocks:hardened_clay"}, - y_min = y_min, - y_max = y_max, - biomes = { "Mesa", "MesaPlateauF" }, - noise_params = { - offset = y_min+(y_max-y_min)/2, - scale = 0, - spread = {x = 50, y = 50, z = 50}, - seed = seed+4, - octaves = 1, - persist = 1.0 - }, - np_stratum_thickness = { - offset = 1.28, - scale = 1, - spread = {x = 18, y = 18, z = 18}, - seed = seed+4, - octaves = 3, - persist = 0.8, - }, - }) - -- Very eroded stratum, most of the color is gone - minetest.register_ore({ - ore_type = "stratum", - ore = "mcl_colorblocks:hardened_clay_"..color, - wherein = {"mcl_colorblocks:hardened_clay"}, - y_min = y_min, - y_max = y_max, - biomes = { "MesaPlateauFM" }, - noise_params = { - offset = y_min+(y_max-y_min)/2, - scale = 0, - spread = {x = 50, y = 50, z = 50}, - seed = seed+4, - octaves = 1, - persist = 1.0 - }, - np_stratum_thickness = { - offset = 0.1, - scale = 1, - spread = {x = 28, y = 28, z = 28}, - seed = seed+4, - octaves = 2, - persist = 0.6, - }, - }) - end - - end - - -- Hardcoded orange strata near sea level. - - -- For MesaBryce, since it has no sand at these heights - stratum(4, 1, "orange", nil, true) - stratum(7, 2, "orange", nil, true) - - -- 3-level stratum above the sandlevel (all mesa biomes) - stratum(11, 3, "orange", nil, true) - - -- Create random strata for up to Y = 256. - -- These strata are calculated based on the world seed and are global. - -- They are thus different per-world. - local mesapr = PcgRandom(mg_seed) - - --[[ - - ------ DANGER ZONE! ------ - - The following code is sensitive to changes; changing any number may break - mapgen consistency when the mapgen generates new mapchunks in existing - worlds because the random generator will yield different results and the strata - suddenly don't match up anymore. ]] - - -- Available Mesa colors: - local mesa_stratum_colors = { "silver", "brown", "orange", "red", "yellow", "white" } - - -- Start level - local y = 17 - - -- Generate stratas - repeat - -- Each stratum has a color (duh!) - local colorid = mesapr:next(1, #mesa_stratum_colors) - - -- … and a random thickness - local heightrandom = mesapr:next(1, 12) - local h - if heightrandom == 12 then - h = 4 - elseif heightrandom >= 10 then - h = 3 - elseif heightrandom >= 8 then - h = 2 - else - h = 1 - end - -- Small built-in bias: Only thin strata up to this Y level - if y < 45 then - h = math.min(h, 2) - end - - -- Register stratum - stratum(y, h, mesa_stratum_colors[colorid]) - - -- Skip a random amount of layers (which won't get painted) - local skiprandom = mesapr:next(1, 12) - local skip - if skiprandom == 12 then - skip = 4 - elseif skiprandom >= 10 then - skip = 3 - elseif skiprandom >= 5 then - skip = 2 - elseif skiprandom >= 2 then - skip = 1 - else - -- If this happens, the next stratum will touch the previous one without gap - skip = 0 - end - - -- Get height of next stratum or finish - y = y + h + skip - until y > 256 - - --[[ END OF DANGER ZONE ]] -end - --- Non-Overworld ores -local function register_dimension_ores() - - --[[ NETHER GENERATION ]] - - -- Soul sand - minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_nether:soul_sand", - -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally - -- in v6, but instead set with the on_generated function in mcl_mapgen_core. - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 13 * 13 * 13, - clust_size = 5, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_worlds.layer_to_y(64, "nether"), - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.1, - spread = {x = 5, y = 5, z = 5}, - seed = 2316, - octaves = 1, - persist = 0.0 - }, - }) - - -- Magma blocks - minetest.register_ore({ - ore_type = "blob", - ore = "mcl_nether:magma", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 8*8*8, - clust_num_ores = 45, - clust_size = 6, - y_min = mcl_worlds.layer_to_y(23, "nether"), - y_max = mcl_worlds.layer_to_y(37, "nether"), - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - }, - }) - minetest.register_ore({ - ore_type = "blob", - ore = "mcl_nether:magma", - wherein = {"mcl_nether:netherrack"}, - clust_scarcity = 10*10*10, - clust_num_ores = 65, - clust_size = 8, - y_min = mcl_worlds.layer_to_y(23, "nether"), - y_max = mcl_worlds.layer_to_y(37, "nether"), - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - }, - }) - - -- Glowstone - minetest.register_ore({ - ore_type = "blob", - ore = "mcl_nether:glowstone", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 26 * 26 * 26, - clust_size = 5, - y_min = mcl_vars.mg_lava_nether_max + 10, - y_max = mcl_vars.mg_nether_max, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.1, - spread = {x = 5, y = 5, z = 5}, - seed = 17676, - octaves = 1, - persist = 0.0 - }, - }) - - -- Gravel (Nether) - minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_core:gravel", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - column_height_min = 1, - column_height_max = 1, - column_midpoint_factor = 0, - y_min = mcl_worlds.layer_to_y(63, "nether"), - -- This should be 65, but for some reason with this setting, the sheet ore really stops at 65. o_O - y_max = mcl_worlds.layer_to_y(65+2, "nether"), - noise_threshold = 0.2, - noise_params = { - offset = 0.0, - scale = 0.5, - spread = {x = 20, y = 20, z = 20}, - seed = 766, - octaves = 3, - persist = 0.6, - }, - }) - - -- Nether quartz - if minetest.settings:get_bool("mcl_generate_ores", true) then - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:quartz_ore", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 850, - clust_num_ores = 4, -- MC cluster amount: 4-10 - clust_size = 3, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:quartz_ore", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 1650, - clust_num_ores = 8, -- MC cluster amount: 4-10 - clust_size = 4, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - end - - -- Lava springs in the Nether - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:nether_lava_source", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 500, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_lava_nether_max + 1, - }) - - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:nether_lava_source", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 1000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_vars.mg_lava_nether_max + 2, - y_max = mcl_vars.mg_lava_nether_max + 12, - }) - - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:nether_lava_source", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 2000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_vars.mg_lava_nether_max + 13, - y_max = mcl_vars.mg_lava_nether_max + 48, - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:nether_lava_source", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 3500, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_vars.mg_lava_nether_max + 49, - y_max = mcl_vars.mg_nether_max, - }) - - --[[ THE END ]] - - -- Generate fake End - -- TODO: Remove the "ores" when there's a better End generator - -- FIXME: Broken lighting in v6 mapgen - - local end_wherein - if mg_name == "v6" then - end_wherein = {"air", "mcl_core:stone"} - else - end_wherein = {"air"} - end - - minetest.register_ore({ - ore_type = "stratum", - ore = "mcl_end:end_stone", - wherein = end_wherein, - y_min = mcl_vars.mg_end_min+64, - y_max = mcl_vars.mg_end_min+80, - - noise_params = { - offset = mcl_vars.mg_end_min+70, - scale = -1, - spread = {x=126, y=126, z=126}, - seed = mg_seed+9999, - octaves = 3, - persist = 0.5, - }, - - np_stratum_thickness = { - offset = -2, - scale = 10, - spread = {x=126, y=126, z=126}, - seed = mg_seed+9999, - octaves = 3, - persist = 0.5, - }, - clust_scarcity = 1, - }) - - minetest.register_ore({ - ore_type = "stratum", - ore = "mcl_end:end_stone", - wherein = end_wherein, - y_min = mcl_vars.mg_end_min+64, - y_max = mcl_vars.mg_end_min+80, - - noise_params = { - offset = mcl_vars.mg_end_min+72, - scale = -3, - spread = {x=84, y=84, z=84}, - seed = mg_seed+999, - octaves = 4, - persist = 0.8, - }, - - np_stratum_thickness = { - offset = -4, - scale = 10, - spread = {x=84, y=84, z=84}, - seed = mg_seed+999, - octaves = 4, - persist = 0.8, - }, - clust_scarcity = 1, - }) - minetest.register_ore({ - ore_type = "stratum", - ore = "mcl_end:end_stone", - wherein = end_wherein, - y_min = mcl_vars.mg_end_min+64, - y_max = mcl_vars.mg_end_min+80, - - noise_params = { - offset = mcl_vars.mg_end_min+70, - scale = -2, - spread = {x=84, y=84, z=84}, - seed = mg_seed+99, - octaves = 4, - persist = 0.85, - }, - - np_stratum_thickness = { - offset = -3, - scale = 5, - spread = {x=63, y=63, z=63}, - seed = mg_seed+50, - octaves = 4, - persist = 0.85, - }, - clust_scarcity = 1, - }) - -end - - --- All mapgens except mgv6 - --- Template to register a grass or fern decoration -local function register_grass_decoration(grasstype, offset, scale, biomes) - local place_on, seed, node - if grasstype == "fern" then - node = "mcl_flowers:fern" - place_on = {"group:grass_block_no_snow", "mcl_core:podzol"} - seed = 333 - elseif grasstype == "tallgrass" then - node = "mcl_flowers:tallgrass" - place_on = {"group:grass_block_no_snow"} - seed = 420 - end - local noise = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = seed, - octaves = 3, - persist = 0.6 - } - for b=1, #biomes do - local param2 = minetest.registered_biomes[biomes[b]]._mcl_palette_index - minetest.register_decoration({ - deco_type = "simple", - place_on = place_on, - sidelen = 16, - noise_params = noise, - biomes = { biomes[b] }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = node, - param2 = param2, - }) - end -end - -local function register_seagrass_decoration(grasstype, offset, scale, biomes) - local seed, nodes, surfaces, param2, param2_max, y_max - if grasstype == "seagrass" then - seed = 16 - surfaces = { "mcl_core:dirt", "mcl_core:sand", "mcl_core:gravel", "mcl_core:redsand" } - nodes = { "mcl_ocean:seagrass_dirt", "mcl_ocean:seagrass_sand", "mcl_ocean:seagrass_gravel", "mcl_ocean:seagrass_redsand" } - y_max = 0 - elseif grasstype == "kelp" then - seed = 32 - param2 = 16 - param2_max = 96 - surfaces = { "mcl_core:dirt", "mcl_core:sand", "mcl_core:gravel" } - nodes = { "mcl_ocean:kelp_dirt", "mcl_ocean:kelp_sand", "mcl_ocean:kelp_gravel" } - y_max = -6 - end - local noise = { - offset = offset, - scale = scale, - spread = {x = 100, y = 100, z = 100}, - seed = seed, - octaves = 3, - persist = 0.6, - } - - for s=1, #surfaces do - minetest.register_decoration({ - deco_type = "simple", - place_on = { surfaces[s] }, - sidelen = 16, - noise_params = noise, - biomes = biomes, - y_min = DEEP_OCEAN_MIN, - y_max = y_max, - decoration = nodes[s], - param2 = param2, - param2_max = param2_max, - place_offset_y = -1, - flags = "force_placement", - }) - end -end - - - -local function register_decorations() - -- Large ice spike - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"mcl_core:snowblock", "mcl_core:snow", "group:grass_block_snow"}, - sidelen = 80, - noise_params = { - offset = 0.00040, - scale = 0.001, - spread = {x = 250, y = 250, z = 250}, - seed = 1133, - octaves = 4, - persist = 0.67, - }, - biomes = {"IcePlainsSpikes"}, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_structures.."/schematics/mcl_structures_ice_spike_large.mts", - rotation = "random", - flags = "place_center_x, place_center_z", - }) - - -- Small ice spike - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"mcl_core:snowblock", "mcl_core:snow", "group:grass_block_snow"}, - sidelen = 80, - noise_params = { - offset = 0.005, - scale = 0.001, - spread = {x = 250, y = 250, z = 250}, - seed = 1133, - octaves = 4, - persist = 0.67, - }, - biomes = {"IcePlainsSpikes"}, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_structures.."/schematics/mcl_structures_ice_spike_small.mts", - rotation = "random", - flags = "place_center_x, place_center_z", - }) - - -- Oak - -- Large oaks - for i=1, 4 do - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - noise_params = { - offset = 0.000545, - scale = 0.0011, - spread = {x = 250, y = 250, z = 250}, - seed = 3 + 5 * i, - octaves = 3, - persist = 0.66 - }, - biomes = {"Forest"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_large_"..i..".mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:dirt", }, - sidelen = 80, - noise_params = { - offset = -0.0007, - scale = 0.001, - spread = {x = 250, y = 250, z = 250}, - seed = 3, - octaves = 3, - persist = 0.6 - }, - biomes = {"ExtremeHills", "ExtremeHillsM", "ExtremeHills+", "ExtremeHills+_snowtop"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_large_"..i..".mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - end - -- Small “classic” oak (many biomes) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.025, - scale = 0.0022, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"Forest"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.01, - scale = 0.0022, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"FlowerForest"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:dirt", }, - sidelen = 16, - noise_params = { - offset = 0.0, - scale = 0.002, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.7 - }, - biomes = {"ExtremeHills", "ExtremeHillsM", "ExtremeHills+", "ExtremeHills+_snowtop"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.006, - scale = 0.002, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.7 - }, - biomes = {"ExtremeHills+", "ExtremeHills+_snowtop"}, - y_min = 50, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.015, - scale = 0.002, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.7 - }, - biomes = {"MesaPlateauF_grasstop"}, - y_min = 30, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.008, - scale = 0.002, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.7 - }, - biomes = {"MesaPlateauFM_grasstop"}, - y_min = 30, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:dirt", }, - sidelen = 16, - noise_params = { - offset = 0.0, - scale = 0.0002, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.7 - }, - biomes = {"IcePlains"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.004, - biomes = {"Jungle", "JungleM"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.0004, - biomes = {"JungleEdge", "JungleEdgeM", "Savanna"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - - -- Rare balloon oak - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.002083, - scale = 0.0022, - spread = {x = 250, y = 250, z = 250}, - seed = 3, - octaves = 3, - persist = 0.6, - }, - biomes = {"Forest"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_balloon.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - -- Swamp oak - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - noise_params = { - offset = 0.0055, - scale = 0.0011, - spread = {x = 250, y = 250, z = 250}, - seed = 5005, - octaves = 5, - persist = 0.6, - }, - biomes = {"Swampland", "Swampland_shore"}, - y_min = 0, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_oak_swamp.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - -- Jungle tree - - -- Huge jungle tree (2 variants) - for i=1, 2 do - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.00125, - biomes = {"Jungle"}, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree_huge_"..i..".mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.004, - biomes = {"JungleM"}, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree_huge_"..i..".mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - end - - -- Common jungle tree - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.045, - biomes = {"Jungle"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.0045, - biomes = {"JungleEdge", "JungleEdgeM"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.09, - biomes = {"JungleM"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - -- Spruce - local function quick_spruce(seed, offset, sprucename, biomes, y) - if not y then - y = 1 - end - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:dirt", "mcl_core:podzol"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = 0.0006, - spread = {x = 250, y = 250, z = 250}, - seed = seed, - octaves = 3, - persist = 0.66 - }, - biomes = biomes, - y_min = y, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/"..sprucename, - flags = "place_center_x, place_center_z", - }) - end - - -- Huge spruce - quick_spruce(3000, 0.0030, "mcl_core_spruce_huge_1.mts", {"MegaSpruceTaiga"}) - quick_spruce(4000, 0.0036, "mcl_core_spruce_huge_2.mts", {"MegaSpruceTaiga"}) - quick_spruce(6000, 0.0036, "mcl_core_spruce_huge_3.mts", {"MegaSpruceTaiga"}) - quick_spruce(6600, 0.0036, "mcl_core_spruce_huge_4.mts", {"MegaSpruceTaiga"}) - - quick_spruce(3000, 0.0008, "mcl_core_spruce_huge_up_1.mts", {"MegaTaiga"}) - quick_spruce(4000, 0.0008, "mcl_core_spruce_huge_up_2.mts", {"MegaTaiga"}) - quick_spruce(6000, 0.0008, "mcl_core_spruce_huge_up_3.mts", {"MegaTaiga"}) - - - -- Common spruce - quick_spruce(11000, 0.00150, "mcl_core_spruce_5.mts", {"Taiga", "ColdTaiga"}) - - quick_spruce(2500, 0.00325, "mcl_core_spruce_1.mts", {"MegaSpruceTaiga", "MegaTaiga", "Taiga", "ColdTaiga"}) - quick_spruce(7000, 0.00425, "mcl_core_spruce_3.mts", {"MegaSpruceTaiga", "MegaTaiga", "Taiga", "ColdTaiga"}) - quick_spruce(9000, 0.00325, "mcl_core_spruce_4.mts", {"MegaTaiga", "Taiga", "ColdTaiga"}) - - quick_spruce(9500, 0.00500, "mcl_core_spruce_tall.mts", {"MegaTaiga"}) - - quick_spruce(5000, 0.00250, "mcl_core_spruce_2.mts", {"MegaSpruceTaiga", "MegaTaiga"}) - - quick_spruce(11000, 0.000025, "mcl_core_spruce_5.mts", {"ExtremeHills", "ExtremeHillsM"}) - quick_spruce(2500, 0.00005, "mcl_core_spruce_1.mts", {"ExtremeHills", "ExtremeHillsM"}) - quick_spruce(7000, 0.00005, "mcl_core_spruce_3.mts", {"ExtremeHills", "ExtremeHillsM"}) - quick_spruce(9000, 0.00005, "mcl_core_spruce_4.mts", {"ExtremeHills", "ExtremeHillsM"}) - - quick_spruce(11000, 0.001, "mcl_core_spruce_5.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50) - quick_spruce(2500, 0.002, "mcl_core_spruce_1.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50) - quick_spruce(7000, 0.003, "mcl_core_spruce_3.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50) - quick_spruce(9000, 0.002, "mcl_core_spruce_4.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50) - - - -- Small lollipop spruce - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:podzol"}, - sidelen = 16, - noise_params = { - offset = 0.004, - scale = 0.0022, - spread = {x = 250, y = 250, z = 250}, - seed = 2500, - octaves = 3, - persist = 0.66 - }, - biomes = {"Taiga", "ColdTaiga"}, - y_min = 2, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_spruce_lollipop.mts", - flags = "place_center_x, place_center_z", - }) - - -- Matchstick spruce: Very few leaves, tall trunk - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:podzol"}, - sidelen = 80, - noise_params = { - offset = -0.025, - scale = 0.025, - spread = {x = 250, y = 250, z = 250}, - seed = 2566, - octaves = 5, - persist = 0.60, - }, - biomes = {"Taiga", "ColdTaiga"}, - y_min = 3, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_spruce_matchstick.mts", - flags = "place_center_x, place_center_z", - }) - - -- Rare spruce in Ice Plains - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block"}, - sidelen = 16, - noise_params = { - offset = -0.00075, - scale = -0.0015, - spread = {x = 250, y = 250, z = 250}, - seed = 11, - octaves = 3, - persist = 0.7 - }, - biomes = {"IcePlains"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_spruce_5.mts", - flags = "place_center_x, place_center_z", - }) - - -- Acacia (many variants) - for a=1, 7 do - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt", "mcl_core:coarse_dirt"}, - sidelen = 16, - fill_ratio = 0.0002, - biomes = {"Savanna", "SavannaM"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_acacia_"..a..".mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - end - - -- Birch - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = 0.03, - scale = 0.0025, - spread = {x = 250, y = 250, z = 250}, - seed = 11, - octaves = 3, - persist = 0.66 - }, - biomes = {"BirchForest"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_birch.mts", - flags = "place_center_x, place_center_z", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = 0.03, - scale = 0.0025, - spread = {x = 250, y = 250, z = 250}, - seed = 11, - octaves = 3, - persist = 0.66 - }, - biomes = {"BirchForestM"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_birch_tall.mts", - flags = "place_center_x, place_center_z", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.000333, - scale = -0.0015, - spread = {x = 250, y = 250, z = 250}, - seed = 11, - octaves = 3, - persist = 0.66 - }, - biomes = {"Forest", "FlowerForest"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_birch.mts", - flags = "place_center_x, place_center_z", - }) - - -- Dark Oak - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = 0.05, - scale = 0.0015, - spread = {x = 125, y = 125, z = 125}, - seed = 223, - octaves = 3, - persist = 0.66 - }, - biomes = {"RoofedForest"}, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_core.."/schematics/mcl_core_dark_oak.mts", - flags = "place_center_x, place_center_z", - rotation = "random", - }) - - - local ratio_mushroom = 0.0001 - local ratio_mushroom_huge = ratio_mushroom * (11/12) - local ratio_mushroom_giant = ratio_mushroom * (1/12) - local ratio_mushroom_mycelium = 0.002 - local ratio_mushroom_mycelium_huge = ratio_mushroom_mycelium * (11/12) - local ratio_mushroom_mycelium_giant = ratio_mushroom_mycelium * (1/12) - - -- Huge Brown Mushroom - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "group:grass_block_no_snow", "mcl_core:dirt" }, - sidelen = 80, - fill_ratio = ratio_mushroom_huge, - biomes = { "RoofedForest" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_brown.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "group:grass_block_no_snow", "mcl_core:dirt" }, - sidelen = 80, - fill_ratio = ratio_mushroom_giant, - biomes = { "RoofedForest" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_brown.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "mcl_core:mycelium" }, - sidelen = 80, - fill_ratio = ratio_mushroom_mycelium_huge, - biomes = { "MushroomIsland", "MushroomIslandShore" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_brown.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "mcl_core:mycelium" }, - sidelen = 80, - fill_ratio = ratio_mushroom_mycelium_giant, - biomes = { "MushroomIsland", "MushroomIslandShore" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_brown.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - - -- Huge Red Mushroom - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "group:grass_block_no_snow", "mcl_core:dirt" }, - sidelen = 80, - fill_ratio = ratio_mushroom_huge, - biomes = { "RoofedForest" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_red.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "group:grass_block_no_snow", "mcl_core:dirt" }, - sidelen = 80, - fill_ratio = ratio_mushroom_giant, - biomes = { "RoofedForest" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_red.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "mcl_core:mycelium" }, - sidelen = 80, - fill_ratio = ratio_mushroom_mycelium_huge, - biomes = { "MushroomIsland", "MushroomIslandShore" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_red.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = { "mcl_core:mycelium" }, - sidelen = 80, - fill_ratio = ratio_mushroom_mycelium_giant, - biomes = { "MushroomIsland", "MushroomIslandShore" }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_red.mts", - flags = "place_center_x, place_center_z", - rotation = "0", - }) - - -- Mossy cobblestone boulder (3×3) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:coarse_dirt"}, - sidelen = 80, - noise_params = { - offset = 0.00015, - scale = 0.001, - spread = {x = 300, y = 300, z = 300}, - seed = 775703, - octaves = 4, - persist = 0.63, - }, - biomes = {"MegaTaiga", "MegaSpruceTaiga"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_structures.."/schematics/mcl_structures_boulder.mts", - flags = "place_center_x, place_center_z", - }) - - -- Small mossy cobblestone boulder (2×2) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:coarse_dirt"}, - sidelen = 80, - noise_params = { - offset = 0.001, - scale = 0.001, - spread = {x = 300, y = 300, z = 300}, - seed = 775703, - octaves = 4, - persist = 0.63, - }, - biomes = {"MegaTaiga", "MegaSpruceTaiga"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = mod_mcl_structures.."/schematics/mcl_structures_boulder_small.mts", - flags = "place_center_x, place_center_z", - }) - - -- Cacti - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:sand"}, - sidelen = 16, - noise_params = { - offset = -0.012, - scale = 0.024, - spread = {x = 100, y = 100, z = 100}, - seed = 257, - octaves = 3, - persist = 0.6 - }, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_core:cactus", - biomes = {"Desert", - "Mesa","Mesa_sandlevel", - "MesaPlateauF","MesaPlateauF_sandlevel", - "MesaPlateauFM","MesaPlateauFM_sandlevel"}, - height = 1, - height_max = 3, - }) - - -- Sugar canes - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_core:dirt", "mcl_core:coarse_dirt", "group:grass_block_no_snow", "group:sand", "mcl_core:podzol", "mcl_core:reeds"}, - sidelen = 16, - noise_params = { - offset = -0.3, - scale = 0.7, - spread = {x = 200, y = 200, z = 200}, - seed = 2, - octaves = 3, - persist = 0.7 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_core:reeds", - height = 1, - height_max = 3, - spawn_by = { "mcl_core:water_source", "group:frosted_ice" }, - num_spawn_by = 1, - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_core:dirt", "mcl_core:coarse_dirt", "group:grass_block_no_snow", "group:sand", "mcl_core:podzol", "mcl_core:reeds"}, - sidelen = 16, - noise_params = { - offset = 0.0, - scale = 0.5, - spread = {x = 200, y = 200, z = 200}, - seed = 2, - octaves = 3, - persist = 0.7, - }, - biomes = {"Swampland", "Swampland_shore"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_core:reeds", - height = 1, - height_max = 3, - spawn_by = { "mcl_core:water_source", "group:frosted_ice" }, - num_spawn_by = 1, - }) - - -- Doubletall grass - local function register_doubletall_grass(offset, scale, biomes) - - for b=1, #biomes do - local param2 = minetest.registered_biomes[biomes[b]]._mcl_palette_index - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=3, z=1 }, - data = { - { name = "air", prob = 0 }, - { name = "mcl_flowers:double_grass", param1=255, param2=param2 }, - { name = "mcl_flowers:double_grass_top", param1=255, param2=param2 }, - }, - }, - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 420, - octaves = 3, - persist = 0.6, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - biomes = { biomes[b] }, - }) - end - end - - register_doubletall_grass(-0.01, 0.03, {"Taiga", "Forest", "FlowerForest", "BirchForest", "BirchForestM", "RoofedForest"}) - register_doubletall_grass(-0.002, 0.03, {"Plains", "SunflowerPlains"}) - register_doubletall_grass(-0.0005, -0.03, {"Savanna", "SavannaM"}) - - -- Large ferns - local function register_double_fern(offset, scale, biomes) - for b=1, #biomes do - local param2 = minetest.registered_biomes[biomes[b]]._mcl_palette_index - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=3, z=1 }, - data = { - { name = "air", prob = 0 }, - { name = "mcl_flowers:double_fern", param1=255, param2=param2 }, - { name = "mcl_flowers:double_fern_top", param1=255, param2=param2 }, - }, - }, - place_on = {"group:grass_block_no_snow", "mcl_core:podzol"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 250, y = 250, z = 250}, - seed = 333, - octaves = 2, - persist = 0.66, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - biomes = biomes[b], - }) - end - end - - register_double_fern(0.01, 0.03, { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "ColdTaiga", "MegaTaiga", "MegaSpruceTaiga" }) - register_double_fern(0.15, 0.1, { "JungleM" }) - - -- Large flowers - local function register_large_flower(name, biomes, seed, offset, flower_forest_offset) - local maxi - if flower_forest_offset then - maxi = 2 - else - maxi = 1 - end - for i=1, maxi do - local o, b -- offset, biomes - if i == 1 then - o = offset - b = biomes - else - o = flower_forest_offset - b = { "FlowerForest" } - end - - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=3, z=1 }, - data = { - { name = "air", prob = 0 }, - { name = "mcl_flowers:"..name, param1=255, }, - { name = "mcl_flowers:"..name.."_top", param1=255, }, - }, - }, - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - - sidelen = 16, - noise_params = { - offset = o, - scale = 0.01, - spread = {x = 300, y = 300, z = 300}, - seed = seed, - octaves = 5, - persist = 0.62, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - flags = "", - biomes = b, - }) - end - end - - register_large_flower("rose_bush", {"Forest"}, 9350, -0.008, 0.003) - register_large_flower("peony", {"Forest"}, 10450, -0.008, 0.003) - register_large_flower("lilac", {"Forest"}, 10600, -0.007, 0.003) - register_large_flower("sunflower", {"SunflowerPlains"}, 2940, 0.01) - - -- Jungle bush - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - noise_params = { - offset = 0.0196, - scale = 0.025, - spread = {x = 250, y = 250, z = 250}, - seed = 2930, - octaves = 4, - persist = 0.6, - }, - biomes = {"Jungle"}, - y_min = 3, - y_max = mcl_vars.mg_overworld_max, - schematic = jungle_bush_schematic, - flags = "place_center_x, place_center_z", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - noise_params = { - offset = 0.05, - scale = 0.025, - spread = {x = 250, y = 250, z = 250}, - seed = 2930, - octaves = 4, - persist = 0.6, - }, - biomes = {"JungleM"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = jungle_bush_schematic, - flags = "place_center_x, place_center_z", - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - noise_params = { - offset = 0.0085, - scale = 0.025, - spread = {x = 250, y = 250, z = 250}, - seed = 2930, - octaves = 4, - persist = 0.6, - }, - biomes = {"JungleEdge", "JungleEdgeM"}, - y_min = 3, - y_max = mcl_vars.mg_overworld_max, - schematic = jungle_bush_schematic, - flags = "place_center_x, place_center_z", - }) - - -- Fallen logs - -- These fallen logs are not really good yet. They must be longer and also have one upright block. - -- Note the decortion API does not like wide schematics, they are likely to overhang. - if generate_fallen_logs then - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:podzol", "mcl_core:coarse_dirt"}, - sidelen = 80, - noise_params = { - offset = 0.00018, - scale = 0.00011, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"MegaTaiga", "MegaSpruceTaiga", "Taiga"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "mcl_core:sprucetree", param2 = 12, prob = 127}, - {name = "mcl_core:sprucetree", param2 = 12}, - {name = "mcl_core:sprucetree", param2 = 12}, - {name = "air", prob = 0}, - {name = "mcl_mushrooms:mushroom_brown", prob = 160}, - {name = "mcl_mushrooms:mushroom_red", prob = 160}, - }, - }, - flags = "place_center_x", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block", "mcl_core:podzol", "mcl_core:podzol_snow", "mcl_core:coarse_dirt"}, - sidelen = 80, - noise_params = { - offset = 0.00018, - scale = 0.00011, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"ColdTaiga"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "mcl_core:sprucetree", param2 = 12, prob = 127}, - {name = "mcl_core:sprucetree", param2 = 12}, - {name = "mcl_core:sprucetree", param2 = 12}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - }, - }, - flags = "place_center_x", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = 0.0, - scale = -0.00008, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"BirchForest", "BirchForestM",}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "mcl_core:birchtree", param2 = 12}, - {name = "mcl_core:birchtree", param2 = 12}, - {name = "mcl_core:birchtree", param2 = 12, prob = 127}, - {name = "mcl_mushrooms:mushroom_red", prob = 100}, - {name = "mcl_mushrooms:mushroom_brown", prob = 10}, - {name = "air", prob = 0}, - }, - }, - flags = "place_center_x", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - fill_ratio = 0.005, - biomes = {"Jungle", "JungleM"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "mcl_core:jungletree", param2 = 12}, - {name = "mcl_core:jungletree", param2 = 12}, - {name = "mcl_core:jungletree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "mcl_mushrooms:mushroom_brown", prob = 50}, - {name = "air", prob = 0}, - }, - }, - flags = "place_center_x", - rotation = "random", - }) - - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = 0.00018, - scale = 0.00011, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"Forest"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "mcl_core:tree", param2 = 12, prob = 127}, - {name = "mcl_core:tree", param2 = 12}, - {name = "mcl_core:tree", param2 = 12}, - {name = "air", prob = 0}, - {name = "mcl_mushrooms:mushroom_brown", prob = 96}, - {name = "mcl_mushrooms:mushroom_red", prob = 96}, - }, - }, - flags = "place_center_x", - rotation = "random", - }) - end - - -- Lily pad - - local lily_schem = { - { name = "mcl_core:water_source" }, - { name = "mcl_flowers:waterlily" }, - } - - -- Spawn them in shallow water at ocean level in Swampland. - -- Tweak lilydepth to change the maximum water depth - local lilydepth = 2 - - for d=1, lilydepth do - local height = d + 2 - local y = 1 - d - table.insert(lily_schem, 1, { name = "air", prob = 0 }) - - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=height, z=1 }, - data = lily_schem, - }, - place_on = "mcl_core:dirt", - sidelen = 16, - noise_params = { - offset = 0, - scale = 0.3, - spread = {x = 100, y = 100, z = 100}, - seed = 503, - octaves = 6, - persist = 0.7, - }, - y_min = y, - y_max = y, - biomes = { "Swampland_shore" }, - rotation = "random", - }) - end - - -- Melon - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = -0.01, - scale = 0.006, - spread = {x = 250, y = 250, z = 250}, - seed = 333, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_farming:melon", - biomes = { "Jungle" }, - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = 0.0, - scale = 0.006, - spread = {x = 250, y = 250, z = 250}, - seed = 333, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_farming:melon", - biomes = { "JungleM" }, - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = -0.005, - scale = 0.006, - spread = {x = 250, y = 250, z = 250}, - seed = 333, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_farming:melon", - biomes = { "JungleEdge", "JungleEdgeM" }, - }) - - -- Lots of melons in Jungle Edge M - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 80, - noise_params = { - offset = 0.013, - scale = 0.006, - spread = {x = 125, y = 125, z = 125}, - seed = 333, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_farming:melon", - biomes = { "JungleEdgeM" }, - }) - - -- Pumpkin - minetest.register_decoration({ - deco_type = "simple", - decoration = "mcl_farming:pumpkin", - param2 = 0, - param2_max = 3, - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = -0.016, - scale = 0.01332, - spread = {x = 125, y = 125, z = 125}, - seed = 666, - octaves = 6, - persist = 0.666 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - }) - - -- Grasses and ferns - local grass_forest = {"Plains", "Taiga", "Forest", "FlowerForest", "BirchForest", "BirchForestM", "RoofedForest", "Swampland", } - local grass_mpf = {"MesaPlateauF_grasstop"} - local grass_plains = {"Plains", "SunflowerPlains", "JungleEdge", "JungleEdgeM" } - local grass_savanna = {"Savanna", "SavannaM"} - local grass_sparse = {"ExtremeHills", "ExtremeHills+", "ExtremeHills+_snowtop", "ExtremeHillsM", "Jungle" } - local grass_mpfm = {"MesaPlateauFM_grasstop" } - - register_grass_decoration("tallgrass", -0.03, 0.09, grass_forest) - register_grass_decoration("tallgrass", -0.015, 0.075, grass_forest) - register_grass_decoration("tallgrass", 0, 0.06, grass_forest) - register_grass_decoration("tallgrass", 0.015, 0.045, grass_forest) - register_grass_decoration("tallgrass", 0.03, 0.03, grass_forest) - register_grass_decoration("tallgrass", -0.03, 0.09, grass_mpf) - register_grass_decoration("tallgrass", -0.015, 0.075, grass_mpf) - register_grass_decoration("tallgrass", 0, 0.06, grass_mpf) - register_grass_decoration("tallgrass", 0.01, 0.045, grass_mpf) - register_grass_decoration("tallgrass", 0.01, 0.05, grass_forest) - register_grass_decoration("tallgrass", 0.03, 0.03, grass_plains) - register_grass_decoration("tallgrass", 0.05, 0.01, grass_plains) - register_grass_decoration("tallgrass", 0.07, -0.01, grass_plains) - register_grass_decoration("tallgrass", 0.09, -0.03, grass_plains) - register_grass_decoration("tallgrass", 0.18, -0.03, grass_savanna) - register_grass_decoration("tallgrass", 0.05, -0.03, grass_sparse) - register_grass_decoration("tallgrass", 0.05, 0.05, grass_mpfm) - - local fern_minimal = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga", "ColdTaiga" } - local fern_low = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga" } - local fern_Jungle = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM" } - --local fern_JungleM = { "JungleM" }, - - register_grass_decoration("fern", -0.03, 0.09, fern_minimal) - register_grass_decoration("fern", -0.015, 0.075, fern_minimal) - register_grass_decoration("fern", 0, 0.06, fern_minimal) - register_grass_decoration("fern", 0.015, 0.045, fern_low) - register_grass_decoration("fern", 0.03, 0.03, fern_low) - register_grass_decoration("fern", 0.01, 0.05, fern_Jungle) - register_grass_decoration("fern", 0.03, 0.03, fern_Jungle) - register_grass_decoration("fern", 0.05, 0.01, fern_Jungle) - register_grass_decoration("fern", 0.07, -0.01, fern_Jungle) - register_grass_decoration("fern", 0.09, -0.03, fern_Jungle) - register_grass_decoration("fern", 0.12, -0.03, {"JungleM"}) - - local b_seagrass = {"ColdTaiga_ocean","ExtremeHills_ocean","ExtremeHillsM_ocean","ExtremeHills+_ocean","Taiga_ocean","MegaTaiga_ocean","MegaSpruceTaiga_ocean","StoneBeach_ocean","Plains_ocean","SunflowerPlains_ocean","Forest_ocean","FlowerForest_ocean","BirchForest_ocean","BirchForestM_ocean","RoofedForest_ocean","Swampland_ocean","Jungle_ocean","JungleM_ocean","JungleEdge_ocean","JungleEdgeM_ocean","MushroomIsland_ocean","Desert_ocean","Savanna_ocean","SavannaM_ocean","Mesa_ocean","MesaBryce_ocean","MesaPlateauF_ocean","MesaPlateauFM_ocean", -"ColdTaiga_deep_ocean","ExtremeHills_deep_ocean","ExtremeHillsM_deep_ocean","ExtremeHills+_deep_ocean","Taiga_deep_ocean","MegaTaiga_deep_ocean","MegaSpruceTaiga_deep_ocean","StoneBeach_deep_ocean","Plains_deep_ocean","SunflowerPlains_deep_ocean","Forest_deep_ocean","FlowerForest_deep_ocean","BirchForest_deep_ocean","BirchForestM_deep_ocean","RoofedForest_deep_ocean","Swampland_deep_ocean","Jungle_deep_ocean","JungleM_deep_ocean","JungleEdge_deep_ocean","JungleEdgeM_deep_ocean","MushroomIsland_deep_ocean","Desert_deep_ocean","Savanna_deep_ocean","SavannaM_deep_ocean","Mesa_deep_ocean","MesaBryce_deep_ocean","MesaPlateauF_deep_ocean","MesaPlateauFM_deep_ocean", -"Mesa_sandlevel","MesaBryce_sandlevel","MesaPlateauF_sandlevel","MesaPlateauFM_sandlevel","Swampland_shore","Jungle_shore","JungleM_shore","Savanna_beach","FlowerForest_beach","ColdTaiga_beach_water","ExtremeHills_beach"} - local b_kelp = {"ExtremeHillsM_ocean","ExtremeHills+_ocean","MegaTaiga_ocean","MegaSpruceTaiga_ocean","Plains_ocean","SunflowerPlains_ocean","Forest_ocean","FlowerForest_ocean","BirchForest_ocean","BirchForestM_ocean","RoofedForest_ocean","Swampland_ocean","Jungle_ocean","JungleM_ocean","JungleEdge_ocean","JungleEdgeM_ocean","MushroomIsland_ocean", -"ExtremeHillsM_deep_ocean","ExtremeHills+_deep_ocean","MegaTaiga_deep_ocean","MegaSpruceTaiga_deep_ocean","Plains_deep_ocean","SunflowerPlains_deep_ocean","Forest_deep_ocean","FlowerForest_deep_ocean","BirchForest_deep_ocean","BirchForestM_deep_ocean","RoofedForest_deep_ocean","Swampland_deep_ocean","Jungle_deep_ocean","JungleM_deep_ocean","JungleEdge_deep_ocean","JungleEdgeM_deep_ocean","MushroomIsland_deep_ocean" -} - - register_seagrass_decoration("seagrass", 0, 0.5, b_seagrass) - register_seagrass_decoration("kelp", -0.5, 1, b_kelp) - - local b_sponge = {"Plains_deep_ocean","SunflowerPlains_deep_ocean","Forest_deep_ocean","FlowerForest_deep_ocean","BirchForest_deep_ocean","BirchForestM_deep_ocean","RoofedForest_deep_ocean","Jungle_deep_ocean","JungleM_deep_ocean","JungleEdge_deep_ocean","JungleEdgeM_deep_ocean","MushroomIsland_deep_ocean","Desert_deep_ocean","Savanna_deep_ocean","SavannaM_deep_ocean","Mesa_deep_ocean","MesaBryce_deep_ocean","MesaPlateauF_deep_ocean","MesaPlateauFM_deep_ocean"} - -- Wet Sponge - -- TODO: Remove this when we got ocean monuments - minetest.register_decoration({ - deco_type = "simple", - decoration = "mcl_sponges:sponge_wet", - biomes = b_sponge, - spawn_by = {"group:water"}, - num_spawn_by = 1, - place_on = {"mcl_core:dirt","mcl_core:sand","mcl_core:gravel"}, - sidelen = 16, - noise_params = { - offset = 0.00495, - scale = 0.006, - spread = {x = 250, y = 250, z = 250}, - seed = 999, - octaves = 3, - persist = 0.666 - }, - flags = "force_placement", - y_min = mcl_vars.mg_lava_overworld_max + 5, - y_max = -20, - }) - - -- Place tall grass on snow in Ice Plains and Extreme Hills+ - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block"}, - sidelen = 16, - noise_params = { - offset = -0.08, - scale = 0.09, - spread = {x = 15, y = 15, z = 15}, - seed = 420, - octaves = 3, - persist = 0.6, - }, - biomes = {"IcePlains"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = { - size = { x=1, y=2, z=1 }, - data = { - { name = "mcl_core:dirt_with_grass", force_place=true, }, - { name = "mcl_flowers:tallgrass", param2 = minetest.registered_biomes["IcePlains"]._mcl_palette_index }, - }, - }, - }) - minetest.register_decoration({ - deco_type = "schematic", - place_on = {"group:grass_block"}, - sidelen = 16, - noise_params = { - offset = 0.0, - scale = 0.09, - spread = {x = 15, y = 15, z = 15}, - seed = 420, - octaves = 3, - persist = 0.6, - }, - biomes = {"ExtremeHills+_snowtop"}, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - schematic = { - size = { x=1, y=2, z=1 }, - data = { - { name = "mcl_core:dirt_with_grass", force_place=true, }, - { name = "mcl_flowers:tallgrass", param2 = minetest.registered_biomes["ExtremeHills+_snowtop"]._mcl_palette_index }, - }, - }, - }) - - - -- Dead bushes - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:sand", "mcl_core:podzol", "mcl_core:dirt", "mcl_core:dirt_with_grass", "mcl_core:coarse_dirt", "group:hardened_clay"}, - sidelen = 16, - noise_params = { - offset = 0.0, - scale = 0.035, - spread = {x = 100, y = 100, z = 100}, - seed = 1972, - octaves = 3, - persist = 0.6 - }, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - biomes = {"Desert", "Mesa", "Mesa_sandlevel", "MesaPlateauF", "MesaPlateauF_sandlevel", "MesaPlateauF_grasstop","MesaBryce","Taiga", "MegaTaiga"}, - decoration = "mcl_core:deadbush", - height = 1, - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:sand", "mcl_core:dirt", "mcl_core:dirt_with_grass", "mcl_core:coarse_dirt"}, - sidelen = 16, - noise_params = { - offset = 0.1, - scale = 0.035, - spread = {x = 100, y = 100, z = 100}, - seed = 1972, - octaves = 3, - persist = 0.6 - }, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - biomes = {"MesaPlateauFM_grasstop"}, - decoration = "mcl_core:deadbush", - height = 1, - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:sand"}, - sidelen = 16, - noise_params = { - offset = 0.045, - scale = 0.055, - spread = {x = 100, y = 100, z = 100}, - seed = 1972, - octaves = 3, - persist = 0.6 - }, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - biomes = {"MesaPlateauFM","MesaPlateauFM_sandlevel"}, - decoration = "mcl_core:deadbush", - height = 1, - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:hardened_clay"}, - sidelen = 16, - noise_params = { - offset = 0.010, - scale = 0.035, - spread = {x = 100, y = 100, z = 100}, - seed = 1972, - octaves = 3, - persist = 0.6 - }, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - biomes = {"MesaPlateauFM", "MesaPlateauFM_sandlevel", "MesaPlateauFM_grasstop"}, - decoration = "mcl_core:deadbush", - height = 1, - }) - - -- Mushrooms in mushroom biome - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_core:mycelium"}, - sidelen = 80, - fill_ratio = 0.009, - biomes = {"MushroomIsland", "MushroomIslandShore"}, - noise_threshold = 2.0, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_mushrooms:mushroom_red", - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_core:mycelium"}, - sidelen = 80, - fill_ratio = 0.009, - biomes = {"MushroomIsland", "MushroomIslandShore"}, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_mushrooms:mushroom_brown", - }) - - -- Mushrooms in Taiga - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_core:podzol"}, - sidelen = 80, - fill_ratio = 0.003, - biomes = {"Taiga", "MegaTaiga", "MegaSpruceTaiga"}, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_mushrooms:mushroom_red", - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_core:podzol"}, - sidelen = 80, - fill_ratio = 0.003, - biomes = {"Taiga", "MegaTaiga", "MegaSpruceTaiga"}, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_mushrooms:mushroom_brown", - }) - - - -- Mushrooms next to trees - local mushrooms = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"} - local mseeds = { 7133, 8244 } - for m=1, #mushrooms do - -- Mushrooms next to trees - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt", "mcl_core:podzol", "mcl_core:mycelium", "mcl_core:stone", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite"}, - sidelen = 16, - noise_params = { - offset = 0, - scale = 0.003, - spread = {x = 250, y = 250, z = 250}, - seed = mseeds[m], - octaves = 3, - persist = 0.66, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = mushrooms[m], - spawn_by = { "mcl_core:tree", "mcl_core:sprucetree", "mcl_core:darktree", "mcl_core:birchtree" }, - num_spawn_by = 1, - }) - - -- More mushrooms in Swampland - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt", "mcl_core:podzol", "mcl_core:mycelium", "mcl_core:stone", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite"}, - sidelen = 16, - noise_params = { - offset = 0.05, - scale = 0.003, - spread = {x = 250, y = 250, z = 250}, - seed = mseeds[m], - octaves = 3, - persist = 0.6, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = mushrooms[m], - biomes = { "Swampland"}, - spawn_by = { "mcl_core:tree", "mcl_core:sprucetree", "mcl_core:darktree", "mcl_core:birchtree" }, - num_spawn_by = 1, - }) - end - local function register_flower(name, biomes, seed, is_in_flower_forest) - if is_in_flower_forest == nil then - is_in_flower_forest = true - end - if biomes then - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 16, - noise_params = { - offset = 0.0008, - scale = 0.006, - spread = {x = 100, y = 100, z = 100}, - seed = seed, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - biomes = biomes, - decoration = "mcl_flowers:"..name, - }) - end - if is_in_flower_forest then - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt"}, - sidelen = 80, - noise_params= { - offset = 0.0008*40, - scale = 0.003, - spread = {x = 100, y = 100, z = 100}, - seed = seed, - octaves = 3, - persist = 0.6, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - biomes = {"FlowerForest"}, - decoration = "mcl_flowers:"..name, - }) - end - end - - local flower_biomes1 = {"Plains", "SunflowerPlains", "RoofedForest", "Forest", "BirchForest", "BirchForestM", "Taiga", "ColdTaiga", "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Savanna", "SavannaM", "ExtremeHills", "ExtremeHillsM", "ExtremeHills+", "ExtremeHills+_snowtop" } - - register_flower("dandelion", flower_biomes1, 8) - register_flower("poppy", flower_biomes1, 9439) - - local flower_biomes2 = {"Plains", "SunflowerPlains"} - register_flower("tulip_red", flower_biomes2, 436) - register_flower("tulip_orange", flower_biomes2, 536) - register_flower("tulip_pink", flower_biomes2, 636) - register_flower("tulip_white", flower_biomes2, 736) - register_flower("azure_bluet", flower_biomes2, 800) - register_flower("oxeye_daisy", flower_biomes2, 3490) - - register_flower("allium", nil, 0) -- flower Forest only - register_flower("blue_orchid", {"Swampland"}, 64500, false) - -end - --- Decorations in non-Overworld dimensions -local function register_dimension_decorations() - --[[ NETHER ]] - -- TODO: Nether - - --[[ THE END ]] - - -- Chorus plant - minetest.register_decoration({ - name = "mcl_biomes:chorus_plant", - deco_type = "simple", - place_on = {"mcl_end:end_stone", "air"}, - flags = "all_floors", - sidelen = 16, - noise_params = { - offset = -0.012, - scale = 0.024, - spread = {x = 100, y = 100, z = 100}, - seed = 257, - octaves = 3, - persist = 0.6 - }, - y_min = mcl_vars.mg_end_min, - y_max = mcl_vars.mg_end_max, - decoration = "mcl_end:chorus_flower", - height = 1, - biomes = { "End" }, - }) - - deco_id_chorus_plant = minetest.get_decoration_id("mcl_biomes:chorus_plant") - minetest.set_gen_notify({decoration=true}, { deco_id_chorus_plant }) - - -- TODO: End cities - -end - - --- --- Detect mapgen to select functions --- -if mg_name ~= "singlenode" then - if not superflat then - if mg_name ~= "v6" then - register_biomes() - register_biomelike_ores() - end - register_biome_ores() - if mg_name ~= "v6" then - register_decorations() - end - else - -- Implementation of Minecraft's Superflat mapgen, classic style: - -- * Perfectly flat land, 1 grass biome, no decorations, no caves - -- * 4 layers, from top to bottom: grass block, dirt, dirt, bedrock - minetest.clear_registered_biomes() - minetest.clear_registered_decorations() - minetest.clear_registered_schematics() - register_classic_superflat_biome() - end - - -- Non-overworld stuff is registered independently - register_dimension_biomes() - register_dimension_ores() - register_dimension_decorations() - - -- Overworld decorations for v6 are handled in mcl_mapgen_core - - if deco_id_chorus_plant then - mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed) - local gennotify = minetest.get_mapgen_object("gennotify") - --local poslist = {} - local pr = PseudoRandom(blockseed + 14) - for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do - local x, y, z = pos.x, pos.y, pos.z - if x < -2 or x > 2 or z < -2 or z > 2 then - local realpos = { x = x, y = y + 1, z = z } - local node = minetest.get_node(realpos) - if node and node.name == "mcl_end:chorus_flower" then - mcl_end.grow_chorus_plant(realpos, node, pr) - end - end - end - end) - end - -end - diff --git a/mods/MAPGEN/mcl_biomes/mod.conf b/mods/MAPGEN/mcl_biomes/mod.conf deleted file mode 100644 index 0c6095f3d..000000000 --- a/mods/MAPGEN/mcl_biomes/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_biomes -author = maikerumine -description = Adds the various biomes and biome-related things for non-v6 map generators. -depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean diff --git a/mods/MAPGEN/mcl_dungeons/init.lua b/mods/MAPGEN/mcl_dungeons/init.lua deleted file mode 100644 index 0997f51fd..000000000 --- a/mods/MAPGEN/mcl_dungeons/init.lua +++ /dev/null @@ -1,426 +0,0 @@ --- FIXME: Chests may appear at openings - -mcl_dungeons = {} - -local mg_name = minetest.get_mapgen_setting("mg_name") - --- Are dungeons disabled? -if mcl_vars.mg_dungeons == false or mg_name == "singlenode" then - return -end - ---lua locals ---minetest -local registered_nodes = minetest.registered_nodes -local swap_node = minetest.swap_node -local set_node = minetest.set_node -local dir_to_facedir = minetest.dir_to_facedir -local get_meta = minetest.get_meta -local emerge_area = minetest.emerge_area - ---vector -local vector_add = vector.add -local vector_subtract = vector.subtract - ---table -local table_insert = table.insert -local table_sort = table.sort - ---math -local math_min = math.min -local math_max = math.max -local math_ceil = math.ceil - ---custom mcl_vars -local get_node = mcl_vars.get_node - - -local min_y = math_max(mcl_vars.mg_overworld_min, mcl_vars.mg_bedrock_overworld_max) + 1 -local max_y = mcl_vars.mg_overworld_max - 1 --- Calculate the number of dungeon spawn attempts --- In Minecraft, there 8 dungeon spawn attempts Minecraft chunk (16*256*16 = 65536 blocks). --- Minetest chunks don't have this size, so scale the number accordingly. -local attempts = math_ceil(((mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE) ^ 3) / 8192) -- 63 = 80*80*80/8192 - -local dungeonsizes = { - { x=5, y=4, z=5}, - { x=5, y=4, z=7}, - { x=7, y=4, z=5}, - { x=7, y=4, z=7}, -} - ---[[local dirs = { - { x= 1, y=0, z= 0 }, - { x= 0, y=0, z= 1 }, - { x=-1, y=0, z= 0 }, - { x= 0, y=0, z=-1 }, -}]] - -local surround_vectors = { - { x=-1, y=0, z=0 }, - { x=1, y=0, z=0 }, - { x=0, y=0, z=-1 }, - { x=0, y=0, z=1 }, -} - -local loottable = -{ - { - stacks_min = 1, - stacks_max = 3, - items = { - { itemstring = "mcl_mobs:nametag", weight = 20 }, - { itemstring = "mcl_mobitems:saddle", weight = 20 }, - { itemstring = "mcl_jukebox:record_1", weight = 15 }, - { itemstring = "mcl_jukebox:record_4", weight = 15 }, - { itemstring = "mcl_mobitems:iron_horse_armor", weight = 15 }, - { itemstring = "mcl_core:apple_gold", weight = 15 }, - { itemstring = "mcl_books:book", weight = 10, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_mobitems:gold_horse_armor", weight = 10 }, - { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5 }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 2 }, - } - }, - { - stacks_min = 1, - stacks_max = 4, - items = { - { itemstring = "mcl_farming:wheat_item", weight = 20, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_farming:bread", weight = 20 }, - { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, - { itemstring = "mesecons:redstone", weight = 15, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_farming:beetroot_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_farming:melon_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_farming:pumpkin_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_core:iron_ingot", weight = 10, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_buckets:bucket_empty", weight = 10 }, - { itemstring = "mcl_core:gold_ingot", weight = 5, amount_min = 1, amount_max = 4 }, - }, - }, - { - stacks_min = 3, - stacks_max = 3, - items = { - { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, - }, - } -} - --- Bonus loot for v6 mapgen: Otherwise unobtainable saplings. -if mg_name == "v6" then - table.insert(loottable, { - stacks_min = 1, - stacks_max = 3, - items = { - { itemstring = "mcl_core:birchsapling", weight = 1, amount_min = 1, amount_max = 2 }, - { itemstring = "mcl_core:acaciasapling", weight = 1, amount_min = 1, amount_max = 2 }, - { itemstring = "", weight = 6 }, - }, - }) -end - -local function ecb_spawn_dungeon(blockpos, action, calls_remaining, param) - if calls_remaining >= 1 then return end - - local p1, _, dim, pr = param.p1, param.p2, param.dim, param.pr - local x, y, z = p1.x, p1.y, p1.z - local check = not (param.dontcheck or false) - - -- Check floor and ceiling: Must be *completely* solid - local y_floor = y - local y_ceiling = y + dim.y + 1 - if check then - for tx = x+1, x+dim.x do - for tz = z+1, z+dim.z do - local fdef = registered_nodes[get_node({x = tx, y = y_floor , z = tz}).name] - local cdef = registered_nodes[get_node({x = tx, y = y_ceiling, z = tz}).name] - if not fdef or not fdef.walkable or not cdef or not cdef.walkable then return false end - end - end - end - - -- Check for air openings (2 stacked air at ground level) in wall positions - local openings_counter = 0 - -- Store positions of openings; walls will not be generated here - local openings = {} - -- Corners are stored because a corner-only opening needs to be increased, - -- so entities can get through. - local corners = {} - - local x2,z2 = x+dim.x+1, z+dim.z+1 - - if get_node({x=x, y=y+1, z=z}).name == "air" and get_node({x=x, y=y+2, z=z}).name == "air" then - openings_counter = openings_counter + 1 - if not openings[x] then openings[x]={} end - openings[x][z] = true - table_insert(corners, {x=x, z=z}) - end - if get_node({x=x2, y=y+1, z=z}).name == "air" and get_node({x=x2, y=y+2, z=z}).name == "air" then - openings_counter = openings_counter + 1 - if not openings[x2] then openings[x2]={} end - openings[x2][z] = true - table_insert(corners, {x=x2, z=z}) - end - if get_node({x=x, y=y+1, z=z2}).name == "air" and get_node({x=x, y=y+2, z=z2}).name == "air" then - openings_counter = openings_counter + 1 - if not openings[x] then openings[x]={} end - openings[x][z2] = true - table_insert(corners, {x=x, z=z2}) - end - if get_node({x=x2, y=y+1, z=z2}).name == "air" and get_node({x=x2, y=y+2, z=z2}).name == "air" then - openings_counter = openings_counter + 1 - if not openings[x2] then openings[x2]={} end - openings[x2][z2] = true - table_insert(corners, {x=x2, z=z2}) - end - - for wx = x+1, x+dim.x do - if get_node({x=wx, y=y+1, z=z}).name == "air" and get_node({x=wx, y=y+2, z=z}).name == "air" then - openings_counter = openings_counter + 1 - if check and openings_counter > 5 then return end - if not openings[wx] then openings[wx]={} end - openings[wx][z] = true - end - if get_node({x=wx, y=y+1, z=z2}).name == "air" and get_node({x=wx, y=y+2, z=z2}).name == "air" then - openings_counter = openings_counter + 1 - if check and openings_counter > 5 then return end - if not openings[wx] then openings[wx]={} end - openings[wx][z2] = true - end - end - for wz = z+1, z+dim.z do - if get_node({x=x, y=y+1, z=wz}).name == "air" and get_node({x=x, y=y+2, z=wz}).name == "air" then - openings_counter = openings_counter + 1 - if check and openings_counter > 5 then return end - if not openings[x] then openings[x]={} end - openings[x][wz] = true - end - if get_node({x=x2, y=y+1, z=wz}).name == "air" and get_node({x=x2, y=y+2, z=wz}).name == "air" then - openings_counter = openings_counter + 1 - if check and openings_counter > 5 then return end - if not openings[x2] then openings[x2]={} end - openings[x2][wz] = true - end - end - - -- If all openings are only at corners, the dungeon can't be accessed yet. - -- This code extends the openings of corners so they can be entered. - if openings_counter >= 1 and openings_counter == #corners then - for c=1, #corners do - -- Prevent creating too many openings because this would lead to dungeon rejection - if openings_counter >= 5 then - break - end - -- A corner is widened by adding openings to both neighbors - local cx, cz = corners[c].x, corners[c].z - local cxn, czn = cx, cz - if x == cx then - cxn = cxn + 1 - else - cxn = cxn - 1 - end - if z == cz then - czn = czn + 1 - else - czn = czn - 1 - end - openings[cx][czn] = true - openings_counter = openings_counter + 1 - if openings_counter < 5 then - if not openings[cxn] then openings[cxn]={} end - openings[cxn][cz] = true - openings_counter = openings_counter + 1 - end - end - end - - -- Check conditions. If okay, start generating - if check and (openings_counter < 1 or openings_counter > 5) then return end - - minetest.log("action","[mcl_dungeons] Placing new dungeon at "..minetest.pos_to_string({x=x,y=y,z=z})) - -- Okay! Spawning starts! - - -- Remember spawner chest positions to set metadata later - local chests = {} - local spawner_posses = {} - - -- First prepare random chest positions. - -- Chests spawn at wall - - -- We assign each position at the wall a number and each chest gets one of these numbers randomly - local totalChests = 2 -- this code strongly relies on this number being 2 - local totalChestSlots = (dim.x + dim.z - 2) * 2 - local chestSlots = {} - -- There is a small chance that both chests have the same slot. - -- In that case, we give a 2nd chance for the 2nd chest to get spawned. - -- If it failed again, tough luck! We stick with only 1 chest spawned. - local lastRandom - local secondChance = true -- second chance is still available - for i=1, totalChests do - local r = pr:next(1, totalChestSlots) - if r == lastRandom and secondChance then - -- Oops! Same slot selected. Try again. - r = pr:next(1, totalChestSlots) - secondChance = false - end - lastRandom = r - table_insert(chestSlots, r) - end - table_sort(chestSlots) - local currentChest = 1 - - -- Calculate the mob spawner position, to be re-used for later - local sp = {x = x + math_ceil(dim.x/2), y = y+1, z = z + math_ceil(dim.z/2)} - local rn = registered_nodes[get_node(sp).name] - if rn and rn.is_ground_content then - table_insert(spawner_posses, sp) - end - - -- Generate walls and floor - local maxx, maxy, maxz = x+dim.x+1, y+dim.y, z+dim.z+1 - local chestSlotCounter = 1 - for tx = x, maxx do - for tz = z, maxz do - for ty = y, maxy do - local p = {x = tx, y=ty, z=tz} - - -- Do not overwrite nodes with is_ground_content == false (e.g. bedrock) - -- Exceptions: cobblestone and mossy cobblestone so neighborings dungeons nicely connect to each other - local name = get_node(p).name - local rn = registered_nodes[name] - if rn and rn.is_ground_content or name == "mcl_core:cobble" or name == "mcl_core:mossycobble" then - -- Floor - if ty == y then - if pr:next(1,4) == 1 then - swap_node(p, {name = "mcl_core:cobble"}) - else - swap_node(p, {name = "mcl_core:mossycobble"}) - end - - -- Generate walls - --[[ Note: No additional cobblestone ceiling is generated. This is intentional. - The solid blocks above the dungeon are considered as the “ceiling”. - It is possible (but rare) for a dungeon to generate below sand or gravel. ]] - - elseif tx == x or tz == z or tx == maxx or tz == maxz then - -- Check if it's an opening first - if (ty == maxy) or (not (openings[tx] and openings[tx][tz])) then - -- Place wall or ceiling - swap_node(p, {name = "mcl_core:cobble"}) - elseif ty < maxy - 1 then - -- Normally the openings are already clear, but not if it is a corner - -- widening. Make sure to clear at least the bottom 2 nodes of an opening. - if name ~= "air" then swap_node(p, {name = "air"}) end - elseif name ~= "air" then - -- This allows for variation between 2-node and 3-node high openings. - swap_node(p, {name = "mcl_core:cobble"}) - end - -- If it was an opening, the lower 3 blocks are not touched at all - - -- Room interiour - else - if (ty==y+1) and (tx==x+1 or tx==maxx-1 or tz==z+1 or tz==maxz-1) and (currentChest < totalChests + 1) and (chestSlots[currentChest] == chestSlotCounter) then - currentChest = currentChest + 1 - table_insert(chests, {x=tx, y=ty, z=tz}) - else - swap_node(p, {name = "air"}) - end - - local forChest = ty==y+1 and (tx==x+1 or tx==maxx-1 or tz==z+1 or tz==maxz-1) - - -- Place next chest at the wall (if it was its chosen wall slot) - if forChest and (currentChest < totalChests + 1) and (chestSlots[currentChest] == chestSlotCounter) then - currentChest = currentChest + 1 - table_insert(chests, {x=tx, y=ty, z=tz}) - -- else - --swap_node(p, {name = "air"}) - end - if forChest then - chestSlotCounter = chestSlotCounter + 1 - end - end - end - end end end - - for c=#chests, 1, -1 do - local pos = chests[c] - - local surroundings = {} - for s=1, #surround_vectors do - -- Detect the 4 horizontal neighbors - local spos = vector_add(pos, surround_vectors[s]) - local wpos = vector_subtract(pos, surround_vectors[s]) - local nodename = get_node(spos).name - local nodename2 = get_node(wpos).name - local nodedef = registered_nodes[nodename] - local nodedef2 = registered_nodes[nodename2] - -- The chest needs an open space in front of it and a walkable node (except chest) behind it - if nodedef and nodedef.walkable == false and nodedef2 and nodedef2.walkable == true and nodename2 ~= "mcl_chests:chest" then - table_insert(surroundings, spos) - end - end - -- Set param2 (=facedir) of this chest - local facedir - if #surroundings <= 0 then - -- Fallback if chest ended up in the middle of a room for some reason - facedir = pr:next(0, 0) - else - -- 1 or multiple possible open directions: Choose random facedir - local face_to = surroundings[pr:next(1, #surroundings)] - facedir = dir_to_facedir(vector_subtract(pos, face_to)) - end - - set_node(pos, {name="mcl_chests:chest", param2=facedir}) - local meta = get_meta(pos) - minetest.log("action", "[mcl_dungeons] Filling chest " .. tostring(c) .. " at " .. minetest.pos_to_string(pos)) - mcl_loot.fill_inventory(meta:get_inventory(), "main", mcl_loot.get_multi_loot(loottable, pr), pr) - end - - -- Mob spawners are placed seperately, too - -- We don't want to destroy non-ground nodes - for s=#spawner_posses, 1, -1 do - local sp = spawner_posses[s] - -- ... and place it and select a random mob - set_node(sp, {name = "mcl_mobspawners:spawner"}) - local mobs = { - "mobs_mc:zombie", - "mobs_mc:zombie", - "mobs_mc:spider", - "mobs_mc:skeleton", - } - local spawner_mob = mobs[pr:next(1, #mobs)] - - mcl_mobspawners.setup_spawner(sp, spawner_mob, 0, 7) - end -end - -local function dungeons_nodes(minp, maxp, blockseed) - local ymin, ymax = math_max(min_y, minp.y), math_min(max_y, maxp.y) - if ymax < ymin then return false end - local pr = PseudoRandom(blockseed) - for a=1, attempts do - local dim = dungeonsizes[pr:next(1, #dungeonsizes)] - local x = pr:next(minp.x, maxp.x-dim.x-1) - local y = pr:next(ymin , ymax -dim.y-1) - local z = pr:next(minp.z, maxp.z-dim.z-1) - local p1 = {x=x,y=y,z=z} - local p2 = {x = x+dim.x+1, y = y+dim.y+1, z = z+dim.z+1} - minetest.log("verbose","[mcl_dungeons] size=" ..minetest.pos_to_string(dim) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) - emerge_area(p1, p2, ecb_spawn_dungeon, {p1=p1, p2=p2, dim=dim, pr=pr}) - end -end - -function mcl_dungeons.spawn_dungeon(p1, _, pr) - if not p1 or not pr or not p1.x or not p1.y or not p1.z then return end - local dim = dungeonsizes[pr:next(1, #dungeonsizes)] - local p2 = {x = p1.x+dim.x+1, y = p1.y+dim.y+1, z = p1.z+dim.z+1} - minetest.log("verbose","[mcl_dungeons] size=" ..minetest.pos_to_string(dim) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) - emerge_area(p1, p2, ecb_spawn_dungeon, {p1=p1, p2=p2, dim=dim, pr=pr, dontcheck=true}) -end - -mcl_mapgen_core.register_generator("dungeons", nil, dungeons_nodes, 999999) diff --git a/mods/MAPGEN/mcl_dungeons/mod.conf b/mods/MAPGEN/mcl_dungeons/mod.conf deleted file mode 100644 index fe02286fa..000000000 --- a/mods/MAPGEN/mcl_dungeons/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_dungeons -author = Wuzzy -description = Generates random dungeons in the world -depends = mcl_init, mcl_core, mcl_chests, mcl_mobs, mcl_mobspawners, mcl_mapgen_core, mobs_mc diff --git a/mods/MAPGEN/mcl_end_island/init.lua b/mods/MAPGEN/mcl_end_island/init.lua deleted file mode 100644 index 730176257..000000000 --- a/mods/MAPGEN/mcl_end_island/init.lua +++ /dev/null @@ -1,34 +0,0 @@ -local noisemap = PerlinNoiseMap({ - offset = 0.5, - scale = 0.5, - spread = {x = 84, y = 84, z = 84}, - seed = minetest.get_mapgen_setting("seed") + 99999, - octaves = 4, - persist = 0.85, -}, {x = 151, y = 30, z = 151}):get_3d_map({x = 0, y = 0, z = 0}) - -local c_end_stone = minetest.get_content_id("mcl_end:end_stone") -local y_offset = -2 - -minetest.register_on_generated(function(minp, maxp) - if maxp.y < (-27025 + y_offset) or minp.y > (-27000 + y_offset + 4) or maxp.x < -75 or minp.x > 75 or maxp.z < -75 or minp.z > 75 then - return - end - - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local data = vm:get_data() - local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) - - for idx in area:iter(math.max(minp.x, -75), math.max(minp.y, -27025 + y_offset + 4), math.max(minp.z, -75), math.min(maxp.x, 75), math.min(maxp.y, -27000 + y_offset), math.min(maxp.z, 75)) do - local pos = area:position(idx) - local y = 27025 + pos.y - y_offset - if noisemap[pos.x + 75 + 1][y + 1][pos.z + 75 + 1] > (math.abs(1 - y / 25) ^ 2 + math.abs(pos.x / 75) ^ 2 + math.abs(pos.z / 75) ^ 2) then - data[idx] = c_end_stone - end - end - - vm:set_data(data) - vm:calc_lighting() - vm:update_liquids() - vm:write_to_map() -end) diff --git a/mods/MAPGEN/mcl_end_island/mod.conf b/mods/MAPGEN/mcl_end_island/mod.conf deleted file mode 100644 index 90432792c..000000000 --- a/mods/MAPGEN/mcl_end_island/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_end_island -author = Fleckenstein -depends = mcl_mapgen_core, mcl_end -description = Generate the end main island for MCL2 diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua deleted file mode 100644 index d9494d18b..000000000 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ /dev/null @@ -1,2210 +0,0 @@ -mcl_mapgen_core = {} -local registered_generators = {} - -local lvm, nodes, param2 = 0, 0, 0 -local lvm_buffer = {} - --- --- Aliases for map generator outputs --- - -minetest.register_alias("mapgen_air", "air") -minetest.register_alias("mapgen_stone", "mcl_core:stone") -minetest.register_alias("mapgen_tree", "mcl_core:tree") -minetest.register_alias("mapgen_leaves", "mcl_core:leaves") -minetest.register_alias("mapgen_jungletree", "mcl_core:jungletree") -minetest.register_alias("mapgen_jungleleaves", "mcl_core:jungleleaves") -minetest.register_alias("mapgen_pine_tree", "mcl_core:sprucetree") -minetest.register_alias("mapgen_pine_needles", "mcl_core:spruceleaves") - -minetest.register_alias("mapgen_apple", "mcl_core:leaves") -minetest.register_alias("mapgen_water_source", "mcl_core:water_source") -minetest.register_alias("mapgen_dirt", "mcl_core:dirt") -minetest.register_alias("mapgen_dirt_with_grass", "mcl_core:dirt_with_grass") -minetest.register_alias("mapgen_dirt_with_snow", "mcl_core:dirt_with_grass_snow") -minetest.register_alias("mapgen_sand", "mcl_core:sand") -minetest.register_alias("mapgen_gravel", "mcl_core:gravel") -minetest.register_alias("mapgen_clay", "mcl_core:clay") -minetest.register_alias("mapgen_lava_source", "air") -- Built-in lava generator is too unpredictable, we generate lava on our own -minetest.register_alias("mapgen_cobble", "mcl_core:cobble") -minetest.register_alias("mapgen_mossycobble", "mcl_core:mossycobble") -minetest.register_alias("mapgen_junglegrass", "mcl_flowers:fern") -minetest.register_alias("mapgen_stone_with_coal", "mcl_core:stone_with_coal") -minetest.register_alias("mapgen_stone_with_iron", "mcl_core:stone_with_iron") -minetest.register_alias("mapgen_desert_sand", "mcl_core:sand") -minetest.register_alias("mapgen_desert_stone", "mcl_core:sandstone") -minetest.register_alias("mapgen_sandstone", "mcl_core:sandstone") -if minetest.get_modpath("mclx_core") then - minetest.register_alias("mapgen_river_water_source", "mclx_core:river_water_source") -else - minetest.register_alias("mapgen_river_water_source", "mcl_core:water_source") -end -minetest.register_alias("mapgen_snow", "mcl_core:snow") -minetest.register_alias("mapgen_snowblock", "mcl_core:snowblock") -minetest.register_alias("mapgen_ice", "mcl_core:ice") - -minetest.register_alias("mapgen_stair_cobble", "mcl_stairs:stair_cobble") -minetest.register_alias("mapgen_sandstonebrick", "mcl_core:sandstonesmooth") -minetest.register_alias("mapgen_stair_sandstonebrick", "mcl_stairs:stair_sandstone") -minetest.register_alias("mapgen_stair_sandstone_block", "mcl_stairs:stair_sandstone") -minetest.register_alias("mapgen_stair_desert_stone", "mcl_stairs:stair_sandstone") - -local mg_name = minetest.get_mapgen_setting("mg_name") -local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true" - -local WITCH_HUT_HEIGHT = 3 -- Exact Y level to spawn witch huts at. This height refers to the height of the floor - --- End exit portal position -local END_EXIT_PORTAL_POS = vector.new(-3, -27003, -3) - --- Content IDs -local c_bedrock = minetest.get_content_id("mcl_core:bedrock") -local c_obsidian = minetest.get_content_id("mcl_core:obsidian") -local c_stone = minetest.get_content_id("mcl_core:stone") -local c_dirt = minetest.get_content_id("mcl_core:dirt") -local c_dirt_with_grass = minetest.get_content_id("mcl_core:dirt_with_grass") -local c_dirt_with_grass_snow = minetest.get_content_id("mcl_core:dirt_with_grass_snow") -local c_reeds = minetest.get_content_id("mcl_core:reeds") -local c_sand = minetest.get_content_id("mcl_core:sand") ---local c_sandstone = minetest.get_content_id("mcl_core:sandstone") -local c_void = minetest.get_content_id("mcl_core:void") -local c_lava = minetest.get_content_id("mcl_core:lava_source") -local c_water = minetest.get_content_id("mcl_core:water_source") -local c_soul_sand = minetest.get_content_id("mcl_nether:soul_sand") -local c_netherrack = minetest.get_content_id("mcl_nether:netherrack") -local c_nether_lava = minetest.get_content_id("mcl_nether:nether_lava_source") ---local c_end_stone = minetest.get_content_id("mcl_end:end_stone") -local c_realm_barrier = minetest.get_content_id("mcl_core:realm_barrier") -local c_top_snow = minetest.get_content_id("mcl_core:snow") -local c_snow_block = minetest.get_content_id("mcl_core:snowblock") -local c_clay = minetest.get_content_id("mcl_core:clay") -local c_leaves = minetest.get_content_id("mcl_core:leaves") -local c_jungleleaves = minetest.get_content_id("mcl_core:jungleleaves") ---local c_jungletree = minetest.get_content_id("mcl_core:jungletree") -local c_cocoa_1 = minetest.get_content_id("mcl_cocoas:cocoa_1") -local c_cocoa_2 = minetest.get_content_id("mcl_cocoas:cocoa_2") -local c_cocoa_3 = minetest.get_content_id("mcl_cocoas:cocoa_3") -local c_vine = minetest.get_content_id("mcl_core:vine") -local c_air = minetest.CONTENT_AIR - --- --- Ore generation --- - --- Diorite, andesite and granite -local specialstones = { "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite" } -for s=1, #specialstones do - local node = specialstones[s] - minetest.register_ore({ - ore_type = "blob", - ore = node, - wherein = {"mcl_core:stone"}, - clust_scarcity = 15*15*15, - clust_num_ores = 33, - clust_size = 5, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - } - }) - minetest.register_ore({ - ore_type = "blob", - ore = node, - wherein = {"mcl_core:stone"}, - clust_scarcity = 10*10*10, - clust_num_ores = 58, - clust_size = 7, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - } - }) -end - -local stonelike = {"mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite"} - --- Dirt -minetest.register_ore({ - ore_type = "blob", - ore = "mcl_core:dirt", - wherein = stonelike, - clust_scarcity = 15*15*15, - clust_num_ores = 33, - clust_size = 4, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_vars.mg_overworld_max, - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - } -}) - --- Gravel -minetest.register_ore({ - ore_type = "blob", - ore = "mcl_core:gravel", - wherein = stonelike, - clust_scarcity = 14*14*14, - clust_num_ores = 33, - clust_size = 5, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(111), - noise_params = { - offset = 0, - scale = 1, - spread = {x=250, y=250, z=250}, - seed = 12345, - octaves = 3, - persist = 0.6, - lacunarity = 2, - flags = "defaults", - } -}) - -if minetest.settings:get_bool("mcl_generate_ores", true) then - -- - -- Coal - -- - - -- Common spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 525*3, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(50), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 510*3, - clust_num_ores = 8, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(50), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 500*3, - clust_num_ores = 12, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(50), - }) - - -- Medium-rare spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 550*3, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(51), - y_max = mcl_worlds.layer_to_y(80), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 525*3, - clust_num_ores = 6, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(51), - y_max = mcl_worlds.layer_to_y(80), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 500*3, - clust_num_ores = 8, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(51), - y_max = mcl_worlds.layer_to_y(80), - }) - - -- Rare spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 600*3, - clust_num_ores = 3, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(81), - y_max = mcl_worlds.layer_to_y(128), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 550*3, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(81), - y_max = mcl_worlds.layer_to_y(128), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 500*3, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(81), - y_max = mcl_worlds.layer_to_y(128), - }) - - -- - -- Iron - -- - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_iron", - wherein = stonelike, - clust_scarcity = 830, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(39), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_iron", - wherein = stonelike, - clust_scarcity = 1660, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(40), - y_max = mcl_worlds.layer_to_y(63), - }) - - -- - -- Gold - -- - - -- Common spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_gold", - wherein = stonelike, - clust_scarcity = 4775, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(30), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_gold", - wherein = stonelike, - clust_scarcity = 6560, - clust_num_ores = 7, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(30), - }) - - -- Rare spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_gold", - wherein = stonelike, - clust_scarcity = 13000, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(31), - y_max = mcl_worlds.layer_to_y(33), - }) - - -- - -- Diamond - -- - - -- Common spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 10000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(12), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 5000, - clust_num_ores = 2, - clust_size = 2, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(12), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 10000, - clust_num_ores = 8, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(12), - }) - - -- Rare spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 20000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 20000, - clust_num_ores = 2, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), - }) - - -- - -- Redstone - -- - - -- Common spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 500, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(13), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 800, - clust_num_ores = 7, - clust_size = 4, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(13), - }) - - -- Rare spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 1000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 1600, - clust_num_ores = 7, - clust_size = 4, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), - }) - - -- - -- Emerald - -- - - if mg_name == "v6" then - -- Generate everywhere in v6, but rarely. - - -- Common spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_emerald", - wherein = stonelike, - clust_scarcity = 14340, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(29), - }) - -- Rare spawn - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_emerald", - wherein = stonelike, - clust_scarcity = 21510, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(30), - y_max = mcl_worlds.layer_to_y(32), - }) - end - - -- - -- Lapis Lazuli - -- - - -- Common spawn (in the center) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 10000, - clust_num_ores = 7, - clust_size = 4, - y_min = mcl_worlds.layer_to_y(14), - y_max = mcl_worlds.layer_to_y(16), - }) - - -- Rare spawn (below center) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 12000, - clust_num_ores = 6, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(10), - y_max = mcl_worlds.layer_to_y(13), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 14000, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(6), - y_max = mcl_worlds.layer_to_y(9), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 16000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(2), - y_max = mcl_worlds.layer_to_y(5), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 18000, - clust_num_ores = 3, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(0), - y_max = mcl_worlds.layer_to_y(2), - }) - - -- Rare spawn (above center) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 12000, - clust_num_ores = 6, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(17), - y_max = mcl_worlds.layer_to_y(20), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 14000, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(21), - y_max = mcl_worlds.layer_to_y(24), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 16000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(25), - y_max = mcl_worlds.layer_to_y(28), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 18000, - clust_num_ores = 3, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(29), - y_max = mcl_worlds.layer_to_y(32), - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 32000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(31), - y_max = mcl_worlds.layer_to_y(32), - }) -end - -if not superflat then --- Water and lava springs (single blocks of lava/water source) --- Water appears at nearly every height, but not near the bottom -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:water_source", - wherein = {"mcl_core:stone", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite", "mcl_core:dirt"}, - clust_scarcity = 9000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(5), - y_max = mcl_worlds.layer_to_y(128), -}) - --- Lava springs are rather common at -31 and below -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:lava_source", - wherein = stonelike, - clust_scarcity = 2000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(1), - y_max = mcl_worlds.layer_to_y(10), -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:lava_source", - wherein = stonelike, - clust_scarcity = 9000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(11), - y_max = mcl_worlds.layer_to_y(31), -}) - --- Lava springs will become gradually rarer with increasing height -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:lava_source", - wherein = stonelike, - clust_scarcity = 32000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(32), - y_max = mcl_worlds.layer_to_y(47), -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:lava_source", - wherein = stonelike, - clust_scarcity = 72000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(48), - y_max = mcl_worlds.layer_to_y(61), -}) - --- Lava may even appear above surface, but this is very rare -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:lava_source", - wherein = stonelike, - clust_scarcity = 96000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(62), - y_max = mcl_worlds.layer_to_y(127), -}) -end - -local function register_mgv6_decorations() - - -- Cacti - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:sand"}, - sidelen = 16, - noise_params = { - offset = -0.012, - scale = 0.024, - spread = {x = 100, y = 100, z = 100}, - seed = 257, - octaves = 3, - persist = 0.6 - }, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_core:cactus", - height = 1, - height_max = 3, - }) - - -- Sugar canes - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_core:dirt", "mcl_core:coarse_dirt", "group:grass_block_no_snow", "group:sand", "mcl_core:podzol", "mcl_core:reeds"}, - sidelen = 16, - noise_params = { - offset = -0.3, - scale = 0.7, - spread = {x = 100, y = 100, z = 100}, - seed = 465, - octaves = 3, - persist = 0.7 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_core:reeds", - height = 1, - height_max = 3, - spawn_by = { "mcl_core:water_source", "group:frosted_ice" }, - num_spawn_by = 1, - }) - - -- Doubletall grass - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=3, z=1 }, - data = { - { name = "air", prob = 0 }, - { name = "mcl_flowers:double_grass", param1 = 255, }, - { name = "mcl_flowers:double_grass_top", param1 = 255, }, - }, - }, - place_on = {"group:grass_block_no_snow"}, - sidelen = 8, - noise_params = { - offset = -0.0025, - scale = 0.03, - spread = {x = 100, y = 100, z = 100}, - seed = 420, - octaves = 3, - persist = 0.0, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - }) - - -- Large ferns - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=3, z=1 }, - data = { - { name = "air", prob = 0 }, - { name = "mcl_flowers:double_fern", param1=255, }, - { name = "mcl_flowers:double_fern_top", param1=255, }, - }, - }, - -- v6 hack: This makes sure large ferns only appear in jungles - spawn_by = { "mcl_core:jungletree", "mcl_flowers:fern" }, - num_spawn_by = 1, - place_on = {"group:grass_block_no_snow"}, - - sidelen = 16, - noise_params = { - offset = 0, - scale = 0.01, - spread = {x = 250, y = 250, z = 250}, - seed = 333, - octaves = 2, - persist = 0.66, - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - }) - - -- Large flowers - local function register_large_flower(name, seed, offset) - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=3, z=1 }, - data = { - { name = "air", prob = 0 }, - { name = "mcl_flowers:"..name, param1=255, }, - { name = "mcl_flowers:"..name.."_top", param1=255, }, - }, - }, - place_on = {"group:grass_block_no_snow"}, - - sidelen = 16, - noise_params = { - offset = offset, - scale = 0.01, - spread = {x = 300, y = 300, z = 300}, - seed = seed, - octaves = 5, - persist = 0.62, - }, - y_min = 1, - y_max = mcl_vars.overworld_max, - flags = "", - }) - end - - register_large_flower("rose_bush", 9350, -0.008) - register_large_flower("peony", 10450, -0.008) - register_large_flower("lilac", 10600, -0.007) - register_large_flower("sunflower", 2940, -0.005) - - -- Lily pad - minetest.register_decoration({ - deco_type = "schematic", - schematic = { - size = { x=1, y=3, z=1 }, - data = { - { name = "mcl_core:water_source", prob = 0 }, - { name = "mcl_core:water_source" }, - { name = "mcl_flowers:waterlily", param1 = 255 }, - }, - }, - place_on = "mcl_core:dirt", - sidelen = 16, - noise_params = { - offset = -0.12, - scale = 0.3, - spread = {x = 200, y = 200, z = 200}, - seed = 503, - octaves = 6, - persist = 0.7, - }, - y_min = 0, - y_max = 0, - rotation = "random", - }) - - -- Pumpkin - minetest.register_decoration({ - deco_type = "simple", - decoration = "mcl_farming:pumpkin", - param2 = 0, - param2_max = 3, - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = -0.008, - scale = 0.00666, - spread = {x = 250, y = 250, z = 250}, - seed = 666, - octaves = 6, - persist = 0.666 - }, - y_min = 1, - y_max = mcl_vars.overworld_max, - }) - - -- Melon - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = 0.002, - scale = 0.006, - spread = {x = 250, y = 250, z = 250}, - seed = 333, - octaves = 3, - persist = 0.6 - }, - -- Small trick to make sure melon spawn in jungles - spawn_by = { "mcl_core:jungletree", "mcl_flowers:fern" }, - num_spawn_by = 1, - y_min = 1, - y_max = 40, - decoration = "mcl_farming:melon", - }) - - -- Tall grass - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 8, - noise_params = { - offset = 0.01, - scale = 0.3, - spread = {x = 100, y = 100, z = 100}, - seed = 420, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.overworld_max, - decoration = "mcl_flowers:tallgrass", - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 8, - noise_params = { - offset = 0.04, - scale = 0.03, - spread = {x = 100, y = 100, z = 100}, - seed = 420, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.overworld_max, - decoration = "mcl_flowers:tallgrass", - }) - - -- Seagrass and kelp - local materials = {"dirt","sand"} - for i=1, #materials do - local mat = materials[i] - - minetest.register_decoration({ - deco_type = "simple", - spawn_by = {"group:water"}, - num_spawn_by = 1, - place_on = {"mcl_core:"..mat}, - sidelen = 8, - noise_params = { - offset = 0.04, - scale = 0.3, - spread = {x = 100, y = 100, z = 100}, - seed = 421, - octaves = 3, - persist = 0.6 - }, - flags = "force_placement", - place_offset_y = -1, - y_min = mcl_vars.overworld_min, - y_max = 0, - decoration = "mcl_ocean:seagrass_"..mat, - }) - minetest.register_decoration({ - deco_type = "simple", - spawn_by = {"group:water"}, - num_spawn_by = 1, - place_on = {"mcl_core:mat"}, - sidelen = 8, - noise_params = { - offset = 0.08, - scale = 0.03, - spread = {x = 100, y = 100, z = 100}, - seed = 421, - octaves = 3, - persist = 0.6 - }, - flags = "force_placement", - place_offset_y = -1, - y_min = mcl_vars.overworld_min, - y_max = -5, - decoration = "mcl_ocean:seagrass_"..mat, - }) - - minetest.register_decoration({ - deco_type = "simple", - spawn_by = {"group:water"}, - num_spawn_by = 1, - place_on = {"mcl_core:"..mat}, - sidelen = 16, - noise_params = { - offset = 0.01, - scale = 0.01, - spread = {x = 300, y = 300, z = 300}, - seed = 505, - octaves = 5, - persist = 0.62, - }, - flags = "force_placement", - place_offset_y = -1, - y_min = mcl_vars.overworld_min, - y_max = -6, - decoration = "mcl_ocean:kelp_"..mat, - param2 = 16, - param2_max = 96, - }) - minetest.register_decoration({ - deco_type = "simple", - spawn_by = {"group:water"}, - num_spawn_by = 1, - place_on = {"mcl_core:"..mat}, - sidelen = 16, - noise_params = { - offset = 0.01, - scale = 0.01, - spread = {x = 100, y = 100, z = 100}, - seed = 506, - octaves = 5, - persist = 0.62, - }, - flags = "force_placement", - place_offset_y = -1, - y_min = mcl_vars.overworld_min, - y_max = -15, - decoration = "mcl_ocean:kelp_"..mat, - param2 = 32, - param2_max = 160, - }) - - end - - -- Wet Sponge - -- TODO: Remove this when we got ocean monuments - minetest.register_decoration({ - deco_type = "simple", - decoration = "mcl_sponges:sponge_wet", - spawn_by = {"group:water"}, - num_spawn_by = 1, - place_on = {"mcl_core:dirt","mcl_core:sand"}, - sidelen = 16, - noise_params = { - offset = 0.00295, - scale = 0.006, - spread = {x = 250, y = 250, z = 250}, - seed = 999, - octaves = 3, - persist = 0.666 - }, - flags = "force_placement", - y_min = mcl_vars.mg_lava_overworld_max + 5, - y_max = -20, - }) - - -- Add a small amount of tall grass everywhere to avoid areas completely empty devoid of tall grass - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 8, - fill_ratio = 0.004, - y_min = 1, - y_max = mcl_vars.overworld_max, - decoration = "mcl_flowers:tallgrass", - }) - - local mushrooms = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"} - local mseeds = { 7133, 8244 } - for m=1, #mushrooms do - -- Mushrooms next to trees - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow", "mcl_core:dirt", "mcl_core:podzol", "mcl_core:mycelium", "mcl_core:stone", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite"}, - sidelen = 16, - noise_params = { - offset = 0.04, - scale = 0.04, - spread = {x = 100, y = 100, z = 100}, - seed = mseeds[m], - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = mushrooms[m], - spawn_by = { "mcl_core:tree", "mcl_core:sprucetree", "mcl_core:darktree", "mcl_core:birchtree", }, - num_spawn_by = 1, - }) - end - - -- Dead bushes - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:sand", "mcl_core:podzol", "mcl_core:dirt", "mcl_core:coarse_dirt", "group:hardened_clay"}, - sidelen = 16, - noise_params = { - offset = 0, - scale = 0.035, - spread = {x = 100, y = 100, z = 100}, - seed = 1972, - octaves = 3, - persist = 0.6 - }, - y_min = 4, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_core:deadbush", - }) - - local function register_mgv6_flower(name, seed, offset, y_max) - if offset == nil then - offset = 0 - end - if y_max == nil then - y_max = mcl_vars.mg_overworld_max - end - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_no_snow"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = 0.006, - spread = {x = 100, y = 100, z = 100}, - seed = seed, - octaves = 3, - persist = 0.6 - }, - y_min = 1, - y_max = y_max, - decoration = "mcl_flowers:"..name, - }) - end - - register_mgv6_flower("tulip_red", 436) - register_mgv6_flower("tulip_orange", 536) - register_mgv6_flower("tulip_pink", 636) - register_mgv6_flower("tulip_white", 736) - register_mgv6_flower("azure_bluet", 800) - register_mgv6_flower("dandelion", 8) - -- Allium is supposed to only appear in flower forest in MC. There are no flower forests in v6. - -- We compensate by making it slightly rarer in v6. - register_mgv6_flower("allium", 0, -0.001) - --[[ Blue orchid is supposed to appear in swamplands. There are no swamplands in v6. - We emulate swamplands by limiting the height to 5 levels above sea level, - which should be close to the water. ]] - register_mgv6_flower("blue_orchid", 64500, nil, mcl_worlds.layer_to_y(67)) - register_mgv6_flower("oxeye_daisy", 3490) - register_mgv6_flower("poppy", 9439) - - -- Put top snow on snowy grass blocks. The v6 mapgen does not generate the top snow on its own. - minetest.register_decoration({ - deco_type = "simple", - place_on = {"group:grass_block_snow"}, - sidelen = 16, - fill_ratio = 11.0, -- complete coverage - y_min = 1, - y_max = mcl_vars.mg_overworld_max, - decoration = "mcl_core:snow", - }) - -end - -local mg_flags = minetest.settings:get_flags("mg_flags") - --- Inform other mods of dungeon setting for MCL2-style dungeons -mcl_vars.mg_dungeons = mg_flags.dungeons and not superflat - --- Disable builtin dungeons, we provide our own dungeons -mg_flags.dungeons = false - --- Apply mapgen-specific mapgen code -if mg_name == "v6" then - register_mgv6_decorations() -elseif superflat then - -- Enforce superflat-like mapgen: no caves, decor, lakes and hills - mg_flags.caves = false - mg_flags.decorations = false - minetest.set_mapgen_setting("mgflat_spflags", "nolakes,nohills", true) -end - -local mg_flags_str = "" -for k,v in pairs(mg_flags) do - if v == false then - k = "no" .. k - end - mg_flags_str = mg_flags_str .. k .. "," -end -if string.len(mg_flags_str) > 0 then - mg_flags_str = string.sub(mg_flags_str, 1, string.len(mg_flags_str)-1) -end -minetest.set_mapgen_setting("mg_flags", mg_flags_str, true) - --- Helper function for converting a MC probability to MT, with --- regards to MapBlocks. --- Some MC generated structures are generated on per-chunk --- probability. --- The MC probability is 1/x per Minecraft chunk (16×16). - --- x: The MC probability is 1/x. --- minp, maxp: MapBlock limits --- returns: Probability (1/return_value) for a single MT mapblock -local function minecraft_chunk_probability(x, minp, maxp) - -- 256 is the MC chunk height - return x * (((maxp.x-minp.x+1)*(maxp.z-minp.z+1)) / 256) -end - --- Takes an index of a biomemap table (from minetest.get_mapgen_object), --- minp and maxp (from an on_generated callback) and returns the real world coordinates --- as X, Z. --- Inverse function of xz_to_biomemap ---[[local function biomemap_to_xz(index, minp, maxp) - local xwidth = maxp.x - minp.x + 1 - local zwidth = maxp.z - minp.z + 1 - local x = ((index-1) % xwidth) + minp.x - local z = ((index-1) / zwidth) + minp.z - return x, z -end]] - --- Takes x and z coordinates and minp and maxp of a generated chunk --- (in on_generated callback) and returns a biomemap index) --- Inverse function of biomemap_to_xz -local function xz_to_biomemap_index(x, z, minp, maxp) - local xwidth = maxp.x - minp.x + 1 - local zwidth = maxp.z - minp.z + 1 - local minix = x % xwidth - local miniz = z % zwidth - - return (minix + miniz * zwidth) + 1 -end - --- Perlin noise objects -local perlin_structures -local perlin_vines, perlin_vines_fine, perlin_vines_upwards, perlin_vines_length, perlin_vines_density -local perlin_clay - -local function generate_clay(minp, maxp, blockseed, voxelmanip_data, voxelmanip_area, lvm_used) - -- TODO: Make clay generation reproducible for same seed. - if maxp.y < -5 or minp.y > 0 then - return lvm_used - end - - local pr = PseudoRandom(blockseed) - - perlin_clay = perlin_clay or minetest.get_perlin({ - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = -316, - octaves = 1, - persist = 0.0 - }) - - for y=math.max(minp.y, 0), math.min(maxp.y, -8), -1 do - -- Assume X and Z lengths are equal - local divlen = 4 - local divs = (maxp.x-minp.x)/divlen+1; - for divx=0+1,divs-2 do - for divz=0+1,divs-2 do - -- Get position and shift it a bit randomly so the clay do not obviously appear in a grid - local cx = minp.x + math.floor((divx+0.5)*divlen) + pr:next(-1,1) - local cz = minp.z + math.floor((divz+0.5)*divlen) + pr:next(-1,1) - - local water_pos = voxelmanip_area:index(cx, y+1, cz) - local waternode = voxelmanip_data[water_pos] - local surface_pos = voxelmanip_area:index(cx, y, cz) - local surfacenode = voxelmanip_data[surface_pos] - - local genrnd = pr:next(1, 20) - if genrnd == 1 and perlin_clay:get_3d({x=cx,y=y,z=cz}) > 0 and waternode == c_water and - (surfacenode == c_dirt or minetest.get_item_group(minetest.get_name_from_content_id(surfacenode), "sand") == 1) then - local diamondsize = pr:next(1, 3) - for x1 = -diamondsize, diamondsize do - for z1 = -(diamondsize - math.abs(x1)), diamondsize - math.abs(x1) do - local ccpos = voxelmanip_area:index(cx+x1, y, cz+z1) - local claycandidate = voxelmanip_data[ccpos] - if voxelmanip_data[ccpos] == c_dirt or minetest.get_item_group(minetest.get_name_from_content_id(claycandidate), "sand") == 1 then - voxelmanip_data[ccpos] = c_clay - lvm_used = true - end - end - end - end - end - end - end - return lvm_used -end - -local function generate_end_exit_portal(pos) - local obj = minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon") - if obj then - local dragon_entity = obj:get_luaentity() - dragon_entity._initial = true - dragon_entity._portal_pos = pos - else - minetest.log("error", "[mcl_mapgen_core] ERROR! Ender dragon doesn't want to spawn") - end - mcl_structures.call_struct(pos, "end_exit_portal") -end - --- TODO: Try to use more efficient structure generating code -local function generate_structures(minp, maxp, blockseed, biomemap) - local chunk_has_desert_well = false - local chunk_has_desert_temple = false - local chunk_has_igloo = false - local struct_min, struct_max = -3, 111 --64 - - if maxp.y >= struct_min and minp.y <= struct_max then - -- Generate structures - local pr = PcgRandom(blockseed) - perlin_structures = perlin_structures or minetest.get_perlin(329, 3, 0.6, 100) - -- Assume X and Z lengths are equal - local divlen = 5 - for x0 = minp.x, maxp.x, divlen do for z0 = minp.z, maxp.z, divlen do - -- Determine amount from perlin noise - local amount = math.floor(perlin_structures:get_2d({x=x0, y=z0}) * 9) - -- Find random positions based on this random - local p, ground_y - for i=0, amount do - p = {x = pr:next(x0, x0+divlen-1), y = 0, z = pr:next(z0, z0+divlen-1)} - -- Find ground level - ground_y = nil - local nn - for y = struct_max, struct_min, -1 do - p.y = y - local checknode = minetest.get_node(p) - if checknode then - nn = checknode.name - local def = minetest.registered_nodes[nn] - if def and def.walkable then - ground_y = y - break - end - end - end - - if ground_y then - p.y = ground_y+1 - local nn0 = minetest.get_node(p).name - -- Check if the node can be replaced - if minetest.registered_nodes[nn0] and minetest.registered_nodes[nn0].buildable_to then - -- Desert temples and desert wells - if nn == "mcl_core:sand" or (nn == "mcl_core:sandstone") then - if not chunk_has_desert_temple and not chunk_has_desert_well and ground_y > 3 then - -- Spawn desert temple - -- TODO: Check surface - if pr:next(1,12000) == 1 then - mcl_structures.call_struct(p, "desert_temple", nil, pr) - chunk_has_desert_temple = true - end - end - if not chunk_has_desert_temple and not chunk_has_desert_well and ground_y > 3 then - local desert_well_prob = minecraft_chunk_probability(1000, minp, maxp) - - -- Spawn desert well - if pr:next(1, desert_well_prob) == 1 then - -- Check surface - local surface = minetest.find_nodes_in_area({x=p.x,y=p.y-1,z=p.z}, {x=p.x+5, y=p.y-1, z=p.z+5}, "mcl_core:sand") - if #surface >= 25 then - mcl_structures.call_struct(p, "desert_well", nil, pr) - chunk_has_desert_well = true - end - end - end - - -- Igloos - elseif not chunk_has_igloo and (nn == "mcl_core:snowblock" or nn == "mcl_core:snow" or (minetest.get_item_group(nn, "grass_block_snow") == 1)) then - if pr:next(1, 4400) == 1 then - -- Check surface - local floor = {x=p.x+9, y=p.y-1, z=p.z+9} - local surface = minetest.find_nodes_in_area({x=p.x,y=p.y-1,z=p.z}, floor, "mcl_core:snowblock") - local surface2 = minetest.find_nodes_in_area({x=p.x,y=p.y-1,z=p.z}, floor, "mcl_core:dirt_with_grass_snow") - if #surface + #surface2 >= 63 then - mcl_structures.call_struct(p, "igloo", nil, pr) - chunk_has_igloo = true - end - end - end - - -- Fossil - if nn == "mcl_core:sandstone" or nn == "mcl_core:sand" and not chunk_has_desert_temple and ground_y > 3 then - local fossil_prob = minecraft_chunk_probability(64, minp, maxp) - - if pr:next(1, fossil_prob) == 1 then - -- Spawn fossil below desert surface between layers 40 and 49 - local p1 = {x=p.x, y=pr:next(mcl_worlds.layer_to_y(40), mcl_worlds.layer_to_y(49)), z=p.z} - -- Very rough check of the environment (we expect to have enough stonelike nodes). - -- Fossils may still appear partially exposed in caves, but this is O.K. - local p2 = vector.add(p1, 4) - local nodes = minetest.find_nodes_in_area(p1, p2, {"mcl_core:sandstone", "mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite", "mcl_core:stone_with_coal", "mcl_core:dirt", "mcl_core:gravel"}) - - if #nodes >= 100 then -- >= 80% - mcl_structures.call_struct(p1, "fossil", nil, pr) - end - end - end - - -- Witch hut - if ground_y <= 0 and nn == "mcl_core:dirt" then - local prob = minecraft_chunk_probability(48, minp, maxp) - if pr:next(1, prob) == 1 then - - local swampland = minetest.get_biome_id("Swampland") - local swampland_shore = minetest.get_biome_id("Swampland_shore") - - -- Where do witches live? - - local here_be_witches = false - if mg_name == "v6" then - -- v6: In Normal biome - if biomeinfo.get_v6_biome(p) == "Normal" then - here_be_witches = true - end - else - -- Other mapgens: In swampland biome - local bi = xz_to_biomemap_index(p.x, p.z, minp, maxp) - if biomemap[bi] == swampland or biomemap[bi] == swampland_shore then - here_be_witches = true - end - end - - if here_be_witches then - local r = tostring(pr:next(0, 3) * 90) -- "0", "90", "180" or 270" - local p1 = {x=p.x-1, y=WITCH_HUT_HEIGHT+2, z=p.z-1} - local size - if r == "0" or r == "180" then - size = {x=10, y=4, z=8} - else - size = {x=8, y=4, z=10} - end - local p2 = vector.add(p1, size) - - -- This checks free space at the “body” of the hut and a bit around. - -- ALL nodes must be free for the placement to succeed. - local free_nodes = minetest.find_nodes_in_area(p1, p2, {"air", "mcl_core:water_source", "mcl_flowers:waterlily"}) - if #free_nodes >= ((size.x+1)*(size.y+1)*(size.z+1)) then - local place = {x=p.x, y=WITCH_HUT_HEIGHT-1, z=p.z} - - -- FIXME: For some mysterious reason (black magic?) this - -- function does sometimes NOT spawn the witch hut. One can only see the - -- oak wood nodes in the water, but no hut. :-/ - mcl_structures.call_struct(place, "witch_hut", r, pr) - - -- TODO: Spawn witch in or around hut when the mob sucks less. - - local function place_tree_if_free(pos, prev_result) - local nn = minetest.get_node(pos).name - if nn == "mcl_flowers:waterlily" or nn == "mcl_core:water_source" or nn == "mcl_core:water_flowing" or nn == "air" then - minetest.set_node(pos, {name="mcl_core:tree", param2=0}) - return prev_result - else - return false - end - end - local offsets - if r == "0" then - offsets = { - {x=1, y=0, z=1}, - {x=1, y=0, z=5}, - {x=6, y=0, z=1}, - {x=6, y=0, z=5}, - } - elseif r == "180" then - offsets = { - {x=2, y=0, z=1}, - {x=2, y=0, z=5}, - {x=7, y=0, z=1}, - {x=7, y=0, z=5}, - } - elseif r == "270" then - offsets = { - {x=1, y=0, z=1}, - {x=5, y=0, z=1}, - {x=1, y=0, z=6}, - {x=5, y=0, z=6}, - } - elseif r == "90" then - offsets = { - {x=1, y=0, z=2}, - {x=5, y=0, z=2}, - {x=1, y=0, z=7}, - {x=5, y=0, z=7}, - } - end - for o=1, #offsets do - local ok = true - for y=place.y-1, place.y-64, -1 do - local tpos = vector.add(place, offsets[o]) - tpos.y = y - ok = place_tree_if_free(tpos, ok) - if not ok then - break - end - end - end - end - end - end - end - - -- Ice spikes in v6 - -- In other mapgens, ice spikes are generated as decorations. - if mg_name == "v6" and not chunk_has_igloo and nn == "mcl_core:snowblock" then - local spike = pr:next(1,58000) - if spike < 3 then - -- Check surface - local floor = {x=p.x+4, y=p.y-1, z=p.z+4} - local surface = minetest.find_nodes_in_area({x=p.x+1,y=p.y-1,z=p.z+1}, floor, {"mcl_core:snowblock"}) - -- Check for collision with spruce - local spruce_collisions = minetest.find_nodes_in_area({x=p.x+1,y=p.y+2,z=p.z+1}, {x=p.x+4, y=p.y+6, z=p.z+4}, {"mcl_core:sprucetree", "mcl_core:spruceleaves"}) - - if #surface >= 9 and #spruce_collisions == 0 then - mcl_structures.call_struct(p, "ice_spike_large", nil, pr) - end - elseif spike < 100 then - -- Check surface - local floor = {x=p.x+6, y=p.y-1, z=p.z+6} - local surface = minetest.find_nodes_in_area({x=p.x+1,y=p.y-1,z=p.z+1}, floor, {"mcl_core:snowblock", "mcl_core:dirt_with_grass_snow"}) - - -- Check for collision with spruce - local spruce_collisions = minetest.find_nodes_in_area({x=p.x+1,y=p.y+1,z=p.z+1}, {x=p.x+6, y=p.y+6, z=p.z+6}, {"mcl_core:sprucetree", "mcl_core:spruceleaves"}) - - if #surface >= 25 and #spruce_collisions == 0 then - mcl_structures.call_struct(p, "ice_spike_small", nil, pr) - end - end - end - end - end - - end - end end - -- End exit portal - elseif minp.y <= END_EXIT_PORTAL_POS.y and maxp.y >= END_EXIT_PORTAL_POS.y and - minp.x <= END_EXIT_PORTAL_POS.x and maxp.x >= END_EXIT_PORTAL_POS.x and - minp.z <= END_EXIT_PORTAL_POS.z and maxp.z >= END_EXIT_PORTAL_POS.z then - for y=maxp.y, minp.y, -1 do - local p = {x=END_EXIT_PORTAL_POS.x, y=y, z=END_EXIT_PORTAL_POS.z} - if minetest.get_node(p).name == "mcl_end:end_stone" then - generate_end_exit_portal(p) - return - end - end - generate_end_exit_portal(END_EXIT_PORTAL_POS) - end -end - --- Buffers for LuaVoxelManip --- local lvm_buffer = {} --- local lvm_buffer_param2 = {} - --- Generate tree decorations in the bounding box. This adds: --- * Cocoa at jungle trees --- * Jungle tree vines --- * Oak vines in swamplands -local function generate_tree_decorations(minp, maxp, seed, data, param2_data, area, biomemap, lvm_used, pr) - if maxp.y < 0 then - return lvm_used - end - - local oaktree, oakleaves, jungletree, jungleleaves = {}, {}, {}, {} - local swampland = minetest.get_biome_id("Swampland") - local swampland_shore = minetest.get_biome_id("Swampland_shore") - local jungle = minetest.get_biome_id("Jungle") - local jungle_shore = minetest.get_biome_id("Jungle_shore") - local jungle_m = minetest.get_biome_id("JungleM") - local jungle_m_shore = minetest.get_biome_id("JungleM_shore") - local jungle_edge = minetest.get_biome_id("JungleEdge") - local jungle_edge_shore = minetest.get_biome_id("JungleEdge_shore") - local jungle_edge_m = minetest.get_biome_id("JungleEdgeM") - local jungle_edge_m_shore = minetest.get_biome_id("JungleEdgeM_shore") - - -- Modifier for Jungle M biome: More vines and cocoas - local dense_vegetation = false - - if biomemap then - -- Biome map available: Check if the required biome (jungle or swampland) - -- is in this mapchunk. We are only interested in trees in the correct biome. - -- The nodes are added if the correct biome is *anywhere* in the mapchunk. - -- TODO: Strictly generate vines in the correct biomes only. - local swamp_biome_found, jungle_biome_found = false, false - for b=1, #biomemap do - local id = biomemap[b] - - if not swamp_biome_found and (id == swampland or id == swampland_shore) then - oaktree = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:tree"}) - oakleaves = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:leaves"}) - swamp_biome_found = true - end - if not jungle_biome_found and (id == jungle or id == jungle_shore or id == jungle_m or id == jungle_m_shore or id == jungle_edge or id == jungle_edge_shore or id == jungle_edge_m or id == jungle_edge_m_shore) then - jungletree = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungletree"}) - jungleleaves = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungleleaves"}) - jungle_biome_found = true - end - if not dense_vegetation and (id == jungle_m or id == jungle_m_shore) then - dense_vegetation = true - end - if swamp_biome_found and jungle_biome_found and dense_vegetation then - break - end - end - else - -- If there is no biome map, we just count all jungle things we can find. - -- Oak vines will not be generated. - jungletree = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungletree"}) - jungleleaves = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungleleaves"}) - end - - local pos, treepos, dir - - local cocoachance = 40 - if dense_vegetation then - cocoachance = 32 - end - - -- Pass 1: Generate cocoas at jungle trees - for n = 1, #jungletree do - - pos = table.copy(jungletree[n]) - treepos = table.copy(pos) - - if minetest.find_node_near(pos, 1, {"mcl_core:jungleleaves"}) then - - dir = pr:next(1, cocoachance) - - if dir == 1 then - pos.z = pos.z + 1 - elseif dir == 2 then - pos.z = pos.z - 1 - elseif dir == 3 then - pos.x = pos.x + 1 - elseif dir == 4 then - pos.x = pos.x -1 - end - - local p_pos = area:index(pos.x, pos.y, pos.z) - local l = minetest.get_node_light(pos) - - if dir < 5 - and data[p_pos] == c_air - and l and l > 12 then - local c = pr:next(1, 3) - if c == 1 then - data[p_pos] = c_cocoa_1 - elseif c == 2 then - data[p_pos] = c_cocoa_2 - else - data[p_pos] = c_cocoa_3 - end - param2_data[p_pos] = minetest.dir_to_facedir(vector.subtract(treepos, pos)) - lvm_used = true - end - - end - end - - -- Pass 2: Generate vines at jungle wood, jungle leaves in jungle and oak wood, oak leaves in swampland - perlin_vines = perlin_vines or minetest.get_perlin(555, 4, 0.6, 500) - perlin_vines_fine = perlin_vines_fine or minetest.get_perlin(43000, 3, 0.6, 1) - perlin_vines_length = perlin_vines_length or minetest.get_perlin(435, 4, 0.6, 75) - perlin_vines_upwards = perlin_vines_upwards or minetest.get_perlin(436, 3, 0.6, 10) - perlin_vines_density = perlin_vines_density or minetest.get_perlin(436, 3, 0.6, 500) - - -- Extra long vines in Jungle M - local maxvinelength = 7 - if dense_vegetation then - maxvinelength = 14 - end - local treething - for i=1, 4 do - if i==1 then - treething = jungletree - elseif i == 2 then - treething = jungleleaves - elseif i == 3 then - treething = oaktree - elseif i == 4 then - treething = oakleaves - end - - for n = 1, #treething do - pos = treething[n] - - treepos = table.copy(pos) - - local dirs = { - {x=1,y=0,z=0}, - {x=-1,y=0,z=0}, - {x=0,y=0,z=1}, - {x=0,y=0,z=-1}, - } - - for d = 1, #dirs do - local pos = vector.add(pos, dirs[d]) - local p_pos = area:index(pos.x, pos.y, pos.z) - - local vine_threshold = math.max(0.33333, perlin_vines_density:get_2d(pos)) - if dense_vegetation then - vine_threshold = vine_threshold * (2/3) - end - - if perlin_vines:get_2d(pos) > -1.0 and perlin_vines_fine:get_3d(pos) > vine_threshold and data[p_pos] == c_air then - - local rdir = {} - rdir.x = -dirs[d].x - rdir.y = dirs[d].y - rdir.z = -dirs[d].z - local param2 = minetest.dir_to_wallmounted(rdir) - - -- Determine growth direction - local grow_upwards = false - -- Only possible on the wood, not on the leaves - if i == 1 then - grow_upwards = perlin_vines_upwards:get_3d(pos) > 0.8 - end - if grow_upwards then - -- Grow vines up 1-4 nodes, even through jungleleaves. - -- This may give climbing access all the way to the top of the tree :-) - -- But this will be fairly rare. - local length = math.ceil(math.abs(perlin_vines_length:get_3d(pos)) * 4) - for l=0, length-1 do - local t_pos = area:index(treepos.x, treepos.y, treepos.z) - - if (data[p_pos] == c_air or data[p_pos] == c_jungleleaves or data[p_pos] == c_leaves) and mcl_core.supports_vines(minetest.get_name_from_content_id(data[t_pos])) then - data[p_pos] = c_vine - param2_data[p_pos] = param2 - lvm_used = true - - else - break - end - pos.y = pos.y + 1 - p_pos = area:index(pos.x, pos.y, pos.z) - treepos.y = treepos.y + 1 - end - else - -- Grow vines down, length between 1 and maxvinelength - local length = math.ceil(math.abs(perlin_vines_length:get_3d(pos)) * maxvinelength) - for l=0, length-1 do - if data[p_pos] == c_air then - data[p_pos] = c_vine - param2_data[p_pos] = param2 - lvm_used = true - - else - break - end - pos.y = pos.y - 1 - p_pos = area:index(pos.x, pos.y, pos.z) - end - end - end - end - - end - end - return lvm_used -end - --- Generate mushrooms in caves manually. --- Minetest's API does not support decorations in caves yet. :-( -local function generate_underground_mushrooms(minp, maxp, seed) - local pr_shroom = PseudoRandom(seed-24359) - -- Generate rare underground mushrooms - -- TODO: Make them appear in groups, use Perlin noise - local min, max = mcl_vars.mg_lava_overworld_max + 4, 0 - if minp.y > max or maxp.y < min then - return - end - - local bpos - local stone = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_core:stone", "mcl_core:dirt", "mcl_core:mycelium", "mcl_core:podzol", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite", "mcl_core:stone_with_coal", "mcl_core:stone_with_iron", "mcl_core:stone_with_gold"}) - - for n = 1, #stone do - bpos = {x = stone[n].x, y = stone[n].y + 1, z = stone[n].z } - - local l = minetest.get_node_light(bpos, 0.5) - if bpos.y >= min and bpos.y <= max and l and l <= 12 and pr_shroom:next(1,1000) < 4 then - if pr_shroom:next(1,2) == 1 then - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) - else - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"}) - end - end - end -end - -local nether_wart_chance -if mg_name == "v6" then - nether_wart_chance = 85 -else - nether_wart_chance = 170 -end --- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart --- Minetest's API does not support decorations in caves yet. :-( -local function generate_nether_decorations(minp, maxp, seed) - local pr_nether = PseudoRandom(seed+667) - - if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then - return - end - - minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) - - -- TODO: Generate everything based on Perlin noise instead of PseudoRandom - - local bpos - local rack = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:netherrack"}) - local magma = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:magma"}) - local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"}) - - -- Helper function to spawn “fake” decoration - local function special_deco(nodes, spawn_func) - for n = 1, #nodes do - bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z } - - spawn_func(bpos) - end - - end - - -- Eternal fire on netherrack - special_deco(rack, function(bpos) - -- Eternal fire on netherrack - if pr_nether:next(1,100) <= 3 then - minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) - end - end) - - -- Eternal fire on magma cubes - special_deco(magma, function(bpos) - if pr_nether:next(1,150) == 1 then - minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) - end - end) - - -- Mushrooms on netherrack - -- Note: Spawned *after* the fire because of light level checks - special_deco(rack, function(bpos) - local l = minetest.get_node_light(bpos, 0.5) - if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then - -- TODO: Make mushrooms appear in groups, use Perlin noise - if pr_nether:next(1,2) == 1 then - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) - else - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"}) - end - end - end) - - -- Nether wart on soul sand - -- TODO: Spawn in Nether fortresses - special_deco(ssand, function(bpos) - if pr_nether:next(1, nether_wart_chance) == 1 then - minetest.set_node(bpos, {name = "mcl_nether:nether_wart"}) - end - end) - -end - -minetest.register_on_generated(function(minp, maxp, blockseed) - minetest.log("action", "[mcl_mapgen_core] Generating chunk " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) - local p1, p2 = {x=minp.x, y=minp.y, z=minp.z}, {x=maxp.x, y=maxp.y, z=maxp.z} - if lvm > 0 then - local lvm_used, shadow = false, false - local lb2 = {} -- param2 - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local e1, e2 = {x=emin.x, y=emin.y, z=emin.z}, {x=emax.x, y=emax.y, z=emax.z} - local data2 - local data = vm:get_data(lvm_buffer) - if param2 > 0 then - data2 = vm:get_param2_data(lb2) - end - local area = VoxelArea:new({MinEdge=e1, MaxEdge=e2}) - - for _, rec in pairs(registered_generators) do - if rec.vf then - local lvm_used0, shadow0 = rec.vf(vm, data, data2, e1, e2, area, p1, p2, blockseed) - if lvm_used0 then - lvm_used = true - end - if shadow0 then - shadow = true - end - end - end - - if lvm_used then - -- Write stuff - vm:set_data(data) - if param2 > 0 then - vm:set_param2_data(data2) - end - vm:calc_lighting(p1, p2, shadow) - vm:write_to_map() - vm:update_liquids() - end - end - - if nodes > 0 then - for _, rec in pairs(registered_generators) do - if rec.nf then - rec.nf(p1, p2, blockseed) - end - end - end - - mcl_vars.add_chunk(minp) -end) - -function minetest.register_on_generated(node_function) - mcl_mapgen_core.register_generator("mod_"..tostring(#registered_generators+1), nil, node_function) -end - -function mcl_mapgen_core.register_generator(id, lvm_function, node_function, priority, needs_param2) - if not id then return end - - local priority = priority or 5000 - - if lvm_function then lvm = lvm + 1 end - if lvm_function then nodes = nodes + 1 end - if needs_param2 then param2 = param2 + 1 end - - local new_record = { - i = priority, - vf = lvm_function, - nf = node_function, - needs_param2 = needs_param2, - } - - registered_generators[id] = new_record - table.sort(registered_generators, function(a, b) - return (a.i < b.i) or ((a.i == b.i) and a.vf and (b.vf == nil)) - end) -end - -function mcl_mapgen_core.unregister_generator(id) - if not registered_generators[id] then return end - local rec = registered_generators[id] - registered_generators[id] = nil - if rec.vf then lvm = lvm - 1 end - if rec.nf then nodes = nodes - 1 end - if rec.needs_param2 then param2 = param2 - 1 end - --if rec.needs_level0 then level0 = level0 - 1 end -end - --- Generate basic layer-based nodes: void, bedrock, realm barrier, lava seas, etc. --- Also perform some basic node replacements. - -local bedrock_check -if mcl_vars.mg_bedrock_is_rough then - function bedrock_check(pos, _, pr) - local y = pos.y - -- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer - -- This code assumes a bedrock height of 5 layers. - - local diff = mcl_vars.mg_bedrock_overworld_max - y -- Overworld bedrock - local ndiff1 = mcl_vars.mg_bedrock_nether_bottom_max - y -- Nether bedrock, bottom - local ndiff2 = mcl_vars.mg_bedrock_nether_top_max - y -- Nether bedrock, ceiling - - local top - if diff == 0 or ndiff1 == 0 or ndiff2 == 4 then - -- 50% bedrock chance - top = 2 - elseif diff == 1 or ndiff1 == 1 or ndiff2 == 3 then - -- 66.666...% - top = 3 - elseif diff == 2 or ndiff1 == 2 or ndiff2 == 2 then - -- 75% - top = 4 - elseif diff == 3 or ndiff1 == 3 or ndiff2 == 1 then - -- 90% - top = 10 - elseif diff == 4 or ndiff1 == 4 or ndiff2 == 0 then - -- 100% - return true - else - -- Not in bedrock layer - return false - end - - return pr:next(1, top) <= top-1 - end -end - - --- Helper function to set all nodes in the layers between min and max. --- content_id: Node to set --- check: optional. --- If content_id, node will be set only if it is equal to check. --- If function(pos_to_check, content_id_at_this_pos), will set node only if returns true. --- min, max: Minimum and maximum Y levels of the layers to set --- minp, maxp: minp, maxp of the on_generated --- lvm_used: Set to true if any node in this on_generated has been set before. --- --- returns true if any node was set and lvm_used otherwise -local function set_layers(data, area, content_id, check, min, max, minp, maxp, lvm_used, pr) - if (maxp.y >= min and minp.y <= max) then - for y = math.max(min, minp.y), math.min(max, maxp.y) do - for x = minp.x, maxp.x do - for z = minp.z, maxp.z do - local p_pos = area:index(x, y, z) - if check then - if type(check) == "function" and check({x=x,y=y,z=z}, data[p_pos], pr) then - data[p_pos] = content_id - lvm_used = true - elseif check == data[p_pos] then - data[p_pos] = content_id - lvm_used = true - end - else - data[p_pos] = content_id - lvm_used = true - end - end - end - end - end - return lvm_used -end - --- Below the bedrock, generate air/void -local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed) - local biomemap --ymin, ymax - local lvm_used = false - local pr = PseudoRandom(blockseed) - - -- The Void below the Nether: - lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mapgen_edge_min , mcl_vars.mg_nether_min -1, minp, maxp, lvm_used, pr) - - -- [[ THE NETHER: mcl_vars.mg_nether_min mcl_vars.mg_nether_max ]] - - -- The Air on the Nether roof, https://git.minetest.land/MineClone2/MineClone2/issues/1186 - lvm_used = set_layers(data, area, c_air , nil, mcl_vars.mg_nether_max +1, mcl_vars.mg_nether_max + 128 , minp, maxp, lvm_used, pr) - -- The Void above the Nether below the End: - lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mg_nether_max + 128 +1, mcl_vars.mg_end_min -1, minp, maxp, lvm_used, pr) - - -- [[ THE END: mcl_vars.mg_end_min mcl_vars.mg_end_max ]] - - -- The Void above the End below the Realm barrier: - lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mg_end_max +1, mcl_vars.mg_realm_barrier_overworld_end_min-1, minp, maxp, lvm_used, pr) - -- Realm barrier between the Overworld void and the End - lvm_used = set_layers(data, area, c_realm_barrier, nil, mcl_vars.mg_realm_barrier_overworld_end_min , mcl_vars.mg_realm_barrier_overworld_end_max , minp, maxp, lvm_used, pr) - -- The Void above Realm barrier below the Overworld: - lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mg_realm_barrier_overworld_end_max+1, mcl_vars.mg_overworld_min -1, minp, maxp, lvm_used, pr) - - - if mg_name ~= "singlenode" then - -- Bedrock - lvm_used = set_layers(data, area, c_bedrock, bedrock_check, mcl_vars.mg_bedrock_overworld_min, mcl_vars.mg_bedrock_overworld_max, minp, maxp, lvm_used, pr) - lvm_used = set_layers(data, area, c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_bottom_max, minp, maxp, lvm_used, pr) - lvm_used = set_layers(data, area, c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_top_min, mcl_vars.mg_bedrock_nether_top_max, minp, maxp, lvm_used, pr) - - -- Flat Nether - if mg_name == "flat" then - lvm_used = set_layers(data, area, c_air, nil, mcl_vars.mg_flat_nether_floor, mcl_vars.mg_flat_nether_ceiling, minp, maxp, lvm_used, pr) - end - - -- Big lava seas by replacing air below a certain height - if mcl_vars.mg_lava then - lvm_used = set_layers(data, area, c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, minp, maxp, lvm_used, pr) - lvm_used = set_layers(data, area, c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, minp, maxp, lvm_used, pr) - end - - -- Clay, vines, cocoas - lvm_used = generate_clay(minp, maxp, blockseed, data, area, lvm_used) - - biomemap = minetest.get_mapgen_object("biomemap") - lvm_used = generate_tree_decorations(minp, maxp, blockseed, data, data2, area, biomemap, lvm_used, pr) - - ----- Interactive block fixing section ----- - ----- The section to perform basic block overrides of the core mapgen generated world. ----- - - -- Snow and sand fixes. This code implements snow consistency - -- and fixes floating sand and cut plants. - -- A snowy grass block must be below a top snow or snow block at all times. - if minp.y <= mcl_vars.mg_overworld_max and maxp.y >= mcl_vars.mg_overworld_min then - -- v6 mapgen: - if mg_name == "v6" then - - --[[ Remove broken double plants caused by v6 weirdness. - v6 might break the bottom part of double plants because of how it works. - There are 3 possibilities: - 1) Jungle: Top part is placed on top of a jungle tree or fern (=v6 jungle grass). - This is because the schematic might be placed even if some nodes of it - could not be placed because the destination was already occupied. - TODO: A better fix for this would be if schematics could abort placement - altogether if ANY of their nodes could not be placed. - 2) Cavegen: Removes the bottom part, the upper part floats - 3) Mudflow: Same as 2) ]] - local plants = minetest.find_nodes_in_area(minp, maxp, "group:double_plant") - for n = 1, #plants do - local node = vm:get_node_at(plants[n]) - local is_top = minetest.get_item_group(node.name, "double_plant") == 2 - if is_top then - local p_pos = area:index(plants[n].x, plants[n].y-1, plants[n].z) - if p_pos then - node = vm:get_node_at({x=plants[n].x, y=plants[n].y-1, z=plants[n].z}) - local is_bottom = minetest.get_item_group(node.name, "double_plant") == 1 - if not is_bottom then - p_pos = area:index(plants[n].x, plants[n].y, plants[n].z) - data[p_pos] = c_air - lvm_used = true - end - end - end - end - - - -- Non-v6 mapgens: - else - -- Set param2 (=color) of grass blocks. - -- Clear snowy grass blocks without snow above to ensure consistency. - local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:dirt_with_grass", "mcl_core:dirt_with_grass_snow"}) - - -- Flat area at y=0 to read biome 3 times faster than 5.3.0.get_biome_data(pos).biome: 43us vs 125us per iteration: - local aream = VoxelArea:new({MinEdge={x=minp.x, y=0, z=minp.z}, MaxEdge={x=maxp.x, y=0, z=maxp.z}}) - for n=1, #nodes do - local n = nodes[n] - local p_pos = area:index(n.x, n.y, n.z) - local p_pos_above = area:index(n.x, n.y+1, n.z) - --local p_pos_below = area:index(n.x, n.y-1, n.z) - local b_pos = aream:index(n.x, 0, n.z) - local bn = minetest.get_biome_name(biomemap[b_pos]) - if bn then - local biome = minetest.registered_biomes[bn] - if biome and biome._mcl_biome_type then - data2[p_pos] = biome._mcl_palette_index - lvm_used = true - end - end - if data[p_pos] == c_dirt_with_grass_snow and p_pos_above and data[p_pos_above] ~= c_top_snow and data[p_pos_above] ~= c_snow_block then - data[p_pos] = c_dirt_with_grass - lvm_used = true - end - end - - -- Set param2 (=color) of sugar cane - nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:reeds"}) - for n=1, #nodes do - local n = nodes[n] - local p_pos = area:index(n.x, n.y, n.z) - local b_pos = aream:index(n.x, 0, n.z) - local bn = minetest.get_biome_name(biomemap[b_pos]) - if bn then - local biome = minetest.registered_biomes[bn] - if biome and biome._mcl_biome_type then - data2[p_pos] = biome._mcl_palette_index - lvm_used = true - end - end - end - end - - -- Nether block fixes: - -- * Replace water with Nether lava. - -- * Replace stone, sand dirt in v6 so the Nether works in v6. - elseif emin.y <= mcl_vars.mg_nether_max and emax.y >= mcl_vars.mg_nether_min then - if mg_name == "v6" then - local nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"}) - for n=1, #nodes do - local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z) - if data[p_pos] == c_water then - data[p_pos] = c_nether_lava - lvm_used = true - elseif data[p_pos] == c_stone then - data[p_pos] = c_netherrack - lvm_used = true - elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then - data[p_pos] = c_soul_sand - lvm_used = true - end - end - else - local nodes = minetest.find_nodes_in_area(emin, emax, {"group:water"}) - for _, n in pairs(nodes) do - data[area:index(n.x, n.y, n.z)] = c_nether_lava - end - end - - -- End block fixes: - -- * Replace water with end stone or air (depending on height). - -- * Remove stone, sand, dirt in v6 so our End map generator works in v6. - -- * Generate spawn platform (End portal destination) - elseif minp.y <= mcl_vars.mg_end_max and maxp.y >= mcl_vars.mg_end_min then - local nodes - if mg_name == "v6" then - nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"}) - else - nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source"}) - end - if #nodes > 0 then - lvm_used = true - for _,n in pairs(nodes) do - data[area:index(n.x, n.y, n.z)] = c_air - end - end - - -- Obsidian spawn platform - if minp.y <= mcl_vars.mg_end_platform_pos.y and maxp.y >= mcl_vars.mg_end_platform_pos.y and - minp.x <= mcl_vars.mg_end_platform_pos.x and maxp.x >= mcl_vars.mg_end_platform_pos.z and - minp.z <= mcl_vars.mg_end_platform_pos.z and maxp.z >= mcl_vars.mg_end_platform_pos.z then - - --local pos1 = {x = math.max(minp.x, mcl_vars.mg_end_platform_pos.x-2), y = math.max(minp.y, mcl_vars.mg_end_platform_pos.y), z = math.max(minp.z, mcl_vars.mg_end_platform_pos.z-2)} - --local pos2 = {x = math.min(maxp.x, mcl_vars.mg_end_platform_pos.x+2), y = math.min(maxp.y, mcl_vars.mg_end_platform_pos.y+2), z = math.min(maxp.z, mcl_vars.mg_end_platform_pos.z+2)} - - for x=math.max(minp.x, mcl_vars.mg_end_platform_pos.x-2), math.min(maxp.x, mcl_vars.mg_end_platform_pos.x+2) do - for z=math.max(minp.z, mcl_vars.mg_end_platform_pos.z-2), math.min(maxp.z, mcl_vars.mg_end_platform_pos.z+2) do - for y=math.max(minp.y, mcl_vars.mg_end_platform_pos.y), math.min(maxp.y, mcl_vars.mg_end_platform_pos.y+2) do - local p_pos = area:index(x, y, z) - if y == mcl_vars.mg_end_platform_pos.y then - data[p_pos] = c_obsidian - else - data[p_pos] = c_air - end - end - end - end - lvm_used = true - end - end - end - - -- Final hackery: Set sun light level in the End. - -- -26912 is at a mapchunk border. - local shadow = true - if minp.y >= -26912 and maxp.y <= mcl_vars.mg_end_max then - vm:set_lighting({day=15, night=15}) - lvm_used = true - end - if minp.y >= mcl_vars.mg_end_min and maxp.y <= -26911 then - shadow = false - lvm_used = true - end - - return lvm_used, shadow -end - -local function basic_node(minp, maxp, blockseed) - if mg_name ~= "singlenode" then - -- Generate special decorations - generate_underground_mushrooms(minp, maxp, blockseed) - generate_nether_decorations(minp, maxp, blockseed) - generate_structures(minp, maxp, blockseed, minetest.get_mapgen_object("biomemap")) - end -end - -mcl_mapgen_core.register_generator("main", basic, basic_node, 1, true) diff --git a/mods/MAPGEN/mcl_mapgen_core/mod.conf b/mods/MAPGEN/mcl_mapgen_core/mod.conf deleted file mode 100644 index 9f7d9ebaa..000000000 --- a/mods/MAPGEN/mcl_mapgen_core/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_mapgen_core -author = Wuzzy -description = The core of the MCL2 mapgen -depends = mcl_init, mcl_core, biomeinfo, mcl_worlds, mcl_cocoas, mcl_sponges, mcl_ocean, mcl_stairs, mcl_monster_eggs, mcl_structures -optional_depends = mclx_core diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua deleted file mode 100644 index 9227680b4..000000000 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ /dev/null @@ -1,134 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) ---local S = minetest.get_translator(modname) - -local mgp = minetest.get_mapgen_params() -local pr = PseudoRandom(mgp.seed) - ---schematics by chmodsayshello -local schems = { - "shipwreck_full_damaged", - "shipwreck_full_normal", - "shipwreck_full_back_damaged", - "shipwreck_half_front", - "shipwreck_half_back", -} - -local function get_supply_loot() - return { - stacks_min = 3, - stacks_max = 10, - items = { - --{ itemstring = "TODO:sus_stew", weight = 10, amount_min = 1, amount_max = 1 }, - { itemstring = "mcl_core:paper", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_farming:wheat_item", weight = 7, amount_min = 8, amount_max = 21 }, - { itemstring = "mcl_farming:carrot_item", weight = 7, amount_min = 4, amount_max = 8 }, - { itemstring = "mcl_farming:potato_item_poison", weight = 7, amount_min = 2, amount_max = 6 }, - { itemstring = "mcl_farming:potato_item", weight = 7, amount_min = 2, amount_max = 6 }, - --{ itemstring = "TODO:moss_block", weight = 7, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_core:coal_lump", weight = 6, amount_min = 2, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 5, amount_min = 5, amount_max = 24 }, - { itemstring = "mcl_farming:potato_item", weight = 3, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_armor:helmet_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - { itemstring = "mcl_armor:chestplate_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - { itemstring = "mcl_armor:leggings_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - { itemstring = "mcl_armor:boots_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - --{ itemstring = "TODO:bamboo", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_farming:pumpkin", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_tnt:tnt", weight = 1, amount_min = 1, amount_max = 2 }, - - } - } -end - -local function get_treasure_loot() - return { - stacks_min = 3, - stacks_max = 10, - items = { - { itemstring = "mcl_core:iron_ingot", weight = 8, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:iron_nugget", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_core:emerald", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_dye:blue", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_core:gold_ingot", weight = 8, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:gold_nugget", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_experience:bottle", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_core:diamond", weight = 8, amount_min = 1, amount_max = 10 }, - } - } -end - -local function fill_chests(p1,p2) - for _,p in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_chests:chest_small"})) do - if minetest.get_meta(p):get_string("infotext") ~= "Chest" then - minetest.registered_nodes["mcl_chests:chest_small"].on_construct(p) - end - local inv = minetest.get_inventory( {type="node", pos=p} ) - local loot = get_supply_loot() - if pr:next(1,10) == 1 then loot = get_treasure_loot() end - mcl_loot.fill_inventory(inv, "main", mcl_loot.get_multi_loot({loot}, pr), pr) - end -end - -local function get_ocean_biomes() - local r = {} - for k,_ in pairs(minetest.registered_biomes) do - if k:find("_ocean") then table.insert(r,k) end - end - return r -end -local function get_beach_biomes() - local r = {} - for k,_ in pairs(minetest.registered_biomes) do - if k:find("_beach") or k:find("_shore") then table.insert(r,k) end - end - return r -end - -minetest.register_node("mcl_shipwrecks:structblock", {drawtype="airlike", walkable = false, pointable = false,groups = {structblock=1,not_in_creative_inventory=1}}) - -minetest.register_decoration({ - decoration = "mcl_shipwrecks:structblock", - deco_type = "simple", - place_on = {"group:sand","mcl_core:gravel"}, - spawn_by = {"group:water"}, - num_spawn_by = 4, - sidelen = 80, - fill_ratio = 0.00002, - flags = "place_center_x, place_center_z, force_placement", - biomes = get_ocean_biomes(), - y_max=mgp.water_level-4, -}) - ---rare beached variant -minetest.register_decoration({ - decoration = "mcl_shipwrecks:structblock", - deco_type = "simple", - place_on = {"group:sand","mcl_core:gravel","group:dirt"}, - spawn_by = {"group:water","air"}, - num_spawn_by = 4, - sidelen = 80, - fill_ratio=0.000001, - flags = "place_center_x, place_center_z, force_placement", - biomes = get_beach_biomes(), - y_max = mgp.water_level + 4, - y_min = mgp.water_level - 1, -}) - -minetest.register_lbm({ - name = "mcl_shipwrecks:struct_lbm", - run_at_every_load = true, - nodenames = {"mcl_shipwrecks:structblock"}, - action = function(pos, node) - minetest.set_node(pos,{name="air"}) - local file = modpath.."/schematics/"..schems[pr:next(1,#schems)]..".mts" - local pp = vector.offset(pos,0,pr:next(-4,-2),0) - mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z", function() - fill_chests(vector.offset(pos,-20,-5,-20),vector.offset(pos,20,15,20)) - end,pr) - end -}) diff --git a/mods/MAPGEN/mcl_shipwrecks/mod.conf b/mods/MAPGEN/mcl_shipwrecks/mod.conf deleted file mode 100644 index 79940c744..000000000 --- a/mods/MAPGEN/mcl_shipwrecks/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_shipwrecks -author = cora -depends = mcl_loot, mcl_structures, mcl_enchanting diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts deleted file mode 100644 index 12f3c9b13..000000000 Binary files a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts deleted file mode 100644 index 5c8a3e105..000000000 Binary files a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_normal.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_normal.mts deleted file mode 100644 index 3d997c83b..000000000 Binary files a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_normal.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts deleted file mode 100644 index f58376f30..000000000 Binary files a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts deleted file mode 100644 index 41efb386b..000000000 Binary files a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_strongholds/init.lua b/mods/MAPGEN/mcl_strongholds/init.lua deleted file mode 100644 index 083172a3c..000000000 --- a/mods/MAPGEN/mcl_strongholds/init.lua +++ /dev/null @@ -1,106 +0,0 @@ --- Generate strongholds. - --- A total of 128 strongholds are generated in rings around the world origin. --- This is the list of rings, starting with the innermost ring first. -local stronghold_rings = { - -- amount: Number of strongholds in ring. - -- min, max: Minimum and maximum distance from (X=0, Z=0). - { amount = 3, min = 1408, max = 2688 }, - { amount = 6, min = 4480, max = 5760 }, - { amount = 10, min = 7552, max = 8832 }, - { amount = 15, min = 10624, max = 11904 }, - { amount = 21, min = 13696, max = 14976 }, - { amount = 28, min = 16768, max = 18048 }, - { amount = 36, min = 19840, max = 21120 }, - { amount = 9, min = 22912, max = 24192 }, -} - -local strongholds = {} -local strongholds_inited = false - -local mg_name = minetest.get_mapgen_setting("mg_name") -local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true" - --- Determine the stronghold positions and store them into the strongholds table. --- The stronghold positions are based on the world seed. --- The actual position might be offset by a few blocks because it might be shifted --- to make sure the end portal room is completely within the boundaries of a mapchunk. -local function init_strongholds() - if strongholds_inited then - return - end - -- Don't generate strongholds in singlenode - if mg_name == "singlenode" then - strongholds_inited = true - return - end - local seed = tonumber(minetest.get_mapgen_setting("seed")) - local pr = PseudoRandom(seed) - for s=1, #stronghold_rings do - local ring = stronghold_rings[s] - - -- Get random angle - local angle = pr:next() - -- Scale angle to 0 .. 2*math.pi - angle = (angle / 32767) * (math.pi*2) - for a=1, ring.amount do - local dist = pr:next(ring.min, ring.max) - local y - if superflat then - y = mcl_vars.mg_bedrock_overworld_max + 3 - else - y = pr:next(mcl_vars.mg_bedrock_overworld_max+1, mcl_vars.mg_overworld_min+48) - end - local pos = { x = math.cos(angle) * dist, y = y, z = math.sin(angle) * dist } - pos = vector.round(pos) - table.insert(strongholds, { pos = pos, generated = false }) - - -- Rotate angle by (360 / amount) degrees. - -- This will cause the angles to be evenly distributed in the stronghold ring - angle = math.fmod(angle + ((math.pi*2) / ring.amount), math.pi*2) - end - end - - mcl_structures.register_structures("stronghold", table.copy(strongholds)) - - strongholds_inited = true -end - --- Stronghold generation for register_on_generated. -local function generate_strongholds(minp, maxp, blockseed) - local pr = PseudoRandom(blockseed) - for s=1, #strongholds do - if not strongholds[s].generated then - local pos = strongholds[s].pos - if minp.x <= pos.x and maxp.x >= pos.x and minp.z <= pos.z and maxp.z >= pos.z and minp.y <= pos.y and maxp.y >= pos.y then - -- Make sure the end portal room is completely within the current mapchunk - -- The original pos is changed intentionally. - if pos.x - 6 < minp.x then - pos.x = minp.x + 7 - end - if pos.x + 6 > maxp.x then - pos.x = maxp.x - 7 - end - if pos.y - 4 < minp.y then - pos.y = minp.y + 5 - end - if pos.y + 4 > maxp.y then - pos.y = maxp.y - 5 - end - if pos.z - 6 < minp.z then - pos.z = minp.z + 7 - end - if pos.z + 6 > maxp.z then - pos.z = maxp.z - 7 - end - - mcl_structures.call_struct(pos, "end_portal_shrine", nil, pr) - strongholds[s].generated = true - end - end - end -end - -init_strongholds() - -mcl_mapgen_core.register_generator("strongholds", nil, generate_strongholds, 999999) diff --git a/mods/MAPGEN/mcl_strongholds/mod.conf b/mods/MAPGEN/mcl_strongholds/mod.conf deleted file mode 100644 index 8edec9a51..000000000 --- a/mods/MAPGEN/mcl_strongholds/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_strongholds -author = Wuzzy -description = Generates strongholds with end portals in the Overworld -depends = mcl_init, mcl_structures, mcl_mapgen_core diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua deleted file mode 100644 index 5d3ecac6c..000000000 --- a/mods/MAPGEN/mcl_structures/init.lua +++ /dev/null @@ -1,630 +0,0 @@ -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) -local modpath = minetest.get_modpath(modname) - -mcl_structures = {} - -local rotations = { - "0", - "90", - "180", - "270" -} - -local function ecb_place(blockpos, action, calls_remaining, param) - if calls_remaining >= 1 then return end - minetest.place_schematic(param.pos, param.schematic, param.rotation, param.replacements, param.force_placement, param.flags) - if param.after_placement_callback and param.p1 and param.p2 then - param.after_placement_callback(param.p1, param.p2, param.size, param.rotation, param.pr, param.callback_param) - end -end - -function mcl_structures.place_schematic(pos, schematic, rotation, replacements, force_placement, flags, after_placement_callback, pr, callback_param) - local s = loadstring(minetest.serialize_schematic(schematic, "lua", {lua_use_comments = false, lua_num_indent_spaces = 0}) .. " return schematic")() - if s and s.size then - local x, z = s.size.x, s.size.z - if rotation then - if rotation == "random" and pr then - rotation = rotations[pr:next(1,#rotations)] - end - if rotation == "random" then - x = math.max(x, z) - z = x - elseif rotation == "90" or rotation == "270" then - x, z = z, x - end - end - local p1 = {x=pos.x , y=pos.y , z=pos.z } - local p2 = {x=pos.x+x-1, y=pos.y+s.size.y-1, z=pos.z+z-1} - minetest.log("verbose", "[mcl_structures] size=" ..minetest.pos_to_string(s.size) .. ", rotation=" .. tostring(rotation) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) - local param = {pos=vector.new(pos), schematic=s, rotation=rotation, replacements=replacements, force_placement=force_placement, flags=flags, p1=p1, p2=p2, after_placement_callback = after_placement_callback, size=vector.new(s.size), pr=pr, callback_param=callback_param} - minetest.emerge_area(p1, p2, ecb_place, param) - end -end - -function mcl_structures.get_struct(file) - local localfile = modpath.."/schematics/"..file - local file, errorload = io.open(localfile, "rb") - if errorload then - minetest.log("error", "[mcl_structures] Could not open this struct: "..localfile) - return nil - end - - local allnode = file:read("*a") - file:close() - - return allnode -end - --- Call on_construct on pos. --- Useful to init chests from formspec. -local function init_node_construct(pos) - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] - if def and def.on_construct then - def.on_construct(pos) - return true - end - return false -end - --- The call of Struct -function mcl_structures.call_struct(pos, struct_style, rotation, pr) - minetest.log("action","[mcl_structures] call_struct " .. struct_style.." at "..minetest.pos_to_string(pos)) - if not rotation then - rotation = "random" - end - if struct_style == "desert_temple" then - return mcl_structures.generate_desert_temple(pos, rotation, pr) - elseif struct_style == "desert_well" then - return mcl_structures.generate_desert_well(pos, rotation) - elseif struct_style == "igloo" then - return mcl_structures.generate_igloo(pos, rotation, pr) - elseif struct_style == "witch_hut" then - return mcl_structures.generate_witch_hut(pos, rotation) - elseif struct_style == "ice_spike_small" then - return mcl_structures.generate_ice_spike_small(pos, rotation) - elseif struct_style == "ice_spike_large" then - return mcl_structures.generate_ice_spike_large(pos, rotation) - elseif struct_style == "boulder" then - return mcl_structures.generate_boulder(pos, rotation, pr) - elseif struct_style == "fossil" then - return mcl_structures.generate_fossil(pos, rotation, pr) - elseif struct_style == "end_exit_portal" then - return mcl_structures.generate_end_exit_portal(pos, rotation) - elseif struct_style == "end_exit_portal_open" then - return mcl_structures.generate_end_exit_portal_open(pos, rotation) - elseif struct_style == "end_gateway_portal" then - return mcl_structures.generate_end_gateway_portal(pos, rotation) - elseif struct_style == "end_portal_shrine" then - return mcl_structures.generate_end_portal_shrine(pos, rotation, pr) - end -end - -function mcl_structures.generate_desert_well(pos, rot) - local newpos = {x=pos.x,y=pos.y-2,z=pos.z} - local path = modpath.."/schematics/mcl_structures_desert_well.mts" - return mcl_structures.place_schematic(newpos, path, rot or "0", nil, true) -end - -function mcl_structures.generate_igloo(pos, rotation, pr) - -- Place igloo - local success, rotation = mcl_structures.generate_igloo_top(pos, pr) - -- Place igloo basement with 50% chance - local r = pr:next(1,2) - if r == 1 then - -- Select basement depth - local dim = mcl_worlds.pos_to_dimension(pos) - --local buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) - local buffer - if dim == "nether" then - buffer = pos.y - (mcl_vars.mg_lava_nether_max + 10) - elseif dim == "end" then - buffer = pos.y - (mcl_vars.mg_end_min + 1) - elseif dim == "overworld" then - buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) - else - return success - end - if buffer <= 19 then - return success - end - local depth = pr:next(19, buffer) - local bpos = {x=pos.x, y=pos.y-depth, z=pos.z} - -- trapdoor position - local tpos - local dir, tdir - if rotation == "0" then - dir = {x=-1, y=0, z=0} - tdir = {x=1, y=0, z=0} - tpos = {x=pos.x+7, y=pos.y-1, z=pos.z+3} - elseif rotation == "90" then - dir = {x=0, y=0, z=-1} - tdir = {x=0, y=0, z=-1} - tpos = {x=pos.x+3, y=pos.y-1, z=pos.z+1} - elseif rotation == "180" then - dir = {x=1, y=0, z=0} - tdir = {x=-1, y=0, z=0} - tpos = {x=pos.x+1, y=pos.y-1, z=pos.z+3} - elseif rotation == "270" then - dir = {x=0, y=0, z=1} - tdir = {x=0, y=0, z=1} - tpos = {x=pos.x+3, y=pos.y-1, z=pos.z+7} - else - return success - end - local function set_brick(pos) - local c = pr:next(1, 3) -- cracked chance - local m = pr:next(1, 10) -- chance for monster egg - local brick - if m == 1 then - if c == 1 then - brick = "mcl_monster_eggs:monster_egg_stonebrickcracked" - else - brick = "mcl_monster_eggs:monster_egg_stonebrick" - end - else - if c == 1 then - brick = "mcl_core:stonebrickcracked" - else - brick = "mcl_core:stonebrick" - end - end - minetest.set_node(pos, {name=brick}) - end - local ladder_param2 = minetest.dir_to_wallmounted(tdir) - local real_depth = 0 - -- Check how deep we can actuall dig - for y=1, depth-5 do - real_depth = real_depth + 1 - local node = minetest.get_node({x=tpos.x,y=tpos.y-y,z=tpos.z}) - local def = minetest.registered_nodes[node.name] - if not (def and def.walkable and def.liquidtype == "none" and def.is_ground_content) then - bpos.y = tpos.y-y+1 - break - end - end - if real_depth <= 6 then - return success - end - -- Generate ladder to basement - for y=1, real_depth-1 do - set_brick({x=tpos.x-1,y=tpos.y-y,z=tpos.z }) - set_brick({x=tpos.x+1,y=tpos.y-y,z=tpos.z }) - set_brick({x=tpos.x ,y=tpos.y-y,z=tpos.z-1}) - set_brick({x=tpos.x ,y=tpos.y-y,z=tpos.z+1}) - minetest.set_node({x=tpos.x,y=tpos.y-y,z=tpos.z}, {name="mcl_core:ladder", param2=ladder_param2}) - end - -- Place basement - mcl_structures.generate_igloo_basement(bpos, rotation, pr) - -- Place hidden trapdoor - minetest.after(5, function(tpos, dir) - minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2 - end, tpos, dir) - end - return success -end - -function mcl_structures.generate_igloo_top(pos, pr) - -- FIXME: This spawns bookshelf instead of furnace. Fix this! - -- Furnace does ot work atm because apparently meta is not set. :-( - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - local path = modpath.."/schematics/mcl_structures_igloo_top.mts" - local rotation = tostring(pr:next(0,3)*90) - return mcl_structures.place_schematic(newpos, path, rotation, nil, true), rotation -end - -local function igloo_placement_callback(p1, p2, size, orientation, pr) - local chest_offset - if orientation == "0" then - chest_offset = {x=5, y=1, z=5} - elseif orientation == "90" then - chest_offset = {x=5, y=1, z=3} - elseif orientation == "180" then - chest_offset = {x=3, y=1, z=1} - elseif orientation == "270" then - chest_offset = {x=1, y=1, z=5} - else - return - end - --local size = {x=9,y=5,z=7} - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 1, - stacks_max = 1, - items = { - { itemstring = "mcl_core:apple_gold", weight = 1 }, - } - }, - { - stacks_min = 2, - stacks_max = 8, - items = { - { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_core:apple", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_farming:wheat_item", weight = 10, amount_min = 2, amount_max = 3 }, - { itemstring = "mcl_core:gold_nugget", weight = 10, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10 }, - { itemstring = "mcl_tools:axe_stone", weight = 2 }, - { itemstring = "mcl_core:emerald", weight = 1 }, - } - }}, pr) - - local chest_pos = vector.add(p1, chest_offset) - init_node_construct(chest_pos) - local meta = minetest.get_meta(chest_pos) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems, pr) -end - -function mcl_structures.generate_igloo_basement(pos, orientation, pr) - -- TODO: Add brewing stand - -- TODO: Add monster eggs - -- TODO: Spawn villager and zombie villager - local path = modpath.."/schematics/mcl_structures_igloo_basement.mts" - mcl_structures.place_schematic(pos, path, orientation, nil, true, nil, igloo_placement_callback, pr) -end - -function mcl_structures.generate_boulder(pos, rotation, pr) - -- Choose between 2 boulder sizes (2×2×2 or 3×3×3) - local r = pr:next(1, 10) - local path - if r <= 3 then - path = modpath.."/schematics/mcl_structures_boulder_small.mts" - else - path = modpath.."/schematics/mcl_structures_boulder.mts" - end - - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - - return minetest.place_schematic(newpos, path, rotation) -- don't serialize schematics for registered biome decorations, for MT 5.4.0, https://github.com/minetest/minetest/issues/10995 -end - -local function spawn_witch(p1,p2) - local c = minetest.find_node_near(p1,15,{"mcl_cauldrons:cauldron"}) - if c then - local nn = minetest.find_nodes_in_area_under_air(vector.new(p1.x,c.y-1,p1.z),vector.new(p2.x,c.y-1,p2.z),{"mcl_core:sprucewood"}) - local witch = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:witch"):get_luaentity() - local cat = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:cat"):get_luaentity() - witch._home = c - witch.can_despawn = false - cat.object:set_properties({textures = {"mobs_mc_cat_black.png"}}) - cat.owner = "!witch!" --so it's not claimable by player - cat._home = c - cat.can_despawn = false - return - end -end - -local function hut_placement_callback(p1, p2, size, orientation, pr) - if not p1 or not p2 then return end - local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") - for i = 1, #legs do - while minetest.get_item_group(mcl_vars.get_node({x=legs[i].x, y=legs[i].y-1, z=legs[i].z}, true, 333333).name, "water") ~= 0 do - legs[i].y = legs[i].y - 1 - minetest.swap_node(legs[i], {name = "mcl_core:tree", param2 = 2}) - end - end - spawn_witch(p1,p2) -end - -function mcl_structures.generate_witch_hut(pos, rotation, pr) - local path = modpath.."/schematics/mcl_structures_witch_hut.mts" - mcl_structures.place_schematic(pos, path, rotation, nil, true, nil, hut_placement_callback, pr) -end - -function mcl_structures.generate_ice_spike_small(pos, rotation) - local path = modpath.."/schematics/mcl_structures_ice_spike_small.mts" - return minetest.place_schematic(pos, path, rotation or "random", nil, false) -- don't serialize schematics for registered biome decorations, for MT 5.4.0 -end - -function mcl_structures.generate_ice_spike_large(pos, rotation) - local path = modpath.."/schematics/mcl_structures_ice_spike_large.mts" - return minetest.place_schematic(pos, path, rotation or "random", nil, false) -- don't serialize schematics for registered biome decorations, for MT 5.4.0 -end - -function mcl_structures.generate_fossil(pos, rotation, pr) - -- Generates one out of 8 possible fossil pieces - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - local fossils = { - "mcl_structures_fossil_skull_1.mts", -- 4×5×5 - "mcl_structures_fossil_skull_2.mts", -- 5×5×5 - "mcl_structures_fossil_skull_3.mts", -- 5×5×7 - "mcl_structures_fossil_skull_4.mts", -- 7×5×5 - "mcl_structures_fossil_spine_1.mts", -- 3×3×13 - "mcl_structures_fossil_spine_2.mts", -- 5×4×13 - "mcl_structures_fossil_spine_3.mts", -- 7×4×13 - "mcl_structures_fossil_spine_4.mts", -- 8×5×13 - } - local r = pr:next(1, #fossils) - local path = modpath.."/schematics/"..fossils[r] - return mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true) -end - -function mcl_structures.generate_end_exit_portal(pos, rot) - local path = modpath.."/schematics/mcl_structures_end_exit_portal.mts" - return mcl_structures.place_schematic(pos, path, rot or "0", {["mcl_portals:portal_end"] = "air"}, true) -end - -function mcl_structures.generate_end_exit_portal_open(pos, rot) - local path = modpath.."/schematics/mcl_structures_end_exit_portal.mts" - return mcl_structures.place_schematic(pos, path, rot or "0", nil, true) -end - -function mcl_structures.generate_end_gateway_portal(pos, rot) - local path = modpath.."/schematics/mcl_structures_end_gateway_portal.mts" - return mcl_structures.place_schematic(pos, path, rot or "0", nil, true) -end - -local function shrine_placement_callback(p1, p2, size, rotation, pr) - -- Find and setup spawner with silverfish - local spawners = minetest.find_nodes_in_area(p1, p2, "mcl_mobspawners:spawner") - for s=1, #spawners do - --local meta = minetest.get_meta(spawners[s]) - mcl_mobspawners.setup_spawner(spawners[s], "mobs_mc:silverfish") - end - - -- Shuffle stone brick types - local bricks = minetest.find_nodes_in_area(p1, p2, "mcl_core:stonebrick") - for b=1, #bricks do - local r_bricktype = pr:next(1, 100) - local r_infested = pr:next(1, 100) - local bricktype - if r_infested <= 5 then - if r_bricktype <= 30 then -- 30% - bricktype = "mcl_monster_eggs:monster_egg_stonebrickmossy" - elseif r_bricktype <= 50 then -- 20% - bricktype = "mcl_monster_eggs:monster_egg_stonebrickcracked" - else -- 50% - bricktype = "mcl_monster_eggs:monster_egg_stonebrick" - end - else - if r_bricktype <= 30 then -- 30% - bricktype = "mcl_core:stonebrickmossy" - elseif r_bricktype <= 50 then -- 20% - bricktype = "mcl_core:stonebrickcracked" - end - -- 50% stonebrick (no change necessary) - end - if bricktype then - minetest.set_node(bricks[b], { name = bricktype }) - end - end - - -- Also replace stairs - local stairs = minetest.find_nodes_in_area(p1, p2, {"mcl_stairs:stair_stonebrick", "mcl_stairs:stair_stonebrick_outer", "mcl_stairs:stair_stonebrick_inner"}) - for s=1, #stairs do - local stair = minetest.get_node(stairs[s]) - local r_type = pr:next(1, 100) - if r_type <= 30 then -- 30% mossy - if stair.name == "mcl_stairs:stair_stonebrick" then - stair.name = "mcl_stairs:stair_stonebrickmossy" - elseif stair.name == "mcl_stairs:stair_stonebrick_outer" then - stair.name = "mcl_stairs:stair_stonebrickmossy_outer" - elseif stair.name == "mcl_stairs:stair_stonebrick_inner" then - stair.name = "mcl_stairs:stair_stonebrickmossy_inner" - end - minetest.set_node(stairs[s], stair) - elseif r_type <= 50 then -- 20% cracky - if stair.name == "mcl_stairs:stair_stonebrick" then - stair.name = "mcl_stairs:stair_stonebrickcracked" - elseif stair.name == "mcl_stairs:stair_stonebrick_outer" then - stair.name = "mcl_stairs:stair_stonebrickcracked_outer" - elseif stair.name == "mcl_stairs:stair_stonebrick_inner" then - stair.name = "mcl_stairs:stair_stonebrickcracked_inner" - end - minetest.set_node(stairs[s], stair) - end - -- 50% no change - end - - -- Randomly add ender eyes into end portal frames, but never fill the entire frame - local frames = minetest.find_nodes_in_area(p1, p2, "mcl_portals:end_portal_frame") - local eyes = 0 - for f=1, #frames do - local r_eye = pr:next(1, 10) - if r_eye == 1 then - eyes = eyes + 1 - if eyes < #frames then - local frame_node = minetest.get_node(frames[f]) - frame_node.name = "mcl_portals:end_portal_frame_eye" - minetest.set_node(frames[f], frame_node) - end - end - end -end - -function mcl_structures.generate_end_portal_shrine(pos, rotation, pr) - local offset = {x=6, y=4, z=6} - --local size = {x=13, y=8, z=13} - local newpos = { x = pos.x - offset.x, y = pos.y, z = pos.z - offset.z } - - local path = modpath.."/schematics/mcl_structures_end_portal_room_simple.mts" - mcl_structures.place_schematic(newpos, path, rotation or "0", nil, true, nil, shrine_placement_callback, pr) -end - -local function temple_placement_callback(p1, p2, size, rotation, pr) - - -- Delete cacti leftovers: - local cactus_nodes = minetest.find_nodes_in_area_under_air(p1, p2, "mcl_core:cactus") - if cactus_nodes and #cactus_nodes > 0 then - for _, pos in pairs(cactus_nodes) do - local node_below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) - if node_below and node_below.name == "mcl_core:sandstone" then - minetest.swap_node(pos, {name="air"}) - end - end - end - - -- Find chests. - -- FIXME: Searching this large area just for the chets is not efficient. Need a better way to find the chests; - -- probably let's just infer it from newpos because the schematic always the same. - local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:chest") - - -- Add desert temple loot into chests - for c=1, #chests do - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 2, - stacks_max = 4, - items = { - { itemstring = "mcl_mobitems:bone", weight = 25, amount_min = 4, amount_max=6 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 25, amount_min = 3, amount_max=7 }, - { itemstring = "mcl_mobitems:spider_eye", weight = 25, amount_min = 1, amount_max=3 }, - { itemstring = "mcl_books:book", weight = 20, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_mobitems:saddle", weight = 20, }, - { itemstring = "mcl_core:apple_gold", weight = 20, }, - { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, - { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "", weight = 15, }, - { itemstring = "mcl_mobitems:iron_horse_armor", weight = 15, }, - { itemstring = "mcl_mobitems:gold_horse_armor", weight = 10, }, - { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5, }, - { itemstring = "mcl_core:diamond", weight = 5, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, - } - }, - { - stacks_min = 4, - stacks_max = 4, - items = { - { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_core:sand", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, - } - }}, pr) - init_node_construct(chests[c]) - local meta = minetest.get_meta(chests[c]) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems, pr) - end - - -- Initialize pressure plates and randomly remove up to 5 plates - local pplates = minetest.find_nodes_in_area(p1, p2, "mesecons_pressureplates:pressure_plate_stone_off") - local pplates_remove = 5 - for p=1, #pplates do - if pplates_remove > 0 and pr:next(1, 100) >= 50 then - -- Remove plate - minetest.remove_node(pplates[p]) - pplates_remove = pplates_remove - 1 - else - -- Initialize plate - minetest.registered_nodes["mesecons_pressureplates:pressure_plate_stone_off"].on_construct(pplates[p]) - end - end -end - -function mcl_structures.generate_desert_temple(pos, rotation, pr) - -- No Generating for the temple ... Why using it ? No Change - local path = modpath.."/schematics/mcl_structures_desert_temple.mts" - local newpos = {x=pos.x,y=pos.y-12,z=pos.z} - --local size = {x=22, y=24, z=22} - if newpos == nil then - return - end - mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true, nil, temple_placement_callback, pr) -end - -local registered_structures = {} - ---[[ Returns a table of structure of the specified type. -Currently the only valid parameter is "stronghold". -Format of return value: -{ - { pos = , generated= }, -- first structure - { pos = , generated= }, -- second structure - -- and so on -} - -TODO: Implement this function for all other structure types as well. -]] -function mcl_structures.get_registered_structures(structure_type) - if registered_structures[structure_type] then - return table.copy(registered_structures[structure_type]) - else - return {} - end -end - --- Register a structures table for the given type. The table format is the same as for --- mcl_structures.get_registered_structures. -function mcl_structures.register_structures(structure_type, structures) - registered_structures[structure_type] = structures -end - -local function dir_to_rotation(dir) - local ax, az = math.abs(dir.x), math.abs(dir.z) - if ax > az then - if dir.x < 0 then - return "270" - end - return "90" - end - if dir.z < 0 then - return "180" - end - return "0" -end - --- Debug command -minetest.register_chatcommand("spawnstruct", { - params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", - description = S("Generate a pre-defined structure near your position."), - privs = {debug = true}, - func = function(name, param) - local player = minetest.get_player_by_name(name) - if not player then return end - local pos = player:get_pos() - if not pos then return end - pos = vector.round(pos) - local dir = minetest.yaw_to_dir(player:get_look_horizontal()) - local rot = dir_to_rotation(dir) - local pr = PseudoRandom(pos.x+pos.y+pos.z) - local errord = false - local message = S("Structure placed.") - if param == "desert_temple" then - mcl_structures.generate_desert_temple(pos, rot, pr) - elseif param == "desert_well" then - mcl_structures.generate_desert_well(pos, rot) - elseif param == "igloo" then - mcl_structures.generate_igloo(pos, rot, pr) - elseif param == "witch_hut" then - mcl_structures.generate_witch_hut(pos, rot, pr) - elseif param == "boulder" then - mcl_structures.generate_boulder(pos, rot, pr) - elseif param == "fossil" then - mcl_structures.generate_fossil(pos, rot, pr) - elseif param == "ice_spike_small" then - mcl_structures.generate_ice_spike_small(pos, rot, pr) - elseif param == "ice_spike_large" then - mcl_structures.generate_ice_spike_large(pos, rot, pr) - elseif param == "end_exit_portal" then - mcl_structures.generate_end_exit_portal(pos, rot, pr) - elseif param == "end_exit_portal_open" then - mcl_structures.generate_end_exit_portal_open(pos, rot, pr) - elseif param == "end_gateway_portal" then - mcl_structures.generate_end_gateway_portal(pos, rot, pr) - elseif param == "end_portal_shrine" then - mcl_structures.generate_end_portal_shrine(pos, rot, pr) - elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then - mcl_dungeons.spawn_dungeon(pos, rot, pr) - elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then - mcl_portals.spawn_nether_portal(pos, rot, pr, name) - elseif param == "" then - message = S("Error: No structure type given. Please use “/spawnstruct ”.") - errord = true - else - message = S("Error: Unknown structure type. Please use “/spawnstruct ”.") - errord = true - end - minetest.chat_send_player(name, message) - if errord then - minetest.chat_send_player(name, S("Use /help spawnstruct to see a list of avaiable types.")) - end - end -}) diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.de.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.de.tr deleted file mode 100644 index 3245b934c..000000000 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.de.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_structures -Generate a pre-defined structure near your position.=Erzeugt ein vordefiniertes Gebäude in Ihrer Nähe. -Structure placed.=Gebäude platziert. -Error: No structure type given. Please use “/spawnstruct ”.=Fehler: Kein Gebäudetyp angegeben. Bitte benutzen Sie „/spawnstruct “. -Error: Unknown structure type. Please use “/spawnstruct ”.=Fehler: Unbekannter Gebäudetyp. Bitte benutzen Sie „/spawnstruct “. -Use /help spawnstruct to see a list of avaiable types.=Benutzen Sie „/help spawnstruct“, um eine Liste der vorhandenen Typen zu sehen. diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.es.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.es.tr deleted file mode 100644 index d73d81466..000000000 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.es.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_structures -Generate a pre-defined structure near your position.=Genere una estructura predefinida cerca de su posición. -Structure placed.=Estructura colocada. -Error: No structure type given. Please use “/spawnstruct ”.=Error: no se especifica ningún tipo de estructura. Utilice "/spawnstruct ". -Error: Unknown structure type. Please use “/spawnstruct ”.=Error: tipo de estructura desconocido. Utilice "/spawnstruct ". -Use /help spawnstruct to see a list of avaiable types.=Utiliza "/help spawnstruct" para ver una lista de los tipos disponibles. diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.fr.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.fr.tr deleted file mode 100644 index 56b3c3ae0..000000000 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.fr.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_structures -Generate a pre-defined structure near your position.=Générez une structure prédéfinie près de votre position. -Structure placed.=Structure placée. -Village built. WARNING: Villages are experimental and might have bugs.=Village construit. AVERTISSEMENT: les villages sont expérimentaux et peuvent avoir des bogues. -Error: No structure type given. Please use “/spawnstruct ”.=Erreur: Aucun type de structure indiqué. Veuillez utiliser "/spawnstruct ". -Error: Unknown structure type. Please use “/spawnstruct ”.=Erreur: Type de structure inconnu. Veuillez utiliser "/spawnstruct ". -Use /help spawnstruct to see a list of avaiable types.=Utilisez /help spawnstruct pour voir une liste des types disponibles. diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.pl.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.pl.tr deleted file mode 100644 index a0a1c69f2..000000000 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_structures -Generate a pre-defined structure near your position.=Wygeneruj predefiniowaną strukturę nieopodal twojej pozycji. -Structure placed.=Struktura postawiona. -Village built. WARNING: Villages are experimental and might have bugs.=Wioska zbudowana. UWAGA: Wioski są eksperymentalne i mogą występować błędy. -Error: No structure type given. Please use “/spawnstruct ”.=Błąd: Nie podano typu struktury. Użyj "/spawnstruct ". -Error: Unknown structure type. Please use “/spawnstruct ”.=Błąd: Nieznany typ struktury. Użyj "/spawnstruct ". -Use /help spawnstruct to see a list of avaiable types.=Użyj /help spawnstruct aby zobaczyć listę dostępnych typów. - diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.ru.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.ru.tr deleted file mode 100644 index 248de695c..000000000 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.ru.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_structures -Generate a pre-defined structure near your position.=Генерирует поблизости заранее определённое строение. -Structure placed.=Строение размещено. -Village built. WARNING: Villages are experimental and might have bugs.=Деревня построена. ВНИМАНИЕ: Деревни экспериментальны и могут содержать ошибки. -Error: No structure type given. Please use “/spawnstruct ”.=Ошибка: Не задан тип строения. Пожалуйста, используйте “/spawnstruct <тип>”. -Error: Unknown structure type. Please use “/spawnstruct ”.=Ошибка: Неизвестный тип строения. Пожалуйста, используйте “/spawnstruct <тип>”. -Use /help spawnstruct to see a list of avaiable types.=Используйте /help spawnstruct, чтобы увидеть список доступных типов. diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.zh_TW.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.zh_TW.tr deleted file mode 100644 index 49796e520..000000000 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.zh_TW.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_structures -Generate a pre-defined structure near your position.=在你的位置附近生成一個預定義的結構。 -Structure placed.=結構已生成。 -Village built. WARNING: Villages are experimental and might have bugs.=村莊已生成。警告:村莊是實驗性的,可能會有錯誤。 -Error: No structure type given. Please use “/spawnstruct ”.=錯誤:未提供結構類型。請使用「/spawnstruct <種類>」。 -Error: Unknown structure type. Please use “/spawnstruct ”.=錯誤:未知結構類型。請使用「/spawnstruct <種類>」。 -Use /help spawnstruct to see a list of avaiable types.=使用「/help spawnstruct」以查看可用結構列表。 diff --git a/mods/MAPGEN/mcl_structures/locale/template.txt b/mods/MAPGEN/mcl_structures/locale/template.txt deleted file mode 100644 index 76f85c4c9..000000000 --- a/mods/MAPGEN/mcl_structures/locale/template.txt +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_structures -Generate a pre-defined structure near your position.= -Structure placed.= -Village built. WARNING: Villages are experimental and might have bugs.= -Error: No structure type given. Please use “/spawnstruct ”.= -Error: Unknown structure type. Please use “/spawnstruct ”.= -Use /help spawnstruct to see a list of avaiable types.= diff --git a/mods/MAPGEN/mcl_structures/mod.conf b/mods/MAPGEN/mcl_structures/mod.conf deleted file mode 100644 index 3150c7cec..000000000 --- a/mods/MAPGEN/mcl_structures/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_structures -author = Wuzzy -description = Structures for MCL2 -depends = mcl_loot diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_boulder.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_boulder.mts deleted file mode 100644 index 0f4aa6daa..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_boulder.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_boulder_small.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_boulder_small.mts deleted file mode 100644 index 8340a9fe3..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_boulder_small.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_temple.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_temple.mts deleted file mode 100644 index 79a58637b..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_temple.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_well.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_well.mts deleted file mode 100644 index 60cb373ad..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_well.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_exit_portal.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_exit_portal.mts deleted file mode 100644 index bc24f800a..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_exit_portal.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_gateway_portal.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_gateway_portal.mts deleted file mode 100644 index 24b06a1c8..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_gateway_portal.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_portal_room_simple.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_portal_room_simple.mts deleted file mode 100644 index 73c327ce7..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_portal_room_simple.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_1.mts deleted file mode 100644 index a9584ee00..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_1.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_2.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_2.mts deleted file mode 100644 index 78269c339..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_2.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_3.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_3.mts deleted file mode 100644 index 17e6a615d..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_3.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_4.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_4.mts deleted file mode 100644 index c3be1676e..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_skull_4.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_1.mts deleted file mode 100644 index 7ec39bacf..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_1.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_2.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_2.mts deleted file mode 100644 index bafc88993..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_2.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_3.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_3.mts deleted file mode 100644 index 39809dda9..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_3.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_4.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_4.mts deleted file mode 100644 index 2acfefe70..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_fossil_spine_4.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ice_spike_large.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ice_spike_large.mts deleted file mode 100644 index 75b086557..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ice_spike_large.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ice_spike_small.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ice_spike_small.mts deleted file mode 100644 index 7407c8f72..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ice_spike_small.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_igloo_basement.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_igloo_basement.mts deleted file mode 100644 index c2a774e78..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_igloo_basement.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_igloo_top.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_igloo_top.mts deleted file mode 100644 index e3705236e..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_igloo_top.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_witch_hut.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_witch_hut.mts deleted file mode 100644 index ee5f96731..000000000 Binary files a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_witch_hut.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/README.txt b/mods/MAPGEN/mcl_villages/README.txt deleted file mode 100644 index b266a131a..000000000 --- a/mods/MAPGEN/mcl_villages/README.txt +++ /dev/null @@ -1,45 +0,0 @@ -MCL_Villages: -============================ -A fork of Rochambeau's "Settlements" mod converted for use in MineClone2. - --------------- -Using the mod: --------------- -This mod adds settlements on world generation. - -And, in Creative Mode; also comes with a debug tool for spawning in villages. - - -------------- -MCL2 Credits: -------------- -Code forked from: https://github.com/MysticTempest/settlements/tree/mcl_villages - Commit: e24b4be -================================================================================ -Basic conversion of Settlements mod for compatibility with MineClone2, plus new schematics: MysticTempest - -Seed-based Village Generation, multi-threading, bugfixes: kay27 - - - -========================= -version: 0.1 alpha - -License of source code: WTFPL ------------------------------ -(c) Copyright Rochambeau (2018) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - - -Credits: --------------- -This mod is based on "ruins" by BlockMen - -Completely new schematics for MineClone2: -MysticTempest - CC-BY-SA 4.0 - diff --git a/mods/MAPGEN/mcl_villages/buildings.lua b/mods/MAPGEN/mcl_villages/buildings.lua deleted file mode 100644 index 67a0785ce..000000000 --- a/mods/MAPGEN/mcl_villages/buildings.lua +++ /dev/null @@ -1,332 +0,0 @@ ---[[ -------------------------------------------------------------------------------- --- build schematic, replace material, rotation -------------------------------------------------------------------------------- -function settlements.build_schematic(vm, data, va, pos, building, replace_wall, name) - -- get building node material for better integration to surrounding - local platform_material = mcl_vars.get_node(pos) - if not platform_material or (platform_material.name == "air" or platform_material.name == "ignore") then - return - end - platform_material = platform_material.name - -- pick random material - local material = wallmaterial[math.random(1,#wallmaterial)] - -- schematic conversion to lua - local schem_lua = minetest.serialize_schematic(building, - "lua", - {lua_use_comments = false, lua_num_indent_spaces = 0}).." return schematic" - -- replace material - if replace_wall == "y" then - schem_lua = schem_lua:gsub("mcl_core:cobble", material) - end - schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", - platform_material) - --- Disable special junglewood for now. - -- special material for spawning npcs - -- schem_lua = schem_lua:gsub("mcl_core:junglewood", - -- "settlements:junglewood") --- - - -- format schematic string - local schematic = loadstring(schem_lua)() - -- build foundation for the building an make room above - local width = schematic["size"]["x"] - local depth = schematic["size"]["z"] - local height = schematic["size"]["y"] - local possible_rotations = {"0", "90", "180", "270"} - local rotation = possible_rotations[ math.random( #possible_rotations ) ] - settlements.foundation( - pos, - width, - depth, - height, - rotation) - vm:set_data(data) - -- place schematic - - minetest.place_schematic_on_vmanip( - vm, - pos, - schematic, - rotation, - nil, - true) - vm:write_to_map(true) -end]] -------------------------------------------------------------------------------- --- initialize settlement_info -------------------------------------------------------------------------------- -function settlements.initialize_settlement_info(pr) - local count_buildings = {} - - -- count_buildings table reset - for k,v in pairs(settlements.schematic_table) do - count_buildings[v["name"]] = 0 - end - - -- randomize number of buildings - local number_of_buildings = pr:next(10, 25) - local number_built = 1 - settlements.debug("Village ".. number_of_buildings) - - return count_buildings, number_of_buildings, number_built -end -------------------------------------------------------------------------------- --- fill settlement_info --------------------------------------------------------------------------------- -function settlements.create_site_plan(maxp, minp, pr) - local settlement_info = {} - local building_all_info - local possible_rotations = {"0", "90", "180", "270"} - -- find center of chunk - local center = { - x=math.floor((minp.x+maxp.x)/2), - y=maxp.y, - z=math.floor((minp.z+maxp.z)/2) - } - -- find center_surface of chunk - local center_surface , surface_material = settlements.find_surface(center, true) - local chunks = {} - chunks[mcl_vars.get_chunk_number(center)] = true - - -- go build settlement around center - if not center_surface then return false end - - -- initialize all settlement_info table - local count_buildings, number_of_buildings, number_built = settlements.initialize_settlement_info(pr) - -- first building is townhall in the center - building_all_info = settlements.schematic_table[1] - local rotation = possible_rotations[ pr:next(1, #possible_rotations ) ] - -- add to settlement info table - local index = 1 - settlement_info[index] = { - pos = center_surface, - name = building_all_info["name"], - hsize = building_all_info["hsize"], - rotat = rotation, - surface_mat = surface_material - } - --increase index for following buildings - index = index + 1 - -- now some buildings around in a circle, radius = size of town center - local x, z, r = center_surface.x, center_surface.z, building_all_info["hsize"] - -- draw j circles around center and increase radius by math.random(2,5) - for j = 1,20 do - -- set position on imaginary circle - for j = 0, 360, 15 do - local angle = j * math.pi / 180 - local ptx, ptz = x + r * math.cos( angle ), z + r * math.sin( angle ) - ptx = settlements.round(ptx, 0) - ptz = settlements.round(ptz, 0) - local pos1 = { x=ptx, y=center_surface.y+50, z=ptz} - local chunk_number = mcl_vars.get_chunk_number(pos1) - local pos_surface, surface_material - if chunks[chunk_number] then - pos_surface, surface_material = settlements.find_surface(pos1) - else - chunks[chunk_number] = true - pos_surface, surface_material = settlements.find_surface(pos1, true) - end - if not pos_surface then break end - - local randomized_schematic_table = shuffle(settlements.schematic_table, pr) - -- pick schematic - local size = #randomized_schematic_table - for i = size, 1, -1 do - -- already enough buildings of that type? - if count_buildings[randomized_schematic_table[i]["name"]] < randomized_schematic_table[i]["max_num"]*number_of_buildings then - building_all_info = randomized_schematic_table[i] - -- check distance to other buildings - local distance_to_other_buildings_ok = settlements.check_distance(settlement_info, pos_surface, building_all_info["hsize"]) - if distance_to_other_buildings_ok then - -- count built houses - count_buildings[building_all_info["name"]] = count_buildings[building_all_info["name"]] +1 - rotation = possible_rotations[ pr:next(1, #possible_rotations ) ] - number_built = number_built + 1 - settlement_info[index] = { - pos = pos_surface, - name = building_all_info["name"], - hsize = building_all_info["hsize"], - rotat = rotation, - surface_mat = surface_material - } - index = index + 1 - break - end - end - end - if number_of_buildings == number_built then - break - end - end - if number_built >= number_of_buildings then - break - end - r = r + pr:next(2,5) - end - settlements.debug("really ".. number_built) - return settlement_info -end -------------------------------------------------------------------------------- --- evaluate settlement_info and place schematics -------------------------------------------------------------------------------- --- Initialize node -local function construct_node(p1, p2, name) - local r = minetest.registered_nodes[name] - if r then - if r.on_construct then - local nodes = minetest.find_nodes_in_area(p1, p2, name) - for p=1, #nodes do - local pos = nodes[p] - r.on_construct(pos) - end - return nodes - end - minetest.log("warning", "[mcl_villages] No on_construct defined for node name " .. name) - return - end - minetest.log("warning", "[mcl_villages] Attempt to 'construct' inexistant nodes: " .. name) -end - -local function spawn_iron_golem(pos) - local p = minetest.find_node_near(pos,50,"mcl_core:grass_path") - if p then - local l=minetest.add_entity(p,"mobs_mc:iron_golem"):get_luaentity() - if l then - l._home = p - end - end -end - -local function spawn_villagers(minp,maxp) - local beds=minetest.find_nodes_in_area(vector.offset(minp,-20,-20,-20),vector.offset(maxp,20,20,20),{"mcl_beds:bed_red_bottom"}) - for _,bed in pairs(beds) do - local m = minetest.get_meta(bed) - if m:get_string("villager") == "" then - local v=minetest.add_entity(bed,"mobs_mc:villager") - if v then - local l=v:get_luaentity() - l._bed = bed - m:set_string("villager",l._id) - end - end - end -end - -local function init_nodes(p1, p2, size, rotation, pr) - construct_node(p1, p2, "mcl_itemframes:item_frame") - construct_node(p1, p2, "mcl_furnaces:furnace") - construct_node(p1, p2, "mcl_anvils:anvil") - - construct_node(p1, p2, "mcl_smoker:smoker") - construct_node(p1, p2, "mcl_barrels:barrel_closed") - construct_node(p1, p2, "mcl_blast_furnace:blast_furnace") - construct_node(p1, p2, "mcl_brewing:stand_000") - local nodes = construct_node(p1, p2, "mcl_chests:chest") - if nodes and #nodes > 0 then - for p=1, #nodes do - local pos = nodes[p] - settlements.fill_chest(pos, pr) - end - end -end - -function settlements.place_schematics(settlement_info, pr) - local building_all_info - - --attempt to place one belltower in the center of the village - this doesn't always work out great but it's a lot better than doing it first or last. - local belltower = table.remove(settlement_info,math.floor(#settlement_info/2)) - if belltower then - mcl_structures.place_schematic( - vector.offset(belltower["pos"],0,0,0), - settlements.modpath.."/schematics/belltower.mts", - belltower["rotation"], - nil, - true, - nil, - function(p1, p2, size, rotation, pr) - spawn_iron_golem(p1) - end, - pr - ) - end - - for i, built_house in ipairs(settlement_info) do - local is_last = i == #settlement_info - - for j, schem in ipairs(settlements.schematic_table) do - if settlement_info[i]["name"] == schem["name"] then - building_all_info = schem - break - end - end - - local pos = settlement_info[i]["pos"] - local rotation = settlement_info[i]["rotat"] - -- get building node material for better integration to surrounding - local platform_material = settlement_info[i]["surface_mat"] - --platform_material_name = minetest.get_name_from_content_id(platform_material) - -- pick random material - --local material = wallmaterial[pr:next(1,#wallmaterial)] - -- - local building = building_all_info["mts"] - local replace_wall = building_all_info["rplc"] - -- schematic conversion to lua - local schem_lua = minetest.serialize_schematic(building, - "lua", - {lua_use_comments = false, lua_num_indent_spaces = 0}).." return schematic" - schem_lua = schem_lua:gsub("mcl_core:stonebrickcarved", "mcl_villages:stonebrickcarved") - -- replace material - if replace_wall then - --Note, block substitution isn't matching node names exactly; so nodes that are to be substituted that have the same prefixes cause bugs. - -- Example: Attempting to swap out 'mcl_core:stonebrick'; which has multiple, additional sub-variants: (carved, cracked, mossy). Will currently cause issues, so leaving disabled. - if platform_material == "mcl_core:snow" or platform_material == "mcl_core:dirt_with_grass_snow" or platform_material == "mcl_core:podzol" then - schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sprucetree") - schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sprucewood") - --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:spruce_fence") - --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_sprucewood_top") - --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_sprucewood") - --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_sprucewood_off") - elseif platform_material == "mcl_core:sand" or platform_material == "mcl_core:redsand" then - schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sandstonecarved") - schem_lua = schem_lua:gsub("mcl_core:cobble", "mcl_core:sandstone") - schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sandstonesmooth") - --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:birch_fence") - --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_birchwood_top") - --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_birchwood") - --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_birchwood_off") - --schem_lua = schem_lua:gsub("mcl_stairs:stair_stonebrick", "mcl_stairs:stair_redsandstone") - --schem_lua = schem_lua:gsub("mcl_core:stonebrick", "mcl_core:redsandstonesmooth") - schem_lua = schem_lua:gsub("mcl_core:brick_block", "mcl_core:redsandstone") - end - end - schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material) - - --[[ Disable special junglewood for now. - -- special material for spawning npcs - schem_lua = schem_lua:gsub("mcl_core:junglewood", "settlements:junglewood") - --]] - - schem_lua = schem_lua:gsub("mcl_stairs:stair_wood_outer", "mcl_stairs:slab_wood") - schem_lua = schem_lua:gsub("mcl_stairs:stair_stone_rough_outer", "air") - - -- format schematic string - local schematic = loadstring(schem_lua)() - -- build foundation for the building an make room above - -- place schematic - mcl_structures.place_schematic( - pos, - schematic, - rotation, - nil, - true, - nil, - function(p1, p2, size, rotation, pr) - init_nodes(p1, p2, size, rotation, pr) - spawn_villagers(p1,p2) - end, - pr - ) - end -end diff --git a/mods/MAPGEN/mcl_villages/const.lua b/mods/MAPGEN/mcl_villages/const.lua deleted file mode 100644 index 65f43f344..000000000 --- a/mods/MAPGEN/mcl_villages/const.lua +++ /dev/null @@ -1,76 +0,0 @@ --- switch for debugging -function settlements.debug(message) - -- minetest.chat_send_all(message) - -- minetest.log("warning", "[mcl_villages] "..message) - minetest.log("verbose", "[mcl_villages] "..message) -end - ---[[ Manually set in 'buildings.lua' --- material to replace cobblestone with -local wallmaterial = { - "mcl_core:junglewood", - "mcl_core:sprucewood", - "mcl_core:wood", - "mcl_core:birchwood", - "mcl_core:acaciawood", - "mcl_core:stonebrick", - "mcl_core:cobble", - "mcl_core:sandstonecarved", - "mcl_core:sandstone", - "mcl_core:sandstonesmooth2" -} ---]] -settlements.surface_mat = {} -------------------------------------------------------------------------------- --- Set array to list --- https://stackoverflow.com/questions/656199/search-for-an-item-in-a-lua-list -------------------------------------------------------------------------------- -function settlements.grundstellungen() - settlements.surface_mat = settlements.Set { - "mcl_core:dirt_with_grass", - --"mcl_core:dry_dirt_with_grass", - "mcl_core:dirt_with_grass_snow", - --"mcl_core:dirt_with_dry_grass", - "mcl_core:podzol", - "mcl_core:sand", - "mcl_core:redsand", - --"mcl_core:silver_sand", - "mcl_core:snow" - } -end --- --- possible surfaces where buildings can be built --- - --- --- path to schematics --- -schem_path = settlements.modpath.."/schematics/" --- --- list of schematics --- -local basic_pseudobiome_villages = minetest.settings:get_bool("basic_pseudobiome_villages", true) - -settlements.schematic_table = { - {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages }, - {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = basic_pseudobiome_villages }, - {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03 , rplc = basic_pseudobiome_villages }, - {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04 , rplc = basic_pseudobiome_villages }, - {name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1 , rplc = basic_pseudobiome_villages }, - {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1 , rplc = false }, - {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04 , rplc = basic_pseudobiome_villages }, - {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages }, - {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7 , rplc = basic_pseudobiome_villages }, - {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = basic_pseudobiome_villages }, - {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = basic_pseudobiome_villages }, -} - --- --- maximum allowed difference in height for building a sttlement --- -max_height_difference = 56 --- --- --- -half_map_chunk_size = 40 ---quarter_map_chunk_size = 20 diff --git a/mods/MAPGEN/mcl_villages/foundation.lua b/mods/MAPGEN/mcl_villages/foundation.lua deleted file mode 100644 index 71c5cfdda..000000000 --- a/mods/MAPGEN/mcl_villages/foundation.lua +++ /dev/null @@ -1,65 +0,0 @@ -------------------------------------------------------------------------------- --- function to fill empty space below baseplate when building on a hill -------------------------------------------------------------------------------- -function settlements.ground(pos, pr) -- role model: Wendelsteinkircherl, Brannenburg - local p2 = vector.new(pos) - local cnt = 0 - local mat = "mcl_core:dirt" - p2.y = p2.y-1 - while true do - cnt = cnt+1 - if cnt > 20 then break end - if cnt>pr:next(2,4) then - mat = "mcl_core:stone" - end - minetest.swap_node(p2, {name=mat}) - p2.y = p2.y-1 - end -end -------------------------------------------------------------------------------- --- function clear space above baseplate -------------------------------------------------------------------------------- -function settlements.terraform(settlement_info, pr) - local fheight, fwidth, fdepth, schematic_data - - for i, built_house in ipairs(settlement_info) do - -- pick right schematic_info to current built_house - for j, schem in ipairs(settlements.schematic_table) do - if settlement_info[i]["name"] == schem["name"] then - schematic_data = schem - break - end - end - local pos = settlement_info[i]["pos"] - if settlement_info[i]["rotat"] == "0" or settlement_info[i]["rotat"] == "180" then - fwidth = schematic_data["hwidth"] - fdepth = schematic_data["hdepth"] - else - fwidth = schematic_data["hdepth"] - fdepth = schematic_data["hwidth"] - end - --fheight = schematic_data["hheight"] * 3 -- remove trees and leaves above - fheight = schematic_data["hheight"] -- remove trees and leaves above - -- - -- now that every info is available -> create platform and clear space above - -- - for xi = 0,fwidth-1 do - for zi = 0,fdepth-1 do - for yi = 0,fheight *3 do - if yi == 0 then - local p = {x=pos.x+xi, y=pos.y, z=pos.z+zi} - settlements.ground(p, pr) - else - -- write ground --- local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi} --- local node = mcl_vars.get_node(p) --- if node and node.name ~= "air" then --- minetest.swap_node(p,{name="air"}) --- end - minetest.swap_node({x=pos.x+xi, y=pos.y+yi, z=pos.z+zi},{name="air"}) - end - end - end - end - end -end diff --git a/mods/MAPGEN/mcl_villages/init.lua b/mods/MAPGEN/mcl_villages/init.lua deleted file mode 100644 index 79a6e37cf..000000000 --- a/mods/MAPGEN/mcl_villages/init.lua +++ /dev/null @@ -1,127 +0,0 @@ -settlements = {} -settlements.modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(settlements.modpath.."/const.lua") -dofile(settlements.modpath.."/utils.lua") -dofile(settlements.modpath.."/foundation.lua") -dofile(settlements.modpath.."/buildings.lua") -dofile(settlements.modpath.."/paths.lua") ---dofile(settlements.modpath.."/convert_lua_mts.lua") --- --- load settlements on server --- -settlements.grundstellungen() - - -local villagegen={} --- --- register block for npc spawn --- -minetest.register_node("mcl_villages:stonebrickcarved", { - description = ("Chiseled Stone Village Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_core_stonebrick_carved.png"}, - drop = "mcl_core:stonebrickcarved", - groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_villages:structblock", {drawtype="airlike",groups = {not_in_creative_inventory=1},}) - - - ---[[ Enable for testing, but use MineClone2's own spawn code if/when merging. --- --- register inhabitants --- -if minetest.get_modpath("mobs_mc") then - mcl_mobs:register_spawn("mobs_mc:villager", --name - {"mcl_core:stonebrickcarved"}, --nodes - 15, --max_light - 0, --min_light - 20, --chance - 7, --active_object_count - 31000, --max_height - nil) --day_toggle -end ---]] - --- --- on map generation, try to build a settlement --- -local function build_a_settlement(minp, maxp, blockseed) - local pr = PseudoRandom(blockseed) - - -- fill settlement_info with buildings and their data - local settlement_info = settlements.create_site_plan(maxp, minp, pr) - if not settlement_info then return end - - -- evaluate settlement_info and prepair terrain - settlements.terraform(settlement_info, pr) - - -- evaluate settlement_info and build paths between buildings - settlements.paths(settlement_info) - - -- evaluate settlement_info and place schematics - settlements.place_schematics(settlement_info, pr) -end - -local function ecb_village(blockpos, action, calls_remaining, param) - if calls_remaining >= 1 then return end - local minp, maxp, blockseed = param.minp, param.maxp, param.blockseed - build_a_settlement(minp, maxp, blockseed) -end - --- Disable natural generation in singlenode. -local mg_name = minetest.get_mapgen_setting("mg_name") -if mg_name ~= "singlenode" then - mcl_mapgen_core.register_generator("villages", nil, function(minp, maxp, blockseed) - -- don't build settlement underground - if maxp.y < 0 then return end - -- randomly try to build settlements - if blockseed % 77 ~= 17 then return end - -- needed for manual and automated settlement building - -- don't build settlements on (too) uneven terrain - local n=minetest.get_node_or_nil(minp) - if n and n.name == "mcl_villages:structblock" then return end - if villagegen[minetest.pos_to_string(minp)] ~= nil then return end - minetest.set_node(minp,{name="mcl_villages:structblock"}) - - local height_difference = settlements.evaluate_heightmap() - if height_difference > max_height_difference then return end - - villagegen[minetest.pos_to_string(minp)]={minp=vector.new(minp), maxp=vector.new(maxp), blockseed=blockseed} - end) -end - -minetest.register_lbm({ - name = "mcl_villages:structblock", - run_at_every_load = true, - nodenames = {"mcl_villages:structblock"}, - action = function(pos, node) - minetest.set_node(pos, {name = "air"}) - if not villagegen[minetest.pos_to_string(pos)] then return end - local minp=villagegen[minetest.pos_to_string(pos)].minp - local maxp=villagegen[minetest.pos_to_string(pos)].maxp - minetest.emerge_area(minp, maxp, ecb_village, villagegen[minetest.pos_to_string(minp)]) - villagegen[minetest.pos_to_string(minp)]=nil - end -}) --- manually place villages -if minetest.is_creative_enabled("") then - minetest.register_craftitem("mcl_villages:tool", { - description = "mcl_villages build tool", - inventory_image = "default_tool_woodshovel.png", - -- build ssettlement - on_place = function(itemstack, placer, pointed_thing) - if not pointed_thing.under then return end - local minp = vector.subtract( pointed_thing.under, half_map_chunk_size) - local maxp = vector.add( pointed_thing.under, half_map_chunk_size) - build_a_settlement(minp, maxp, math.random(0,32767)) - end - }) - mcl_wip.register_experimental_item("mcl_villages:tool") -end diff --git a/mods/MAPGEN/mcl_villages/mod.conf b/mods/MAPGEN/mcl_villages/mod.conf deleted file mode 100644 index d8e2aa7d4..000000000 --- a/mods/MAPGEN/mcl_villages/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_villages -author = Rochambeau -description = This mod adds settlements on world generation. -depends = mcl_util, mcl_mapgen_core, mcl_structures, mcl_core, mcl_loot -optional_depends = mcl_farming, mobs_mc diff --git a/mods/MAPGEN/mcl_villages/paths.lua b/mods/MAPGEN/mcl_villages/paths.lua deleted file mode 100644 index 63f2ba146..000000000 --- a/mods/MAPGEN/mcl_villages/paths.lua +++ /dev/null @@ -1,91 +0,0 @@ -------------------------------------------------------------------------------- --- generate paths between buildings -------------------------------------------------------------------------------- -function settlements.paths(settlement_info) - local starting_point - local end_point - local distance - --for k,v in pairs(settlement_info) do - starting_point = settlement_info[1]["pos"] - for o,p in pairs(settlement_info) do - - end_point = settlement_info[o]["pos"] - if starting_point ~= end_point - then - -- loop until end_point is reched (distance == 0) - while true do - - -- define surrounding pos to starting_point - local north_p = {x=starting_point.x+1, y=starting_point.y, z=starting_point.z} - local south_p = {x=starting_point.x-1, y=starting_point.y, z=starting_point.z} - local west_p = {x=starting_point.x, y=starting_point.y, z=starting_point.z+1} - local east_p = {x=starting_point.x, y=starting_point.y, z=starting_point.z-1} - -- measure distance to end_point - local dist_north_p_to_end = math.sqrt( - ((north_p.x - end_point.x)*(north_p.x - end_point.x))+ - ((north_p.z - end_point.z)*(north_p.z - end_point.z)) - ) - local dist_south_p_to_end = math.sqrt( - ((south_p.x - end_point.x)*(south_p.x - end_point.x))+ - ((south_p.z - end_point.z)*(south_p.z - end_point.z)) - ) - local dist_west_p_to_end = math.sqrt( - ((west_p.x - end_point.x)*(west_p.x - end_point.x))+ - ((west_p.z - end_point.z)*(west_p.z - end_point.z)) - ) - local dist_east_p_to_end = math.sqrt( - ((east_p.x - end_point.x)*(east_p.x - end_point.x))+ - ((east_p.z - end_point.z)*(east_p.z - end_point.z)) - ) - -- evaluate which pos is closer to the end_point - if dist_north_p_to_end <= dist_south_p_to_end and - dist_north_p_to_end <= dist_west_p_to_end and - dist_north_p_to_end <= dist_east_p_to_end - then - starting_point = north_p - distance = dist_north_p_to_end - - elseif dist_south_p_to_end <= dist_north_p_to_end and - dist_south_p_to_end <= dist_west_p_to_end and - dist_south_p_to_end <= dist_east_p_to_end - then - starting_point = south_p - distance = dist_south_p_to_end - - elseif dist_west_p_to_end <= dist_north_p_to_end and - dist_west_p_to_end <= dist_south_p_to_end and - dist_west_p_to_end <= dist_east_p_to_end - then - starting_point = west_p - distance = dist_west_p_to_end - - elseif dist_east_p_to_end <= dist_north_p_to_end and - dist_east_p_to_end <= dist_south_p_to_end and - dist_east_p_to_end <= dist_west_p_to_end - then - starting_point = east_p - distance = dist_east_p_to_end - end - -- find surface of new starting point - local surface_point, surface_mat = settlements.find_surface(starting_point) - -- replace surface node with mcl_core:grass_path - if surface_point - then - if surface_mat == "mcl_core:sand" or surface_mat == "mcl_core:redsand" then - minetest.swap_node(surface_point,{name="mcl_core:sandstonesmooth2"}) - else - minetest.swap_node(surface_point,{name="mcl_core:grass_path"}) - end - -- don't set y coordinate, surface might be too low or high - starting_point.x = surface_point.x - starting_point.z = surface_point.z - end - if distance <= 1 or - starting_point == end_point - then - break - end - end - end - end -end diff --git a/mods/MAPGEN/mcl_villages/schematics/belltower.mts b/mods/MAPGEN/mcl_villages/schematics/belltower.mts deleted file mode 100644 index 8eb524312..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/belltower.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/blacksmith.mts b/mods/MAPGEN/mcl_villages/schematics/blacksmith.mts deleted file mode 100644 index dab65afa4..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/blacksmith.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/butcher.mts b/mods/MAPGEN/mcl_villages/schematics/butcher.mts deleted file mode 100644 index 1786599dc..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/butcher.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/church.mts b/mods/MAPGEN/mcl_villages/schematics/church.mts deleted file mode 100644 index e59f90f1f..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/church.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/farm.mts b/mods/MAPGEN/mcl_villages/schematics/farm.mts deleted file mode 100644 index b45ff1d6f..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/farm.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/lamp.mts b/mods/MAPGEN/mcl_villages/schematics/lamp.mts deleted file mode 100644 index 8da0e8355..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/lamp.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/large_house.mts b/mods/MAPGEN/mcl_villages/schematics/large_house.mts deleted file mode 100644 index 3939a2c43..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/large_house.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/library.mts b/mods/MAPGEN/mcl_villages/schematics/library.mts deleted file mode 100644 index 521ee9fb6..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/library.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/medium_house.mts b/mods/MAPGEN/mcl_villages/schematics/medium_house.mts deleted file mode 100644 index fa859ac48..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/medium_house.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/small_house.mts b/mods/MAPGEN/mcl_villages/schematics/small_house.mts deleted file mode 100644 index a3789504e..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/small_house.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/tavern.mts b/mods/MAPGEN/mcl_villages/schematics/tavern.mts deleted file mode 100644 index c26c14dbc..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/tavern.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/schematics/well.mts b/mods/MAPGEN/mcl_villages/schematics/well.mts deleted file mode 100644 index ff8785fde..000000000 Binary files a/mods/MAPGEN/mcl_villages/schematics/well.mts and /dev/null differ diff --git a/mods/MAPGEN/mcl_villages/utils.lua b/mods/MAPGEN/mcl_villages/utils.lua deleted file mode 100644 index 4ee2ccfbf..000000000 --- a/mods/MAPGEN/mcl_villages/utils.lua +++ /dev/null @@ -1,232 +0,0 @@ -local get_node = mcl_vars.get_node - -------------------------------------------------------------------------------- --- function to copy tables -------------------------------------------------------------------------------- -function settlements.shallowCopy(original) - local copy = {} - for key, value in pairs(original) do - copy[key] = value - end - return copy -end --- --- --- -function settlements.round(num, numDecimalPlaces) - local mult = 10^(numDecimalPlaces or 0) - return math.floor(num * mult + 0.5) / mult -end - -------------------------------------------------------------------------------- --- function to find surface block y coordinate --- returns surface postion -------------------------------------------------------------------------------- -function settlements.find_surface(pos, wait) - local p6 = vector.new(pos) - local cnt = 0 - local itter = 1 -- count up or down - local cnt_max = 200 - -- check, in which direction to look for surface - local surface_node - if wait then - surface_node = get_node(p6, true, 10000000) - else - surface_node = get_node(p6) - end - if surface_node.name=="air" or surface_node.name=="ignore" then - itter = -1 - end - -- go through nodes an find surface - while cnt < cnt_max do - -- Check Surface_node and Node above - -- - if settlements.surface_mat[surface_node.name] then - local surface_node_plus_1 = get_node({ x=p6.x, y=p6.y+1, z=p6.z}) - if surface_node_plus_1 and surface_node and - (string.find(surface_node_plus_1.name,"air") or - string.find(surface_node_plus_1.name,"snow") or - string.find(surface_node_plus_1.name,"fern") or - string.find(surface_node_plus_1.name,"flower") or - string.find(surface_node_plus_1.name,"bush") or - string.find(surface_node_plus_1.name,"tree") or - string.find(surface_node_plus_1.name,"grass")) - then - settlements.debug("find_surface7: " ..surface_node.name.. " " .. surface_node_plus_1.name) - return p6, surface_node.name - else - settlements.debug("find_surface2: wrong surface+1") - end - else - settlements.debug("find_surface3: wrong surface "..surface_node.name.." at pos "..minetest.pos_to_string(p6)) - end - - p6.y = p6.y + itter - if p6.y < 0 then - settlements.debug("find_surface4: y<0") - return nil - end - cnt = cnt+1 - surface_node = get_node(p6) - end - settlements.debug("find_surface5: cnt_max overflow") - return nil -end -------------------------------------------------------------------------------- --- check distance for new building -------------------------------------------------------------------------------- -function settlements.check_distance(settlement_info, building_pos, building_size) - local distance - for i, built_house in ipairs(settlement_info) do - distance = math.sqrt( - ((building_pos.x - built_house["pos"].x)*(building_pos.x - built_house["pos"].x))+ - ((building_pos.z - built_house["pos"].z)*(building_pos.z - built_house["pos"].z))) - if distance < building_size or distance < built_house["hsize"] then - return false - end - end - return true -end -------------------------------------------------------------------------------- --- fill chests -------------------------------------------------------------------------------- -function settlements.fill_chest(pos, pr) - -- initialize chest (mts chests don't have meta) - local meta = minetest.get_meta(pos) - if meta:get_string("infotext") ~= "Chest" then - -- For MineClone2 0.70 or before - -- minetest.registered_nodes["mcl_chests:chest"].on_construct(pos) - -- - -- For MineClone2 after commit 09ab1482b5 (the new entity chests) - minetest.registered_nodes["mcl_chests:chest_small"].on_construct(pos) - end - -- fill chest - local inv = minetest.get_inventory( {type="node", pos=pos} ) - - local function get_treasures(prand) - local loottable = {{ - stacks_min = 3, - stacks_max = 8, - items = { - { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:iron_ingot", weight = 10, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:gold_ingot", weight = 5, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_farming:bread", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:apple", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_tools:pick_iron", weight = 5 }, - { itemstring = "mcl_tools:sword_iron", weight = 5 }, - { itemstring = "mcl_armor:chestplate_iron", weight = 5 }, - { itemstring = "mcl_armor:helmet_iron", weight = 5 }, - { itemstring = "mcl_armor:leggings_iron", weight = 5 }, - { itemstring = "mcl_armor:boots_iron", weight = 5 }, - { itemstring = "mcl_core:obsidian", weight = 5, amount_min = 3, amount_max = 7 }, - { itemstring = "mcl_core:sapling", weight = 5, amount_min = 3, amount_max = 7 }, - { itemstring = "mcl_mobitems:saddle", weight = 3 }, - { itemstring = "mcl_mobitems:iron_horse_armor", weight = 1 }, - { itemstring = "mcl_mobitems:gold_horse_armor", weight = 1 }, - { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1 }, - } - }} - local items = mcl_loot.get_multi_loot(loottable, prand) - return items - end - - local items = get_treasures(pr) - mcl_loot.fill_inventory(inv, "main", items, pr) -end - -------------------------------------------------------------------------------- --- initialize furnace -------------------------------------------------------------------------------- -function settlements.initialize_furnace(pos) - -- find chests within radius - local furnacepos = minetest.find_node_near(pos, - 7, --radius - {"mcl_furnaces:furnace"}) - -- initialize furnacepos (mts furnacepos don't have meta) - if furnacepos - then - local meta = minetest.get_meta(furnacepos) - if meta:get_string("infotext") ~= "furnace" - then - minetest.registered_nodes["mcl_furnaces:furnace"].on_construct(furnacepos) - end - end -end -------------------------------------------------------------------------------- --- initialize anvil -------------------------------------------------------------------------------- -function settlements.initialize_anvil(pos) - -- find chests within radius - local anvilpos = minetest.find_node_near(pos, - 7, --radius - {"mcl_anvils:anvil"}) - -- initialize anvilpos (mts anvilpos don't have meta) - if anvilpos - then - local meta = minetest.get_meta(anvilpos) - if meta:get_string("infotext") ~= "anvil" - then - minetest.registered_nodes["mcl_anvils:anvil"].on_construct(anvilpos) - end - end -end -------------------------------------------------------------------------------- --- randomize table -------------------------------------------------------------------------------- -function shuffle(tbl, pr) - local table = settlements.shallowCopy(tbl) - local size = #table - for i = size, 1, -1 do - local rand = pr:next(1, size) - table[i], table[rand] = table[rand], table[i] - end - return table -end -------------------------------------------------------------------------------- --- evaluate heightmap -------------------------------------------------------------------------------- -function settlements.evaluate_heightmap() - local heightmap = minetest.get_mapgen_object("heightmap") - -- max height and min height, initialize with impossible values for easier first time setting - local max_y = -50000 - local min_y = 50000 - -- only evaluate the center square of heightmap 40 x 40 - local square_start = 1621 - local square_end = 1661 - for j = 1 , 40, 1 do - for i = square_start, square_end, 1 do - -- skip buggy heightmaps, return high value - if heightmap[i] == -31000 or heightmap[i] == 31000 then - return max_height_difference + 1 - end - if heightmap[i] < min_y then - min_y = heightmap[i] - end - if heightmap[i] > max_y then - max_y = heightmap[i] - end - end - -- set next line - square_start = square_start + 80 - square_end = square_end + 80 - end - -- return the difference between highest and lowest pos in chunk - local height_diff = max_y - min_y - -- filter buggy heightmaps - if height_diff <= 1 then - return max_height_difference + 1 - end - -- debug info - settlements.debug("heightdiff ".. height_diff) - return height_diff -end -------------------------------------------------------------------------------- --- Set array to list --- https://stackoverflow.com/questions/656199/search-for-an-item-in-a-lua-list -------------------------------------------------------------------------------- -function settlements.Set (list) - local set = {} - for _, l in ipairs(list) do set[l] = true end - return set -end diff --git a/mods/MAPGEN/modpack.conf b/mods/MAPGEN/modpack.conf deleted file mode 100644 index eb9c54abd..000000000 --- a/mods/MAPGEN/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = MAPGEN -description = Meta-modpack containing map generating mods for MineClone 2 diff --git a/mods/MAPGEN/tsm_railcorridors/README.md b/mods/MAPGEN/tsm_railcorridors/README.md deleted file mode 100644 index de9df489e..000000000 --- a/mods/MAPGEN/tsm_railcorridors/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Railway corridors [`tsm_railcorridors`] -MineClone 2 adaption. NO TREASURER SUPPORT! - -* Current version 0.14.0 - -Minetest mod for adding underground corridors with rails and wood constructions with a few treasure chests now and then. -Optional support for the Treasurer mod is available for adding treasures from various mods. -Cobwebs are added if the `mobs_monster` mod is found. - -Use the advanced settings to finetune the railway corridors. - -* Forum thread: https://forum.minetest.net/viewtopic.php?t=10339 -* License: MIT License. - -## Info for game makers -Want to include this mod in a game, but you have problems with the dependencies? -Edit `gameconfig.lua` to fit your needs. :-) diff --git a/mods/MAPGEN/tsm_railcorridors/gameconfig.lua b/mods/MAPGEN/tsm_railcorridors/gameconfig.lua deleted file mode 100644 index de4b18119..000000000 --- a/mods/MAPGEN/tsm_railcorridors/gameconfig.lua +++ /dev/null @@ -1,130 +0,0 @@ --- This file stores the various node types. This makes it easier to plug this mod into games --- in which you need to change the node names. - --- Adapted for MineClone 2! - --- Node names (Don't use aliases!) -tsm_railcorridors.nodes = { - dirt = "mcl_core:dirt", - chest = "mcl_chests:chest", - rail = "mcl_minecarts:rail", - torch_floor = "mcl_torches:torch", - torch_wall = "mcl_torches:torch_wall", - cobweb = "mcl_core:cobweb", - spawner = "mcl_mobspawners:spawner", -} - -local mg_name = minetest.get_mapgen_setting("mg_name") - -if mg_name == "v6" then - -- In v6, wood is chosen randomly. - --[[ Wood types for the corridors. Corridors are made out of full wood blocks - and posts. For each corridor system, a random wood type is chosen with the chance - specified in per mille. ]] - tsm_railcorridors.nodes.corridor_woods = { - { wood = "mcl_core:wood", post = "mcl_fences:fence", chance = 900}, - { wood = "mcl_core:darkwood", post = "mcl_fences:dark_oak_fence", chance = 100}, - } -else - -- This generates dark oak wood in mesa biomes and oak wood everywhere else. - function tsm_railcorridors.nodes.corridor_woods_function(pos, node) - if minetest.get_item_group(node.name, "hardened_clay") ~= 0 then - return "mcl_core:darkwood", "mcl_fences:dark_oak_fence" - else - return "mcl_core:wood", "mcl_fences:fence" - end - end -end - - --- TODO: Use minecart with chest instead of normal minecart -tsm_railcorridors.carts = { "mcl_minecarts:minecart" } - -function tsm_railcorridors.on_construct_cart(pos, cart) - -- TODO: Fill cart with treasures -end - --- Fallback function. Returns a random treasure. This function is called for chests --- only if the Treasurer mod is not found. --- pr: A PseudoRandom object -function tsm_railcorridors.get_default_treasure(pr) - -- UNUSED IN MINECLONE 2! -end - --- All spawners spawn cave spiders -function tsm_railcorridors.on_construct_spawner(pos) - mcl_mobspawners.setup_spawner(pos, "mobs_mc:cave_spider", 0, 7) -end - --- MineClone 2's treasure function. Gets all treasures for a single chest. --- Based on information from Minecraft Wiki. -function tsm_railcorridors.get_treasures(pr) - local loottable = { - { - stacks_min = 1, - stacks_max = 1, - items = { - { itemstring = "mcl_mobs:nametag", weight = 30 }, - { itemstring = "mcl_core:apple_gold", weight = 20 }, - { itemstring = "mcl_books:book", weight = 10, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "", weight = 5}, - { itemstring = "mcl_core:pick_iron", weight = 5 }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 1 }, - } - }, - { - stacks_min = 2, - stacks_max = 4, - items = { - { itemstring = "mcl_farming:bread", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:coal_lump", weight = 10, amount_min = 3, amount_max = 8 }, - { itemstring = "mcl_farming:beetroot_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_farming:melon_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_farming:pumpkin_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_core:iron_ingot", weight = 10, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_dye:blue", weight = 5, amount_min = 4, amount_max = 9 }, - { itemstring = "mesecons:redstone", weight = 5, amount_min = 4, amount_max = 9 }, - { itemstring = "mcl_core:gold_ingot", weight = 5, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 2 }, - } - }, - { - stacks_min = 3, - stacks_max = 3, - items = { - { itemstring = "mcl_minecarts:rail", weight = 20, amount_min = 4, amount_max = 8 }, - { itemstring = "mcl_torches:torch", weight = 15, amount_min = 1, amount_max = 16 }, - { itemstring = "mcl_minecarts:activator_rail", weight = 5, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_minecarts:detector_rail", weight = 5, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_minecarts:golden_rail", weight = 5, amount_min = 1, amount_max = 4 }, - } - }, - -- non-MC loot: 50% chance to add a minecart, offered as alternative to spawning minecarts on rails. - -- TODO: Remove this when minecarts spawn on rails. - { - stacks_min = 0, - stacks_max = 1, - items = { - { itemstring = "mcl_minecarts:minecart", weight = 1 }, - } - } - } - - -- Bonus loot for v6 mapgen: Otherwise unobtainable saplings. - if mg_name == "v6" then - table.insert(loottable, { - stacks_min = 1, - stacks_max = 3, - items = { - { itemstring = "mcl_core:darksapling", weight = 1, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:birchsapling", weight = 1, amount_min = 1, amount_max = 2 }, - { itemstring = "", weight = 6 }, - }, - }) - end - local items = mcl_loot.get_multi_loot(loottable, pr) - - return items -end diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua deleted file mode 100644 index 451406167..000000000 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ /dev/null @@ -1,1122 +0,0 @@ -local pairs = pairs -local tonumber = tonumber - -tsm_railcorridors = {} - --- Load node names -dofile(minetest.get_modpath(minetest.get_current_modname()).."/gameconfig.lua") - --- Settings -local setting - --- Probability function --- TODO: Check if this is correct -local function P(float) - return math.floor(32767 * float) -end - --- Probability for every newly generated mapchunk to get corridors -local probability_railcaves_in_mapchunk = P(0.33333) -setting = tonumber(minetest.settings:get("tsm_railcorridors_probability_railcaves_in_mapchunk")) --- Extra check to prevent mod griefing in singlenode, mcimported worlds. -local mg_name = minetest.get_mapgen_setting("mg_name") -if mg_name == "singlenode" then - probability_railcaves_in_mapchunk = P(0) -elseif setting then - probability_railcaves_in_mapchunk = P(setting) -end - --- Minimal and maximal value of path length (forks don't look up this value) -local way_min = 4; -local way_max = 7; -setting = tonumber(minetest.settings:get("tsm_railcorridors_way_min")) -if setting then - way_min = setting -end -setting = tonumber(minetest.settings:get("tsm_railcorridors_way_max")) -if setting then - way_max = setting -end - --- Probability for every horizontal part of a corridor to be with torches -local probability_torches_in_segment = P(0.5) -setting = tonumber(minetest.settings:get("tsm_railcorridors_probability_torches_in_segment")) -if setting then - probability_torches_in_segment = P(setting) -end - --- Probability for every part of a corridor to go up or down -local probability_up_or_down = P(0.2) -setting = tonumber(minetest.settings:get("tsm_railcorridors_probability_up_or_down")) -if setting then - probability_up_or_down = P(setting) -end - --- Probability for every part of a corridor to fork – caution, too high values may cause MT to hang on. -local probability_fork = P(0.04) -setting = tonumber(minetest.settings:get("tsm_railcorridors_probability_fork")) -if setting then - probability_fork = P(setting) -end - --- Probability for every part of a corridor to contain a chest -local probability_chest = P(0.05) -setting = tonumber(minetest.settings:get("tsm_railcorridors_probability_chest")) -if setting then - probability_chest = P(setting) -end - --- Probability for every part of a corridor to contain a cart -local probability_cart = P(0.05) -setting = tonumber(minetest.settings:get("tsm_railcorridors_probability_cart")) -if setting then - probability_cart = P(setting) -end - --- Probability for a rail corridor system to be damaged -local probability_damage = P(1.0) -setting = tonumber(minetest.settings:get("tsm_railcorridors_probability_damage")) -if setting then - probability_damage = P(setting) -end - --- Enable cobwebs -local place_cobwebs = true -setting = minetest.settings:get_bool("tsm_railcorridors_place_cobwebs") -if setting then - place_cobwebs = setting -end - --- Enable mob spawners -local place_mob_spawners = true -setting = minetest.settings:get_bool("tsm_railcorridors_place_mob_spawners") -if setting then - place_mob_spawners = setting -end - --- Max. and min. heights between rail corridors are generated -local height_min -if mcl_vars.mg_lava then - height_min = mcl_vars.mg_lava_overworld_max + 2 -else - height_min = mcl_vars.mg_bedrock_overworld_max + 2 -end -local height_max = mcl_worlds.layer_to_y(60) - --- Chaos Mode: If enabled, rail corridors don't stop generating when hitting obstacles -local chaos_mode = minetest.settings:get_bool("tsm_railcorridors_chaos") or false - --- End of parameters - -if not tsm_railcorridors.nodes.corridor_woods_function then - local accumulated_chance = 0 - for w=1, #tsm_railcorridors.nodes.corridor_woods do - accumulated_chance = accumulated_chance + tsm_railcorridors.nodes.corridor_woods[w].chance - end - assert(accumulated_chance == 1000, "Rail corridor wood chances add up to "..accumulated_chance.." per mille! (should be 1000 per mille)") -end - --- Random Perlin noise generators -local pr, pr_carts, pr_deco, webperlin_major, webperlin_minor ---local pr_treasures - -local function InitRandomizer(seed) - -- Mostly used for corridor gen. - pr = PseudoRandom(seed) - -- Dirt room decorations - pr_deco = PseudoRandom(seed+25) - -- Separate randomizer for carts because spawning carts is very timing-dependent - pr_carts = PseudoRandom(seed-654) - -- Chest contents randomizer - --pr_treasures = PseudoRandom(seed+777) - -- Used for cobweb generation, both noises have to reach a high value for cobwebs to appear - webperlin_major = PerlinNoise(934, 3, 0.6, 500) - webperlin_minor = PerlinNoise(834, 3, 0.6, 50) -end - -local carts_table = {} - -local dirt_room_coords - --- Returns true if pos is inside the dirt room of the current corridor system -local function IsInDirtRoom(pos) - local min = dirt_room_coords.min - local max = dirt_room_coords.max - return pos.x >= min.x and pos.x <= max.x and pos.y >= min.y and pos.y <= max.y and pos.z >= min.z and pos.z <= max.z -end - --- Checks if the mapgen is allowed to carve through this structure and only sets --- the node if it is allowed. Does never build in liquids. --- If check_above is true, don't build if the node above is attached (e.g. rail) --- or a liquid. -local function SetNodeIfCanBuild(pos, node, check_above, can_replace_rail) - if check_above then - local abovename = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name - local abovedef = minetest.registered_nodes[abovename] - if abovename == "unknown" or abovename == "ignore" or - (abovedef and abovedef.groups and abovedef.groups.attached_node) or - -- This is done because cobwebs are often fake liquids - (abovedef and abovedef.liquidtype ~= "none" and abovename ~= tsm_railcorridors.nodes.cobweb) then - return false - end - end - local name = minetest.get_node(pos).name - local def = minetest.registered_nodes[name] - if name ~= "unknown" and name ~= "ignore" and - ((def and def.is_ground_content and def.liquidtype == "none") or - name == tsm_railcorridors.nodes.cobweb or - name == tsm_railcorridors.nodes.torch_wall or - name == tsm_railcorridors.nodes.torch_floor or - (can_replace_rail and name == tsm_railcorridors.nodes.rail) - ) then - minetest.set_node(pos, node) - return true - else - return false - end -end - --- Tries to place a rail, taking the damage chance into account -local function PlaceRail(pos, damage_chance) - if damage_chance and damage_chance > 0 then - local x = pr:next(0,100) - if x <= damage_chance then - return false - end - end - return SetNodeIfCanBuild(pos, {name=tsm_railcorridors.nodes.rail}) -end - --- Returns true if the node as point can be considered “ground”, that is, a solid material --- in which mine shafts can be built into, e.g. stone, but not air or water -local function IsGround(pos) - local nodename = minetest.get_node(pos).name - local nodedef = minetest.registered_nodes[nodename] - return nodename ~= "unknown" and nodename ~= "ignore" and nodedef and nodedef.is_ground_content and nodedef.walkable and nodedef.liquidtype == "none" -end - --- Returns true if rails are allowed to be placed on top of this node -local function IsRailSurface(pos) - local nodename = minetest.get_node(pos).name - local nodename_above = minetest.get_node({x=pos.x,y=pos.y+2,z=pos.z}).name - local nodedef = minetest.registered_nodes[nodename] - return nodename ~= "unknown" and nodename ~= "ignore" and nodedef and nodedef.walkable and (nodedef.node_box == nil or nodedef.node_box.type == "regular") and nodename_above ~= tsm_railcorridors.nodes.rail -end - --- Checks if the node is empty space which requires to be filled by a platform -local function NeedsPlatform(pos) - local node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}) - local node2 = minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}) - local nodedef = minetest.registered_nodes[node.name] - local falling = minetest.get_item_group(node.name, "falling_node") == 1 - return - -- Node can be replaced if ground content or rail - (node.name ~= "ignore" and node.name ~= "unknown" and nodedef and nodedef.is_ground_content) and - -- Node needs platform if node below is not walkable. - -- Unless 2 nodes below there is dirt: This is a special case for the starter cube. - ((nodedef.walkable == false and node2.name ~= tsm_railcorridors.nodes.dirt) or - -- Falling nodes always need to be replaced by a platform, we want a solid and safe ground - falling), - -- second return value - falling -end - --- Create a cube filled with the specified nodes --- Specialties: --- * Avoids floating rails --- * May cut into wood structures of the corridors (alongside with their torches) --- Arguments: --- * p: Center position --- * radius: How many nodes from the center the cube will extend --- * node: Node to set --- * replace_air_only: If true, only air can be replaced --- * wood, post: Wood and post nodes of the railway corridor to cut into (optional) - --- Returns true if all nodes could be set --- Returns false if setting one or more nodes failed -local function Cube(p, radius, node, replace_air_only, wood, post) - local y_top = p.y+radius - local nodedef = minetest.registered_nodes[node.name] - local solid = nodedef.walkable and (nodedef.node_box == nil or nodedef.node_box.type == "regular") and nodedef.liquidtype == "none" - -- Check if all the nodes could be set - local built_all = true - - -- If wood has been removed, remod - local cleanup_torches = {} - for xi = p.x-radius, p.x+radius do - for zi = p.z-radius, p.z+radius do - local column_last_attached = nil - for yi = y_top, p.y-radius, -1 do - local ok = false - local thisnode = minetest.get_node({x=xi,y=yi,z=zi}) - if not solid then - if yi == y_top then - local topnode = minetest.get_node({x=xi,y=yi+1,z=zi}) - local topdef = minetest.registered_nodes[topnode.name] - if minetest.get_item_group(topnode.name, "attached_node") ~= 1 and topdef and topdef.liquidtype == "none" then - ok = true - end - elseif column_last_attached and yi == column_last_attached - 1 then - ok = false - else - ok = true - end - if minetest.get_item_group(thisnode.name, "attached_node") == 1 then - column_last_attached = yi - end - else - ok = true - end - local built = false - if ok then - if replace_air_only ~= true then - -- Cut into wood structures (post/wood) - if post and (xi == p.x or zi == p.z) and thisnode.name == post then - minetest.set_node({x=xi,y=yi,z=zi}, node) - built = true - elseif wood and (xi == p.x or zi == p.z) and thisnode.name == wood then - local topnode = minetest.get_node({x=xi,y=yi+1,z=zi}) - local topdef = minetest.registered_nodes[topnode.name] - if topdef and topdef.walkable and topnode.name ~= wood then - minetest.set_node({x=xi,y=yi,z=zi}, node) - -- Check for torches around the wood and schedule them - -- for removal - if node.name == "air" then - table.insert(cleanup_torches, {x=xi+1,y=yi,z=zi}) - table.insert(cleanup_torches, {x=xi-1,y=yi,z=zi}) - table.insert(cleanup_torches, {x=xi,y=yi,z=zi+1}) - table.insert(cleanup_torches, {x=xi,y=yi,z=zi-1}) - end - built = true - end - -- Set node normally - else - built = SetNodeIfCanBuild({x=xi,y=yi,z=zi}, node) - end - else - if minetest.get_node({x=xi,y=yi,z=zi}).name == "air" then - built = SetNodeIfCanBuild({x=xi,y=yi,z=zi}, node) - end - end - end - if not built then - built_all = false - end - end - end - end - -- Remove torches we have detected before - for c=1, #cleanup_torches do - local check = minetest.get_node(cleanup_torches[c]) - if check.name == tsm_railcorridors.nodes.torch_wall or check.name == tsm_railcorridors.nodes.torch_floor then - minetest.set_node(cleanup_torches[c], node) - end - end - return built_all -end - -local function DirtRoom(p, radius, height, dirt_mode, decorations_mode) - local y_bottom = p.y - local y_top = y_bottom + height + 1 - dirt_room_coords = { - min = { x = p.x-radius, y = y_bottom, z = p.z-radius }, - max = { x = p.x+radius, y = y_top, z = p.z+radius }, - } - local built_all = true - for xi = p.x-radius, p.x+radius do - for zi = p.z-radius, p.z+radius do - for yi = y_top, y_bottom, -1 do - local thisnode = minetest.get_node({x=xi,y=yi,z=zi}) - local built = false - if xi == p.x-radius or xi == p.x+radius or zi == p.z-radius or zi == p.z+radius or yi == y_bottom or yi == y_top then - if dirt_mode == 1 or yi == y_bottom then - built = SetNodeIfCanBuild({x=xi,y=yi,z=zi}, {name=tsm_railcorridors.nodes.dirt}) - elseif (dirt_mode == 2 or dirt_mode == 3) and yi == y_top then - if minetest.get_item_group(thisnode.name, "falling_node") == 1 then - built = SetNodeIfCanBuild({x=xi,y=yi,z=zi}, {name=tsm_railcorridors.nodes.dirt}) - end - end - else - if yi == y_bottom + 1 then - -- crazy rails - if decorations_mode == 1 then - local r = pr_deco:next(1,3) - if r == 2 then - built = SetNodeIfCanBuild({x=xi,y=yi,z=zi}, {name=tsm_railcorridors.nodes.rail}) - end - end - end - if not built then - built = SetNodeIfCanBuild({x=xi,y=yi,z=zi}, {name="air"}) - end - end - if not built then - built_all = false - end - end - end - end - return built_all -end - -local function Platform(p, radius, node, node2) - -- node2 is secondary platform material for replacing falling nodes - if not node2 then - node2 = { name = tsm_railcorridors.nodes.dirt } - end - for zi = p.z-radius, p.z+radius do - for xi = p.x-radius, p.x+radius do - local np, np2 = NeedsPlatform({x=xi,y=p.y,z=zi}) - if np then - if np2 then - minetest.set_node({x=xi,y=p.y-1,z=zi}, node2) - else - minetest.set_node({x=xi,y=p.y-1,z=zi}, node) - end - end - end - end -end - --- Chests -local function PlaceChest(pos, param2) - if SetNodeIfCanBuild(pos, {name=tsm_railcorridors.nodes.chest, param2=param2}) then - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local items = tsm_railcorridors.get_treasures(pr) - mcl_loot.fill_inventory(inv, "main", items, pr) - end -end - --- This function checks if a cart has ACTUALLY been spawned. --- To be calld by minetest.after. --- This is a workaround thanks to the fact that minetest.add_entity is unreliable as fuck --- See: https://github.com/minetest/minetest/issues/4759 --- FIXME: Kill this horrible hack with fire as soon you can. -local function RecheckCartHack(params) - local pos = params[1] - local cart_id = params[2] - -- Find cart - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do - if obj and obj:get_luaentity().name == cart_id then - -- Cart found! We can now safely call the callback func. - -- (calling it earlier has the danger of failing) - minetest.log("info", "[tsm_railcorridors] Cart spawn succeeded: "..minetest.pos_to_string(pos)) - tsm_railcorridors.on_construct_cart(pos, obj) - return - end - end - minetest.log("info", "[tsm_railcorridors] Cart spawn FAILED: "..minetest.pos_to_string(pos)) -end - --- Try to place a cobweb. --- pos: Position of cobweb --- needs_check: If true, checks if any of the nodes above, below or to the side of the cobweb. --- side_vector: Required if needs_check is true. Unit vector which points towards the side of the cobweb to place. -local function TryPlaceCobweb(pos, needs_check, side_vector) - local check_passed = false - if needs_check then - -- Check for walkable nodes above, below or at the side of the cobweb. - -- If any of those nodes is walkable, we are fine. - local check_vectors = { - side_vector, - {x=0, y=1, z=0}, - {x=0, y=-1, z=0}, - } - - for c=1, #check_vectors do - - local cpos = vector.add(pos, check_vectors[c]) - local cname = minetest.get_node(cpos).name - local cdef = minetest.registered_nodes[cname] - if cname ~= "ignore" and cdef and cdef.walkable then - check_passed = true - break - end - end - - else - check_passed = true - end - - if check_passed then - return SetNodeIfCanBuild(pos, {name=tsm_railcorridors.nodes.cobweb}) - else - return false - end -end - --- 4 wooden pillars around pos at height -local function WoodBulk(pos, height, wood) - for y=0, height-1 do - SetNodeIfCanBuild({x=pos.x+1, y=pos.y+y, z=pos.z+1}, {name=wood}, false, true) - SetNodeIfCanBuild({x=pos.x-1, y=pos.y+y, z=pos.z+1}, {name=wood}, false, true) - SetNodeIfCanBuild({x=pos.x+1, y=pos.y+y, z=pos.z-1}, {name=wood}, false, true) - SetNodeIfCanBuild({x=pos.x-1, y=pos.y+y, z=pos.z-1}, {name=wood}, false, true) - end -end - --- Build a wooden support frame -local function WoodSupport(p, wood, post, torches, dir, torchdir) - local node_wood = {name=wood} - local node_fence = {name=post} - - local calc = { - p.x+dir[1], p.z+dir[2], -- X and Z, added by direction - p.x-dir[1], p.z-dir[2], -- subtracted - p.x+dir[2], p.z+dir[1], -- orthogonal - p.x-dir[2], p.z-dir[1], -- orthogonal, the other way - } - --[[ Shape: - WWW - P.P - PrP - pfp - W = wood - P = post (above floor level) - p = post (in floor level, only placed if no floor) - - From previous generation (for reference): - f = floor - r = rail - . = air - ]] - - -- Don't place those wood structs below open air - if not (minetest.get_node({x=calc[1], y=p.y+2, z=calc[2]}).name == "air" and - minetest.get_node({x=calc[3], y=p.y+2, z=calc[4]}).name == "air" and - minetest.get_node({x=p.x, y=p.y+2, z=p.z}).name == "air") then - - -- Left post and planks - local left_ok - left_ok = SetNodeIfCanBuild({x=calc[1], y=p.y-1, z=calc[2]}, node_fence) - if left_ok then left_ok = SetNodeIfCanBuild({x=calc[1], y=p.y , z=calc[2]}, node_fence) end - if left_ok then left_ok = SetNodeIfCanBuild({x=calc[1], y=p.y+1, z=calc[2]}, node_wood, false, true) end - - -- Right post and planks - local right_ok - right_ok = SetNodeIfCanBuild({x=calc[3], y=p.y-1, z=calc[4]}, node_fence) - if right_ok then right_ok = SetNodeIfCanBuild({x=calc[3], y=p.y , z=calc[4]}, node_fence) end - if right_ok then right_ok = SetNodeIfCanBuild({x=calc[3], y=p.y+1, z=calc[4]}, node_wood, false, true) end - - -- Middle planks - local top_planks_ok = false - if left_ok and right_ok then top_planks_ok = SetNodeIfCanBuild({x=p.x, y=p.y+1, z=p.z}, node_wood) end - - if minetest.get_node({x=p.x,y=p.y-2,z=p.z}).name=="air" then - if left_ok then SetNodeIfCanBuild({x=calc[1], y=p.y-2, z=calc[2]}, node_fence) end - if right_ok then SetNodeIfCanBuild({x=calc[3], y=p.y-2, z=calc[4]}, node_fence) end - end - -- Torches on the middle planks - if torches and top_planks_ok then - -- Place torches at horizontal sides - SetNodeIfCanBuild({x=calc[5], y=p.y+1, z=calc[6]}, {name=tsm_railcorridors.nodes.torch_wall, param2=torchdir[1]}, true) - SetNodeIfCanBuild({x=calc[7], y=p.y+1, z=calc[8]}, {name=tsm_railcorridors.nodes.torch_wall, param2=torchdir[2]}, true) - end - elseif torches then - -- Try to build torches instead of the wood structs - local node = {name=tsm_railcorridors.nodes.torch_floor, param2=minetest.dir_to_wallmounted({x=0,y=-1,z=0})} - - -- Try two different height levels - local pos1 = {x=calc[1], y=p.y-2, z=calc[2]} - local pos2 = {x=calc[3], y=p.y-2, z=calc[4]} - local nodedef1 = minetest.registered_nodes[minetest.get_node(pos1).name] - local nodedef2 = minetest.registered_nodes[minetest.get_node(pos2).name] - - if nodedef1 and nodedef1.walkable then - pos1.y = pos1.y + 1 - end - SetNodeIfCanBuild(pos1, node, true) - - if nodedef2 and nodedef2.walkable then - pos2.y = pos2.y + 1 - end - SetNodeIfCanBuild(pos2, node, true) - - end -end - --- Dig out a single corridor section and place wooden structures and torches - --- Returns , --- success: true if corridor could be placed entirely --- segments: Number of segments successfully placed -local function dig_corridor_section(start_point, segment_vector, segment_count, wood, post, up_or_down_prev) - local p = {x=start_point.x, y=start_point.y, z=start_point.z} - local torches = pr:next() < probability_torches_in_segment - local dir = {0, 0} - local torchdir = {1, 1} - local node_wood = {name=wood} - if segment_vector.x == 0 and segment_vector.z ~= 0 then - dir = {1, 0} - torchdir = {5, 4} - elseif segment_vector.x ~= 0 and segment_vector.z == 0 then - dir = {0, 1} - torchdir = {3, 2} - end - for segmentindex = 0, segment_count-1 do - local dug - if segment_vector.y == 0 then - dug = Cube(p, 1, {name="air"}, false, wood, post) - else - dug = Cube(p, 1, {name="air"}, false) - end - if not chaos_mode and segmentindex > 0 and not dug then return false, segmentindex end - -- Add wooden platform, if neccessary. To avoid floating rails - if segment_vector.y == 0 then - if segmentindex == 0 and up_or_down_prev then - -- Thin 1×1 platform directly after going up or down. - -- This is done to avoid placing too much wood at slopes - Platform({x=p.x-dir[2], y=p.y-1, z=p.z-dir[1]}, 0, node_wood) - Platform({x=p.x, y=p.y-1, z=p.z}, 0, node_wood) - Platform({x=p.x+dir[2], y=p.y-1, z=p.z+dir[1]}, 0, node_wood) - else - -- Normal 3×3 platform - Platform({x=p.x, y=p.y-1, z=p.z}, 1, node_wood) - end - else - -- Sloped bridge - Platform({x=p.x-dir[1], y=p.y-2, z=p.z-dir[2]}, 0, node_wood) - Platform({x=p.x, y=p.y-2, z=p.z}, 0, node_wood) - Platform({x=p.x+dir[1], y=p.y-2, z=p.z+dir[2]}, 0, node_wood) - end - if segmentindex % 2 == 1 and segment_vector.y == 0 then - WoodSupport(p, wood, post, torches, dir, torchdir) - end - - -- Next way point - p = vector.add(p, segment_vector) - end - - -- End of the corridor segment; create the final piece - local dug - if segment_vector.y == 0 then - dug = Cube(p, 1, {name="air"}, false, wood, post) - else - dug = Cube(p, 1, {name="air"}, false) - end - if not chaos_mode and not dug then return false, segment_count end - if segment_vector.y == 0 then - Platform({x=p.x, y=p.y-1, z=p.z}, 1, node_wood) - end - return true, segment_count -end - --- Generate a corridor section. Corridor sections are part of a corridor line. --- This is one short part of a corridor line. It can be one straight section or it goes up or down. --- It digs out the corridor and places wood structs and torches using the helper function dig_corridor_function, --- then it places rails, chests, and other goodies. -local function create_corridor_section(waypoint, axis, sign, up_or_down, up_or_down_next, up_or_down_prev, up, wood, post, first_or_final, damage, no_spawner) - local segamount = 3 - if up_or_down then - segamount = 1 - end - if sign then - segamount = 0-segamount - end - local vek = {x=0,y=0,z=0}; - local start = table.copy(waypoint) - if axis == "x" then - vek.x=segamount - if up_or_down and up == false then - start.x=start.x+segamount - end - elseif axis == "z" then - vek.z=segamount - if up_or_down and up == false then - start.z=start.z+segamount - end - end - if up_or_down then - if up then - vek.y = 1 - else - vek.y = -1 - end - end - local segcount = pr:next(4,6) - if up_or_down and up == false then - Cube(waypoint, 1, {name="air"}, false) - end - local corridor_dug, corridor_segments_dug = dig_corridor_section(start, vek, segcount, wood, post, up_or_down_prev) - local corridor_vek = {x=vek.x*segcount, y=vek.y*segcount, z=vek.z*segcount} - - -- After this: rails - segamount = 1 - if sign then - segamount = 0-segamount - end - if axis == "x" then - vek.x=segamount - elseif axis == "z" then - vek.z=segamount - end - if up_or_down then - if up then - vek.y = 1 - else - vek.y = -1 - end - end - -- Calculate chest and cart position - local chestplace = -1 - local cartplace = -1 - local minseg - if first_or_final == "first" then - minseg = 2 - else - minseg = 1 - end - if corridor_dug and not up_or_down then - if pr:next() < probability_chest then - chestplace = pr:next(minseg, segcount+1) - end - if tsm_railcorridors.carts and #tsm_railcorridors.carts > 0 and pr:next() < probability_cart then - cartplace = pr:next(minseg, segcount+1) - end - end - local railsegcount - if not chaos_mode and not corridor_dug then - railsegcount = corridor_segments_dug * 3 - elseif not up_or_down then - railsegcount = segcount * 3 - else - railsegcount = segcount - end - for i=1,railsegcount do - local p = {x = waypoint.x + vek.x * i, y = waypoint.y + vek.y * i-1, z = waypoint.z + vek.z * i} - - -- Randomly returns either the left or right side of the main rail. - -- Also returns offset as second return value. - local function left_or_right(pos, vek) - local off - if pr:next(1, 2) == 1 then - -- left - off = {x = -vek.z, y= 0, z = vek.x} - else - -- right - off = {x=vek.z, y= 0, z= -vek.x} - end - return vector.add(pos, off), off - end - - if (minetest.get_node({x=p.x,y=p.y-1,z=p.z}).name=="air" and minetest.get_node({x=p.x,y=p.y-3,z=p.z}).name~=tsm_railcorridors.nodes.rail) then - p.y = p.y - 1; - if i == chestplace then - chestplace = chestplace + 1 - end - if i == cartplace then - cartplace = cartplace + 1 - end - end - - -- Chest - if i == chestplace then - local cpos, offset = left_or_right(p, vek) - if minetest.get_node(cpos).name == post or IsInDirtRoom(p) then - chestplace = chestplace + 1 - else - PlaceChest(cpos, minetest.dir_to_facedir(offset)) - end - end - - -- A rail at the side of the track to put a cart on - if i == cartplace and #tsm_railcorridors.carts > 0 then - local cpos = left_or_right(p, vek) - if minetest.get_node(cpos).name == post then - cartplace = cartplace + 1 - else - local placed - if IsRailSurface({x=cpos.x, y=cpos.y-1, z=cpos.z}) then - placed = PlaceRail(cpos, damage) - else - placed = false - end - if placed then - -- We don't put on a cart yet, we put it in the carts table - -- for later placement - local cart_type = pr_carts:next(1, #tsm_railcorridors.carts) - table.insert(carts_table, {pos = cpos, cart_type = cart_type}) - end - end - end - - -- Mob spawner (at center) - if place_mob_spawners and tsm_railcorridors.nodes.spawner and not no_spawner and - webperlin_major:get_3d(p) > 0.3 and webperlin_minor:get_3d(p) > 0.5 then - -- Place spawner (if activated in gameconfig), - -- enclose in cobwebs and setup the spawner node. - local spawner_placed = SetNodeIfCanBuild(p, {name=tsm_railcorridors.nodes.spawner}) - if spawner_placed then - local size = 1 - if webperlin_major:get_3d(p) > 0.5 then - size = 2 - end - if place_cobwebs then - Cube(p, size, {name=tsm_railcorridors.nodes.cobweb}, true) - end - tsm_railcorridors.on_construct_spawner(p) - no_spawner = true - end - end - - -- Main rail; this places almost all the rails - if IsRailSurface({x=p.x,y=p.y-1,z=p.z}) then - PlaceRail(p, damage) - end - - -- Place cobwebs left and right in the corridor - if place_cobwebs and tsm_railcorridors.nodes.cobweb then - -- Helper function to place a cobweb at the side (based on chance an Perlin noise) - local function cobweb_at_side(basepos, vek) - if pr:next(1,5) == 1 then - local h = pr:next(0, 2) -- 3 possible cobweb heights - local cpos = {x=basepos.x+vek.x, y=basepos.y+h, z=basepos.z+vek.z} - if webperlin_major:get_3d(cpos) > 0.05 and webperlin_minor:get_3d(cpos) > 0.1 then - if h == 0 then - -- No check neccessary at height offset 0 since the cobweb is on the floor - return TryPlaceCobweb(cpos) - else - -- Check nessessary - return TryPlaceCobweb(cpos, true, vek) - end - end - end - return false - end - - -- Right cobweb - local rvek = {x=-vek.z, y=0, z=vek.x} - cobweb_at_side(p, rvek) - - -- Left cobweb - local lvek = {x=vek.z, y=0, z=-vek.x} - cobweb_at_side(p, lvek) - - end - end - - local offset = table.copy(corridor_vek) - local final_point = vector.add(waypoint, offset) - if up_or_down then - if up then - offset.y = offset.y - 1 - final_point = vector.add(waypoint, offset) - else - offset[axis] = offset[axis] + segamount - final_point = vector.add(waypoint, offset) - end - -- After going up or down, 1 missing rail piece must be added - Platform({x=final_point.x,y=final_point.y-1,z=final_point.z}, 0, {name=wood}) - if IsRailSurface({x=final_point.x,y=final_point.y-2,z=final_point.z}) then - PlaceRail({x=final_point.x,y=final_point.y-1,z=final_point.z}, damage) - end - end - if not corridor_dug then - return false, no_spawner - else - return final_point, no_spawner - end -end - --- Generate a line of corridors. --- The corridor can go up/down, take turns and it can branch off, creating more corridor lines. -local function create_corridor_line(waypoint, axis, sign, length, wood, post, damage, no_spawner) - local wp = waypoint - local a = axis - local s = sign - local ud = false -- Up or down - local udn = false -- Up or down is next - local udp -- Up or down was previous - local up = false -- true if going up - local upp = false -- true if was going up previously - for i=1,length do - -- Update previous up/down status - udp = ud - -- Can't go up/down if a platform is needed at waypoint - local needs_platform = NeedsPlatform({x=wp.x,y=wp.y-2,z=wp.z}) - -- Update current up/down status - if udn and not needs_platform then - ud = true - -- Force direction near the height limits - if wp.y >= height_max - 12 then - if udp then - ud = false - end - up = false - elseif wp.y <= height_min + 12 then - if udp then - ud = false - end - up = true - else - -- If previous was up/down, keep the vertical direction - if udp and not chaos_mode then - up = upp - else - -- Chose random direction - up = pr:next(1, 2) == 1 - end - end - upp = up - else - ud = false - end - -- Update next up/down status - if pr:next() < probability_up_or_down and i~=1 and not udn and not needs_platform then - udn = i < length - elseif udn and not needs_platform then - udn = false - end - -- Make corridor - local first_or_final - if i == length then - first_or_final = "final" - elseif i == 1 then - first_or_final = "first" - end - wp, no_spawner = create_corridor_section(wp,a,s, ud, udn, udp, up, wood, post, first_or_final, damage, no_spawner) - if wp == false then return end - -- Fork in the road? If so, starts 2-3 new corridor lines and terminates the current one. - if pr:next() < probability_fork then - -- 75% chance to fork off in 3 directions (making a crossing) - -- 25% chance to fork off in 2 directions (making a t-junction) - local is_crossing = pr:next(0, 3) < 3 - local forks = 2 - if is_crossing then - forks = 3 - end - local p = {x=wp.x, y=wp.y, z=wp.z} - local a2 - if a == "x" then - a2="z" - else - a2="x" - end - local fork_dirs = { - {a2, s}, -- to the side - {a2, not s}, -- to the other side - {a, s}, -- straight ahead - } - for f=1, forks do - local r = pr:next(1, #fork_dirs) - create_corridor_line(wp, fork_dirs[r][1], fork_dirs[r][2], pr:next(way_min,way_max), wood, post, damage, no_spawner) - table.remove(fork_dirs, r) - end - if is_crossing and not IsInDirtRoom(p) then - -- 4 large wooden pillars around the center rail - WoodBulk({x=p.x, y=p.y-1, z=p.z}, 4, wood) - end - return - end - -- Randomly change sign, toggle axis. - -- In other words, take a turn. - if a=="x" then - a="z" - elseif a=="z" then - a="x" - end; - s = pr:next(1, 2) == 1 - end -end - --- Spawns all carts in the carts table and clears the carts table afterwards -local function spawn_carts() - for c=1, #carts_table do - local cpos = carts_table[c].pos - local cart_type = carts_table[c].cart_type - local node = minetest.get_node(cpos) - if node.name == tsm_railcorridors.nodes.rail then - -- FIXME: The cart sometimes fails to spawn - -- See - local cart_id = tsm_railcorridors.carts[cart_type] - minetest.log("info", "[tsm_railcorridors] Cart spawn attempt: "..minetest.pos_to_string(cpos)) - minetest.add_entity(cpos, cart_id) - - -- This checks if the cart is actually spawned, it's a giant hack! - -- Note that the callback function is also called there. - -- TODO: Move callback function to this position when the - -- minetest.add_entity bug has been fixed. - minetest.after(3, RecheckCartHack, {cpos, cart_id}) - end - end - carts_table = {} -end - --- Start generation of a rail corridor system --- main_cave_coords is the center of the floor of the dirt room, from which --- all corridors expand. -local function create_corridor_system(main_cave_coords) - - -- Dirt room size - local maxsize = 6 - if chaos_mode then - maxsize = 9 - end - local size = pr:next(3, maxsize) - - --[[ Only build if starter coords are in the ground. - Prevents corridors starting in mid-air or in liquids. ]] - local check_coords = { - -- Center of the room, on the floor - {x=0,y=0,z=0}, - -- Also check near the 4 bottom corners of the dirt room - {x= size-1, y=0, z=size-1}, - {x=-size+1, y=0, z=size-1}, - {x= size-1, y=0, z=-size+1}, - {x=-size+1, y=0, z=-size+1}, - } - for c=1, #check_coords do - if not IsGround(vector.add(main_cave_coords, check_coords[c])) then - return false - end - end - - local center_node = minetest.get_node(main_cave_coords) - - local height = pr:next(4, 7) - if height > size then - height = size - end - local floor_diff = 1 - if pr:next(0, 100) < 50 then - floor_diff = 0 - end - local dirt_mode = pr:next(1,2) - local rnd = pr:next(1,1000) - -- Small chance to fill dirt room with random rails - local decorations_mode = 0 - if rnd == 1000 then - decorations_mode = 1 - end - - --[[ Starting point: A big hollow dirt cube from which the corridors will extend. - Corridor generation starts here. ]] - DirtRoom(main_cave_coords, size, height, dirt_mode, decorations_mode) - main_cave_coords.y = main_cave_coords.y + 2 + floor_diff - - -- Determine if this corridor system is “damaged” (some rails removed) and to which extent - local damage = 0 - if pr:next() < probability_damage then - damage = pr:next(10, 50) - end - - -- Get wood and fence post types, using gameconfig. - - local wood, post - if tsm_railcorridors.nodes.corridor_woods_function then - -- Get wood type by gameconfig function - wood, post = tsm_railcorridors.nodes.corridor_woods_function(main_cave_coords, center_node) - else - -- Select random wood type (found in gameconfig.lua) - local rnd = pr:next(1,1000) - local woodtype = 1 - local accumulated_chance = 0 - - for w=1, #tsm_railcorridors.nodes.corridor_woods do - local woodtable = tsm_railcorridors.nodes.corridor_woods[w] - accumulated_chance = accumulated_chance + woodtable.chance - if rnd <= accumulated_chance then - woodtype = w - break - end - end - wood = tsm_railcorridors.nodes.corridor_woods[woodtype].wood - post = tsm_railcorridors.nodes.corridor_woods[woodtype].post - end - - -- Start 2-4 corridors in each direction - local dirs = { - {axis="x", axis2="z", sign=false}, - {axis="x", axis2="z", sign=true}, - {axis="z", axis2="x", sign=false}, - {axis="z", axis2="x", sign=true}, - } - local first_corridor - local corridors = 2 - for _=1, 2 do - if pr:next(0,100) < 70 then - corridors = corridors + 1 - end - end - -- Chance for 5th corridor in Chaos Mode - if chaos_mode and size > 4 then - if pr:next(0,100) < 50 then - corridors = corridors + 1 - end - end - local centered_crossing = false - if corridors <= 4 and pr:next(1, 20) >= 11 then - centered_crossing = true - end - -- This moves the start of the corridors in the dirt room back and forth - local d_max = 3 - if floor_diff == 1 and height <= 4 then - d_max = d_max + 1 - end - local from_center_base = size - pr:next(1,d_max) - for i=1, math.min(4, corridors) do - local d = pr:next(1, #dirs) - local dir = dirs[d] - local side_offset = 0 - if not centered_crossing and size > 3 then - if i==1 and corridors == 5 then - side_offset = pr:next(2, size-2) - if pr:next(1,2) == 1 then - side_offset = -side_offset - end - else - side_offset = pr:next(-size+2, size-2) - end - end - local from_center = from_center_base - if dir.sign then - from_center = -from_center - end - if i == 1 then - first_corridor = {sign=dir.sign, axis=dir.axis, axis2=dir.axis2, side_offset=side_offset, from_center=from_center} - end - local coords = vector.add(main_cave_coords, {[dir.axis] = from_center, y=0, [dir.axis2] = side_offset}) - create_corridor_line(coords, dir.axis, dir.sign, pr:next(way_min,way_max), wood, post, damage, false) - table.remove(dirs, d) - end - if corridors == 5 then - local special_coords = vector.add(main_cave_coords, {[first_corridor.axis2] = -first_corridor.side_offset, y=0, [first_corridor.axis] = first_corridor.from_center}) - create_corridor_line(special_coords, first_corridor.axis, first_corridor.sign, pr:next(way_min,way_max), wood, post, damage, false) - end - - -- At this point, all corridors were generated and all nodes were set. - -- We spawn the carts now - spawn_carts() - - return true -end - --- The rail corridor algorithm starts here -mcl_mapgen_core.register_generator("railcorridors", nil, function(minp, maxp, blockseed, _pr) - -- We re-init the randomizer for every mapchunk as we start generating in the middle of each mapchunk. - -- We can't use the mapgen seed as this would make the algorithm depending on the order the mapchunk generate. - InitRandomizer(blockseed) - if minp.y < height_max and maxp.y > height_min and pr:next() < probability_railcaves_in_mapchunk then - -- Keep some distance from the upper/lower mapchunk limits - local buffer = 5 - - -- Do up to 10 tries to start a corridor system - for t=1,10 do - -- Get semi-random height in mapchunk - local y = pr:next(minp.y + buffer, maxp.y - buffer) - y = math.floor(math.max(height_min + buffer, math.min(height_max - buffer, y))) - - -- Mid point of the mapchunk - local p = {x=minp.x+math.floor((maxp.x-minp.x)/2), y=y, z=minp.z+math.floor((maxp.z-minp.z)/2)} - -- Start corridor system at p. Might fail if p is in open air - minetest.log("verbose", "[tsm_railcorridors] Attempting to start rail corridor system at "..minetest.pos_to_string(p)) - if create_corridor_system(p, pr) then - minetest.log("info", "[tsm_railcorridors] Generated rail corridor system at "..minetest.pos_to_string(p)) - break - else - minetest.log("info", "[tsm_railcorridors] Rail corridor system generation attempt failed at "..minetest.pos_to_string(p).. " (try "..t..")") - end - end - end -end, 10) diff --git a/mods/MAPGEN/tsm_railcorridors/mod.conf b/mods/MAPGEN/tsm_railcorridors/mod.conf deleted file mode 100644 index c846cff19..000000000 --- a/mods/MAPGEN/tsm_railcorridors/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = tsm_railcorridors -author = UgnilJoZ -description = Adds simple underground mines with railways and occasional treasure chests. -depends = mcl_init, mcl_worlds, mcl_core, mcl_mapgen_core, mcl_loot, mcl_tnt, mcl_farming, mcl_mobspawners, mcl_minecarts diff --git a/mods/MAPGEN/tsm_railcorridors/settingtypes.txt b/mods/MAPGEN/tsm_railcorridors/settingtypes.txt deleted file mode 100644 index a28962907..000000000 --- a/mods/MAPGEN/tsm_railcorridors/settingtypes.txt +++ /dev/null @@ -1,41 +0,0 @@ -#Probability (0.0 to 1.0) for every newly generated mapchunk to get rail corridors. -tsm_railcorridors_probability_railcaves_in_mapchunk (Rail corridor probability) float 0.33333 0.0 1.0 - -#Minimum rail corridor path length (excludes forks). -tsm_railcorridors_way_min (Minimum rail corridor length) int 4 1 - -#Maximum rail corridor path length (excludes forks). -tsm_railcorridors_way_max (Maximum rail corridor length) int 7 1 - -#Probability (0.0 to 1.0) for every horizontal part of a rail corridor to have torches. -tsm_railcorridors_probability_torches_in_segment (Torch probability) float 0.5 0.0 1.0 - -#Probability (0.0 to 1.0) for every part of a rail corridor to go up or down. -tsm_railcorridors_probability_up_or_down (Stairway probability) float 0.2 0.0 1.0 - -#Probability (0.0 to 1.0) for every part of a rail corridor to fork. -#Caution! Too high values may cause Minetest to hang. -tsm_railcorridors_probability_fork (Fork probability) float 0.04 0.0 1.0 - -#Probability (0.0 to 1.0) for every part of a rail corridor to contain a treasure chest. -tsm_railcorridors_probability_chest (Chest probability) float 0.05 0.0 1.0 - -#Probability (0.0 to 1.0) for every part of a rail corridor to include a cart. -#Note: The rail may still be subject to rail damage, so the probability -#of finding a cart in rail corridors with high rail damage will be lower. -#NOTE: Due to a bug in Minetest -#carts often fail to spawn even if they should. -tsm_railcorridors_probability_cart (Cart probability) float 0.0 0.0 1.0 - -#If enabled, cobwebs may be placed in some corridors. -#Currently, cobwebs are only supported with the Mobs Redo mod. -tsm_railcorridors_place_cobwebs (Cobwebs) bool true - -#Probability (0.0 to 1.0) for a rail corridor system to have damaged/incomplete railways -tsm_railcorridors_probability_damage (Damaged railway probability) float 1.0 0.0 1.0 - -#If enabled, rail corridors continue to generate through obstacles such -#as other rail corridors (without destroying them, mostly). This may lead -#to pretty chaotic rail corridors, but they are also more free to spread. -#If disabled, rail corridors spread in a orderly fashion. -tsm_railcorridors_chaos (Chaos Mode) bool false diff --git a/mods/MISC/findbiome/README.md b/mods/MISC/findbiome/README.md deleted file mode 100644 index 04c63199a..000000000 --- a/mods/MISC/findbiome/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Minetest mod: findbiome - -## Description -This is a mod to help with mod/game development for Minetest. -It adds a command (“findbiome”) to find a biome nearby and teleport you to it -and another command (“listbiomes”) to list biomes. - -Version: 1.0.1 - -## Known limitations -There's no guarantee you will always find the biome, even if it exists in the world. -This can happen if the biome is very obscure or small, but usually you should be -able to find the biome. - -If the biome could not be found, just move to somewhere else and try again. - -## Authors -- paramat (MIT License) -- Wuzzy (MIT License) - -See license.txt for license information. - -This mod is based on the algorithm of the "spawn" mod from Minetest Game 5.0.0. diff --git a/mods/MISC/findbiome/init.lua b/mods/MISC/findbiome/init.lua deleted file mode 100644 index 8560d1607..000000000 --- a/mods/MISC/findbiome/init.lua +++ /dev/null @@ -1,320 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_biomeinfo = minetest.get_modpath("biomeinfo") -local mg_name = minetest.get_mapgen_setting("mg_name") -local water_level = tonumber(minetest.get_mapgen_setting("water_level")) - --- Calculate the maximum playable limit -local mapgen_limit = tonumber(minetest.get_mapgen_setting("mapgen_limit")) -local chunksize = tonumber(minetest.get_mapgen_setting("chunksize")) -local playable_limit = math.max(mapgen_limit - (chunksize + 1) * 16, 0) - --- Parameters -------------- - --- Resolution of search grid in nodes. -local res = 64 --- Number of points checked in the square search grid (edge * edge). -local checks = 128 * 128 - --- End of parameters --------------------- - --- Direction table - -local dirs = { - {x = 0, y = 0, z = 1}, - {x = -1, y = 0, z = 0}, - {x = 0, y = 0, z = -1}, - {x = 1, y = 0, z = 0}, -} - --- Returns true if pos is within the world boundaries -local function is_in_world(pos) - return not (math.abs(pos.x) > playable_limit or math.abs(pos.y) > playable_limit or math.abs(pos.z) > playable_limit) -end - --- Checks if pos is within the biome's boundaries. If it isn't, places pos inside the boundaries. -local function adjust_pos_to_biome_limits(pos, biome_id) - local bpos = table.copy(pos) - local biome_name = minetest.get_biome_name(biome_id) - local biome = minetest.registered_biomes[biome_name] - if not biome then - minetest.log("error", "[findbiome] adjust_pos_to_biome_limits non-existing biome!") - return bpos, true - end - local axes = {"y", "x", "z"} - local out_of_bounds = false - for a=1, #axes do - local ax = axes[a] - local min, max - if biome[ax.."_min"] then - min = biome[ax.."_min"] - else - min = -playable_limit - end - if biome[ax.."_max"] then - max = biome[ax.."_max"] - else - max = playable_limit - end - min = tonumber(min) - max = tonumber(max) - if bpos[ax] < min then - out_of_bounds = true - bpos[ax] = min - if max-min > 16 then - bpos[ax] = math.max(bpos[ax] + 8, -playable_limit) - end - end - if bpos[ax] > max then - out_of_bounds = true - bpos[ax] = max - if max-min > 16 then - bpos[ax] = math.min(bpos[ax] - 8, playable_limit) - end - end - end - return bpos, out_of_bounds -end - --- Find the special default biome -local function find_default_biome() - local all_biomes = minetest.registered_biomes - local biome_count = 0 - for b, biome in pairs(all_biomes) do - biome_count = biome_count + 1 - end - -- Trivial case: No biomes registered, default biome is everywhere. - if biome_count == 0 then - local y = minetest.get_spawn_level(0, 0) - if not y then - y = 0 - end - return { x = 0, y = y, z = 0 } - end - local pos = {} - -- Just check a lot of random positions - -- It's a crappy algorithm but better than nothing. - for i=1, 100 do - pos.x = math.random(-playable_limit, playable_limit) - pos.y = math.random(-playable_limit, playable_limit) - pos.z = math.random(-playable_limit, playable_limit) - local biome_data = minetest.get_biome_data(pos) - if biome_data and minetest.get_biome_name(biome_data.biome) == "default" then - return pos - end - end - return nil -end - -local function find_biome(pos, biomes) - pos = vector.round(pos) - -- Pos: Starting point for biome checks. This also sets the y co-ordinate for all - -- points checked, so the suitable biomes must be active at this y. - - -- Initial variables - - local edge_len = 1 - local edge_dist = 0 - local dir_step = 0 - local dir_ind = 1 - local success - local spawn_pos - local biome_ids - - -- Get next position on square search spiral - local function next_pos() - if edge_dist == edge_len then - edge_dist = 0 - dir_ind = dir_ind + 1 - if dir_ind == 5 then - dir_ind = 1 - end - dir_step = dir_step + 1 - edge_len = math.floor(dir_step / 2) + 1 - end - - local dir = dirs[dir_ind] - local move = vector.multiply(dir, res) - - edge_dist = edge_dist + 1 - - return vector.add(pos, move) - end - - -- Position search - local function search() - local attempt = 1 - while attempt < 3 do - for iter = 1, checks do - local biome_data = minetest.get_biome_data(pos) - -- Sometimes biome_data is nil - local biome = biome_data and biome_data.biome - for id_ind = 1, #biome_ids do - local biome_id = biome_ids[id_ind] - pos = adjust_pos_to_biome_limits(pos, biome_id) - local spos = table.copy(pos) - if biome == biome_id then - local good_spawn_height = pos.y <= water_level + 16 and pos.y >= water_level - local spawn_y = minetest.get_spawn_level(spos.x, spos.z) - if spawn_y then - spawn_pos = {x = spos.x, y = spawn_y, z = spos.z} - elseif not good_spawn_height then - spawn_pos = {x = spos.x, y = spos.y, z = spos.z} - elseif attempt >= 2 then - spawn_pos = {x = spos.x, y = spos.y, z = spos.z} - end - if spawn_pos then - local _,outside = adjust_pos_to_biome_limits(spawn_pos, biome_id) - if is_in_world(spawn_pos) and not outside then - return true - end - end - end - end - - pos = next_pos() - end - attempt = attempt + 1 - end - return false - end - local function search_v6() - if not mod_biomeinfo then return - false - end - for iter = 1, checks do - local found_biome = biomeinfo.get_v6_biome(pos) - for i = 1, #biomes do - local searched_biome = biomes[i] - if found_biome == searched_biome then - local spawn_y = minetest.get_spawn_level(pos.x, pos.z) - if spawn_y then - spawn_pos = {x = pos.x, y = spawn_y, z = pos.z} - if is_in_world(spawn_pos) then - return true - end - end - end - end - - pos = next_pos() - end - - return false - end - - if mg_name == "v6" then - success = search_v6() - else - -- Table of suitable biomes - biome_ids = {} - for i=1, #biomes do - local id = minetest.get_biome_id(biomes[i]) - if not id then - return nil, false - end - table.insert(biome_ids, id) - end - success = search() - end - return spawn_pos, success - -end - -local mods_loaded = false -minetest.register_on_mods_loaded(function() - mods_loaded = true -end) - --- Regiver chat commands -do - minetest.register_chatcommand("findbiome", { - description = S("Find and teleport to biome"), - params = S(""), - privs = { debug = true, teleport = true }, - func = function(name, param) - if not mods_loaded then - return false - end - local player = minetest.get_player_by_name(name) - if not player then - return false, S("No player.") - end - local pos = player:get_pos() - local invalid_biome = true - if mg_name == "v6" then - if not mod_biomeinfo then - return false, S("Not supported. The “biomeinfo” mod is required for v6 mapgen support!") - end - local biomes = biomeinfo.get_active_v6_biomes() - for b=1, #biomes do - if param == biomes[b] then - invalid_biome = false - break - end - end - else - if param == "default" then - local biome_pos = find_default_biome() - if biome_pos then - player:set_pos(biome_pos) - return true, S("Biome found at @1.", minetest.pos_to_string(biome_pos)) - else - return false, S("No biome found!") - end - end - local id = minetest.get_biome_id(param) - if id then - invalid_biome = false - end - end - if invalid_biome then - return false, S("Biome does not exist!") - end - local biome_pos, success = find_biome(pos, {param}) - if success then - player:set_pos(biome_pos) - return true, S("Biome found at @1.", minetest.pos_to_string(biome_pos)) - else - return false, S("No biome found!") - end - end, - }) - - minetest.register_chatcommand("listbiomes", { - description = S("List all biomes"), - params = "", - privs = { debug = true }, - func = function(name, param) - if not mods_loaded then - return false - end - local biomes - local b = 0 - if mg_name == "v6" then - if not mod_biomeinfo then - return false, S("Not supported. The “biomeinfo” mod is required for v6 mapgen support!") - end - biomes = biomeinfo.get_active_v6_biomes() - b = #biomes - else - biomes = {} - for k,v in pairs(minetest.registered_biomes) do - table.insert(biomes, k) - b = b + 1 - end - end - if b == 0 then - return true, S("No biomes.") - else - table.sort(biomes) - for b=1, #biomes do - minetest.chat_send_player(name, biomes[b]) - end - return true - end - end, - }) -end diff --git a/mods/MISC/findbiome/license.txt b/mods/MISC/findbiome/license.txt deleted file mode 100644 index a466aabdc..000000000 --- a/mods/MISC/findbiome/license.txt +++ /dev/null @@ -1,24 +0,0 @@ -License of source code ----------------------- - -The MIT License (MIT) -Copyright (C) 2018 paramat - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or -substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -For more details: -https://opensource.org/licenses/MIT diff --git a/mods/MISC/findbiome/locale/findbiome.de.tr b/mods/MISC/findbiome/locale/findbiome.de.tr deleted file mode 100644 index d62332eaf..000000000 --- a/mods/MISC/findbiome/locale/findbiome.de.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: findbiome -Find and teleport to biome=Ein Biom finden und hinteleportieren -= -No player.=Kein Spieler -Biome does not exist!=Biom existiert nicht! -Biome found at @1.=Biom gefunden bei @1. -No biome found!=Kein Biom gefunden! -List all biomes=Alle Biome auflisten -No biomes.=Keine Biome. -Not supported. The “biomeinfo” mod is required for v6 mapgen support!=Nicht unterstützt. Die Mod „biomeinfo“ wird für Unterstützung des v6-Kartengenerators benötigt. diff --git a/mods/MISC/findbiome/locale/findbiome.fr.tr b/mods/MISC/findbiome/locale/findbiome.fr.tr deleted file mode 100644 index 0fc6aa578..000000000 --- a/mods/MISC/findbiome/locale/findbiome.fr.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: findbiome -Find and teleport to biome=Rechercher et se téléporter sur le biome -= -No player.=Aucun joueur. -Biome does not exist!=Le biome n'existe pas! -Biome found at @1.=Biome trouvé à @1. -No biome found!=Aucun biome trouvé! -List all biomes=Lister tous les biomes -No biomes.=Aucun biomes. -Not supported. The “biomeinfo” mod is required for v6 mapgen support!=Non supporté. Le mod «biomeinfo» est requis pour le support de mapgen v6! diff --git a/mods/MISC/findbiome/locale/findbiome.pl.tr b/mods/MISC/findbiome/locale/findbiome.pl.tr deleted file mode 100644 index bc25b5758..000000000 --- a/mods/MISC/findbiome/locale/findbiome.pl.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: findbiome -Find and teleport to biome=Znajdź i teleportuj do biomu -= -No player.=Brak gracza. -Biome does not exist!=Biom nie istnieje! -Biome found at @1.=Nie znaleziono biomu w @1. -No biome found!=Nie znaleziono biomu! -List all biomes=Lista biomów. -No biomes.=Brak biomów. -Not supported. The “biomeinfo” mod is required for v6 mapgen support!=Nie wspierane. Aby wspierać generator map v6 wymagany jest mod "biomeinfo"! diff --git a/mods/MISC/findbiome/locale/findbiome.ru.tr b/mods/MISC/findbiome/locale/findbiome.ru.tr deleted file mode 100644 index c37371820..000000000 --- a/mods/MISC/findbiome/locale/findbiome.ru.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: findbiome -Find and teleport to biome=Найти и телепортироваться к биому -=<биом> -No player.=Нет игрока. -Biome does not exist!=Биом не существует! -Biome found at @1.=Биом найден в @1. -No biome found!=Биом не найден! -List all biomes=Список всех биомов -No biomes.=Нет биомов. -Not supported. The “biomeinfo” mod is required for v6 mapgen support!=Не поддерживается. Для поддержки мэпгена v6 требуется мод “biomeinfo”! diff --git a/mods/MISC/findbiome/locale/findbiome.zh_TW.tr b/mods/MISC/findbiome/locale/findbiome.zh_TW.tr deleted file mode 100644 index d84abda86..000000000 --- a/mods/MISC/findbiome/locale/findbiome.zh_TW.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: findbiome -Find and teleport to biome=找尋和傳送至生態域 -=<生態域> -No player.=沒有玩家。 -Biome does not exist!=生態域不存在! -Biome found at @1.=生態域在 @1 找到。 -No biome found!=生態域找不到! -List all biomes=列出所有生態域 -No biomes.=沒有生態域。 -Not supported. The “biomeinfo” mod is required for v6 mapgen support!=不支援。「biomeinfo」MOD要求v6世界生成器! diff --git a/mods/MISC/findbiome/locale/template.txt b/mods/MISC/findbiome/locale/template.txt deleted file mode 100644 index f3dcc1958..000000000 --- a/mods/MISC/findbiome/locale/template.txt +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: findbiome -Find and teleport to biome= -= -No player.= -Biome does not exist!= -Biome found at @1.= -No biome found!= -List all biomes= -No biomes.= -Not supported. The “biomeinfo” mod is required for v6 mapgen support!= diff --git a/mods/MISC/findbiome/mod.conf b/mods/MISC/findbiome/mod.conf deleted file mode 100644 index 918f18436..000000000 --- a/mods/MISC/findbiome/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = findbiome -author = paramat -description = Add commands to list and find biomes -optional_depends = biomeinfo diff --git a/mods/MISC/mcl_commands/LICENSE b/mods/MISC/mcl_commands/LICENSE deleted file mode 100644 index 2c4afabdb..000000000 --- a/mods/MISC/mcl_commands/LICENSE +++ /dev/null @@ -1,117 +0,0 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - - diff --git a/mods/MISC/mcl_commands/alias.lua b/mods/MISC/mcl_commands/alias.lua deleted file mode 100644 index 5c9ee9f3c..000000000 --- a/mods/MISC/mcl_commands/alias.lua +++ /dev/null @@ -1,30 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local function register_chatcommand_alias(alias, cmd) - local def = minetest.chatcommands[cmd] - minetest.register_chatcommand(alias, def) -end - -local function rename_chatcommand(newname, cmd) - local def = minetest.chatcommands[cmd] - minetest.register_chatcommand(newname, def) - minetest.unregister_chatcommand(cmd) -end - -if minetest.settings:get_bool("mcl_builtin_commands_overide", true) then - register_chatcommand_alias("?", "help") - register_chatcommand_alias("pardon", "unban") - rename_chatcommand("stop", "shutdown") - register_chatcommand_alias("tell", "msg") - register_chatcommand_alias("w", "msg") - register_chatcommand_alias("tp", "teleport") - rename_chatcommand("clear", "clearinv") - - minetest.register_chatcommand("banlist", { - description = S("List bans"), - privs = minetest.chatcommands["ban"].privs, - func = function(name) - return true, S("Ban list: @1", minetest.get_ban_list()) - end, - }) -end \ No newline at end of file diff --git a/mods/MISC/mcl_commands/init.lua b/mods/MISC/mcl_commands/init.lua deleted file mode 100644 index a287c2926..000000000 --- a/mods/MISC/mcl_commands/init.lua +++ /dev/null @@ -1,11 +0,0 @@ -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(modpath.."/kill.lua") -dofile(modpath.."/setblock.lua") -dofile(modpath.."/seed.lua") -dofile(modpath.."/summon.lua") -dofile(modpath.."/say.lua") -dofile(modpath.."/list.lua") -dofile(modpath.."/sound.lua") - -dofile(modpath.."/alias.lua") \ No newline at end of file diff --git a/mods/MISC/mcl_commands/kill.lua b/mods/MISC/mcl_commands/kill.lua deleted file mode 100644 index 5478e6bf6..000000000 --- a/mods/MISC/mcl_commands/kill.lua +++ /dev/null @@ -1,43 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local function handle_kill_command(suspect, victim) - if minetest.settings:get_bool("enable_damage") == false then - return false, S("Players can't be killed right now, damage has been disabled.") - end - local victimref = minetest.get_player_by_name(victim) - if victimref == nil then - return false, S("Player @1 does not exist.", victim) - elseif victimref:get_hp() <= 0 then - if suspect == victim then - return false, S("You are already dead") - else - return false, S("@1 is already dead", victim) - end - end - -- DIE! - victimref:set_hp(0, {_mcl_type = "out_of_world"}) - -- Log - if not suspect == victim then - minetest.log("action", string.format("%s killed %s using /kill", suspect, victim)) - else - minetest.log("action", string.format("%s committed suicide using /kill", victim)) - end - return true -end - -if minetest.registered_chatcommands["kill"] then - minetest.unregister_chatcommand("kill") -end -minetest.register_chatcommand("kill", { - params = S("[]"), - description = S("Kill player or yourself"), - privs = {server=true}, - func = function(name, param) - if(param == "") then - -- Selfkill - return handle_kill_command(name, name) - else - return handle_kill_command(name, param) - end - end, -}) diff --git a/mods/MISC/mcl_commands/list.lua b/mods/MISC/mcl_commands/list.lua deleted file mode 100644 index 5661454b4..000000000 --- a/mods/MISC/mcl_commands/list.lua +++ /dev/null @@ -1,14 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_chatcommand("list", { - description = S("Show who is logged on"), - params = "", - privs = {}, - func = function(name) - local players = "" - for _, player in ipairs(minetest.get_connected_players()) do - players = players..player:get_player_name().."\n" - end - minetest.chat_send_player(name, players) - end -}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.de.tr b/mods/MISC/mcl_commands/locale/mcl_commands.de.tr deleted file mode 100644 index 68d267517..000000000 --- a/mods/MISC/mcl_commands/locale/mcl_commands.de.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_commands -Players can't be killed right now, damage has been disabled.=Spieler können jetzt nicht getötet werden, der Schaden wurde deaktiviert. -Player @1 does not exist.=Spieler @1 existiert nicht. -You are already dead=Sie sind schon tot -@1 is already dead=@1 ist schon tot -@1 committed suicide.=@1 beging Selbstmord. -@1 was killed by @2.=@1 wurde von @2 getötet. -[]=[] -Kill player or yourself=Spieler oder sich selbst töten -Can use /say=Kann „/say“ benutzen -= -Send a message to every player=Nachricht an alle Spieler senden -Invalid usage, see /help say.=Falsche Benutzung, siehe „/help say“. -,, =,, -Set node at given position=Node (Block) an der gegebenen Position platzieren -Invalid node=Unültiger Node -@1 spawned.=@1 gespawnt. -Invalid parameters (see /help setblock)=Ungültige Parameter (siehe „/help setblock”) -List bans=Bannliste anzeigen -Ban list: @1=Bannliste: @1 -Show who is logged on=Anzeigen, wer eingeloggt ist -Displays the world seed=Den Seed der Welt anzeigen -Only peaceful mobs allowed!=Nur friedliche Mobs erlaubt! diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.es.tr b/mods/MISC/mcl_commands/locale/mcl_commands.es.tr deleted file mode 100644 index 91b21eb91..000000000 --- a/mods/MISC/mcl_commands/locale/mcl_commands.es.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_commands -Players can't be killed right now, damage has been disabled.=Los jugadores no pueden ser asesinados en este momento, el daño ha sido desactivado. -Player @1 does not exist.=El jugador @1 no existe. -You are already dead=Ya estas muerto -@1 is already dead=@1 ya esta muerto -@1 committed suicide.=@1 se suicidó. -@1 was killed by @2.=@1 fue asesinado por @2. -[]=[] -Kill player or yourself=Mata al jugador o a ti mismo -Can use /say=Puedes usar /say -= -Send a message to every player=Envía un mensaje a todos los jugadores -Invalid usage, see /help=Uso no válido, (Revisa el comando "/help say") -,, =,, -Set node at given position=Establecer nodo en la posición dada -Invalid node=Nodo no válido -@1 spawned.=@1 generado. -Invalid parameters (see /help setblock)=Parámetros no válidos (Revisa el comando "/help setblock") -List bans=Lista de prohibiciones -Ban list: @1=Lista de baneados: @1 -Show who is logged on=Mostrar quién ha iniciado sesión -Displays the world seed=Muestra la semilla del mundo -Only peaceful mobs allowed!=¡Solo se permiten animales pacíficos! diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.fr.tr b/mods/MISC/mcl_commands/locale/mcl_commands.fr.tr deleted file mode 100644 index a655368bf..000000000 --- a/mods/MISC/mcl_commands/locale/mcl_commands.fr.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_commands -Players can't be killed right now, damage has been disabled.=Les joueurs ne peuvent pas être tués pour le moment, les dégâts ont été désactivés. -Player @1 does not exist.=Le joueur @1 n'existe pas. -You are already dead=Tu es déjà mort -@1 is already dead=@1 est déjà mort -@1 committed suicide.=@1 s'est suicidé. -@1 was killed by @2.=@1 a été tué par @2. -[]=[] -Kill player or yourself=Tuez un joueur ou vous-même -Can use /say=Peut utiliser /say -= -Send a message to every player=Envoyez un message à chaque joueur -Invalid usage, see /help say.=Utilisation non valide, voir /help say. -,, =,, -Set node at given position=Placer le noeud à une position donnée -Invalid node=Noeud non valide -@1 spawned.=@1 est apparu. -Invalid parameters (see /help setblock)=Paramètres invalides (voir /help setblock) -List bans=Liste des interdictions -Ban list: @1=Liste d'interdiction: @1 -Show who is logged on=Afficher qui est connecté -Displays the world seed=Affiche la graine du monde -Only peaceful mobs allowed!=Seuls les mobs pacifiques sont autorisées! diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr b/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr deleted file mode 100644 index 4a3ad181c..000000000 --- a/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_commands -Players can't be killed right now, damage has been disabled.=Gracze nie mogą się zabić, obrażenia zostały wyłączone. -Player @1 does not exist.=Gracz @1 nie istnieje. -You are already dead=Już nie żyjesz -@1 is already dead=@1 już nie żyje -@1 committed suicide.=@1 popełniła samobójstwo. -@1 was killed by @2.=@1 została zabita przez @2. -[]=[] -Kill player or yourself=Zabij gracza lub siebie -Can use /say=Może używać /say -= -Send a message to every player=Wyślij wiadomość do każdego gracza -Invalid usage, see /help say.=Niepoprawne użyciu, zobacz /help say. -,, =,, -Set node at given position=Ustaw node w danej pozycji -Invalid node=Niepoprawny node -@1 spawned.=@1 przywołany. -Invalid parameters (see /help setblock)=Niepoprawne parametry (zobacz /help setblock) -List bans=Pokaż zbanowanych -Ban list: @1=Lista zbanowanych: @1 -Show who is logged on=Pokaż zalogowanych -Displays the world seed=Wyświetl ziarno świata -Only peaceful mobs allowed!=Tylko pokojowe moby dozwolone! diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.ru.tr b/mods/MISC/mcl_commands/locale/mcl_commands.ru.tr deleted file mode 100644 index fb700cfab..000000000 --- a/mods/MISC/mcl_commands/locale/mcl_commands.ru.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_commands -Players can't be killed right now, damage has been disabled.=Игроки не могут быть убиты прямо сейчас, урон отключён. -Player @1 does not exist.=Игрок @1 не существует. -You are already dead=Вы уже мертвы -@1 is already dead=@1 уже мертв(а) -@1 committed suicide.=@1 совершил(а) роскомнадзор. -@1 was killed by @2.=@1 был(а) убит(а) @2. -[]=[<имя>] -Kill player or yourself=Убить игрока или себя -Can use /say=Можно использовать /say -=<сообщение> -Send a message to every player=Отправляет сообщение всем игрокам -Invalid usage, see /help say.=Недопустимое использование, см. /help say. -,, =,, <ИмяБлока> -Set node at given position=Устанавливает блок в заданной позиции -Invalid node=Неправильный блок -@1 spawned.=@1 возродился(ась). -Invalid parameters (see /help setblock)=Недопустимые параметры (см. /help setblock) -List bans=Список банов -Ban list: @1=Бан-лист: @1 -Show who is logged on=Показывает, кто подключён -Displays the world seed=Показывает значение зерна мира (seed) -Only peaceful mobs allowed!=Включены только мирные мобы! diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.zh_TW.tr b/mods/MISC/mcl_commands/locale/mcl_commands.zh_TW.tr deleted file mode 100644 index 0f3885cfe..000000000 --- a/mods/MISC/mcl_commands/locale/mcl_commands.zh_TW.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_commands -Players can't be killed right now, damage has been disabled.=玩家現在不能被殺死,傷害已被禁用。 -Player @1 does not exist.=玩家 @1 不存在。 -You are already dead=你已經死了 -@1 is already dead=@1 已經死了。 -@1 committed suicide.=@1 自殺了。 -@1 was killed by @2.=@1 被 @2 殺死了。 -[]=[<名字>] -Kill player or yourself=殺死玩家或自己 -Can use /say=可以使用 /say -=<信息> -Send a message to every player=廣播信息給每個玩家 -Invalid usage, see /help say.=無效用法,見 /help say -,, =,, <方塊名稱> -Set node at given position=在指定位置放置指定方塊 -Invalid node=無效方塊 -@1 spawned.=@1 已生成。 -Invalid parameters (see /help setblock)=無效參數(見 /help setblock) -List bans=查看封鎖列表 -Ban list: @1=封鎖列表:@1 -Show who is logged on=列出在線玩家 -Displays the world seed=顯示種子碼 -Only peaceful mobs allowed!=只允許和平生物! diff --git a/mods/MISC/mcl_commands/locale/template.txt b/mods/MISC/mcl_commands/locale/template.txt deleted file mode 100644 index 5b4370b8f..000000000 --- a/mods/MISC/mcl_commands/locale/template.txt +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: mcl_commands -Players can't be killed right now, damage has been disabled.= -Player @1 does not exist.= -You are already dead= -@1 is already dead= -@1 committed suicide.= -@1 was killed by @2.= -[]= -Kill player or yourself= -Can use /say= -= -Send a message to every player= -Invalid usage, see /help say.= -,, = -Set node at given position= -Invalid node= -@1 spawned.= -Invalid parameters (see /help setblock)= -List bans= -Ban list: @1= -Show who is logged on= -Displays the world seed= -Only peaceful mobs allowed!= diff --git a/mods/MISC/mcl_commands/mod.conf b/mods/MISC/mcl_commands/mod.conf deleted file mode 100644 index dba130564..000000000 --- a/mods/MISC/mcl_commands/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_commands -author = Wuzzy -description = MCL2 commands -depends = mcl_colors diff --git a/mods/MISC/mcl_commands/say.lua b/mods/MISC/mcl_commands/say.lua deleted file mode 100644 index 9fd53c174..000000000 --- a/mods/MISC/mcl_commands/say.lua +++ /dev/null @@ -1,18 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_privilege("announce", { - description = S("Can use /say"), - give_to_singleplayer = false, -}) -minetest.register_chatcommand("say", { - params = S(""), - description = S("Send a message to every player"), - privs = {announce=true}, - func = function(name, param) - if not param then - return false, S("Invalid usage, see /help say.") - end - minetest.chat_send_all(("["..name.."] "..param)) - return true - end, -}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/seed.lua b/mods/MISC/mcl_commands/seed.lua deleted file mode 100644 index 2ebb04474..000000000 --- a/mods/MISC/mcl_commands/seed.lua +++ /dev/null @@ -1,10 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_chatcommand("seed", { - description = S("Displays the world seed"), - params = "", - privs = {}, - func = function(name) - minetest.chat_send_player(name, "Seed: ["..minetest.colorize(mcl_colors.GREEN, ""..minetest.get_mapgen_setting("seed")).."]") - end -}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/setblock.lua b/mods/MISC/mcl_commands/setblock.lua deleted file mode 100644 index 95acdd35d..000000000 --- a/mods/MISC/mcl_commands/setblock.lua +++ /dev/null @@ -1,22 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_chatcommand("setblock", { - params = S(",, "), - description = S("Set node at given position"), - privs = {give=true, interact=true}, - func = function(name, param) - local p = {} - local nodestring - p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$") - p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z) - if p.x and p.y and p.z and nodestring then - local itemstack = ItemStack(nodestring) - if itemstack:is_empty() or not minetest.registered_nodes[itemstack:get_name()] then - return false, S("Invalid node") - end - minetest.set_node(p, {name=nodestring}) - return true, S("@1 spawned.", nodestring) - end - return false, S("Invalid parameters (see /help setblock)") - end, -}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/sound.lua b/mods/MISC/mcl_commands/sound.lua deleted file mode 100644 index 5833676f3..000000000 --- a/mods/MISC/mcl_commands/sound.lua +++ /dev/null @@ -1,43 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_chatcommand("playsound",{ - params = S(" "), --TODO:add source - description = S("Play a sound. Arguments: : name of the sound. : Target."), - privs = {server = true}, - func = function(name, rawparams) - local P = {} - local i = 0 - for str in string.gmatch(rawparams, "([^ ]+)") do - i = i + 1 - P[i] = str - end - local params = {} - if P[1] == tostring(P[1]) then - params.name = P[1] - else - return false, S("Sound name is invalid!") --TODO: add mc chat message - end - if P[2] == tostring(P[2]) and minetest.player_exists(P[2]) then - params.target = P[2] - else - return false, S("Target is invalid!!") - end - -- if P[3] then - -- params.pos = nil --TODO:position - -- else - -- params.pos = nil - -- end - -- if P[4] == tonumber(P[4]) then - -- params.gain = P[4] - -- else - -- params.gain = 1.0 - -- end - -- if P[5] == tonumber(P[5]) then - -- params.pitch = P[5] - -- else - -- params.pitch = 1.0 - -- end - minetest.sound_play({name = params.name}, {to_player = params.target}, true) --TODO: /stopsound - return true - end, -}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/summon.lua b/mods/MISC/mcl_commands/summon.lua deleted file mode 100644 index 118d3e23b..000000000 --- a/mods/MISC/mcl_commands/summon.lua +++ /dev/null @@ -1,15 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local orig_func = minetest.registered_chatcommands["spawnentity"].func -local cmd = table.copy(minetest.registered_chatcommands["spawnentity"]) -cmd.func = function(name, param) - local ent = minetest.registered_entities[param] - if minetest.settings:get_bool("only_peaceful_mobs", false) and ent and ent.is_mob and ent.type == "monster" then - return false, S("Only peaceful mobs allowed!") - else - local bool, msg = orig_func(name, param) - return bool, msg - end -end -minetest.unregister_chatcommand("spawnentity") -minetest.register_chatcommand("summon", cmd) \ No newline at end of file diff --git a/mods/MISC/mcl_privs/init.lua b/mods/MISC/mcl_privs/init.lua deleted file mode 100644 index ddca9f946..000000000 --- a/mods/MISC/mcl_privs/init.lua +++ /dev/null @@ -1,46 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_privilege("maphack", { - description = S("Can place and use advanced blocks like mob spawners, command blocks and barriers."), -}) - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - local meta = player:get_meta() - if meta:get_int("mcl_privs:fly_changed") == 1 then return end - - local fly = nil - if minetest.is_creative_enabled(name) then - fly = true - end - local player_privs = minetest.get_player_privs(name) - player_privs.fly = fly - minetest.set_player_privs(name, player_privs) -end) - -for _, action in pairs({"grant", "revoke"}) do - minetest["register_on_priv_" .. action](function(name, _, priv) - local player = minetest.get_player_by_name(name) - if not player then - return - end - - local meta = player:get_meta() - - if priv == "fly" then - meta:set_int("mcl_privs:fly_changed", 1) - end - - --[[ - so e.g. hackers who have been revoked of the interact privilege - will not automatically get the interact privilege through the mcl shields code back - ]] - if priv == "interact" then - if action == "revoke" then - meta:set_int("mcl_privs:interact_revoked", 1) - else - meta:set_int("mcl_privs:interact_revoked", 0) - end - end - end) -end \ No newline at end of file diff --git a/mods/MISC/mcl_privs/locale/mcl_privs.de.tr b/mods/MISC/mcl_privs/locale/mcl_privs.de.tr deleted file mode 100644 index c5b799767..000000000 --- a/mods/MISC/mcl_privs/locale/mcl_privs.de.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_privs -Can place and use advanced blocks like mob spawners, command blocks and barriers.=Kann fortgeschrittene Blöcke wie Mobspawner, Befehlsblöcke und Barrieren platzieren und benutzen. diff --git a/mods/MISC/mcl_privs/locale/mcl_privs.es.tr b/mods/MISC/mcl_privs/locale/mcl_privs.es.tr deleted file mode 100644 index 66d2a60b1..000000000 --- a/mods/MISC/mcl_privs/locale/mcl_privs.es.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_privs -Can place and use advanced blocks like mob spawners, command blocks and barriers.=Puede colocar y usar bloques avanzados como generadores de animales, bloques de comando y barreras. diff --git a/mods/MISC/mcl_privs/locale/mcl_privs.fr.tr b/mods/MISC/mcl_privs/locale/mcl_privs.fr.tr deleted file mode 100644 index eee0ac226..000000000 --- a/mods/MISC/mcl_privs/locale/mcl_privs.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_privs -Can place and use advanced blocks like mob spawners, command blocks and barriers.=Peut placer et utiliser des blocs avancés comme des générateurs de mob, des blocs de commande et des barrières. diff --git a/mods/MISC/mcl_privs/locale/mcl_privs.pl.tr b/mods/MISC/mcl_privs/locale/mcl_privs.pl.tr deleted file mode 100644 index 10984ef54..000000000 --- a/mods/MISC/mcl_privs/locale/mcl_privs.pl.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_privs -Can place and use advanced blocks like mob spawners, command blocks and barriers.=Może kłaść i używać zaawansowane bloki takie jak spawnery, bloki poleceń czy bariery. diff --git a/mods/MISC/mcl_privs/locale/mcl_privs.ru.tr b/mods/MISC/mcl_privs/locale/mcl_privs.ru.tr deleted file mode 100644 index a3f37c365..000000000 --- a/mods/MISC/mcl_privs/locale/mcl_privs.ru.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_privs -Can place and use advanced blocks like mob spawners, command blocks and barriers.=Позволяет размещать и использовать продвинутые блоки, такие как спаунеры мобов, блоки команд и барьеры. \ No newline at end of file diff --git a/mods/MISC/mcl_privs/locale/mcl_privs.zh_TW.tr b/mods/MISC/mcl_privs/locale/mcl_privs.zh_TW.tr deleted file mode 100644 index d4e3f96f6..000000000 --- a/mods/MISC/mcl_privs/locale/mcl_privs.zh_TW.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_privs -Can place and use advanced blocks like mob spawners, command blocks and barriers.=可以放置和使用高級方塊,如生怪磚、命令方塊和屏障 diff --git a/mods/MISC/mcl_privs/locale/template.txt b/mods/MISC/mcl_privs/locale/template.txt deleted file mode 100644 index 11be33493..000000000 --- a/mods/MISC/mcl_privs/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_privs -Can place and use advanced blocks like mob spawners, command blocks and barriers.= diff --git a/mods/MISC/mcl_privs/mod.conf b/mods/MISC/mcl_privs/mod.conf deleted file mode 100644 index ab1f61877..000000000 --- a/mods/MISC/mcl_privs/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_privs -author = Wuzzy -description = Shared privileges in MineClone 2 - diff --git a/mods/MISC/mcl_temp_helper_recipes/init.lua b/mods/MISC/mcl_temp_helper_recipes/init.lua deleted file mode 100644 index b7607946d..000000000 --- a/mods/MISC/mcl_temp_helper_recipes/init.lua +++ /dev/null @@ -1,83 +0,0 @@ --- Temporary helper recipes. --- These recipes are NOT part of Minecraft. They are added to make some currently unobtainable items accessible. --- TODO: Remove recipes when they become accessible by regular means - -minetest.register_craft({ - type = "shapeless", - output = "mcl_chests:trapped_chest", - recipe = {"mcl_core:iron_ingot", "mcl_core:stick", "group:wood", "mcl_chests:chest"}, -}) - -minetest.register_craft({ - output = "mcl_sponges:sponge", - recipe = { - { "mcl_farming:hay_block", "mcl_farming:hay_block", "mcl_farming:hay_block" }, - { "mcl_farming:hay_block", "mcl_core:goldblock", "mcl_farming:hay_block" }, - { "mcl_farming:hay_block", "mcl_farming:hay_block", "mcl_farming:hay_block" }, - } -}) - -minetest.register_craft({ - output = "mcl_ocean:prismarine_shard", - recipe = { - { "mcl_core:glass_cyan", }, - } -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_ocean:prismarine_crystals", - recipe = { - "mcl_ocean:prismarine_shard", - "mcl_ocean:prismarine_shard", - "mcl_ocean:prismarine_shard", - "mcl_core:gold_ingot", - }, -}) - --- Make red sand, red sandstone and more craftable in v6 --- NOTE: When you change these, also update mcl_craftguide for the "v6" icon in --- the craft guide! -if minetest.get_mapgen_setting("mg_name") == "v6" then - minetest.register_craft({ - output = "mcl_core:redsand 8", - recipe = { - { "mcl_core:sand", "mcl_core:sand", "mcl_core:sand" }, - { "mcl_core:sand", "mcl_nether:nether_wart_item", "mcl_core:sand" }, - { "mcl_core:sand", "mcl_core:sand", "mcl_core:sand" }, - } - }) -end - - -minetest.register_craft({ - output = "mcl_nether:quartz_smooth 4", - recipe = { - { "mcl_nether:quartz_block", "mcl_nether:quartz_block" }, - { "mcl_nether:quartz_block", "mcl_nether:quartz_block" }, - }, -}) - -minetest.register_craft({ - output = "mcl_core:sandstonesmooth2 4", - recipe = { - { "mcl_core:sandstonesmooth", "mcl_core:sandstonesmooth" }, - { "mcl_core:sandstonesmooth", "mcl_core:sandstonesmooth" }, - }, -}) - -minetest.register_craft({ - output = "mcl_core:redsandstonesmooth2 4", - recipe = { - { "mcl_core:redsandstonesmooth", "mcl_core:redsandstonesmooth" }, - { "mcl_core:redsandstonesmooth", "mcl_core:redsandstonesmooth" }, - }, -}) - -minetest.register_craft({ - output = "mcl_potions:dragon_breath 3", - recipe = { - {"","mcl_end:chorus_flower",""}, - {"mcl_potions:glass_bottle","mcl_potions:glass_bottle","mcl_potions:glass_bottle"}, - } -}) diff --git a/mods/MISC/mcl_temp_helper_recipes/mod.conf b/mods/MISC/mcl_temp_helper_recipes/mod.conf deleted file mode 100644 index 8fff70ece..000000000 --- a/mods/MISC/mcl_temp_helper_recipes/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_temp_helper_recipes -author = Wuzzy -description = Temporary helper recipes. -depends = mcl_core, mcl_mobitems, mcl_end, mcl_nether, mcl_ocean, mcl_stairs, xpanes - diff --git a/mods/MISC/mcl_wip/API.md b/mods/MISC/mcl_wip/API.md deleted file mode 100644 index e3439af77..000000000 --- a/mods/MISC/mcl_wip/API.md +++ /dev/null @@ -1,16 +0,0 @@ -# mcl_wip -Used to mark items or nodes as WIP. - -## mcl_wip.register_wip_item(itemname) -Register as a WIP item. -If isn't a valid itemname, an error will be shown after mods loaded. - -## mcl_wip.register_experimental_item(itemname) -Register as a experimental item. -If isn't a valid itemname, an error will be shown after mods loaded. - -## mcl_wip.registered_wip_items -Table containing WIP items names. - -## mcl_wip.registered_experimental_items -Table containing experimental items names. \ No newline at end of file diff --git a/mods/MISC/mcl_wip/init.lua b/mods/MISC/mcl_wip/init.lua deleted file mode 100644 index 54fd81c1d..000000000 --- a/mods/MISC/mcl_wip/init.lua +++ /dev/null @@ -1,45 +0,0 @@ --- Allow items or nodes to be marked as WIP (Work In Progress) or Experimental - -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_wip = {} -mcl_wip.registered_wip_items = {} -mcl_wip.registered_experimental_items = {} - -function mcl_wip.register_wip_item(itemname) - table.insert(mcl_wip.registered_wip_items, itemname) --Only check for valid node name after mods loaded -end - -function mcl_wip.register_experimental_item(itemname) - table.insert(mcl_wip.registered_experimental_items, itemname) -end - -minetest.register_on_mods_loaded(function() - for _,name in pairs(mcl_wip.registered_wip_items) do - local def = minetest.registered_items[name] - if not def then - minetest.log("error", "[mcl_wip] Unknown item: "..name) - break - end - local new_description = def.description - if new_description == "" then - new_description = name - end - new_description = new_description .. "\n"..minetest.colorize(mcl_colors.RED, S("(WIP)")) - minetest.override_item(name, {description = new_description}) - end - - for _,name in pairs(mcl_wip.registered_experimental_items) do - local def = minetest.registered_items[name] - if not def then - minetest.log("error", "[mcl_wip] Unknown item: "..name) - break - end - local new_description = def.description - if new_description == "" then - new_description = name - end - new_description = new_description .. "\n"..minetest.colorize(mcl_colors.YELLOW, S("(Temporary)")) - minetest.override_item(name, {description = new_description}) - end -end) diff --git a/mods/MISC/mcl_wip/locale/mcl_wip.de.tr b/mods/MISC/mcl_wip/locale/mcl_wip.de.tr deleted file mode 100644 index 9cf3b6f01..000000000 --- a/mods/MISC/mcl_wip/locale/mcl_wip.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_wip -(WIP)=(in Arbeit) -(Temporary)=(temporär) diff --git a/mods/MISC/mcl_wip/locale/mcl_wip.es.tr b/mods/MISC/mcl_wip/locale/mcl_wip.es.tr deleted file mode 100644 index aa0d40ebc..000000000 --- a/mods/MISC/mcl_wip/locale/mcl_wip.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_wip -(WIP)=(En progreso) -(Temporary)=(Temporal) diff --git a/mods/MISC/mcl_wip/locale/mcl_wip.fr.tr b/mods/MISC/mcl_wip/locale/mcl_wip.fr.tr deleted file mode 100644 index a17ad49a6..000000000 --- a/mods/MISC/mcl_wip/locale/mcl_wip.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_wip -# WIP means “Work in Progress” -(WIP)=(Travail en cours) -(Temporary)=(Temporaire) diff --git a/mods/MISC/mcl_wip/locale/mcl_wip.pl.tr b/mods/MISC/mcl_wip/locale/mcl_wip.pl.tr deleted file mode 100644 index 83c273a96..000000000 --- a/mods/MISC/mcl_wip/locale/mcl_wip.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_wip -# WIP means “Work in Progress” -(WIP)=(Niedokończone) -(Temporary)=(Tymczasowe) diff --git a/mods/MISC/mcl_wip/locale/mcl_wip.ru.tr b/mods/MISC/mcl_wip/locale/mcl_wip.ru.tr deleted file mode 100644 index 6fb33179d..000000000 --- a/mods/MISC/mcl_wip/locale/mcl_wip.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_wip -# WIP означает “Work in Progress” - работа продолжается -(WIP)=(в процессе) -(Temporary)=(Временное) diff --git a/mods/MISC/mcl_wip/locale/mcl_wip.zh_TW.tr b/mods/MISC/mcl_wip/locale/mcl_wip.zh_TW.tr deleted file mode 100644 index e4b36ff07..000000000 --- a/mods/MISC/mcl_wip/locale/mcl_wip.zh_TW.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_wip -# WIP means “Work in Progress” -(WIP)=(WIP) -(Temporary)=(暫時) diff --git a/mods/MISC/mcl_wip/locale/template.txt b/mods/MISC/mcl_wip/locale/template.txt deleted file mode 100644 index b74273642..000000000 --- a/mods/MISC/mcl_wip/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_wip -# WIP means “Work in Progress” -(WIP)= -(Temporary)= diff --git a/mods/MISC/mcl_wip/mod.conf b/mods/MISC/mcl_wip/mod.conf deleted file mode 100644 index e705379a1..000000000 --- a/mods/MISC/mcl_wip/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_wip -author = Wuzzy -description = Development mod for MineClone 2 which add a “WIP” (Work In Progress) comment to items which are considered to be very unfinished. -depends = mcl_colors diff --git a/mods/MISC/modpack.conf b/mods/MISC/modpack.conf deleted file mode 100644 index dad106d90..000000000 --- a/mods/MISC/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = MISC -description = Meta-modpack containing miscellaneous mods for MineClone 2 diff --git a/mods/PLAYER/mcl_criticals/init.lua b/mods/PLAYER/mcl_criticals/init.lua deleted file mode 100644 index 27d09abb2..000000000 --- a/mods/PLAYER/mcl_criticals/init.lua +++ /dev/null @@ -1,30 +0,0 @@ -mcl_damage.register_modifier(function(obj, damage, reason) - if reason.type == "player" then - local hitter = reason.direct - if mcl_sprint.is_sprinting(hitter) then - obj:add_velocity(hitter:get_velocity()) - elseif (hitter:get_velocity() or hitter:get_player_velocity()).y < 0 then - local pos = mcl_util.get_object_center(obj) - minetest.add_particlespawner({ - amount = 15, - time = 0.1, - minpos = {x=pos.x-0.5, y=pos.y-0.5, z=pos.z-0.5}, - maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5}, - minvel = {x=-0.1, y=-0.1, z=-0.1}, - maxvel = {x=0.1, y=0.1, z=0.1}, - minacc = {x=0, y=0, z=0}, - maxacc = {x=0, y=0, z=0}, - minexptime = 1, - maxexptime = 2, - minsize = 1.5, - maxsize = 1.5, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_crit.png^[colorize:#bc7a57:127", - }) - minetest.sound_play("mcl_criticals_hit", {object = obj}) - -- the minecraft wiki is actually wrong about a crit dealing 150% damage, see minecraft source code - return damage + math.random(0, math.floor(damage * 1.5 + 2)) - end - end -end, -100) diff --git a/mods/PLAYER/mcl_criticals/mod.conf b/mods/PLAYER/mcl_criticals/mod.conf deleted file mode 100644 index 5b0b91330..000000000 --- a/mods/PLAYER/mcl_criticals/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_criticals -depends = mcl_damage diff --git a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.0.ogg b/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.0.ogg deleted file mode 100644 index 8184d1076..000000000 Binary files a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.0.ogg and /dev/null differ diff --git a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.1.ogg b/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.1.ogg deleted file mode 100644 index aed998162..000000000 Binary files a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.1.ogg and /dev/null differ diff --git a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.2.ogg b/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.2.ogg deleted file mode 100644 index 6d573b9f2..000000000 Binary files a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.2.ogg and /dev/null differ diff --git a/mods/PLAYER/mcl_death_drop/API.md b/mods/PLAYER/mcl_death_drop/API.md deleted file mode 100644 index 3fc5163e5..000000000 --- a/mods/PLAYER/mcl_death_drop/API.md +++ /dev/null @@ -1,14 +0,0 @@ -# mcl_death_drop -Drop registered inventories on player death. - -## mcl_death_drop.register_dropped_list(inv, listname, drop) -* inv: can be: - * "PLAYER": will be interpreted like player inventory (to avoid multiple calling to get_inventory()) - * function(player): must return inventory -* listname: string -* drop: bool - * true: the list will be dropped - * false: the list will only be cleared - -## mcl_death_drop.registered_dropped_lists -Table containing dropped list inventory, name and drop state. \ No newline at end of file diff --git a/mods/PLAYER/mcl_death_drop/init.lua b/mods/PLAYER/mcl_death_drop/init.lua deleted file mode 100644 index 5ea548ecc..000000000 --- a/mods/PLAYER/mcl_death_drop/init.lua +++ /dev/null @@ -1,57 +0,0 @@ -local random = math.random - -local ipairs = ipairs - -mcl_death_drop = {} - -mcl_death_drop.registered_dropped_lists = {} - -function mcl_death_drop.register_dropped_list(inv, listname, drop) - table.insert(mcl_death_drop.registered_dropped_lists, {inv = inv, listname = listname, drop = drop}) -end - -mcl_death_drop.register_dropped_list("PLAYER", "main", true) -mcl_death_drop.register_dropped_list("PLAYER", "craft", true) -mcl_death_drop.register_dropped_list("PLAYER", "armor", true) -mcl_death_drop.register_dropped_list("PLAYER", "offhand", true) - -minetest.register_on_dieplayer(function(player) - local keep = minetest.settings:get_bool("mcl_keepInventory", false) - if keep == false then - -- Drop inventory, crafting grid and armor - local playerinv = player:get_inventory() - local pos = player:get_pos() - -- No item drop if in deep void - local _, void_deadly = mcl_worlds.is_in_void(pos) - - for l=1,#mcl_death_drop.registered_dropped_lists do - local inv = mcl_death_drop.registered_dropped_lists[l].inv - if inv == "PLAYER" then - inv = playerinv - elseif type(inv) == "function" then - inv = inv(player) - end - local listname = mcl_death_drop.registered_dropped_lists[l].listname - local drop = mcl_death_drop.registered_dropped_lists[l].drop - if inv then - for i, stack in ipairs(inv:get_list(listname)) do - local x = random(0, 9)/3 - local z = random(0, 9)/3 - pos.x = pos.x + x - pos.z = pos.z + z - if not void_deadly and drop and not mcl_enchanting.has_enchantment(stack, "curse_of_vanishing") then - local def = minetest.registered_items[stack:get_name()] - if def and def.on_drop then - stack = def.on_drop(stack, player, pos) - end - minetest.add_item(pos, stack) - end - pos.x = pos.x - x - pos.z = pos.z - z - end - inv:set_list(listname, {}) - end - end - mcl_armor.update(player) - end -end) diff --git a/mods/PLAYER/mcl_death_drop/mod.conf b/mods/PLAYER/mcl_death_drop/mod.conf deleted file mode 100644 index 09a8c61fa..000000000 --- a/mods/PLAYER/mcl_death_drop/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_death_drop -author = Wuzzy -description = Makes all items in inventory drop after player death. -depends = mcl_armor, mcl_enchanting diff --git a/mods/PLAYER/mcl_hunger/API.md b/mods/PLAYER/mcl_hunger/API.md deleted file mode 100644 index 57d158c48..000000000 --- a/mods/PLAYER/mcl_hunger/API.md +++ /dev/null @@ -1,57 +0,0 @@ -# API information (WIP) -This API information is not complete yet. -The mod API is still pretty much unofficial; this mod is mostly seen -as standalone for now. - -This may change in the future development of MineClone 2. Hopefully. - -## Mod state -The hunger mechanic is disabled when damage is disabled -(setting `enable_damage=false`). -You can check the hunger state with `mcl_hunger.active`. If it's true, -then hunger is active. - -If the hunger is disabled, most of the functions are no-ops or return -default values. - -## Player values -### Hunger level -The hunger level of the player is a whole number between 0 and 20 inclusive. -0 is starving and 20 is full. The hunger level is represented in -the HUD by a statbar with 20 half-icons. - -### Saturation -To be written ... - -### Exhaustion -To be written ... - -## Functions -This API documentation is not complete yet, more documentation will -come. - -### `mcl_hunger.get_hunger(player)` -Returns the current hunger level of `player` (ObjectRef). - -### `mcl_hunger.set_hunger(player, hunger)` -Sets the hunger level of `player` (ObjectRef) to `hunger` immediately. -`hunger` ***must*** be between 0 and 20 inclusive. - -### `mcl_hunger.exhaust(player, exhaust)` -Increase exhaustion of player by `exhaust`. - -### `mcl_hunger.stop_poison(player)` -Immediately stops food poisoning for player. - -### More functions ... -There are more functions (of less importance) available, see `api.lua`. - -## Groups -Items in group `food=3` will make a drinking sound and no particles. -Items in group `food` with any other rating will make an eating sound and particles, -based on the inventory image or wield image (whatever is available first). - -## Suppressing food particles -Normally, all food items considered food (not drinks) make food particles. -You can suppress the food particles by adding the field -`_food_particles=false` to the item definition. diff --git a/mods/PLAYER/mcl_hunger/README.md b/mods/PLAYER/mcl_hunger/README.md deleted file mode 100644 index 47a7fce8c..000000000 --- a/mods/PLAYER/mcl_hunger/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Hunger for MineClone 2 [`mcl_hunger`] - -* Forked from `hbhunger`, version: 0.5.2 - -## Using the mod - -This mod adds a mechanic for hunger. -This mod depends on the HUD bars mod [`hudbars`], version 1.4.1 or any later version -starting with “1.”. - -## About hunger -This mod adds a hunger mechanic to the game. Players get a new attribute called “satiation”: - -* A new player starts with 20 satiation points out of 20 -* Actions like digging, placing and walking cause exhaustion, which lower the satiation -* Every 800 seconds you lose 1 satiation point without doing anything -* At 1 or 0 satiation you will suffer damage and die in case you don't eat something -* If your satiation is 16 or higher, you will slowly regenerate health points -* Eating food will increase your satiation (Duh!) - -## Statbar mode -If you use the statbar mode of the HUD Bars mod, these things are important to know: -As with all mods using HUD Bars, the bread statbar symbols represent the rough percentage -out of 30 satiation points, in steps of 5%, so the symbols give you an estimate of your -satiation. This is different from the hunger mod by BlockMen. - -You gain health at 5.5 symbols or more, as 5.5 symbols correspond to 16 satiation points. -You *may* lose health at exactly 0.5 symbols, as 0.5 symbols correspond to 1-2 satiation points. - -### Examples - -* Eating an apple (from Minetest Game) increases your satiation by 2; -* eating a bread (from Minetest Game) increases your satiation by 4. - -## Licensing -This mod is free software. - -### Source code - -* License: [LGPL v2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -* Author: by Wuzzy (2015-2016) -* Forked from `hbhunger` for MineClone 2. `hbhunger` in turn was forked from the “Better HUD - (and hunger)” mod by BlockMen (2013-2015), most code comes from this mod. - -### Textures and sounds - -* `hbhunger_icon.png`—PilzAdam ([WTFPL](http://www.wtfpl.net/txt/copying/)), modified by BlockMen -* `hbhunger_bgicon.png`—PilzAdam (WTFPL), modified by BlockMen -* `hbhunger_bar.png—Wuzzy` (WTFPL) -* `hbhunger_icon_health_poison.png`—celeron55 ([CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/)), modified by BlockMen, modified again by Wuzzy -* `mcl_hunger_bite.1.ogg`, `mcl_hungr_bite.2.ogg`: WTFPL -* `survival_thirst_drink.ogg`: WTFPL -* Everything else: WTFPL, by BlockMen and Wuzzy - diff --git a/mods/PLAYER/mcl_hunger/api.lua b/mods/PLAYER/mcl_hunger/api.lua deleted file mode 100644 index 20937023a..000000000 --- a/mods/PLAYER/mcl_hunger/api.lua +++ /dev/null @@ -1,160 +0,0 @@ -mcl_hunger.registered_foods = {} - -function mcl_hunger.init_player(player) - local meta = player:get_meta() - if meta:get_string("mcl_hunger:hunger") == "" then - meta:set_string("mcl_hunger:hunger", tostring(20)) - end - if meta:get_string("mcl_hunger:saturation") == "" then - meta:set_string("mcl_hunger:saturation", tostring(mcl_hunger.SATURATION_INIT)) - end - if meta:get_string("mcl_hunger:exhaustion") == "" then - meta:set_string("mcl_hunger:exhaustion", tostring(0)) - end -end - -if mcl_hunger.active then - function mcl_hunger.get_hunger(player) - local hunger = tonumber(player:get_meta():get_string("mcl_hunger:hunger")) or 20 - return hunger - end - - function mcl_hunger.get_saturation(player) - local saturation = tonumber(player:get_meta():get_string("mcl_hunger:saturation")) or mcl_hunger.SATURATION_INIT - return saturation - end - - function mcl_hunger.get_exhaustion(player) - local exhaustion = tonumber(player:get_meta():get_string("mcl_hunger:exhaustion")) or 0 - return exhaustion - end - - function mcl_hunger.set_hunger(player, hunger, update_hudbars) - hunger = math.min(20, math.max(0, hunger)) - player:get_meta():set_string("mcl_hunger:hunger", tostring(hunger)) - if update_hudbars ~= false then - hb.change_hudbar(player, "hunger", hunger) - mcl_hunger.update_saturation_hud(player, nil, hunger) - end - return true - end - - function mcl_hunger.set_saturation(player, saturation, update_hudbar) - saturation = math.min(mcl_hunger.get_hunger(player), math.max(0, saturation)) - player:get_meta():set_string("mcl_hunger:saturation", tostring(saturation)) - if update_hudbar ~= false then - mcl_hunger.update_saturation_hud(player, saturation) - end - return true - end - - function mcl_hunger.set_exhaustion(player, exhaustion, update_hudbar) - exhaustion = math.min(mcl_hunger.EXHAUST_LVL, math.max(0.0, exhaustion)) - player:get_meta():set_string("mcl_hunger:exhaustion", tostring(exhaustion)) - if update_hudbar ~= false then - mcl_hunger.update_exhaustion_hud(player, exhaustion) - end - return true - end - - function mcl_hunger.exhaust(playername, increase) - local player = minetest.get_player_by_name(playername) - if not player then return false end - mcl_hunger.set_exhaustion(player, mcl_hunger.get_exhaustion(player) + increase) - if mcl_hunger.get_exhaustion(player) >= mcl_hunger.EXHAUST_LVL then - mcl_hunger.set_exhaustion(player, 0.0) - local h = nil - local satuchanged = false - local s = mcl_hunger.get_saturation(player) - if s > 0 then - mcl_hunger.set_saturation(player, math.max(s - 1.0, 0)) - satuchanged = true - elseif s <= 0.0001 then - h = mcl_hunger.get_hunger(player) - h = math.max(h-1, 0) - mcl_hunger.set_hunger(player, h) - satuchanged = true - end - if satuchanged then - if h then h = h end - mcl_hunger.update_saturation_hud(player, mcl_hunger.get_saturation(player), h) - end - end - mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player)) - return true - end - - function mcl_hunger.saturate(playername, increase, update_hudbar) - local player = minetest.get_player_by_name(playername) - local ok = mcl_hunger.set_saturation(player, - math.min(mcl_hunger.get_saturation(player) + increase, mcl_hunger.get_hunger(player))) - if update_hudbar ~= false then - mcl_hunger.update_saturation_hud(player, mcl_hunger.get_saturation(player), mcl_hunger.get_hunger(player)) - end - return ok - end - - function mcl_hunger.register_food(name, hunger_change, replace_with_item, poisontime, poison, exhaust, poisonchance, sound) - if not mcl_hunger.active then - return - end - local food = mcl_hunger.registered_foods - food[name] = {} - food[name].saturation = hunger_change -- hunger points added - food[name].replace = replace_with_item -- what item is given back after eating - food[name].poisontime = poisontime -- time it is poisoning. If this is set, this item is considered poisonous, - -- otherwise the following poison/exhaust fields are ignored - food[name].poison = poison -- poison damage per tick for poisonous food - food[name].exhaust = exhaust -- exhaustion per tick for poisonous food - food[name].poisonchance = poisonchance -- chance percentage that this item poisons the player (default: 100%) - food[name].sound = sound -- special sound that is played when eating - end - - function mcl_hunger.stop_poison(player) - if not mcl_hunger.active then - return - end - mcl_hunger.poison_hunger[player:get_player_name()] = 0 - mcl_hunger.reset_bars_poison_hunger(player) - end - -else - -- When hunger is disabled, the functions are basically no-ops - - function mcl_hunger.get_hunger() - return 20 - end - - function mcl_hunger.get_saturation() - return mcl_hunger.SATURATION_INIT - end - - function mcl_hunger.get_exhaustion() - return 0 - end - - function mcl_hunger.set_hunger() - return false - end - - function mcl_hunger.set_saturation() - return false - end - - function mcl_hunger.set_exhaustion() - return false - end - - function mcl_hunger.exhaust() - return false - end - - function mcl_hunger.saturate() - return false - end - - function mcl_hunger.register_food() end - - function mcl_hunger.stop_poison() end - -end diff --git a/mods/PLAYER/mcl_hunger/changelog.txt b/mods/PLAYER/mcl_hunger/changelog.txt deleted file mode 100644 index a56dbcb89..000000000 --- a/mods/PLAYER/mcl_hunger/changelog.txt +++ /dev/null @@ -1,51 +0,0 @@ -0.1.0 ------ -Initial release - -0.2.0 ------ -- Change “saturation” to “satiation” -- Rename global table to “hbhunger” to avoid collisions -- General cleanup - -0.3.0 ------ -- Play simple eating sound when something is eaten - -0.3.1 ------ -- Add Ethereal orange -- Fix exhaus variable - -0.3.2 ------ -- Fix another crash - -0.4.0 ------ -- Generic eating functionality, items using the minetest.item_eat are automatically supported -- Change health bar and icon when poisoned -- Special support for red and brown mushroom from Minetest Game [flowers] -- Special support for [pizza] -- Special support for beans from Farming Redo [farming] -- Fix crash when poisoned player leaves server -- Changed license to LGPL v2.1 - -0.4.1 ------ -- Add foods from Not So Simple Mobs [nssm] - -0.5.0 ------ -- Fix custom sound not working -- Add Portuguese translation - -0.5.1 ------ -- Fix incompability problem with pipeworks mod - -0.5.2 ------ -- Fix mod not working with both intllib and mod security enabled -- Add missing screenshot -- Rewrite README and use Markdown format diff --git a/mods/PLAYER/mcl_hunger/hunger.lua b/mods/PLAYER/mcl_hunger/hunger.lua deleted file mode 100644 index d9a6fd5fe..000000000 --- a/mods/PLAYER/mcl_hunger/hunger.lua +++ /dev/null @@ -1,240 +0,0 @@ ---local S = minetest.get_translator(minetest.get_current_modname()) - --- wrapper for minetest.item_eat (this way we make sure other mods can't break this one) -function minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) - if not user or user:is_player() == false then - return itemstack - end - - -- Call on_rightclick if the pointed node defines it - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - end - -- Also don't eat when pointing object (it could be an animal) - if pointed_thing.type == "object" then - return itemstack - end - - local old_itemstack = itemstack - - local name = user:get_player_name() - - local creative = minetest.is_creative_enabled(name) - - -- Special foodstuffs like the cake may disable the eating delay - local no_eat_delay = creative or (minetest.get_item_group(itemstack:get_name(), "no_eat_delay") == 1) - - -- Allow eating only after a delay of 2 seconds. This prevents eating as an excessive speed. - -- FIXME: time() is not a precise timer, so the actual delay may be +- 1 second, depending on which fraction - -- of the second the player made the first eat. - -- FIXME: In singleplayer, there's a cheat to circumvent this, simply by pausing the game between eats. - -- This is because os.time() obviously does not care about the pause. A fix needs a different timer mechanism. - if no_eat_delay or (mcl_hunger.last_eat[name] < 0) or (os.difftime(os.time(), mcl_hunger.last_eat[name]) >= 2) then - local can_eat_when_full = creative or (mcl_hunger.active == false) - or minetest.get_item_group(itemstack:get_name(), "can_eat_when_full") == 1 - -- Don't allow eating when player has full hunger bar (some exceptional items apply) - if can_eat_when_full or (mcl_hunger.get_hunger(user) < 20) then - itemstack = mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing) - for _, callback in pairs(minetest.registered_on_item_eats) do - local result = callback(hp_change, replace_with_item, itemstack, user, pointed_thing, old_itemstack) - if result then - return result - end - end - mcl_hunger.last_eat[name] = os.time() - end - end - - return itemstack -end - -function mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing) - local item = itemstack:get_name() - local def = mcl_hunger.registered_foods[item] - if not def then - def = {} - if type(hp_change) ~= "number" then - hp_change = 1 - minetest.log("error", "Wrong on_use() definition for item '" .. item .. "'") - end - def.saturation = hp_change - def.replace = replace_with_item - end - local func = mcl_hunger.item_eat(def.saturation, def.replace, def.poisontime, - def.poison, def.exhaust, def.poisonchance, def.sound) - return func(itemstack, user, pointed_thing) -end - --- Reset HUD bars after food poisoning - -function mcl_hunger.reset_bars_poison_hunger(player) - hb.change_hudbar(player, "hunger", nil, nil, "hbhunger_icon.png", nil, "hbhunger_bar.png") - if mcl_hunger.debug then - hb.change_hudbar(player, "exhaustion", nil, nil, nil, nil, "mcl_hunger_bar_exhaustion.png") - end -end - --- Poison player -local function poisonp(tick, time, time_left, damage, exhaustion, name) - if not mcl_hunger.active then - return - end - local player = minetest.get_player_by_name(name) - -- First check if player is still there - if not player then - return - end - -- Abort if food poisonings have been stopped - if mcl_hunger.poison_hunger[name] == 0 then - return - end - time_left = time_left + tick - if time_left < time then - minetest.after(tick, poisonp, tick, time, time_left, damage, exhaustion, name) - else - if exhaustion > 0 then - mcl_hunger.poison_hunger [name] = mcl_hunger.poison_hunger[name] - 1 - end - if mcl_hunger.poison_hunger[name] <= 0 then - mcl_hunger.reset_bars_poison_hunger(player) - end - end - - -- Deal damage and exhaust player - -- TODO: Introduce fatal poison at higher difficulties - if player:get_hp()-damage > 0 then - mcl_util.deal_damage(player, damage, {type = "hunger"}) - end - - mcl_hunger.exhaust(name, exhaustion) - -end - -local poisonrandomizer = PseudoRandom(os.time()) - -function mcl_hunger.item_eat(hunger_change, replace_with_item, poisontime, poison, exhaust, poisonchance, sound) - return function(itemstack, user, pointed_thing) - local itemname = itemstack:get_name() - local creative = minetest.is_creative_enabled(user:get_player_name()) - if itemstack:peek_item() and user then - if not creative then - itemstack:take_item() - end - local name = user:get_player_name() - --local hp = user:get_hp() - - local pos = user:get_pos() - -- player height - pos.y = pos.y + 1.5 - local foodtype = minetest.get_item_group(itemname, "food") - if foodtype == 3 then - -- Item is a drink, only play drinking sound (no particle) - minetest.sound_play("survival_thirst_drink", { - max_hear_distance = 12, - gain = 1.0, - pitch = 1 + math.random(-10, 10)*0.005, - object = user, - }, true) - else - -- Assume the item is a food - -- Add eat particle effect and sound - local def = minetest.registered_items[itemname] - local texture = def.inventory_image - if not texture or texture == "" then - texture = def.wield_image - end - -- Special item definition field: _food_particles - -- If false, force item to not spawn any food partiles when eaten - if def._food_particles ~= false and texture and texture ~= "" then - local v = user:get_velocity() or user:get_player_velocity() - for i = 0, math.min(math.max(8, hunger_change*2), 25) do - minetest.add_particle({ - pos = { x = pos.x, y = pos.y, z = pos.z }, - velocity = vector.add(v, { x = math.random(-1, 1), y = math.random(1, 2), z = math.random(-1, 1) }), - acceleration = { x = 0, y = math.random(-9, -5), z = 0 }, - expirationtime = 1, - size = math.random(1, 2), - collisiondetection = true, - vertical = false, - texture = "[combine:3x3:" .. -i .. "," .. -i .. "=" .. texture, - }) - end - end - minetest.sound_play("mcl_hunger_bite", { - max_hear_distance = 12, - gain = 1.0, - pitch = 1 + math.random(-10, 10)*0.005, - object = user, - }, true) - end - - if mcl_hunger.active and hunger_change then - -- Add saturation (must be defined in item table) - local _mcl_saturation = minetest.registered_items[itemname]._mcl_saturation - local saturation - if not _mcl_saturation then - saturation = 0 - else - saturation = minetest.registered_items[itemname]._mcl_saturation - end - mcl_hunger.saturate(name, saturation, false) - - -- Add food points - local h = mcl_hunger.get_hunger(user) - if h < 20 and hunger_change then - h = h + hunger_change - if h > 20 then h = 20 end - mcl_hunger.set_hunger(user, h, false) - end - - hb.change_hudbar(user, "hunger", h) - mcl_hunger.update_saturation_hud(user, mcl_hunger.get_saturation(user), h) - end - -- Poison - if mcl_hunger.active and poisontime then - local do_poison = false - if poisonchance then - if poisonrandomizer:next(0,100) < poisonchance then - do_poison = true - end - else - do_poison = true - end - if do_poison then - -- Set food poison bars - if exhaust and exhaust > 0 then - hb.change_hudbar(user, "hunger", nil, nil, "mcl_hunger_icon_foodpoison.png", nil, "mcl_hunger_bar_foodpoison.png") - if mcl_hunger.debug then - hb.change_hudbar(user, "exhaustion", nil, nil, nil, nil, "mcl_hunger_bar_foodpoison.png") - end - mcl_hunger.poison_hunger[name] = mcl_hunger.poison_hunger[name] + 1 - end - poisonp(1, poisontime, 0, poison, exhaust, user:get_player_name()) - end - end - - if not creative then - itemstack:add_item(replace_with_item) - end - end - return itemstack - end -end - -if mcl_hunger.active then - -- player-action based hunger changes - minetest.register_on_dignode(function(pos, oldnode, player) - -- is_fake_player comes from the pipeworks, we are not interested in those - if not player or not player:is_player() or player.is_fake_player == true then - return - end - local name = player:get_player_name() - -- dig event - mcl_hunger.exhaust(name, mcl_hunger.EXHAUST_DIG) - end) -end diff --git a/mods/PLAYER/mcl_hunger/init.lua b/mods/PLAYER/mcl_hunger/init.lua deleted file mode 100644 index 21c1e0860..000000000 --- a/mods/PLAYER/mcl_hunger/init.lua +++ /dev/null @@ -1,188 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) - -local S = minetest.get_translator(modname) - -mcl_hunger = {} - ---[[ This variable tells you if the hunger gameplay mechanic is active. -The state of the hunger mechanic will be determined at game start. -Hunger is enabled when damage is enabled. -If the damage setting is changed within the game, this does NOT -update the hunger mechanic, so the game must be restarted for this -to take effect. ]] -if minetest.settings:get_bool("enable_damage") == true then - mcl_hunger.active = true -else - mcl_hunger.active = false -end - -mcl_hunger.HUD_TICK = 0.1 - --- Exhaustion increase -mcl_hunger.EXHAUST_DIG = 5 -- after digging node -mcl_hunger.EXHAUST_JUMP = 50 -- jump -mcl_hunger.EXHAUST_SPRINT_JUMP = 200 -- jump while sprinting -mcl_hunger.EXHAUST_ATTACK = 100 -- hit an enemy -mcl_hunger.EXHAUST_SWIM = 10 -- player movement in water -mcl_hunger.EXHAUST_SPRINT = 100 -- sprint (per node) -mcl_hunger.EXHAUST_DAMAGE = 100 -- taking damage (protected by armor) -mcl_hunger.EXHAUST_REGEN = 6000 -- Regenerate 1 HP -mcl_hunger.EXHAUST_LVL = 4000 -- at what exhaustion player saturation gets lowered - -mcl_hunger.SATURATION_INIT = 5 -- Initial saturation for new/respawning players - --- Debug Mode. If enabled, saturation and exhaustion are shown as well. --- NOTE: Only updated when settings are loaded. -mcl_hunger.debug = false - --- Cooldown timers for each player, to force a short delay between consuming 2 food items -mcl_hunger.last_eat = {} - -dofile(modpath.."/api.lua") -dofile(modpath.."/hunger.lua") -dofile(modpath.."/register_foods.lua") - ---[[ IF HUNGER IS ENABLED ]] -if mcl_hunger.active == true then - --- Read debug mode setting --- The setting should only be read at the beginning, this mod is not --- prepared to change this setting later. -mcl_hunger.debug = minetest.settings:get_bool("mcl_hunger_debug") -if mcl_hunger.debug == nil then - mcl_hunger.debug = false -end - ---[[ Data value format notes: - Hunger values is identical to Minecraft's and ranges from 0 to 20. - Exhaustion and saturation values are stored as integers, unlike in Minecraft. - Exhaustion is Minecraft exhaustion times 1000 and ranges from 0 to 4000. - Saturation is Minecraft saturation and ranges from 0 to 20. - - Food saturation is stored in the custom item definition field _mcl_saturation. - This field uses the original Minecraft value. -]] - --- Count number of poisonings a player has at once -mcl_hunger.poison_hunger = {} -- food poisoning, increasing hunger - --- HUD -local function init_hud(player) - hb.init_hudbar(player, "hunger", mcl_hunger.get_hunger(player)) - if mcl_hunger.debug then - hb.init_hudbar(player, "saturation", mcl_hunger.get_saturation(player), mcl_hunger.get_hunger(player)) - hb.init_hudbar(player, "exhaustion", mcl_hunger.get_exhaustion(player)) - end -end - --- HUD updating functions for Debug Mode. No-op if not in Debug Mode -function mcl_hunger.update_saturation_hud(player, saturation, hunger) - if mcl_hunger.debug then - hb.change_hudbar(player, "saturation", saturation, hunger) - end -end -function mcl_hunger.update_exhaustion_hud(player, exhaustion) - if mcl_hunger.debug then - hb.change_hudbar(player, "exhaustion", exhaustion) - end -end - --- register saturation hudbar -hb.register_hudbar("hunger", 0xFFFFFF, S("Food"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 1, 20, 20, false) -if mcl_hunger.debug then - hb.register_hudbar("saturation", 0xFFFFFF, S("Saturation"), { icon = "mcl_hunger_icon_saturation.png", bgicon = "mcl_hunger_bgicon_saturation.png", bar = "mcl_hunger_bar_saturation.png" }, 1, mcl_hunger.SATURATION_INIT, 200, false) - hb.register_hudbar("exhaustion", 0xFFFFFF, S("Exhaust."), { icon = "mcl_hunger_icon_exhaustion.png", bgicon = "mcl_hunger_bgicon_exhaustion.png", bar = "mcl_hunger_bar_exhaustion.png" }, 1, 0, mcl_hunger.EXHAUST_LVL, false) -end - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - mcl_hunger.init_player(player) - init_hud(player) - mcl_hunger.poison_hunger[name] = 0 - mcl_hunger.last_eat[name] = -1 -end) - -minetest.register_on_respawnplayer(function(player) - -- reset hunger, related values and poison - local name = player:get_player_name() - - mcl_hunger.stop_poison(player) - mcl_hunger.last_eat[name] = -1 - - local h, s, e = 20, mcl_hunger.SATURATION_INIT, 0 - mcl_hunger.set_hunger(player, h, false) - mcl_hunger.set_saturation(player, s, false) - mcl_hunger.set_exhaustion(player, e, false) - hb.change_hudbar(player, "hunger", h) - mcl_hunger.update_saturation_hud(player, s, h) - mcl_hunger.update_exhaustion_hud(player, e) -end) - --- PvP combat exhaustion -minetest.register_on_punchplayer(function(victim, puncher, time_from_last_punch, tool_capabilities, dir, damage) - if puncher:is_player() then - mcl_hunger.exhaust(puncher:get_player_name(), mcl_hunger.EXHAUST_ATTACK) - end -end) - --- Exhaust on taking damage -minetest.register_on_player_hpchange(function(player, hp_change) - if hp_change < 0 then - local name = player:get_player_name() - mcl_hunger.exhaust(name, mcl_hunger.EXHAUST_DAMAGE) - end -end) - -local food_tick_timers = {} -- one food_tick_timer per player, keys are the player-objects -minetest.register_globalstep(function(dtime) - for _,player in pairs(minetest.get_connected_players()) do - - local food_tick_timer = food_tick_timers[player] and food_tick_timers[player] + dtime or 0 - local player_name = player:get_player_name() - local food_level = mcl_hunger.get_hunger(player) - local food_saturation_level = mcl_hunger.get_saturation(player) - local player_health = player:get_hp() - - if food_tick_timer > 4.0 then - food_tick_timer = 0 - - if food_level >= 18 then -- slow regenration - if player_health > 0 and player_health < 20 then - player:set_hp(player_health+1) - mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN) - mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player)) - end - - elseif food_level == 0 then -- starvation - -- the amount of health at which a player will stop to get - -- harmed by starvation (10 for Easy, 1 for Normal, 0 for Hard) - local maximum_starvation = 1 - -- TODO: implement Minecraft-like difficulty modes and the update maximumStarvation here - if player_health > maximum_starvation then - mcl_util.deal_damage(player, 1, {type = "starve"}) - end - end - - elseif food_tick_timer > 0.5 and food_level == 20 and food_saturation_level >= 6 then -- fast regeneration - if player_health > 0 and player_health < 20 then - food_tick_timer = 0 - player:set_hp(player_health+1) - mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN) - mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player)) - end - end - - food_tick_timers[player] = food_tick_timer -- update food_tick_timer table - end -end) - ---[[ IF HUNGER IS NOT ENABLED ]] -else - -minetest.register_on_joinplayer(function(player) - mcl_hunger.init_player(player) - mcl_hunger.last_eat[player:get_player_name()] = -1 -end) - -end diff --git a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.de.tr b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.de.tr deleted file mode 100644 index 8cf109460..000000000 --- a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_hunger -@1 succumbed to the poison.=@1 erlag dem Gift. -Food=Nahrung -Saturation=Sättigung -%s: %.1f/%d=%s: %.1f -Exhaust.=Erschöpf. -%s: %d/%d=%s: %d/%d -@1 starved to death.=@1 verhungerte. diff --git a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.es.tr b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.es.tr deleted file mode 100644 index 15396a6d3..000000000 --- a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_hunger -@1 succumbed to the poison.=@1 sucumbió al veneno. -Food=Comida -Saturation=Saturación -%s: %.1f/%d=%s: %.1f -Exhaust.=Cansado. -%s: %d/%d=%s: %d/%d -@1 starved to death.=@1 ha muerto de hambre. diff --git a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.fr.tr b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.fr.tr deleted file mode 100644 index 811868b3a..000000000 --- a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_hunger -@1 succumbed to the poison.=@1 a succombé au poison. -Food=Nourriture -Saturation=Saturation -%s: %.1f/%d=%s: %.1f/%d -Exhaust.=Échappement. -%s: %d/%d=%s: %d/%d -@1 starved to death.=@1 est mort de faim. diff --git a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr deleted file mode 100644 index be20c6d85..000000000 --- a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_hunger -@1 succumbed to the poison.=@1 uległa truciźnie. -Food=Jedzenie -Saturation=Nasycenie -%s: %.1f/%d=%s: %.1f/%d -Exhaust.=Wyczerpanie. -%s: %d/%d=%s: %d/%d -@1 starved to death.=@1 umarła z wygłodzenia. - diff --git a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.ru.tr b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.ru.tr deleted file mode 100644 index a91a4db75..000000000 --- a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.ru.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_hunger -@1 succumbed to the poison.=@1 умер(ла) от яда. -Food=Продукт -Saturation=Насыщение -%s: %.1f/%d=%s: %.1f/%d -Exhaust.=Истощ. -%s: %d/%d=%s: %d/%d -@1 starved to death.=@1 умер(ла) от голода. diff --git a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.zh_TW.tr b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.zh_TW.tr deleted file mode 100644 index 18d265ef4..000000000 --- a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.zh_TW.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_hunger -@1 succumbed to the poison.= -Food=食物 -Saturation=飽食度 -%s: %.1f/%d= -Exhaust.=飢餓值 -%s: %d/%d= -@1 starved to death.=@1 餓死了。 diff --git a/mods/PLAYER/mcl_hunger/locale/template.txt b/mods/PLAYER/mcl_hunger/locale/template.txt deleted file mode 100644 index d745ab08a..000000000 --- a/mods/PLAYER/mcl_hunger/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_hunger -@1 succumbed to the poison.= -Food= -Saturation= -%s: %.1f/%d= -Exhaust.= -%s: %d/%d= -@1 starved to death.= diff --git a/mods/PLAYER/mcl_hunger/mod.conf b/mods/PLAYER/mcl_hunger/mod.conf deleted file mode 100644 index 99ab71ff3..000000000 --- a/mods/PLAYER/mcl_hunger/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_hunger -author = BlockMen -description = Adds a simple hunger meachanic with satiation, food poisoning and different healing. -depends = hudbars diff --git a/mods/PLAYER/mcl_hunger/register_foods.lua b/mods/PLAYER/mcl_hunger/register_foods.lua deleted file mode 100644 index a68dde1c1..000000000 --- a/mods/PLAYER/mcl_hunger/register_foods.lua +++ /dev/null @@ -1,7 +0,0 @@ --- Apply food poisoning effect as long there are no real status effect. --- TODO: Remove this when food poisoning a status effect in mcl_potions. --- Normal poison damage is set to 0 because it's handled elsewhere. - -mcl_hunger.register_food("mcl_mobitems:rotten_flesh", 4, "", 30, 0, 100, 80) -mcl_hunger.register_food("mcl_mobitems:chicken", 2, "", 30, 0, 100, 30) -mcl_hunger.register_food("mcl_fishing:pufferfish_raw", 1, "", 15, 0, 300) diff --git a/mods/PLAYER/mcl_hunger/sounds/mcl_hunger_bite.1.ogg b/mods/PLAYER/mcl_hunger/sounds/mcl_hunger_bite.1.ogg deleted file mode 100644 index 065ba06c1..000000000 Binary files a/mods/PLAYER/mcl_hunger/sounds/mcl_hunger_bite.1.ogg and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/sounds/mcl_hunger_bite.2.ogg b/mods/PLAYER/mcl_hunger/sounds/mcl_hunger_bite.2.ogg deleted file mode 100644 index 51a3a90e9..000000000 Binary files a/mods/PLAYER/mcl_hunger/sounds/mcl_hunger_bite.2.ogg and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/sounds/survival_thirst_drink.ogg b/mods/PLAYER/mcl_hunger/sounds/survival_thirst_drink.ogg deleted file mode 100644 index 7c3df3ca1..000000000 Binary files a/mods/PLAYER/mcl_hunger/sounds/survival_thirst_drink.ogg and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/hbhunger_bar.png b/mods/PLAYER/mcl_hunger/textures/hbhunger_bar.png deleted file mode 100644 index 57e94a183..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/hbhunger_bar.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/hbhunger_bar_health_poison.png b/mods/PLAYER/mcl_hunger/textures/hbhunger_bar_health_poison.png deleted file mode 100644 index 6373f4ea5..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/hbhunger_bar_health_poison.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/hbhunger_bgicon.png b/mods/PLAYER/mcl_hunger/textures/hbhunger_bgicon.png deleted file mode 100644 index d21b16847..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/hbhunger_bgicon.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/hbhunger_icon.png b/mods/PLAYER/mcl_hunger/textures/hbhunger_icon.png deleted file mode 100644 index 3830fdfc3..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/hbhunger_icon.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/hbhunger_icon_health_poison.png b/mods/PLAYER/mcl_hunger/textures/hbhunger_icon_health_poison.png deleted file mode 100644 index 89776483b..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/hbhunger_icon_health_poison.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_exhaustion.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_exhaustion.png deleted file mode 100644 index 04284e01a..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_exhaustion.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_foodpoison.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_foodpoison.png deleted file mode 100644 index 02580e149..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_foodpoison.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_saturation.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_saturation.png deleted file mode 100644 index ae6d8639e..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bar_saturation.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bgicon_exhaustion.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bgicon_exhaustion.png deleted file mode 100644 index deb0d49ef..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bgicon_exhaustion.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bgicon_saturation.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bgicon_saturation.png deleted file mode 100644 index b5bd3a322..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_bgicon_saturation.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_exhaustion.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_exhaustion.png deleted file mode 100644 index 1f89f90ee..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_exhaustion.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_foodpoison.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_foodpoison.png deleted file mode 100644 index 130601c8e..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_foodpoison.png and /dev/null differ diff --git a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_saturation.png b/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_saturation.png deleted file mode 100644 index 2885573c0..000000000 Binary files a/mods/PLAYER/mcl_hunger/textures/mcl_hunger_icon_saturation.png and /dev/null differ diff --git a/mods/PLAYER/mcl_meshhand/README.md b/mods/PLAYER/mcl_meshhand/README.md deleted file mode 100644 index 2c796ff32..000000000 --- a/mods/PLAYER/mcl_meshhand/README.md +++ /dev/null @@ -1,9 +0,0 @@ -Mesh hand mod for MineClone 2. - -This mod uses a better-looking mesh for the wieldhand and applies the player skin texture to it. - -== Credits == -Based on 3D Hand [newhand] mod by jordan4ibanez. -https://forum.minetest.net/viewtopic.php?t=16435 - -License: CC0 diff --git a/mods/PLAYER/mcl_meshhand/init.lua b/mods/PLAYER/mcl_meshhand/init.lua deleted file mode 100644 index 93f22c325..000000000 --- a/mods/PLAYER/mcl_meshhand/init.lua +++ /dev/null @@ -1,79 +0,0 @@ -local has_mcl_skins = minetest.get_modpath("mcl_skins") ~= nil - -local def = minetest.registered_items[""] - -local list --- mcl_skins is enabled -if has_mcl_skins == true then - list = mcl_skins.list -else - list = { "hand" } -end - ---generate a node for every skin -for _,texture in pairs(list) do - -- This is a fake node that should never be placed in the world - minetest.register_node("mcl_meshhand:"..texture, { - description = "", - tiles = {texture..".png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - visual_scale = 1, - wield_scale = {x=1,y=1,z=1}, - paramtype = "light", - drawtype = "mesh", - mesh = "mcl_meshhand.b3d", - -- Prevent construction - node_placement_prediction = "", - on_construct = function(pos) - minetest.log("error", "[mcl_meshhand] Trying to construct mcl_meshhand:"..texture.." at "..minetest.pos_to_string(pos)) - minetest.remove_node(pos) - end, - drop = "", - on_drop = function() - return "" - end, - groups = { dig_immediate = 3, not_in_creative_inventory = 1 }, - range = def.range, - _mcl_hand_id = texture, - }) - - minetest.register_node("mcl_meshhand:"..texture.. "_female", { - description = "", - tiles = {texture..".png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - visual_scale = 1, - wield_scale = {x=1,y=1,z=1}, - paramtype = "light", - drawtype = "mesh", - mesh = "mcl_meshhand_female.b3d", - -- Prevent construction - node_placement_prediction = "", - on_construct = function(pos) - minetest.log("error", "[mcl_meshhand] Trying to construct mcl_meshhand:"..texture.." at "..minetest.pos_to_string(pos)) - minetest.remove_node(pos) - end, - drop = "", - on_drop = function() - return "" - end, - groups = { dig_immediate = 3, not_in_creative_inventory = 1 }, - range = def.range, - _mcl_hand_id = texture .. "_female", - }) -end - -if has_mcl_skins == true then - --change the player's hand to their skin - mcl_skins.register_on_set_skin(function(player, skin) - local meta = mcl_skins.meta[skin] - if meta.gender == "female" then - player:get_inventory():set_stack("hand", 1, "mcl_meshhand:"..skin.."_female") - else - player:get_inventory():set_stack("hand", 1, "mcl_meshhand:"..skin) - end - end) -else - minetest.register_on_joinplayer(function(player) - player:get_inventory():set_stack("hand", 1, "mcl_meshhand:hand") - end) -end diff --git a/mods/PLAYER/mcl_meshhand/mod.conf b/mods/PLAYER/mcl_meshhand/mod.conf deleted file mode 100644 index 6a988417f..000000000 --- a/mods/PLAYER/mcl_meshhand/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mcl_meshhand -author = jordan4ibanez -description = Applies the player skin texture to the hand. -depends = mcl_tools -optional_depends = mcl_skins - diff --git a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand.b3d b/mods/PLAYER/mcl_meshhand/models/mcl_meshhand.b3d deleted file mode 100644 index a38124c60..000000000 Binary files a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand.b3d and /dev/null differ diff --git a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand.blend b/mods/PLAYER/mcl_meshhand/models/mcl_meshhand.blend deleted file mode 100644 index 495e74eb5..000000000 Binary files a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand.blend and /dev/null differ diff --git a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.b3d b/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.b3d deleted file mode 100644 index b2ec6efcf..000000000 Binary files a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.b3d and /dev/null differ diff --git a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.blend b/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.blend deleted file mode 100644 index be642496f..000000000 Binary files a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.blend and /dev/null differ diff --git a/mods/PLAYER/mcl_player/README.txt b/mods/PLAYER/mcl_player/README.txt deleted file mode 100644 index 637a25684..000000000 --- a/mods/PLAYER/mcl_player/README.txt +++ /dev/null @@ -1,24 +0,0 @@ -MineClone 2 mod: mcl_player -========================== -Adds the 3D player model, taken from Minetest Game 0.4.16. - -Programmers: See `game_api.txt` for the API definition. - -Authors of source code ----------------------- -Originally by celeron55, Perttu Ahola (LGPL 2.1) -Various Minetest developers and contributors (LGPL 2.1) - -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 - -Authors of media files ------------------------ -MirceaKitsune (CC BY-SA 3.0): - character.b3d - -Textures: See main MineClone 2 README.md file. diff --git a/mods/PLAYER/mcl_player/game_api.txt b/mods/PLAYER/mcl_player/game_api.txt deleted file mode 100644 index 51c082086..000000000 --- a/mods/PLAYER/mcl_player/game_api.txt +++ /dev/null @@ -1,56 +0,0 @@ -Player API ----------- -This is the same as the player API from Minetest Game 0.4.16. -But `default` has been renamed to `mcl_player`. - -The player API can register player models and update the player's appearence. - -`mcl_player.player_register_model(name, def)` - - * Register a new model to be used by players. - * name: model filename such as "character.x", "foo.b3d", etc. - * def: See [#Model definition] - -`mcl_player.registered_player_models[name]` - - * Get a model's definition - * see [#Model definition] - -`mcl_player.player_set_model(player, model_name)` - - * Change a player's model - * `player`: PlayerRef - * `model_name`: model registered with player_register_model() - -`mcl_player.player_set_animation(player, anim_name [, speed])` - - * Applies an animation to a player - * anim_name: name of the animation. - * speed: frames per second. If nil, default from the model is used - -`mcl_player.player_set_textures(player, textures)` - - * Sets player textures - * `player`: PlayerRef - * `textures`: array of textures, If `textures` is nil, the default textures from the model def are used - -mcl_player.player_get_animation(player) - - * Returns a table containing fields `model`, `textures` and `animation`. - * Any of the fields of the returned table may be nil. - * player: PlayerRef - -### Model Definition - - { - animation_speed = 30, -- Default animation speed, in FPS. - textures = {"character.png", }, -- Default array of textures. - visual_size = {x = 1, y = 1}, -- Used to scale the model. - animations = { - -- = {x = , y = }, - foo = {x = 0, y = 19}, - bar = {x = 20, y = 39}, - -- ... - }, - } - diff --git a/mods/PLAYER/mcl_player/init.lua b/mods/PLAYER/mcl_player/init.lua deleted file mode 100644 index 4824bc9e3..000000000 --- a/mods/PLAYER/mcl_player/init.lua +++ /dev/null @@ -1,235 +0,0 @@ --- Minetest 0.4 mod: player --- See README.txt for licensing and other information. -mcl_player = {} - --- Player animation blending --- Note: This is currently broken due to a bug in Irrlicht, leave at 0 -local animation_blend = 0 - -local function get_mouse_button(player) - local controls = player:get_player_control() - local get_wielded_item_name = player:get_wielded_item():get_name() - if controls.RMB and not string.find(get_wielded_item_name, "mcl_bows:bow") and not string.find(get_wielded_item_name, "mcl_bows:crossbow") and - not mcl_shields.wielding_shield(player, 1) and not mcl_shields.wielding_shield(player, 2) or controls.LMB then - return true - else - return false - end -end - -mcl_player.registered_player_models = { } - --- Local for speed. -local models = mcl_player.registered_player_models - -function mcl_player.player_register_model(name, def) - models[name] = def -end - --- Default player appearance -mcl_player.player_register_model("character.b3d", { - animation_speed = 30, - textures = {"character.png", }, - animations = { - -- Standard animations. - stand = {x= 0, y= 79}, - lay = {x=162, y=166}, - walk = {x=168, y=187}, - mine = {x=189, y=198}, - walk_mine = {x=200, y=219}, - sit = {x= 81, y=160}, - sneak_stand = {x=222, y=302}, - sneak_mine = {x=346, y=366}, - sneak_walk = {x=304, y=323}, - sneak_walk_mine = {x=325, y=344}, - run_walk = {x=440, y=460}, - run_walk_mine = {x=461, y=481}, - sit_mount = {x=484, y=484}, - }, -}) - --- Player stats and animations -local player_model = {} -local player_textures = {} -local player_anim = {} -local player_sneak = {} -mcl_player.player_attached = {} - -function mcl_player.player_get_animation(player) - local name = player:get_player_name() - return { - model = player_model[name], - textures = player_textures[name], - animation = player_anim[name], - } -end - --- Called when a player's appearance needs to be updated -function mcl_player.player_set_model(player, model_name) - local name = player:get_player_name() - local model = models[model_name] - if model then - if player_model[name] == model_name then - return - end - player:set_properties({ - mesh = model_name, - textures = player_textures[name] or model.textures, - visual = "mesh", - visual_size = model.visual_size or {x=1, y=1}, - damage_texture_modifier = "^[colorize:red:130", - }) - mcl_player.player_set_animation(player, "stand") - else - player:set_properties({ - textures = { "player.png", "player_back.png", }, - visual = "upright_sprite", - }) - end - player_model[name] = model_name -end - -local function set_texture(player, index, texture) - local textures = player_textures[player:get_player_name()] - textures[index] = texture - player:set_properties({textures = textures}) -end - -function mcl_player.player_set_skin(player, texture) - set_texture(player, 1, texture) -end - -function mcl_player.player_set_armor(player, texture) - set_texture(player, 2, texture) -end - -function mcl_player.player_set_wielditem(player, texture) - set_texture(player, 3, texture) -end - -function mcl_player.get_player_formspec_model(player, x, y, w, h, fsname) - local name = player:get_player_name() - local model = player_model[name] - local anim = models[model].animations[player_anim[name]] - return "model["..x..","..y..";"..w..","..h..";"..fsname..";"..model..";"..table.concat(player_textures[name], ",")..";0,".. 180 ..";false;false;"..anim.x..","..anim.y.."]" -end - -function mcl_player.player_set_animation(player, anim_name, speed) - local name = player:get_player_name() - if player_anim[name] == anim_name then - return - end - local model = player_model[name] and models[player_model[name]] - if not (model and model.animations[anim_name]) then - return - end - local anim = model.animations[anim_name] - player_anim[name] = anim_name - player:set_animation(anim, speed or model.animation_speed, animation_blend) -end - --- Update appearance when the player joins -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - mcl_player.player_attached[name] = false - mcl_player.player_set_model(player, "character.b3d") - player_textures[name] = {"blank.png", "blank.png", "blank.png"} - --player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30) - player:set_fov(86.1) -- see >>> -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - player_model[name] = nil - player_anim[name] = nil - player_textures[name] = nil -end) - --- Localize for better performance. -local player_set_animation = mcl_player.player_set_animation -local player_attached = mcl_player.player_attached - --- Check each player and apply animations -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local model_name = player_model[name] - local model = model_name and models[model_name] - if model and not player_attached[name] then - local controls = player:get_player_control() - local walking = false - local animation_speed_mod = model.animation_speed or 30 - - -- Determine if the player is walking - if controls.up or controls.down or controls.left or controls.right then - walking = true - end - - -- Determine if the player is sneaking, and reduce animation speed if so - if controls.sneak then - animation_speed_mod = animation_speed_mod / 2 - end - - if mcl_shields.is_blocking(player) then - animation_speed_mod = animation_speed_mod / 2 - end - - -- ask if player is swiming - local head_in_water = minetest.get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 - -- ask if player is sprinting - local is_sprinting = mcl_sprint.is_sprinting(name) - - local velocity = player:get_velocity() or player:get_player_velocity() - - -- Apply animations based on what the player is doing - if player:get_hp() == 0 then - player_set_animation(player, "die") - elseif walking and velocity.x > 0.35 - or walking and velocity.x < -0.35 - or walking and velocity.z > 0.35 - or walking and velocity.z < -0.35 then - local wielded_itemname = player:get_wielded_item():get_name() - local no_arm_moving = string.find(wielded_itemname, "mcl_bows:bow") or mcl_shields.wielding_shield(player, 1) or mcl_shields.wielding_shield(player, 2) - if player_sneak[name] ~= controls.sneak then - player_anim[name] = nil - player_sneak[name] = controls.sneak - end - if get_mouse_button(player) == true and not controls.sneak and head_in_water and is_sprinting == true then - player_set_animation(player, "swim_walk_mine", animation_speed_mod) - elseif not controls.sneak and head_in_water and is_sprinting == true then - player_set_animation(player, "swim_walk", animation_speed_mod) - elseif no_arm_moving and controls.RMB and controls.sneak or string.find(wielded_itemname, "mcl_bows:crossbow_") and controls.sneak then - player_set_animation(player, "bow_sneak", animation_speed_mod) - elseif no_arm_moving and controls.RMB or string.find(wielded_itemname, "mcl_bows:crossbow_") then - player_set_animation(player, "bow_walk", animation_speed_mod) - elseif is_sprinting == true and get_mouse_button(player) == true and not controls.sneak and not head_in_water then - player_set_animation(player, "run_walk_mine", animation_speed_mod) - elseif get_mouse_button(player) == true and not controls.sneak then - player_set_animation(player, "walk_mine", animation_speed_mod) - elseif get_mouse_button(player) == true and controls.sneak and is_sprinting ~= true then - player_set_animation(player, "sneak_walk_mine", animation_speed_mod) - elseif is_sprinting == true and not controls.sneak and not head_in_water then - player_set_animation(player, "run_walk", animation_speed_mod) - elseif controls.sneak and not get_mouse_button(player) == true then - player_set_animation(player, "sneak_walk", animation_speed_mod) - else - player_set_animation(player, "walk", animation_speed_mod) - end - elseif get_mouse_button(player) == true and not controls.sneak and head_in_water and is_sprinting == true then - player_set_animation(player, "swim_mine") - elseif not get_mouse_button(player) == true and not controls.sneak and head_in_water and is_sprinting == true then - player_set_animation(player, "swim_stand") - elseif get_mouse_button(player) == true and not controls.sneak then - player_set_animation(player, "mine") - elseif get_mouse_button(player) == true and controls.sneak then - player_set_animation(player, "sneak_mine") - elseif not controls.sneak and head_in_water and is_sprinting == true then - player_set_animation(player, "swim_stand", animation_speed_mod) - elseif not controls.sneak then - player_set_animation(player, "stand", animation_speed_mod) - else - player_set_animation(player, "sneak_stand", animation_speed_mod) - end - end - end -end) diff --git a/mods/PLAYER/mcl_player/mod.conf b/mods/PLAYER/mcl_player/mod.conf deleted file mode 100644 index 7cc5d14fa..000000000 --- a/mods/PLAYER/mcl_player/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_player -author = celeron55 -description = Adds the 3D player model, taken from Minetest Game 0.4.16. -depends = mcl_shields \ No newline at end of file diff --git a/mods/PLAYER/mcl_player/models/character.b3d b/mods/PLAYER/mcl_player/models/character.b3d deleted file mode 100644 index f5482f4c7..000000000 Binary files a/mods/PLAYER/mcl_player/models/character.b3d and /dev/null differ diff --git a/mods/PLAYER/mcl_player/models/character.blend b/mods/PLAYER/mcl_player/models/character.blend deleted file mode 100644 index f77f49f40..000000000 Binary files a/mods/PLAYER/mcl_player/models/character.blend and /dev/null differ diff --git a/mods/PLAYER/mcl_player/models/character.png b/mods/PLAYER/mcl_player/models/character.png deleted file mode 100644 index 16382f189..000000000 Binary files a/mods/PLAYER/mcl_player/models/character.png and /dev/null differ diff --git a/mods/PLAYER/mcl_player/textures/player.png b/mods/PLAYER/mcl_player/textures/player.png deleted file mode 100644 index a3e18be26..000000000 Binary files a/mods/PLAYER/mcl_player/textures/player.png and /dev/null differ diff --git a/mods/PLAYER/mcl_player/textures/player_back.png b/mods/PLAYER/mcl_player/textures/player_back.png deleted file mode 100644 index 4bd5366fa..000000000 Binary files a/mods/PLAYER/mcl_player/textures/player_back.png and /dev/null differ diff --git a/mods/PLAYER/mcl_player_init/init.lua b/mods/PLAYER/mcl_player_init/init.lua deleted file mode 100644 index 52967a441..000000000 --- a/mods/PLAYER/mcl_player_init/init.lua +++ /dev/null @@ -1,4 +0,0 @@ -minetest.register_on_joinplayer(function(player) - -- Settable hand - player:get_inventory():set_size("hand", 1) -end) diff --git a/mods/PLAYER/mcl_player_init/mod.conf b/mods/PLAYER/mcl_player_init/mod.conf deleted file mode 100644 index d7a86c438..000000000 --- a/mods/PLAYER/mcl_player_init/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_player_init -author = Wuzzy -description = Initialize player gameplay stuff that are neither model nor HUD-related diff --git a/mods/PLAYER/mcl_playerinfo/README.md b/mods/PLAYER/mcl_playerinfo/README.md deleted file mode 100644 index fe5ac0a42..000000000 --- a/mods/PLAYER/mcl_playerinfo/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# PlayerInfo mod for MineClone 2 - -This is a helper mod for other mod to query the nodes around the player. - -Every half second the mod checks which node the player is standing on, which -node is at foot and head level and stores inside a global table to be used by mods: - -- `mcl_playerinfo[name].node_stand` -- `mcl_playerinfo[name].node_stand_below` -- `mcl_playerinfo[name].node_foot` -- `mcl_playerinfo[name].node_head` - -## License -MIT License - diff --git a/mods/PLAYER/mcl_playerinfo/init.lua b/mods/PLAYER/mcl_playerinfo/init.lua deleted file mode 100644 index 9c5d1433f..000000000 --- a/mods/PLAYER/mcl_playerinfo/init.lua +++ /dev/null @@ -1,93 +0,0 @@ -local table = table - --- Player state for public API -mcl_playerinfo = {} - --- Get node but use fallback for nil or unknown -local function node_ok(pos, fallback) - - fallback = fallback or "air" - - local node = minetest.get_node_or_nil(pos) - - if not node then - return fallback - end - - if minetest.registered_nodes[node.name] then - return node.name - end - - return fallback -end - -local time = 0 - -local function get_player_nodes(player_pos) - local work_pos = table.copy(player_pos) - - -- what is around me? - work_pos.y = work_pos.y - 0.1 -- standing on - local node_stand = node_ok(work_pos) - local node_stand_below = node_ok({x=work_pos.x, y=work_pos.y-1, z=work_pos.z}) - - work_pos.y = work_pos.y + 1.5 -- head level - local node_head = node_ok(work_pos) - - work_pos.y = work_pos.y - 1.2 -- feet level - local node_feet = node_ok(work_pos) - - return node_stand, node_stand_below, node_head, node_feet -end - -minetest.register_globalstep(function(dtime) - - time = time + dtime - - -- Run the rest of the code every 0.5 seconds - if time < 0.5 then - return - end - - -- reset time for next check - -- FIXME: Make sure a regular check interval applies - time = 0 - - -- check players - for _,player in pairs(minetest.get_connected_players()) do - -- who am I? - local name = player:get_player_name() - - -- where am I? - local pos = player:get_pos() - - -- what is around me? - local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos) - mcl_playerinfo[name].node_stand = node_stand - mcl_playerinfo[name].node_stand_below = node_stand_below - mcl_playerinfo[name].node_head = node_head - mcl_playerinfo[name].node_feet = node_feet - - end - -end) - --- set to blank on join (for 3rd party mods) -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - - mcl_playerinfo[name] = { - node_head = "", - node_feet = "", - node_stand = "", - node_stand_below = "", - } - -end) - --- clear when player leaves -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - - mcl_playerinfo[name] = nil -end) diff --git a/mods/PLAYER/mcl_playerinfo/license.txt b/mods/PLAYER/mcl_playerinfo/license.txt deleted file mode 100644 index fec6f6aa5..000000000 --- a/mods/PLAYER/mcl_playerinfo/license.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 TenPlus1 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/mods/PLAYER/mcl_playerinfo/mod.conf b/mods/PLAYER/mcl_playerinfo/mod.conf deleted file mode 100644 index 25c05f03e..000000000 --- a/mods/PLAYER/mcl_playerinfo/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_playerinfo -author = TenPlus1 -description = This is a helper mod for other mod to query the nodes around the player. -depends = mcl_init, mcl_core, mcl_particles diff --git a/mods/PLAYER/mcl_playerplus/README.md b/mods/PLAYER/mcl_playerplus/README.md deleted file mode 100644 index e51d086fb..000000000 --- a/mods/PLAYER/mcl_playerplus/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# PlayerPlus mod for MineClone 2 - -## Features - -- Hurt players touching cacti (0.5 hearts / 0.5s) -- Suffocation: Hurt players who have their head inside a solid block (0.5 hearts / 0.5s) -- Exhaustion for swimming and jumping -- Particle effects - -Suffocation *not* dealt to player with the `noclip` privilege. - -## Notes -This mod is based on PlayerPlus [`playerplus`] by TenPlus1. It is now -very different than the original, no compability is intended. -See also `mcl_playerinfo` for the player node info. - -## API - -Setting the group `disable_suffocation=1` disables suffocation for nodes which -would otherwise deal suffocation damage. - -## License -MIT License - diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua deleted file mode 100644 index 924b60c97..000000000 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ /dev/null @@ -1,693 +0,0 @@ -mcl_playerplus = { - elytra = {}, -} - -local player_velocity_old = {x=0, y=0, z=0} -local get_connected_players = minetest.get_connected_players -local dir_to_yaw = minetest.dir_to_yaw -local get_item_group = minetest.get_item_group -local check_player_privs = minetest.check_player_privs -local find_node_near = minetest.find_node_near -local get_name_from_content_id = minetest.get_name_from_content_id -local get_voxel_manip = minetest.get_voxel_manip -local add_particle = minetest.add_particle -local add_particlespawner = minetest.add_particlespawner - -local is_sprinting = mcl_sprint.is_sprinting -local exhaust = mcl_hunger.exhaust -local playerphysics = playerphysics - -local vector = vector -local math = math --- Internal player state -local mcl_playerplus_internal = {} - -local time = 0 -local look_pitch = 0 - -local function player_collision(player) - - local pos = player:get_pos() - --local vel = player:get_velocity() - local x = 0 - local z = 0 - local width = .75 - - for _,object in pairs(minetest.get_objects_inside_radius(pos, width)) do - - local ent = object:get_luaentity() - if (object:is_player() or (ent and ent.is_mob and object ~= player)) then - - local pos2 = object:get_pos() - local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z} - local force = (width + 0.5) - vector.distance( - {x = pos.x, y = 0, z = pos.z}, - {x = pos2.x, y = 0, z = pos2.z}) - - x = x + (vec.x * force) - z = z + (vec.z * force) - end - end - return {x,z} -end - -local function walking_player(player, control) - if control.up or control.down or control.left or control.right then - return true - else - return false - end -end - - --- converts yaw to degrees -local function degrees(rad) - return rad * 180.0 / math.pi -end - -local function dir_to_pitch(dir) - --local dir2 = vector.normalize(dir) - local xz = math.abs(dir.x) + math.abs(dir.z) - return -math.atan2(-dir.y, xz) -end - -local player_vel_yaws = {} - -function limit_vel_yaw(player_vel_yaw, yaw) - if player_vel_yaw < 0 then - player_vel_yaw = player_vel_yaw + 360 - end - - if yaw < 0 then - yaw = yaw + 360 - end - - if math.abs(player_vel_yaw - yaw) > 40 then - local player_vel_yaw_nm, yaw_nm = player_vel_yaw, yaw - if player_vel_yaw > yaw then - player_vel_yaw_nm = player_vel_yaw - 360 - else - yaw_nm = yaw - 360 - end - if math.abs(player_vel_yaw_nm - yaw_nm) > 40 then - local diff = math.abs(player_vel_yaw - yaw) - if diff > 180 and diff < 185 or diff < 180 and diff > 175 then - player_vel_yaw = yaw - elseif diff < 180 then - if player_vel_yaw < yaw then - player_vel_yaw = yaw - 40 - else - player_vel_yaw = yaw + 40 - end - else - if player_vel_yaw < yaw then - player_vel_yaw = yaw + 40 - else - player_vel_yaw = yaw - 40 - end - end - end - end - - if player_vel_yaw < 0 then - player_vel_yaw = player_vel_yaw + 360 - elseif player_vel_yaw > 360 then - player_vel_yaw = player_vel_yaw - 360 - end - - return player_vel_yaw -end - -local node_stand, node_stand_below, node_head, node_feet - --- This following part is 2 wrapper functions for player:set_bones --- and player:set_properties preventing them from being resent on --- every globalstep when they have not changed. - -local function roundN(n, d) - if type(n) ~= "number" then return n end - local m = 10^d - return math.floor(n * m + 0.5) / m -end - -local function close_enough(a,b) - local rt=true - if type(a) == "table" and type(b) == "table" then - for k,v in pairs(a) do - if roundN(v,2) ~= roundN(b[k],2) then - rt=false - break - end - end - else - rt = roundN(a,2) == roundN(b,2) - end - return rt -end - - - -local function props_changed(props,oldprops) - local changed=false - local p={} - for k,v in pairs(props) do - if not close_enough(v,oldprops[k]) then - p[k]=v - changed=true - end - end - return changed,p -end - ---tests for roundN -local test_round1=15 -local test_round2=15.00199999999 -local test_round3=15.00111111 -local test_round4=15.00999999 - -assert(roundN(test_round1,2)==roundN(test_round1,2)) -assert(roundN(test_round1,2)==roundN(test_round2,2)) -assert(roundN(test_round1,2)==roundN(test_round3,2)) -assert(roundN(test_round1,2)~=roundN(test_round4,2)) - --- tests for close_enough -local test_cb = {-0.35,0,-0.35,0.35,0.8,0.35} --collisionboxes -local test_cb_close = {-0.351213,0,-0.35,0.35,0.8,0.351212} -local test_cb_diff = {-0.35,0,-1.35,0.35,0.8,0.35} - -local test_eh = 1.65 --eye height -local test_eh_close = 1.65123123 -local test_eh_diff = 1.35 - -local test_nt = { r = 225, b = 225, a = 225, g = 225 } --nametag -local test_nt_diff = { r = 225, b = 225, a = 0, g = 225 } - -assert(close_enough(test_cb,test_cb_close)) -assert(not close_enough(test_cb,test_cb_diff)) -assert(close_enough(test_eh,test_eh_close)) -assert(not close_enough(test_eh,test_eh_diff)) -assert(not close_enough(test_nt,test_nt_diff)) --no floats involved here - ---tests for properties_changed -local test_properties_set1={collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 0.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }} -local test_properties_set2={collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 1.35, nametag_color = { r = 225, b = 225, a = 225, g = 225 }} - -local test_p1,_=props_changed(test_properties_set1,test_properties_set1) -local test_p2,_=props_changed(test_properties_set1,test_properties_set2) - -assert(not test_p1) -assert(test_p2) - -local function set_properties_conditional(player,props) - local changed,p=props_changed(props,player:get_properties()) - if changed then - player:set_properties(p) - end -end - -local function set_bone_position_conditional(player,b,p,r) --bone,position,rotation - local oldp,oldr=player:get_bone_position(b) - if vector.equals(vector.round(oldp),vector.round(p)) and vector.equals(vector.round(oldr),vector.round(r)) then - return - end - player:set_bone_position(b,p,r) -end - - - -minetest.register_globalstep(function(dtime) - - time = time + dtime - - for _,player in pairs(get_connected_players()) do - - --[[ - - _ _ _ - __ _ _ __ (_)_ __ ___ __ _| |_(_) ___ _ __ ___ - / _` | '_ \| | '_ ` _ \ / _` | __| |/ _ \| '_ \/ __| - | (_| | | | | | | | | | | (_| | |_| | (_) | | | \__ \ - \__,_|_| |_|_|_| |_| |_|\__,_|\__|_|\___/|_| |_|___/ - - ]]-- - - local control = player:get_player_control() - local name = player:get_player_name() - --local meta = player:get_meta() - local parent = player:get_attach() - local wielded = player:get_wielded_item() - local player_velocity = player:get_velocity() or player:get_player_velocity() - local wielded_def = wielded:get_definition() - - local c_x, c_y = unpack(player_collision(player)) - - if player_velocity.x + player_velocity.y < .5 and c_x + c_y > 0 then - player:add_velocity({x = c_x, y = 0, z = c_y}) - player_velocity = player:get_velocity() or player:get_player_velocity() - end - - -- control head bone - local pitch = - degrees(player:get_look_vertical()) - local yaw = degrees(player:get_look_horizontal()) - - local player_vel_yaw = degrees(dir_to_yaw(player_velocity)) - if player_vel_yaw == 0 then - player_vel_yaw = player_vel_yaws[name] or yaw - end - player_vel_yaw = limit_vel_yaw(player_vel_yaw, yaw) - player_vel_yaws[name] = player_vel_yaw - - local fly_pos = player:get_pos() - local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.5, z = fly_pos.z}).name - local elytra = mcl_playerplus.elytra[player] - - elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" - and not player:get_attach() - and (elytra.active or control.jump and player_velocity.y < -6) - and (fly_node == "air" or fly_node == "ignore") - - if elytra.active then - mcl_player.player_set_animation(player, "fly") - if player_velocity.y < -1.5 then - player:add_velocity({x=0, y=0.17, z=0}) - end - if math.abs(player_velocity.x) + math.abs(player_velocity.z) < 20 then - local dir = minetest.yaw_to_dir(player:get_look_horizontal()) - if degrees(player:get_look_vertical()) * -.01 < .1 then - look_pitch = degrees(player:get_look_vertical()) * -.01 - else - look_pitch = .1 - end - player:add_velocity({x=dir.x, y=look_pitch, z=dir.z}) - end - playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) - - if elytra.rocketing > 0 then - elytra.rocketing = elytra.rocketing - dtime - if vector.length(player_velocity) < 40 then - player:add_velocity(vector.multiply(player:get_look_dir(), 4)) - add_particle({ - pos = fly_pos, - velocity = {x = 0, y = 0, z = 0}, - acceleration = {x = 0, y = 0, z = 0}, - expirationtime = math.random(0.3, 0.5), - size = math.random(1, 2), - collisiondetection = false, - vertical = false, - texture = "mcl_particles_bonemeal.png^[colorize:#bc7a57:127", - glow = 5, - }) - end - end - else - elytra.rocketing = 0 - playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") - end - - if wielded_def and wielded_def._mcl_toollike_wield then - set_bone_position_conditional(player,"Wield_Item", vector.new(0,3.9,1.3), vector.new(90,0,0)) - elseif string.find(wielded:get_name(), "mcl_bows:bow") then - set_bone_position_conditional(player,"Wield_Item", vector.new(.5,4.5,-1.6), vector.new(90,0,20)) - elseif string.find(wielded:get_name(), "mcl_bows:crossbow_loaded") then - set_bone_position_conditional(player,"Wield_Item", vector.new(-1.5,5.7,1.8), vector.new(64,90,0)) - elseif string.find(wielded:get_name(), "mcl_bows:crossbow") then - set_bone_position_conditional(player,"Wield_Item", vector.new(-1.5,5.7,1.8), vector.new(90,90,0)) - else - set_bone_position_conditional(player,"Wield_Item", vector.new(-1.5,4.9,1.8), vector.new(135,0,90)) - end - - player_velocity_old = player:get_velocity() or player:get_player_velocity() - - - -- controls right and left arms pitch when shooting a bow or blocking - if mcl_shields.is_blocking(player) == 2 then - set_bone_position_conditional(player, "Arm_Right_Pitch_Control", vector.new(-3, 5.785, 0), vector.new(20, -20, 0)) - elseif mcl_shields.is_blocking(player) == 1 then - set_bone_position_conditional(player, "Arm_Left_Pitch_Control", vector.new(3, 5.785, 0), vector.new(20, 20, 0)) - elseif string.find(wielded:get_name(), "mcl_bows:bow") and control.RMB then - set_bone_position_conditional(player,"Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch+90,-30,pitch * -1 * .35)) - set_bone_position_conditional(player,"Arm_Left_Pitch_Control", vector.new(3.5,5.785,0), vector.new(pitch+90,43,pitch * .35)) - -- controls right and left arms pitch when holing a loaded crossbow - elseif string.find(wielded:get_name(), "mcl_bows:crossbow_loaded") then - set_bone_position_conditional(player,"Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch+90,-30,pitch * -1 * .35)) - set_bone_position_conditional(player,"Arm_Left_Pitch_Control", vector.new(3.5,5.785,0), vector.new(pitch+90,43,pitch * .35)) - -- controls right and left arms pitch when loading a crossbow - elseif string.find(wielded:get_name(), "mcl_bows:crossbow_") then - set_bone_position_conditional(player,"Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(45,-20,25)) - set_bone_position_conditional(player,"Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(55,20,-45)) - -- when punching - elseif control.LMB and not parent then - set_bone_position_conditional(player,"Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch,0,0)) - set_bone_position_conditional(player,"Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0)) - -- when holding an item. - elseif wielded:get_name() ~= "" then - set_bone_position_conditional(player,"Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(20,0,0)) - set_bone_position_conditional(player,"Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0)) - -- resets arms pitch - else - set_bone_position_conditional(player,"Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0)) - set_bone_position_conditional(player,"Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(0,0,0)) - end - - if elytra.active then - -- set head pitch and yaw when flying - set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch-degrees(dir_to_pitch(player_velocity)),player_vel_yaw - yaw,0)) - -- sets eye height, and nametag color accordingly - set_properties_conditional(player,{collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) - -- control body bone when flying - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) - elseif parent then - local parent_yaw = degrees(parent:get_yaw()) - set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) - set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch, -limit_vel_yaw(yaw, parent_yaw) + parent_yaw, 0)) - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(0,0,0)) - elseif control.sneak then - -- controls head pitch when sneaking - set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch, player_vel_yaw - yaw, player_vel_yaw - yaw)) - -- sets eye height, and nametag color accordingly - set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.35, nametag_color = { r = 225, b = 225, a = 0, g = 225 }}) - -- sneaking body conrols - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(0, -player_vel_yaw + yaw, 0)) - elseif get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 and is_sprinting(name) == true then - -- set head pitch and yaw when swimming - set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch-degrees(dir_to_pitch(player_velocity)),player_vel_yaw - yaw,0)) - -- sets eye height, and nametag color accordingly - set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) - -- control body bone when swimming - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) - else - -- sets eye height, and nametag color accordingly - set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) - - set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch, player_vel_yaw - yaw, 0)) - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(0, -player_vel_yaw + yaw, 0)) - end - - -- Update jump status immediately since we need this info in real time. - -- WARNING: This section is HACKY as hell since it is all just based on heuristics. - - if mcl_playerplus_internal[name].jump_cooldown > 0 then - mcl_playerplus_internal[name].jump_cooldown = mcl_playerplus_internal[name].jump_cooldown - dtime - end - - if control.jump and mcl_playerplus_internal[name].jump_cooldown <= 0 then - - --pos = player:get_pos() - - node_stand = mcl_playerinfo[name].node_stand - node_stand_below = mcl_playerinfo[name].node_stand_below - node_head = mcl_playerinfo[name].node_head - node_feet = mcl_playerinfo[name].node_feet - if not node_stand or not node_stand_below or not node_head or not node_feet then - return - end - if not minetest.registered_nodes[node_stand] or not minetest.registered_nodes[node_stand_below] or not minetest.registered_nodes[node_head] or not minetest.registered_nodes[node_feet] then - return - end - - -- Cause buggy exhaustion for jumping - - --[[ Checklist we check to know the player *actually* jumped: - * Not on or in liquid - * Not on or at climbable - * On walkable - * Not on disable_jump - FIXME: This code is pretty hacky and it is possible to miss some jumps or detect false - jumps because of delays, rounding errors, etc. - What this code *really* needs is some kind of jumping “callback” which this engine lacks - as of 0.4.15. - ]] - - if get_item_group(node_feet, "liquid") == 0 and - get_item_group(node_stand, "liquid") == 0 and - not minetest.registered_nodes[node_feet].climbable and - not minetest.registered_nodes[node_stand].climbable and - (minetest.registered_nodes[node_stand].walkable or minetest.registered_nodes[node_stand_below].walkable) - and get_item_group(node_stand, "disable_jump") == 0 - and get_item_group(node_stand_below, "disable_jump") == 0 then - -- Cause exhaustion for jumping - if is_sprinting(name) then - exhaust(name, mcl_hunger.EXHAUST_SPRINT_JUMP) - else - exhaust(name, mcl_hunger.EXHAUST_JUMP) - end - - -- Reset cooldown timer - mcl_playerplus_internal[name].jump_cooldown = 0.45 - end - end - end - - -- Run the rest of the code every 0.5 seconds - if time < 0.5 then - return - end - - -- reset time for next check - -- FIXME: Make sure a regular check interval applies - time = 0 - - -- check players - for _,player in pairs(get_connected_players()) do - -- who am I? - local name = player:get_player_name() - - -- where am I? - local pos = player:get_pos() - - -- what is around me? - local node_stand = mcl_playerinfo[name].node_stand - local node_stand_below = mcl_playerinfo[name].node_stand_below - local node_head = mcl_playerinfo[name].node_head - local node_feet = mcl_playerinfo[name].node_feet - if not node_stand or not node_stand_below or not node_head or not node_feet then - return - end - - -- Standing on soul sand? If so, walk slower (unless player wears Soul Speed boots) - if node_stand == "mcl_nether:soul_sand" then - -- TODO: Tweak walk speed - -- TODO: Also slow down mobs - -- Slow down even more when soul sand is above certain block - local boots = player:get_inventory():get_stack("armor", 5) - local soul_speed = mcl_enchanting.get_enchantment(boots, "soul_speed") - if soul_speed > 0 then - playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", soul_speed * 0.105 + 1.3) - else - if node_stand_below == "mcl_core:ice" or node_stand_below == "mcl_core:packed_ice" or node_stand_below == "mcl_core:slimeblock" or node_stand_below == "mcl_core:water_source" then - playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", 0.1) - else - playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", 0.4) - end - end - elseif get_item_group(node_feet, "liquid") ~= 0 and mcl_enchanting.get_enchantment(player:get_inventory():get_stack("armor", 5), "depth_strider") then - local boots = player:get_inventory():get_stack("armor", 5) - local depth_strider = mcl_enchanting.get_enchantment(boots, "depth_strider") - - if depth_strider > 0 then - playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", (depth_strider / 3) + 0.75) - end - else - playerphysics.remove_physics_factor(player, "speed", "mcl_playerplus:surface") - end - - -- Is player suffocating inside node? (Only for solid full opaque cube type nodes - -- without group disable_suffocation=1) - local ndef = minetest.registered_nodes[node_head] - - if (ndef.walkable == nil or ndef.walkable == true) - and (ndef.collision_box == nil or ndef.collision_box.type == "regular") - and (ndef.node_box == nil or ndef.node_box.type == "regular") - and (ndef.groups.disable_suffocation ~= 1) - and (ndef.groups.opaque == 1) - and (node_head ~= "ignore") - -- Check privilege, too - and (not check_player_privs(name, {noclip = true})) then - if player:get_hp() > 0 then - mcl_util.deal_damage(player, 1, {type = "in_wall"}) - end - end - - -- Am I near a cactus? - local near = find_node_near(pos, 1, "mcl_core:cactus") - if not near then - near = find_node_near({x=pos.x, y=pos.y-1, z=pos.z}, 1, "mcl_core:cactus") - end - if near then - -- Am I touching the cactus? If so, it hurts - local dist = vector.distance(pos, near) - local dist_feet = vector.distance({x=pos.x, y=pos.y-1, z=pos.z}, near) - if dist < 1.1 or dist_feet < 1.1 then - if player:get_hp() > 0 then - mcl_util.deal_damage(player, 1, {type = "cactus"}) - end - end - end - - --[[ Swimming: Cause exhaustion. - NOTE: As of 0.4.15, it only counts as swimming when you are with the feet inside the liquid! - Head alone does not count. We respect that for now. ]] - if not player:get_attach() and (get_item_group(node_feet, "liquid") ~= 0 or - get_item_group(node_stand, "liquid") ~= 0) then - local lastPos = mcl_playerplus_internal[name].lastPos - if lastPos then - local dist = vector.distance(lastPos, pos) - mcl_playerplus_internal[name].swimDistance = mcl_playerplus_internal[name].swimDistance + dist - if mcl_playerplus_internal[name].swimDistance >= 1 then - local superficial = math.floor(mcl_playerplus_internal[name].swimDistance) - exhaust(name, mcl_hunger.EXHAUST_SWIM * superficial) - mcl_playerplus_internal[name].swimDistance = mcl_playerplus_internal[name].swimDistance - superficial - end - end - - end - - -- Underwater: Spawn bubble particles - if get_item_group(node_head, "water") ~= 0 then - add_particlespawner({ - amount = 10, - time = 0.15, - minpos = { x = -0.25, y = 0.3, z = -0.25 }, - maxpos = { x = 0.25, y = 0.7, z = 0.75 }, - attached = player, - minvel = {x = -0.2, y = 0, z = -0.2}, - maxvel = {x = 0.5, y = 0, z = 0.5}, - minacc = {x = -0.4, y = 4, z = -0.4}, - maxacc = {x = 0.5, y = 1, z = 0.5}, - minexptime = 0.3, - maxexptime = 0.8, - minsize = 0.7, - maxsize = 2.4, - texture = "mcl_particles_bubble.png" - }) - end - - -- Show positions of barriers when player is wielding a barrier - local wi = player:get_wielded_item():get_name() - if wi == "mcl_core:barrier" or wi == "mcl_core:realm_barrier" then - local pos = vector.round(player:get_pos()) - local r = 8 - local vm = get_voxel_manip() - local emin, emax = vm:read_from_map({x=pos.x-r, y=pos.y-r, z=pos.z-r}, {x=pos.x+r, y=pos.y+r, z=pos.z+r}) - local area = VoxelArea:new{ - MinEdge = emin, - MaxEdge = emax, - } - local data = vm:get_data() - for x=pos.x-r, pos.x+r do - for y=pos.y-r, pos.y+r do - for z=pos.z-r, pos.z+r do - local vi = area:indexp({x=x, y=y, z=z}) - local nodename = get_name_from_content_id(data[vi]) - local tex - if nodename == "mcl_core:barrier" then - tex = "mcl_core_barrier.png" - elseif nodename == "mcl_core:realm_barrier" then - tex = "mcl_core_barrier.png^[colorize:#FF00FF:127^[transformFX" - end - if tex then - add_particle({ - pos = {x=x, y=y, z=z}, - expirationtime = 1, - size = 8, - texture = tex, - glow = 14, - playername = name - }) - end - end - end - end - end - - -- Update internal values - mcl_playerplus_internal[name].lastPos = pos - - end - -end) - --- set to blank on join (for 3rd party mods) -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - - mcl_playerplus_internal[name] = { - lastPos = nil, - swimDistance = 0, - jump_cooldown = -1, -- Cooldown timer for jumping, we need this to prevent the jump exhaustion to increase rapidly - } - mcl_playerplus.elytra[player] = {active = false, rocketing = 0} -end) - --- clear when player leaves -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - - mcl_playerplus_internal[name] = nil - mcl_playerplus.elytra[player] = nil -end) - --- Don't change HP if the player falls in the water or through End Portal: -mcl_damage.register_modifier(function(obj, damage, reason) - if reason.type == "fall" then - local pos = obj:get_pos() - local node = minetest.get_node(pos) - local velocity = obj:get_velocity() or obj:get_player_velocity() or {x=0,y=-10,z=0} - local v_axis_max = math.max(math.abs(velocity.x), math.abs(velocity.y), math.abs(velocity.z)) - local step = {x = velocity.x / v_axis_max, y = velocity.y / v_axis_max, z = velocity.z / v_axis_max} - for i = 1, math.ceil(v_axis_max/5)+1 do -- trace at least 1/5 of the way per second - if not node or node.name == "ignore" then - minetest.get_voxel_manip():read_from_map(pos, pos) - node = minetest.get_node(pos) - end - if node then - local def = minetest.registered_nodes[node.name] - if not def or def.walkable then - return - end - if minetest.get_item_group(node.name, "water") ~= 0 then - return 0 - end - if node.name == "mcl_portals:portal_end" then - if mcl_portals and mcl_portals.end_teleport then - mcl_portals.end_teleport(obj) - end - return 0 - end - if node.name == "mcl_core:cobweb" then - return 0 - end - if node.name == "mcl_core:vine" then - return 0 - end - end - pos = vector.add(pos, step) - node = minetest.get_node(pos) - end - end -end, -200) - -minetest.register_on_respawnplayer(function(player) - local pos = player:get_pos() - minetest.add_particlespawner({ - amount = 50, - time = 0.001, - minpos = vector.add(pos, 0), - maxpos = vector.add(pos, 0), - minvel = vector.new(-5,-5,-5), - maxvel = vector.new(5,5,5), - minexptime = 1.1, - maxexptime = 1.5, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_mob_death.png^[colorize:#000000:255", - }) - - minetest.sound_play("mcl_mobs_mob_poof", { - pos = pos, - gain = 1.0, - max_hear_distance = 8, - }, true) -end) diff --git a/mods/PLAYER/mcl_playerplus/license.txt b/mods/PLAYER/mcl_playerplus/license.txt deleted file mode 100644 index fec6f6aa5..000000000 --- a/mods/PLAYER/mcl_playerplus/license.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 TenPlus1 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.pl.tr b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.pl.tr deleted file mode 100644 index 67a82d95d..000000000 --- a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.pl.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_playerplus -@1 suffocated to death.=@1 udusiła się na śmierć. -@1 was prickled to death by a cactus.=@1 została zakłuta na śmierć przez kaktusa. diff --git a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.zh_TW.tr b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.zh_TW.tr deleted file mode 100644 index eb9e6b1db..000000000 --- a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.zh_TW.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_playerplus -@1 suffocated to death.=@1 在牆壁裡窒息。 -@1 was prickled to death by a cactus.=@1 被仙人掌刺死了。 diff --git a/mods/PLAYER/mcl_playerplus/mod.conf b/mods/PLAYER/mcl_playerplus/mod.conf deleted file mode 100644 index 953ea9403..000000000 --- a/mods/PLAYER/mcl_playerplus/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_playerplus -author = TenPlus1 -description = Adds some simple player-related gameplay effects: Hurt by touching a cactus, suffocation and more. -depends = mcl_init, mcl_core, mcl_particles, mcl_hunger, playerphysics, mcl_playerinfo, mcl_weather, mcl_spawn, mcl_enchanting, mcl_damage, mcl_sprint, mcl_util, mcl_shields - diff --git a/mods/PLAYER/mcl_playerplus/textures/mcl_playerplus_end_sky.png b/mods/PLAYER/mcl_playerplus/textures/mcl_playerplus_end_sky.png deleted file mode 100644 index e9671f3dc..000000000 Binary files a/mods/PLAYER/mcl_playerplus/textures/mcl_playerplus_end_sky.png and /dev/null differ diff --git a/mods/PLAYER/mcl_skins/.gitignore b/mods/PLAYER/mcl_skins/.gitignore deleted file mode 100644 index 6edbd2834..000000000 --- a/mods/PLAYER/mcl_skins/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -!textures/mcl_skins_character_1.png -textures/mcl_skins_character_* -!meta/mcl_skins_character_1.txt -meta/mcl_skins_character_* \ No newline at end of file diff --git a/mods/PLAYER/mcl_skins/LICENSE.txt b/mods/PLAYER/mcl_skins/LICENSE.txt deleted file mode 100644 index fec6f6aa5..000000000 --- a/mods/PLAYER/mcl_skins/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 TenPlus1 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/mods/PLAYER/mcl_skins/README.md b/mods/PLAYER/mcl_skins/README.md deleted file mode 100644 index bbe5309ab..000000000 --- a/mods/PLAYER/mcl_skins/README.md +++ /dev/null @@ -1,13 +0,0 @@ -= Skins for MineClone 2 = - -Simple mod to allow players to select a skin. -Use the chat command /setskin to change skin. - -Forked from Simple Skins by TenPlus1. -https://forum.minetest.net/viewtopic.php?id=9100 - -== License == -Code under MIT license -Origial authors: -- TenPlus1 -- Zeg9 diff --git a/mods/PLAYER/mcl_skins/init.lua b/mods/PLAYER/mcl_skins/init.lua deleted file mode 100644 index 485e342b1..000000000 --- a/mods/PLAYER/mcl_skins/init.lua +++ /dev/null @@ -1,280 +0,0 @@ --- Skins for MineClone 2 - -local modname = minetest.get_current_modname() - -mcl_skins = { - skins = {}, list = {}, meta = {}, - modpath = minetest.get_modpath(modname), - skin_count = 0, -- counter of _custom_ skins (all skins except character.png) -} - -local S = minetest.get_translator(modname) -local has_mcl_inventory = minetest.get_modpath("mcl_inventory") - --- load skin list and metadata -local id, f, data, skin = 0 - -while true do - - if id == 0 then - skin = "character" - else - skin = "mcl_skins_character_" .. id - - -- Does skin file exist? - f = io.open(mcl_skins.modpath .. "/textures/" .. skin .. ".png") - - -- escape loop if not found - if not f then - break - end - f:close() - end - - mcl_skins.list[id] = skin - - local metafile - - -- does metadata exist for that skin file ? - if id == 0 then - metafile = "mcl_skins_character.txt" - else - metafile = "mcl_skins_character_"..id..".txt" - end - f = io.open(mcl_skins.modpath .. "/meta/" .. metafile) - - data = nil - if f then - data = minetest.deserialize("return {" .. f:read("*all") .. "}") - f:close() - end - - -- add metadata to list - mcl_skins.meta[skin] = { - name = data and data.name or "", - author = data and data.author or "", - gender = data and data.gender or "", - } - - if id > 0 then - mcl_skins.skin_count = mcl_skins.skin_count + 1 - end - id = id + 1 -end - -function mcl_skins.cycle_skin(player) - local skin_id = tonumber(player:get_meta():get_string("mcl_skins:skin_id")) - if not skin_id then - skin_id = 0 - end - skin_id = skin_id + 1 - if skin_id > mcl_skins.skin_count then - skin_id = 0 - end - mcl_skins.set_player_skin(player, skin_id) -end - -function mcl_skins.set_player_skin(player, skin_id) - if not player then - return false - end - local playername = player:get_player_name() - local skin - if skin_id == nil or type(skin_id) ~= "number" or skin_id < 0 or skin_id > mcl_skins.skin_count then - return false - elseif skin_id == 0 then - skin = "character" - mcl_player.player_set_model(player, "mcl_armor_character.b3d") - else - skin = "mcl_skins_character_" .. tostring(skin_id) - local meta = mcl_skins.meta[skin] - if meta.gender == "female" then - mcl_player.player_set_model(player, "mcl_armor_character_female.b3d") - else - mcl_player.player_set_model(player, "mcl_armor_character.b3d") - end - end - --local skin_file = skin .. ".png" - mcl_skins.skins[playername] = skin - player:get_meta():set_string("mcl_skins:skin_id", tostring(skin_id)) - mcl_skins.update_player_skin(player) - if has_mcl_inventory then - mcl_inventory.update_inventory_formspec(player) - end - for i=1, #mcl_skins.registered_on_set_skins do - mcl_skins.registered_on_set_skins[i](player, skin) - end - minetest.log("action", "[mcl_skins] Player skin for "..playername.." set to skin #"..skin_id) - return true -end - -function mcl_skins.update_player_skin(player) - if not player then - return - end - local playername = player:get_player_name() - mcl_player.player_set_skin(player, mcl_skins.skins[playername] .. ".png") -end - --- load player skin on join -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - local skin_id = player:get_meta():get_string("mcl_skins:skin_id") - local set_skin - -- do we already have a skin in player attributes? - if skin_id and skin_id ~= "" then - set_skin = tonumber(skin_id) - -- otherwise use random skin if not set - end - if not set_skin then - set_skin = math.random(0, mcl_skins.skin_count) - end - local ok = mcl_skins.set_player_skin(player, set_skin) - if not ok then - set_skin = math.random(0, mcl_skins.skin_count) - minetest.log("warning", "[mcl_skins] Player skin for "..name.." not found, falling back to skin #"..set_skin) - mcl_skins.set_player_skin(player, set_skin) - end -end) - -mcl_skins.registered_on_set_skins = {} - -function mcl_skins.register_on_set_skin(func) - table.insert(mcl_skins.registered_on_set_skins, func) -end - --- command to set player skin (usually for custom skins) -minetest.register_chatcommand("setskin", { - params = S("[] []"), - description = S("Select player skin of yourself or another player"), - privs = {}, - func = function(name, param) - - if param == "" and name ~= "" then - mcl_skins.show_formspec(name) - return true - end - local playername, skin_id = string.match(param, "([^ ]+) (%d+)") - if not playername or not skin_id then - skin_id = string.match(param, "(%d+)") - if not skin_id then - return false, S("Insufficient or wrong parameters") - end - playername = name - end - skin_id = tonumber(skin_id) - - local player = minetest.get_player_by_name(playername) - - if not player then - return false, S("Player @1 not online!", playername) - end - if name ~= playername then - local privs = minetest.get_player_privs(name) - if not privs.server then - return false, S("You need the “server” privilege to change the skin of other players!") - end - end - - local ok = mcl_skins.set_player_skin(player, skin_id) - if not ok then - return false, S("Invalid skin number! Valid numbers: 0 to @1", mcl_skins.skin_count) - end - local skinfile = "#"..skin_id - - local meta = mcl_skins.meta[mcl_skins.skins[playername]] - local your_msg - if not meta.name or meta.name == "" then - your_msg = S("Your skin has been set to: @1", skinfile) - else - your_msg = S("Your skin has been set to: @1 (@2)", meta.name, skinfile) - end - if name == playername then - return true, your_msg - else - minetest.chat_send_player(playername, your_msg) - return true, S("Skin of @1 set to: @2 (@3)", playername, meta.name, skinfile) - end - - end, -}) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if fields.__mcl_skins then - if mcl_skins.skin_count <= 6 then - -- Change skin immediately if there are not many skins - mcl_skins.cycle_skin(player) - if player:get_attach() then - mcl_player.player_set_animation(player, "sit") - end - else - -- Show skin selection formspec otherwise - mcl_skins.show_formspec(player:get_player_name()) - end - end -end) - -function mcl_skins.show_formspec(playername) - local formspec = "size[7,8.5]" - - formspec = formspec .. "label[2,2;" .. minetest.formspec_escape(minetest.colorize("#383838", S("Select player skin:"))) .. "]" - .. "textlist[0,2.5;6.8,6;skins_set;" - - local meta - local selected = 1 - - for i = 0, mcl_skins.skin_count do - - local label = S("@1 (@2)", mcl_skins.meta[mcl_skins.list[i]].name, "#"..i) - - formspec = formspec .. minetest.formspec_escape(label) - - if mcl_skins.skins[playername] == mcl_skins.list[i] then - selected = i + 1 - meta = mcl_skins.meta[mcl_skins.list[i]] - end - - if i < #mcl_skins.list then - formspec = formspec .."," - end - end - - formspec = formspec .. ";" .. selected .. ";false]" - - local player = minetest.get_player_by_name(playername) - if player then - --maybe the function could accept both player object and player name? - formspec = formspec .. mcl_player.get_player_formspec_model(player, 0, 0, 1.35, 2.7, "mcl_skins:skin_select") - end - - if meta then - if meta.name and meta.name ~= "" then - formspec = formspec .. "label[2,0.5;" .. minetest.formspec_escape(minetest.colorize("#383838", S("Name: @1", meta.name))) .. "]" - end - end - - minetest.show_formspec(playername, "mcl_skins:skin_select", formspec) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - - if formname == "mcl_skins:skin_select" then - - local name = player:get_player_name() - - local event = minetest.explode_textlist_event(fields["skins_set"]) - - if event.type == "CHG" or event.type == "DCL" then - - local skin_id = math.min(event.index - 1, mcl_skins.skin_count) - if not mcl_skins.list[skin_id] then - return -- Do not update wrong skin number - end - - mcl_skins.set_player_skin(player, skin_id) - mcl_skins.show_formspec(name) - end - end -end) - -minetest.log("action", "[mcl_skins] Mod initialized with "..mcl_skins.skin_count.." custom skin(s)") diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.de.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.de.tr deleted file mode 100644 index 8f9b488db..000000000 --- a/mods/PLAYER/mcl_skins/locale/mcl_skins.de.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_skins -[] []=[] [] -Select player skin of yourself or another player=Spieleraussehen von Ihnen oder einem anderen Spieler auswählen -Insufficient or wrong parameters=Unzureichende oder falsche Parameter -Player @1 not online!=Spieler @1 ist nicht online! -You need the “server” privilege to change the skin of other players!=Sie brauchen das „server“-Privileg, um das Aussehen anderer Spieler zu ändern! -Invalid skin number! Valid numbers: 0 to @1=Ungültige Aussehens-Nummer! Gültige Nummern: 0 bis @1 -Your skin has been set to: @1=Ihr Aussehen wurde geändert auf: @1 -Your skin has been set to: @1 (@2)=Ihr Aussehen wurde geändert auf: @1 (@2) -Skin of @1 set to: @2 (@3)=Aussehen von @1 gesetzt auf: @2 (@3) -Select player skin:=Spieleraussehen wählen: -@1 (@2)=@1 (@2) -Name: @1=Name: @1 diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.es.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.es.tr deleted file mode 100644 index dcd5c8438..000000000 --- a/mods/PLAYER/mcl_skins/locale/mcl_skins.es.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_skins -[] []=[] [] -Select player skin of yourself or another player=Selecciona el skin tuyo o de otro jugador -Insufficient or wrong parameters=Parámetros insuficientes o incorrectos -Player @1 not online!=¡El jugador @1 no está en línea! -You need the “server” privilege to change the skin of other players!=¡Necesitas el privilegio de "servidor" para cambiar el aspecto de otros jugadores! -Invalid skin number! Valid numbers: 0 to @1=¡Número de piel no válido! Números válidos: 0 a @1 -Your skin has been set to: @1=Su skin se ha configurado a: @1 -Your skin has been set to: @1 (@2)=Su skin se ha configurado a: @1 (@2) -Skin of @1 set to: @2 (@3)=El skin de @1 se ha configurado a: @2 (@3) -Select player skin:=Selecciona el skin del jugador: -@1 (@2)=@1 (@2) -Name: @1=Nombre: @1 diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.fr.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.fr.tr deleted file mode 100644 index 146c6be5f..000000000 --- a/mods/PLAYER/mcl_skins/locale/mcl_skins.fr.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mcl_skins -[] []=[] [] -Select player skin of yourself or another player=Sélectionner une apparence pour vous même ou un autre joueur -Insufficient or wrong parameters=Paramètres insuffisants ou incorrects -Player @1 not online!=Le joueur @1 n'est pas en ligne! -You need the “server” privilege to change the skin of other players!=Vous avez besoin du privilège “server” pour changer l'apparence des autres joueurs! -Invalid skin number! Valid numbers: 0 to @1=Numéro d'apparence incorrect! Numéros valides : 0 à @1 -Your skin has been set to: @1=Votre apparence a été définie à: @1 -Your skin has been set to: @1 (@2)=Votre apparence a été définie à: @1 (@2) -Skin of @1 set to: @2 (@3)=Apparence of @1 set to: @2 (@3)= -Select player skin:=Sélectionner l'apparence du joueur : -@1 (@2)=@1 (@2) -Name: @1=Nom : @ - diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.ms.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.ms.tr deleted file mode 100644 index 58946f605..000000000 --- a/mods/PLAYER/mcl_skins/locale/mcl_skins.ms.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_skins -# UNFINISHED translation! -# TODO: Remove the # sign from the translations below and add the missing translations. - -[] []= -Select player skin of yourself or another player= -Insufficient or wrong parameters= -Player @1 not online!= -You need the “server” privilege to change the skin of other players!= -Invalid skin number! Valid numbers: 0 to @1= -Your skin has been set to: @1= -Your skin has been set to: @1 (@2)= -Skin of @1 set to: @2 (@3)= -Select player skin:=Pilih Kulit Pemain: -@1 (@2)= -Name: @1=Nama: @1 diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr deleted file mode 100644 index 9b07cea2c..000000000 --- a/mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_skins -[] []=[] [] -Select player skin of yourself or another player=Wybierz skin gracza dla siebie lub innego gracza -Insufficient or wrong parameters=Niewystarczające lub złe parametry -Player @1 not online!=Gracz @1 nie jest online! -You need the “server” privilege to change the skin of other players!=Potrzebujesz uprawnienia "serwer", aby zmieniać skiny innych graczy! -Invalid skin number! Valid numbers: 0 to @1=Niepoprawny numer skina! Poprawne numery: od 0 do @1 -Your skin has been set to: @1=Twój skin został ustawiony na: @1 -Your skin has been set to: @1 (@2)=Twój skin został ustawiony na: @1 (@2) -Skin of @1 set to: @2 (@3)=Skin gracza @1 ustawiony na @2 (@3) -Select player skin:=Wybierz skin gracza: -@1 (@2)=@1 (@2) -Name: @1=Nazwa: @1 diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.ru.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.ru.tr deleted file mode 100644 index 64eab0e3f..000000000 --- a/mods/PLAYER/mcl_skins/locale/mcl_skins.ru.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_skins -[] []=[<игрок>] [<номер скина>] -Select player skin of yourself or another player=Выберите скин для себя или для другого игрока -Insufficient or wrong parameters=Недопустимые или неправильные параметры -Player @1 not online!=Игрок @1 не в сети! -You need the “server” privilege to change the skin of other players!=Для смены скинов другим игрокам у вас должна быть привилегия “server”! -Invalid skin number! Valid numbers: 0 to @1=Недопустимый номер скина! Правильные номера: от 0 до @1 -Your skin has been set to: @1=Ваш скин выбран: @1 -Your skin has been set to: @1 (@2)=Ваш скин установлен: @1 (@2) -Skin of @1 set to: @2 (@3)=Скин игрока @1 установлен: @2 (@3) -Select player skin:=Выбор скина игрока: -@1 (@2)=@1 (@2) -Name: @1=Имя: @1 diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.zh_TW.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.zh_TW.tr deleted file mode 100644 index 1347800ee..000000000 --- a/mods/PLAYER/mcl_skins/locale/mcl_skins.zh_TW.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_skins -[] []=[<玩家名字>] [<皮膚篇號>] -Select player skin of yourself or another player=替自己或其他玩家選擇皮膚 -Insufficient or wrong parameters=無效或錯誤參數 -Player @1 not online!=玩家 @1 不在線! -You need the “server” privilege to change the skin of other players!=你需要「server」權限來替換其他玩家的皮膚! -Invalid skin number! Valid numbers: 0 to @1=無效皮膚篇號!有效篇號:0至@1 -Your skin has been set to: @1=你的皮膚已換成:@1 -Your skin has been set to: @1 (@2)=你的皮膚已換成:@1(@2) -Skin of @1 set to: @2 (@3)=@1的皮膚已換成:@1 -Select player skin:=選擇玩家皮膚: -@1 (@2)=@1(@2) -Name: @1=名稱:@1 diff --git a/mods/PLAYER/mcl_skins/locale/template.txt b/mods/PLAYER/mcl_skins/locale/template.txt deleted file mode 100644 index c683fa4e4..000000000 --- a/mods/PLAYER/mcl_skins/locale/template.txt +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_skins -[] []= -Select player skin of yourself or another player= -Insufficient or wrong parameters= -Player @1 not online!= -You need the “server” privilege to change the skin of other players!= -Invalid skin number! Valid numbers: 0 to @1= -Your skin has been set to: @1= -Your skin has been set to: @1 (@2)= -Skin of @1 set to: @2 (@3)= -Select player skin:= -@1 (@2)= -Name: @1= diff --git a/mods/PLAYER/mcl_skins/meta/mcl_skins_character.txt b/mods/PLAYER/mcl_skins/meta/mcl_skins_character.txt deleted file mode 100644 index c31bd7168..000000000 --- a/mods/PLAYER/mcl_skins/meta/mcl_skins_character.txt +++ /dev/null @@ -1,3 +0,0 @@ -name = "Steve", -author = "%TEXTURE_PACK_AUTHOR%", -gender = "male", diff --git a/mods/PLAYER/mcl_skins/meta/mcl_skins_character_1.txt b/mods/PLAYER/mcl_skins/meta/mcl_skins_character_1.txt deleted file mode 100644 index e6c90dc0f..000000000 --- a/mods/PLAYER/mcl_skins/meta/mcl_skins_character_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -name = "Alex", -author = "%TEXTURE_PACK_AUTHOR%", -gender = "female", diff --git a/mods/PLAYER/mcl_skins/mod.conf b/mods/PLAYER/mcl_skins/mod.conf deleted file mode 100644 index 657d3cc0e..000000000 --- a/mods/PLAYER/mcl_skins/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_skins -author = TenPlus1 -description = Mod that allows players to set their individual skins. -depends = mcl_player -optional_depends = mcl_inventory, intllib diff --git a/mods/PLAYER/mcl_skins/textures/mcl_skins_button.png b/mods/PLAYER/mcl_skins/textures/mcl_skins_button.png deleted file mode 100644 index 49acf8550..000000000 Binary files a/mods/PLAYER/mcl_skins/textures/mcl_skins_button.png and /dev/null differ diff --git a/mods/PLAYER/mcl_skins/textures/mcl_skins_character_1.png b/mods/PLAYER/mcl_skins/textures/mcl_skins_character_1.png deleted file mode 100644 index 71f02471d..000000000 Binary files a/mods/PLAYER/mcl_skins/textures/mcl_skins_character_1.png and /dev/null differ diff --git a/mods/PLAYER/mcl_spawn/init.lua b/mods/PLAYER/mcl_spawn/init.lua deleted file mode 100644 index 9022dfc25..000000000 --- a/mods/PLAYER/mcl_spawn/init.lua +++ /dev/null @@ -1,551 +0,0 @@ -mcl_spawn = {} - -local S = minetest.get_translator(minetest.get_current_modname()) -local mg_name = minetest.get_mapgen_setting("mg_name") -local storage = minetest.get_mod_storage() - --- Parameters -------------- - -local respawn_search_interval = 30 -- seconds -local respawn_search_initial_delay = 30 -- seconds -local trees_distance_max = 30 -- nodes -local attempts_to_find_pos = 50 -local attempts_to_find_trees = 50 -local node_groups_white_list = {"group:soil"} -local biomes_white_list = { - "ColdTaiga", - "Taiga", - "MegaTaiga", - "MegaSpruceTaiga", - "Plains", - "SunflowerPlains", - "Forest", - "FlowerForest", - "BirchForest", - "BirchForestM", - "Jungle", - "JungleM", - "JungleEdge", - "JungleEdgeM", - "Savanna", - "SavannaM", -} - --- Resolution of search grid in nodes. -local res = 64 -local half_res = 32 -- for emerge areas around the position -local alt_min = -10 -local alt_max = 200 --- Number of points checked in the square search grid (edge * edge). -local checks = 128 * 128 --- Starting point for biome checks. This also sets the y co-ordinate for all --- points checked, so the suitable biomes must be active at this y. -local start_pos = minetest.setting_get_pos("static_spawnpoint") or {x = 0, y = 8, z = 0} --- Table of suitable biomes -local biome_ids = {} - -local no_trees_area_counter = 0 - --- Bed spawning offsets -local node_search_list = - { - --[[1]] {x = 0, y = 0, z = -1}, -- - --[[2]] {x = -1, y = 0, z = 0}, -- - --[[3]] {x = -1, y = 0, z = 1}, -- - --[[4]] {x = 0, y = 0, z = 2}, -- z^ 8 4 9 - --[[5]] {x = 1, y = 0, z = 1}, -- | 3 5 - --[[6]] {x = 1, y = 0, z = 0}, -- | 2 * 6 - --[[7]] {x = -1, y = 0, z = -1}, -- | 7 1 A - --[[8]] {x = -1, y = 0, z = 2}, -- +-----> - --[[9]] {x = 1, y = 0, z = 2}, -- x - --[[A]] {x = 1, y = 0, z = -1}, -- - --[[B]] {x = 0, y = 1, z = 0}, -- - --[[C]] {x = 0, y = 1, z = 1}, -- - } - --- End of parameters --------------------- - - --- Initial variables - -local success = storage:get_int("mcl_spawn_success")==1 -local searched = (storage:get_int("mcl_spawn_searched")==1) or mg_name == "v6" or mg_name == "singlenode" or minetest.settings:get("static_spawnpoint") -local wsp = minetest.string_to_pos(storage:get_string("mcl_spawn_world_spawn_point")) or {} -- world spawn position -local check = storage:get_int("mcl_spawn_check") or 0 -local cp = minetest.string_to_pos(storage:get_string("mcl_spawn_cp")) or {x=start_pos.x, y=start_pos.y, z=start_pos.z} -local edge_len = storage:get_int("mcl_spawn_edge_len") or 1 -local edge_dist = storage:get_int("mcl_spawn_edge_dist") or 0 -local dir_step = storage:get_int("mcl_spawn_dir_step") or 0 -local dir_ind = storage:get_int("mcl_spawn_dir_ind") or 1 -local emerge_pos1, emerge_pos2 - -local spawn_limit = mcl_vars.mapgen_edge_max - - ---Functions ------------ - -local function get_far_node(pos) - local node = minetest.get_node(pos) - if node.name ~= "ignore" then - return node - end - minetest.get_voxel_manip():read_from_map(pos, pos) - return minetest.get_node(pos) -end - -local function get_trees(pos, pos2) - if emerge_pos1 and emerge_pos2 and pos then - if not pos2 then - local b1 = {x = math.max(pos.x-trees_distance_max, emerge_pos1.x), y = math.max(pos.y-trees_distance_max, emerge_pos1.y), z = math.max(pos.z-trees_distance_max, emerge_pos1.z)} - local b2 = {x = math.min(pos.x+trees_distance_max, emerge_pos2.x), y = math.min(pos.y+trees_distance_max, emerge_pos2.y), z = math.min(pos.z+trees_distance_max, emerge_pos2.z)} - return minetest.find_nodes_in_area(b1, b2, {"group:tree"}, false) - else - local b1 = {x = math.max(pos.x , emerge_pos1.x), y = math.max(pos.y , emerge_pos1.y), z = math.max(pos.z, emerge_pos1.z)} - local b2 = {x = math.min(pos2.x, emerge_pos2.x), y = math.min(pos2.y, emerge_pos2.y), z = math.min(pos2.z, emerge_pos2.z)} - return minetest.find_nodes_in_area(b1, b2, {"group:tree"}, false) - end - end - return nil -end - -local function good_for_respawn(pos, player) - local pos0 = {x = pos.x, y = pos.y - 1, z = pos.z} - local pos1 = {x = pos.x, y = pos.y, z = pos.z} - local pos2 = {x = pos.x, y = pos.y + 1, z = pos.z} - local node0 = get_far_node(pos0) - local node1 = get_far_node(pos1) - local node2 = get_far_node(pos2) - - local nn0, nn1, nn2 = node0.name, node1.name, node2.name - if minetest.get_item_group(nn0, "destroys_items") ~=0 - or minetest.get_item_group(nn1, "destroys_items") ~=0 - or minetest.get_item_group(nn2, "destroys_items") ~=0 - or minetest.get_item_group(nn0, "portal") ~=0 - or minetest.get_item_group(nn1, "portal") ~=0 - or minetest.get_item_group(nn2, "portal") ~=0 - or minetest.is_protected(pos0, player or "") - or minetest.is_protected(pos1, player or "") - or minetest.is_protected(pos2, player or "") - or (not player and minetest.get_node_light(pos1, 0.5) < 8) - or (not player and minetest.get_node_light(pos2, 0.5) < 8) - or nn0 == "ignore" - or nn1 == "ignore" - or nn2 == "ignore" - then - return false - end - - local def0 = minetest.registered_nodes[nn0] - local def1 = minetest.registered_nodes[nn1] - local def2 = minetest.registered_nodes[nn2] - return def0.walkable and (not def1.walkable) and (not def2.walkable) and - (def1.damage_per_second == nil or def2.damage_per_second <= 0) and - (def1.damage_per_second == nil or def2.damage_per_second <= 0) -end - -local function can_find_tree(pos1, trees) - if not emerge_pos1 or not emerge_pos2 then return false end - local trees = trees or get_trees(pos1) - if not trees then return false end - - if (attempts_to_find_trees * 3 < #trees) then - -- random search - for i = 1, attempts_to_find_trees do - local pos2 = trees[math.random(1,#trees)] - if not minetest.is_protected(pos2, "") then - if pos2.x < pos1.x then - pos2.x = pos2.x + 1 - elseif pos2.x > pos1.x then - pos2.x = pos2.x - 1 - end - if pos2.z < pos1.z then - pos2.z = pos2.z + 1 - elseif pos2.z > pos1.z then - pos2.z = pos2.z - 1 - end - local way = minetest.find_path(pos1, pos2, res, 1, 3, "A*_noprefetch") - if way then - return true - end - end - end - return false - end - - for i, pos2 in ipairs(trees) do - -- full search - if not minetest.is_protected(pos2, "") then - if pos2.x < pos1.x then - pos2.x = pos2.x + 1 - elseif pos2.x > pos1.x then - pos2.x = pos2.x - 1 - end - if pos2.z < pos1.z then - pos2.z = pos2.z + 1 - elseif pos2.z > pos1.z then - pos2.z = pos2.z - 1 - end - local way = minetest.find_path(pos1, pos2, res, 1, 3, "A*_noprefetch") - if way then - return true - end - end - if i > attempts_to_find_trees then return false end - end - return false -end - -local function next_pos() - if edge_dist >= edge_len then - edge_dist = 1 - dir_ind = (dir_ind % 4) + 1 - dir_step = dir_step + 1 - edge_len = math.floor(dir_step / 2) + 1 - else - edge_dist = edge_dist + 1 - end - if dir_ind==1 then - cp.z = cp.z + res - elseif dir_ind==2 then - cp.x = cp.x - res - elseif dir_ind==3 then - cp.z = cp.z - res - else - cp.x = cp.x + res - end -end - --- Spawn position search - -local function next_biome() - if #biome_ids < 1 then - for _, biome_name in pairs(biomes_white_list) do - local biome_id = minetest.get_biome_id(biome_name) - if biome_id then - table.insert(biome_ids, biome_id) - end - end - if #biome_ids < 1 then - next_pos() - if math.abs(cp.x) > spawn_limit or math.abs(cp.z) > spawn_limit then - check = checks + 1 - minetest.log("warning", "[mcl_spawn] No white-listed biomes found - search stopped by overlimit") - return false - end - check = check + 1 - cp.y = minetest.get_spawn_level(cp.x, cp.z) or start_pos.y - if cp.y then - wsp = {x = cp.x, y = cp.y, z = cp.z} - minetest.log("warning", "[mcl_spawn] No white-listed biomes found - using current") - return true - else - minetest.log("warning", "[mcl_spawn] No white-listed biomes found and spawn level is nil - please define start_pos to continue") - return false - end - end - minetest.log("action", "[mcl_spawn] Suitable biomes found: "..tostring(#biome_ids)) - end - while check <= checks do - local biome_data = minetest.get_biome_data(cp) - -- Sometimes biome_data is nil - local biome = biome_data and biome_data.biome - if biome then - minetest.log("verbose", "[mcl_spawn] Search white-listed biome at "..minetest.pos_to_string(cp)..": "..minetest.get_biome_name(biome)) - for _, biome_id in ipairs(biome_ids) do - if biome == biome_id then - cp.y = minetest.get_spawn_level(cp.x, cp.z) or start_pos.y - if cp.y then - wsp = {x = cp.x, y = cp.y, z = cp.z} - return true - end - break - end - end - end - - next_pos() - - -- Check for position being outside world edge - if math.abs(cp.x) > spawn_limit or math.abs(cp.z) > spawn_limit then - check = checks + 1 - return false - end - - check = check + 1 - end - - return false -end - -local function ecb_search_continue(blockpos, action, calls_remaining, param) - if calls_remaining <= 0 then - emerge_pos1 = {x = wsp.x-half_res, y = alt_min, z = wsp.z-half_res} - emerge_pos2 = {x = wsp.x+half_res, y = alt_max, z = wsp.z+half_res} - local nodes = minetest.find_nodes_in_area_under_air(emerge_pos1, emerge_pos2, node_groups_white_list) - minetest.log("verbose", "[mcl_spawn] Data emerge callback: "..minetest.pos_to_string(wsp).." - "..tostring(nodes and #nodes) .. " node(s) found under air") - if nodes then - if no_trees_area_counter >= 0 then - local trees = get_trees(emerge_pos1, emerge_pos2) - if trees and #trees > 0 then - no_trees_area_counter = 0 - if attempts_to_find_pos * 3 < #nodes then - -- random - for i=1, attempts_to_find_pos do - wsp = nodes[math.random(1,#nodes)] - if wsp then - wsp.y = wsp.y + 1 - if good_for_respawn(wsp) and can_find_tree(wsp, trees) then - minetest.log("action", "[mcl_spawn] Dynamic world spawn randomly determined to be "..minetest.pos_to_string(wsp)) - searched = true - success = true - return - end - end - end - else - -- in a sequence - for i=1, math.min(#nodes, attempts_to_find_pos) do - wsp = nodes[i] - if wsp then - wsp.y = wsp.y + 1 - if good_for_respawn(wsp) and can_find_tree(wsp, trees) then - minetest.log("action", "[mcl_spawn] Dynamic world spawn determined to be "..minetest.pos_to_string(wsp)) - searched = true - success = true - return - end - end - end - end - else - no_trees_area_counter = no_trees_area_counter + 1 - if no_trees_area_counter > 10 then - minetest.log("verbose", "[mcl_spawn] More than 10 times no trees at all! Won't search trees next 200 calls") - no_trees_area_counter = -200 - end - end - else -- seems there are no trees but we'll check it later, after next 200 calls - no_trees_area_counter = no_trees_area_counter + 1 - if attempts_to_find_pos * 3 < #nodes then - -- random - for i=1, attempts_to_find_pos do - wsp = nodes[math.random(1,#nodes)] - if wsp then - wsp.y = wsp.y + 1 - if good_for_respawn(wsp) then - minetest.log("action", "[mcl_spawn] Dynamic world spawn randomly determined to be "..minetest.pos_to_string(wsp) .. " (no trees)") - searched = true - success = true - return - end - end - end - else - -- in a sequence - for i=1, math.min(#nodes, attempts_to_find_pos) do - wsp = nodes[i] - if wsp then - wsp.y = wsp.y + 1 - if good_for_respawn(wsp) then - minetest.log("action", "[mcl_spawn] Dynamic world spawn determined to be "..minetest.pos_to_string(wsp) .. " (no trees)") - searched = true - success = true - return - end - end - end - end - end - end - next_pos() - mcl_spawn.search() - end -end - -function mcl_spawn.search() - if not next_biome() or check > checks then - return false - end - check = check + 1 - if not wsp.y then - wsp.y = 8 - end - local pos1 = {x = wsp.x-half_res, y = alt_min, z = wsp.z-half_res} - local pos2 = {x = wsp.x+half_res, y = alt_max, z = wsp.z+half_res} - minetest.emerge_area(pos1, pos2, ecb_search_continue) -end - - -function mcl_spawn.get_world_spawn_pos() - local ssp = minetest.setting_get_pos("static_spawnpoint") - if ssp then - return ssp - end - if success then - return wsp - end - minetest.log("action", "[mcl_spawn] Failed to determine dynamic world spawn!") - return start_pos -end - --- Returns a spawn position of player. --- If player is nil or not a player, a world spawn point is returned. --- The second return value is true if returned spawn point is player-chosen, --- false otherwise. -function mcl_spawn.get_bed_spawn_pos(player) - local spawn, custom_spawn = nil, false - if player and player:is_player() then - local attr = player:get_meta():get_string("mcl_beds:spawn") - if attr and attr ~= "" then - spawn = minetest.string_to_pos(attr) - custom_spawn = true - end - end - if not spawn or spawn == "" then - spawn = mcl_spawn.get_world_spawn_pos() - custom_spawn = false - end - return spawn, custom_spawn -end - --- Sets the player's spawn position to pos. --- Set pos to nil to clear the spawn position. --- If message is set, informs the player with a chat message when the spawn position --- changed. -function mcl_spawn.set_spawn_pos(player, pos, message) - local spawn_changed = false - local meta = player:get_meta() - if pos == nil then - if meta:get_string("mcl_beds:spawn") ~= "" then - spawn_changed = true - if message then - minetest.chat_send_player(player:get_player_name(), S("Respawn position cleared!")) - end - end - meta:set_string("mcl_beds:spawn", "") - else - local oldpos = minetest.string_to_pos(meta:get_string("mcl_beds:spawn")) - meta:set_string("mcl_beds:spawn", minetest.pos_to_string(pos)) - if oldpos then - -- We don't bother sending a message if the new spawn pos is basically the same - spawn_changed = vector.distance(pos, oldpos) > 0.1 - else - -- If it wasn't set and now it will be set, it means it is changed - spawn_changed = true - end - if spawn_changed and message then - minetest.chat_send_player(player:get_player_name(), S("New respawn position set!")) - end - end - return spawn_changed -end - -function mcl_spawn.get_player_spawn_pos(player) - local pos, custom_spawn = mcl_spawn.get_bed_spawn_pos(player) - if pos and custom_spawn then - -- Check if bed is still there - local node_bed = get_far_node(pos) - local bgroup = minetest.get_item_group(node_bed.name, "bed") - if bgroup ~= 1 and bgroup ~= 2 then - -- Bed is destroyed: - if player and player:is_player() then - local checkpos = minetest.string_to_pos(player:get_meta():get_string("mcl_beds:spawn")) - local checknode = minetest.get_node(checkpos) - - if(string.match(checknode.name, "mcl_beds:respawn_anchor_charged_")) then - local charge_level = tonumber(string.sub(checknode.name, -1)) - if not charge_level then - minetest.log("warning","could not get level of players respawn anchor, sending him back to spawn!") - player:get_meta():set_string("mcl_beds:spawn", "") - minetest.chat_send_player(player:get_player_name(), S("Couldn't get level of your respawn anchor!")) - return mcl_spawn.get_world_spawn_pos(), false - elseif charge_level ~= 1 then - minetest.set_node(checkpos, {name="mcl_beds:respawn_anchor_charged_".. charge_level-1}) - return checkpos, false - else - minetest.set_node(checkpos, {name="mcl_beds:respawn_anchor"}) - return checkpos, false - end - else - player:get_meta():set_string("mcl_beds:spawn", "") - minetest.chat_send_player(player:get_player_name(), S("Your spawn bed was missing or blocked, and you had no charged respawn anchor!")) - return mcl_spawn.get_world_spawn_pos(), false - end - end - end - - - - -- Find spawning position on/near the bed free of solid or damaging blocks iterating a square spiral 15x15: - - local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2) - local offset - for _, o in ipairs(node_search_list) do - if dir.z == -1 then - offset = {x = o.x, y = o.y, z = o.z} - elseif dir.z == 1 then - offset = {x = -o.x, y = o.y, z = -o.z} - elseif dir.x == -1 then - offset = {x = o.z, y = o.y, z = -o.x} - else -- dir.x == 1 - offset = {x = -o.z, y = o.y, z = o.x} - end - local player_spawn_pos = vector.add(pos, offset) - if good_for_respawn(player_spawn_pos, player:get_player_name()) then - return player_spawn_pos, true - end - end - -- We here if we didn't find suitable place for respawn - end - return mcl_spawn.get_world_spawn_pos(), false -end - -function mcl_spawn.spawn(player) - local pos, in_bed = mcl_spawn.get_player_spawn_pos(player) - player:set_pos(pos) - return in_bed or success -end - --- Respawn player at specified respawn position -minetest.register_on_respawnplayer(mcl_spawn.spawn) - -function mcl_spawn.shadow_worker() - if not searched then - searched = true - mcl_spawn.search() - minetest.log("action", "[mcl_spawn] Started world spawn point search") - end - - if success then - local wsp_node = minetest.get_node(wsp) - if not (wsp_node and wsp_node.name == "ignore") - and ((not good_for_respawn(wsp)) or ((no_trees_area_counter >= 0) and not can_find_tree(wsp))) then - success = false - minetest.log("action", "[mcl_spawn] World spawn position isn't safe anymore: "..minetest.pos_to_string(wsp)) - mcl_spawn.search() - end - end - - minetest.after(respawn_search_interval, mcl_spawn.shadow_worker) -end - -minetest.after(respawn_search_initial_delay, function() - mcl_spawn.shadow_worker() - - minetest.register_on_shutdown(function() - storage:set_int("mcl_spawn_success", success and 1 or 0) - if wsp and wsp.x then - storage:set_string("mcl_spawn_world_spawn_point", minetest.pos_to_string(wsp)) - end - storage:set_int("mcl_spawn_searched", searched and 1 or 0) - storage:set_int("mcl_spawn_check", check) - storage:set_string("mcl_spawn_cp", minetest.pos_to_string(cp)) - storage:set_int("mcl_spawn_edge_len", edge_len) - storage:set_int("mcl_spawn_edge_dist", edge_dist) - storage:set_int("mcl_spawn_dir_step", dir_step) - storage:set_int("mcl_spawn_dir_ind", dir_ind) - end) -end) diff --git a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.de.tr b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.de.tr deleted file mode 100644 index 57d32a5f7..000000000 --- a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_spawn -New respawn position set!=Neue Wiedereinstiegsposition gesetzt! -Respawn position cleared!=Wiedereinstiegsposition gelöscht! -Your spawn bed was missing or blocked, and you had no charged respawn anchor!=Ihr Startbett fehlte oder war blockiert, und Sie hatten keinen geladenen Seelenanker! -Couldn't get level of your respawn anchor!=Das Füllstand ihres Seelenankers konnte nicht erkannt werden! \ No newline at end of file diff --git a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.es.tr b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.es.tr deleted file mode 100644 index d6de52f9f..000000000 --- a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_spawn -New respawn position set!=¡Nueva posición de reaparición establecida! -Respawn position cleared!=¡Posición de reaparición eliminada! -Your spawn bed was missing or blocked.=Su cama ha sido destruida o estaba bloqueada. diff --git a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.fr.tr b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.fr.tr deleted file mode 100644 index f1fab2bf1..000000000 --- a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_spawn -New respawn position set!=Nouvelle position de réapparition définie! -Respawn position cleared!=Position de réapparition supprimée! -Your spawn bed was missing or blocked.=Votre lit d'apparition était manquant ou bloqué. diff --git a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr deleted file mode 100644 index df97a3d72..000000000 --- a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_spawn -New respawn position set!=Ustawiono nową pozycję odradzania! -Respawn position cleared!=Usunięto pozycję odradzania! -Your spawn bed was missing or blocked.=Twoje łóżko odradzania zginęło lub zostało zablokowane. - diff --git a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.ru.tr b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.ru.tr deleted file mode 100644 index eec1bcd65..000000000 --- a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_spawn -New respawn position set!=Задана новая точка возрождения! -Respawn position cleared!=Точка возрождения удалена! -Your spawn bed was missing or blocked.=Точка вашего возрождения не задана либо заблокирована. diff --git a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.zh_TW.tr b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.zh_TW.tr deleted file mode 100644 index f47d22c2d..000000000 --- a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.zh_TW.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_spawn -New respawn position set!=新重生點已設定! -Respawn position cleared!=重生點已清除! -Your spawn bed was missing or blocked.=你的床被破壞或被堵住了。 diff --git a/mods/PLAYER/mcl_spawn/locale/template.txt b/mods/PLAYER/mcl_spawn/locale/template.txt deleted file mode 100644 index aa8aafe8d..000000000 --- a/mods/PLAYER/mcl_spawn/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_spawn -New respawn position set!= -Respawn position cleared!= -Couldn't get level of your respawn anchor!= -Your spawn bed was missing or blocked, and you had no charged respawn anchor!= \ No newline at end of file diff --git a/mods/PLAYER/mcl_spawn/mod.conf b/mods/PLAYER/mcl_spawn/mod.conf deleted file mode 100644 index 954f831db..000000000 --- a/mods/PLAYER/mcl_spawn/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_spawn -author = Wuzzy -description = Set and get the player's respawn position -depends = mcl_init diff --git a/mods/PLAYER/mcl_sprint/COPYING b/mods/PLAYER/mcl_sprint/COPYING deleted file mode 100644 index 0e259d42c..000000000 --- a/mods/PLAYER/mcl_sprint/COPYING +++ /dev/null @@ -1,121 +0,0 @@ -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. diff --git a/mods/PLAYER/mcl_sprint/README.md b/mods/PLAYER/mcl_sprint/README.md deleted file mode 100644 index f9f45d442..000000000 --- a/mods/PLAYER/mcl_sprint/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Sprint Mod for MineClone 2 -Forked from [sprint] by GunshipPenguin - -## Description -Allows the player to sprint by pressing the “Use” key (default: E). -By default, sprinting will make the player travel 80% faster and -allow him/her to jump 10% higher. - -Licence: CC0 (see COPYING file) - -## Mod developer settings (`init.lua`) -### `mcl_sprint.SPEED` -How fast the player will move when sprinting as opposed to normal -movement speed. 1.0 represents normal speed so 1.5 would mean that a -sprinting player would travel 50% faster than a walking player and -2.4 would mean that a sprinting player would travel 140% faster than -a walking player. diff --git a/mods/PLAYER/mcl_sprint/init.lua b/mods/PLAYER/mcl_sprint/init.lua deleted file mode 100644 index 4c0d609c9..000000000 --- a/mods/PLAYER/mcl_sprint/init.lua +++ /dev/null @@ -1,228 +0,0 @@ ---[[ -Sprint mod for Minetest by GunshipPenguin - -To the extent possible under law, the author(s) -have dedicated all copyright and related and neighboring rights -to this software to the public domain worldwide. This software is -distributed without any warranty. -]] - -local math = math -local vector = vector - -local pairs = pairs - -local get_node = minetest.get_node -local get_gametime = minetest.get_gametime -local add_particlespawner = minetest.add_particlespawner -local get_player_by_name = minetest.get_player_by_name - -local registered_nodes = minetest.registered_nodes - -local get_hunger = mcl_hunger.get_hunger -local exhaust = mcl_hunger.exhaust - - ---Configuration variables, these are all explained in README.md -mcl_sprint = {} - -mcl_sprint.SPEED = 1.3 - -local players = {} - --- Returns true if the player with the given name is sprinting, false if not. --- Returns nil if player does not exist. -function mcl_sprint.is_sprinting(playername) - if players[playername] then - return players[playername].sprinting - else - return nil - end -end - -minetest.register_on_joinplayer(function(player) - local playerName = player:get_player_name() - - players[playerName] = { - sprinting = false, - timeOut = 0, - shouldSprint = false, - clientSprint = false, - lastPos = player:get_pos(), - sprintDistance = 0, - fov = 1.0, - channel = minetest.mod_channel_join("mcl_sprint:" .. playerName), - } -end) -minetest.register_on_leaveplayer(function(player) - local playerName = player:get_player_name() - players[playerName] = nil -end) - -local function cancelClientSprinting(name) - players[name].channel:send_all("") - players[name].clientSprint = false -end - -local function setSprinting(playerName, sprinting) --Sets the state of a player (0=stopped/moving, 1=sprinting) - local player = minetest.get_player_by_name(playerName) - local controls = player:get_player_control() - if players[playerName] then - players[playerName].sprinting = sprinting - local fov_old = players[playerName].fov - local fov_new = fov_old - local fade_time = .15 - if sprinting == true - or controls.RMB - and string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") - and player:get_wielded_item():get_name() ~= "mcl_bows:bow" then - if sprinting == true then - fov_new = math.min(players[playerName].fov + 0.05, 1.2) - else - fov_new = .7 - players[playerName].fade_time = .3 - end - if sprinting == true then - playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED) - end - elseif sprinting == false - and player:get_wielded_item():get_name() ~= "mcl_bows:bow_0" - and player:get_wielded_item():get_name() ~= "mcl_bows:bow_1" - and player:get_wielded_item():get_name() ~= "mcl_bows:bow_2" then - fov_new = math.max(players[playerName].fov - 0.05, 1.0) - if sprinting == false then - playerphysics.remove_physics_factor(player, "speed", "mcl_sprint:sprint") - end - end - if fov_new ~= fov_old then - players[playerName].fov = fov_new - player:set_fov(fov_new, true, fade_time) - end - return true - end - return false -end - --- Given the param2 and paramtype2 of a node, returns the tile that is facing upwards -local function get_top_node_tile(param2, paramtype2) - if paramtype2 == "colorwallmounted" then - paramtype2 = "wallmounted" - param2 = param2 % 8 - elseif paramtype2 == "colorfacedir" then - paramtype2 = "facedir" - param2 = param2 % 32 - end - if paramtype2 == "wallmounted" then - if param2 == 0 then - return 2 - elseif param2 == 1 then - return 1 - else - return 5 - end - elseif paramtype2 == "facedir" then - if param2 >= 0 and param2 <= 3 then - return 1 - elseif param2 == 4 or param2 == 10 or param2 == 13 or param2 == 19 then - return 6 - elseif param2 == 5 or param2 == 11 or param2 == 14 or param2 == 16 then - return 3 - elseif param2 == 6 or param2 == 8 or param2 == 15 or param2 == 17 then - return 5 - elseif param2 == 7 or param2 == 9 or param2 == 12 or param2 == 18 then - return 4 - elseif param2 >= 20 and param2 <= 23 then - return 2 - else - return 1 - end - else - return 1 - end -end - -minetest.register_on_modchannel_message(function(channel_name, sender, message) - if channel_name == "mcl_sprint:" .. sender then - players[sender].clientSprint = minetest.is_yes(message) - end -end) - -minetest.register_on_respawnplayer(function(player) - cancelClientSprinting(player:get_player_name()) -end) - -minetest.register_globalstep(function(dtime) - --Get the gametime - local gameTime = get_gametime() - - --Loop through all connected players - for playerName, playerInfo in pairs(players) do - local player = get_player_by_name(playerName) - if player then - local ctrl = player:get_player_control() - --Check if the player should be sprinting - if players[playerName]["clientSprint"] or ctrl.aux1 and ctrl.up and not ctrl.sneak then - players[playerName]["shouldSprint"] = true - else - players[playerName]["shouldSprint"] = false - end - - local playerPos = player:get_pos() - --If the player is sprinting, create particles behind and cause exhaustion - if playerInfo["sprinting"] == true and not player:get_attach() and gameTime % 0.1 == 0 then - -- Exhaust player for sprinting - local lastPos = players[playerName].lastPos - local dist = vector.distance({x=lastPos.x, y=0, z=lastPos.z}, {x=playerPos.x, y=0, z=playerPos.z}) - players[playerName].sprintDistance = players[playerName].sprintDistance + dist - if players[playerName].sprintDistance >= 1 then - local superficial = math.floor(players[playerName].sprintDistance) - exhaust(playerName, mcl_hunger.EXHAUST_SPRINT * superficial) - players[playerName].sprintDistance = players[playerName].sprintDistance - superficial - end - - -- Sprint node particles - local playerNode = get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]}) - local def = registered_nodes[playerNode.name] - if def and def.walkable then - add_particlespawner({ - amount = math.random(1, 2), - time = 1, - minpos = {x=-0.5, y=0.1, z=-0.5}, - maxpos = {x=0.5, y=0.1, z=0.5}, - minvel = {x=0, y=5, z=0}, - maxvel = {x=0, y=5, z=0}, - minacc = {x=0, y=-13, z=0}, - maxacc = {x=0, y=-13, z=0}, - minexptime = 0.1, - maxexptime = 1, - minsize = 0.5, - maxsize = 1.5, - collisiondetection = true, - attached = player, - vertical = false, - node = playerNode, - node_tile = get_top_node_tile(playerNode.param2, def.paramtype2), - }) - end - end - - --Adjust player states - players[playerName].lastPos = playerPos - if players[playerName]["shouldSprint"] == true then --Stopped - local sprinting - -- Prevent sprinting if hungry or sleeping - if (mcl_hunger.active and get_hunger(player) <= 6) - or (player:get_meta():get_string("mcl_beds:sleeping") == "true") then - sprinting = false - cancelClientSprinting(playerName) - else - sprinting = true - end - setSprinting(playerName, sprinting) - elseif players[playerName]["shouldSprint"] == false then - setSprinting(playerName, false) - end - - end - end -end) diff --git a/mods/PLAYER/mcl_sprint/mod.conf b/mods/PLAYER/mcl_sprint/mod.conf deleted file mode 100644 index 0d20f80a3..000000000 --- a/mods/PLAYER/mcl_sprint/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_sprint -author = GunshipPenguin -description = Allows the player to sprint by pressing the “Use” key (default: E). -depends = mcl_playerinfo, playerphysics, mcl_hunger diff --git a/mods/PLAYER/mcl_wieldview/LICENSE.txt b/mods/PLAYER/mcl_wieldview/LICENSE.txt deleted file mode 100644 index e1552c066..000000000 --- a/mods/PLAYER/mcl_wieldview/LICENSE.txt +++ /dev/null @@ -1,18 +0,0 @@ -[mod] visible wielded items [wieldview] -======================================= - -Copyright (C) 2012-2019 stujones11, Stuart Jones - -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. - -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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. diff --git a/mods/PLAYER/mcl_wieldview/README.txt b/mods/PLAYER/mcl_wieldview/README.txt deleted file mode 100644 index 183e8c6d5..000000000 --- a/mods/PLAYER/mcl_wieldview/README.txt +++ /dev/null @@ -1,21 +0,0 @@ -[mod] visible wielded items [wieldview] -======================================= - -Makes hand wielded items visible to other players. - -default settings: [minetest.conf] - -# Set number of seconds between visible wielded item updates. -wieldview_update_time = 2 - -# Show nodes as tiles, disabled by default -wieldview_node_tiles = false - - -Info for modders -################ - -Wield image transformation: To apply a simple transformation to the item in -hand, add the group “wieldview_transform” to the item definition. The group -rating equals one of the numbers used for the [transform texture modifier -of the Lua API. diff --git a/mods/PLAYER/mcl_wieldview/init.lua b/mods/PLAYER/mcl_wieldview/init.lua deleted file mode 100644 index ff70445e3..000000000 --- a/mods/PLAYER/mcl_wieldview/init.lua +++ /dev/null @@ -1,126 +0,0 @@ -local get_connected_players = minetest.get_connected_players -local get_item_group = minetest.get_item_group - -mcl_wieldview = { - players = {} -} - -function mcl_wieldview.get_item_texture(itemname) - if itemname == "" or minetest.get_item_group(itemname, "no_wieldview") ~= 0 then - return - end - - local def = minetest.registered_items[itemname] - if not def then - return - end - - local inv_image = def.inventory_image - if inv_image == "" then - return - end - - local texture = inv_image - - local transform = get_item_group(itemname, "wieldview_transform") - if transform then - -- This actually works with groups ratings because transform1, transform2, etc. - -- have meaning and transform0 is used for identidy, so it can be ignored - texture = texture .. "^[transform" .. transform - end - - return texture -end - -function mcl_wieldview.update_wielded_item(player) - if not player then - return - end - local itemstack = player:get_wielded_item() - local itemname = itemstack:get_name() - - local def = mcl_wieldview.players[player] - - if def.item == itemname then - return - end - - def.item = itemname - def.texture = mcl_wieldview.get_item_texture(itemname) or "blank.png" - - mcl_player.player_set_wielditem(player, def.texture) -end - -minetest.register_on_joinplayer(function(player) - mcl_wieldview.players[player] = {item = "", texture = "blank.png"} - - minetest.after(0, function() - if not player:is_player() then - return - end - - mcl_wieldview.update_wielded_item(player) - - local itementity = minetest.add_entity(player:get_pos(), "mcl_wieldview:wieldnode") - itementity:set_attach(player, "Hand_Right", vector.new(0, 1, 0), vector.new(90, 0, 45)) - itementity:get_luaentity().wielder = player - end) -end) - -minetest.register_on_leaveplayer(function(player) - mcl_wieldview.players[player] = nil -end) - -minetest.register_globalstep(function() - local players = get_connected_players() - for i = 1, #players do - mcl_wieldview.update_wielded_item(players[i]) - end -end) - -minetest.register_entity("mcl_wieldview:wieldnode", { - initial_properties = { - hp_max = 1, - visual = "wielditem", - physical = false, - textures = {""}, - automatic_rotate = 1.5, - is_visible = true, - pointable = false, - collide_with_objects = false, - static_save = false, - collisionbox = {-0.21, -0.21, -0.21, 0.21, 0.21, 0.21}, - selectionbox = {-0.21, -0.21, -0.21, 0.21, 0.21, 0.21}, - visual_size = {x = 0.21, y = 0.21}, - }, - - itemstring = "", - - on_step = function(self) - if self.wielder:is_player() then - local def = mcl_wieldview.players[self.wielder] - local itemstring = def.item - - if self.itemstring ~= itemstring then - local itemdef = minetest.registered_items[itemstring] - self.object:set_properties({glow = itemdef and itemdef.light_source or 0}) - - -- wield item as cubic - if def.texture == "blank.png" then - self.object:set_properties({textures = {itemstring}}) - -- wield item as flat - else - self.object:set_properties({textures = {""}}) - end - - if minetest.get_item_group(itemstring, "no_wieldview") ~= 0 then - self.object:set_properties({textures = {""}}) - end - - self.itemstring = itemstring - end - else - self.object:remove() - end - end, -}) diff --git a/mods/PLAYER/mcl_wieldview/mod.conf b/mods/PLAYER/mcl_wieldview/mod.conf deleted file mode 100644 index 4b3097876..000000000 --- a/mods/PLAYER/mcl_wieldview/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_wieldview -author = stujones11 -description = Makes hand wielded items visible to other players. -depends = mcl_player diff --git a/mods/PLAYER/modpack.conf b/mods/PLAYER/modpack.conf deleted file mode 100644 index 52814db12..000000000 --- a/mods/PLAYER/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = PLAYER -description = Meta-modpack that contains player-related mods for MineClone 2 diff --git a/mods/PLAYER/playerphysics/README.md b/mods/PLAYER/playerphysics/README.md deleted file mode 100644 index 303213fb1..000000000 --- a/mods/PLAYER/playerphysics/README.md +++ /dev/null @@ -1,116 +0,0 @@ -# Player Physics API. - -Version: 1.0.0 - -This mod makes it possible for multiple mods to modify player physics (speed, jumping strength, gravity) without conflict. - -## Introduction -### For players -Mods and games in Minetest can set physical attributes of players, such as speed and jump strength. For example, player speed could be set to 200%. But the way this works makes it difficult for multiple mods to *modify* physical attributes without leading to conflicts, problems and hilarious bugs, like speed that changes often to nonsense values. - -The Player Physics API aims to resolve this conflict by providing a “common ground” for mods to work together in this regard. - -This mod does nothing on its own, you will only need to install it as dependency of other mods. - -When you browse for mods that somehow mess with player physics (namely: speed, jump strength or gravity) and want to use more than one of them, check out if they support the Player Physics API. If they don't, it's very likely these mods will break as soon you activate more than one of them, for example, if two mods try to set the player speed. If you found such a “hilarious bug”, please report it to the developers of the mods (or games) and point them to the Player Physics API. - -Of course, not all mods need the Player Physics API. Mods that don't touch player physics at all won't need this mod. - -The rest of this document is directed at developers. - -### For developers -The function `set_physics_override` from the Minetest Lua API allows mod authors to override physical attributes of players, such as speed or jump strength. - -This function works fine as long there is only one mod that sets a particular physical attribute at a time. However, as soon as at least two different mods (that do not know each other) try to change the same player physics attribute using only this function, there will be conflicts as each mod will undo the change of the other mod, as the function sets a raw value. A classic race condition occurs. This is the case because the mods fail to communicate with each other. - -This mod solves the problem of conflicts. It bans the concept of “setting the raw value directly” and replaces it with the concept of factors that mods can add and remove for each attribute. The real physical player attribute will be the product of all active factors. - -## Quick start -Let's say you have a mod `example` and want to double the speed of the player (i.e. multiply it by a factor of 2), but you also don't want to break other mods that might touch the speed. - -Previously, you might have written something like this: - -`player:set_physics_override({speed=2})` - -However, your mod broke down as soon the mod `example2` came along, which wanted to increase the speed by 50%. In the real game, the player speed randomly switched from 50% and 200% which was a very annoying bug. - -In your `example` mod, you can replace the code with this: - -`playerphysics.add_physics_factor(player, "speed", "my_double_speed", 2)` - -Where `"my_double_speed` is an unique ID for your speed factor. - -Now your `example` mod is interoperable! And now, of course, the `example2` mod has to be updated in a similar fashion. - -## Precondition -There is only one precondition to using this mod, but it is important: - -Mods *MUST NOT* call `set_physics_override` directly for numerical values. Instead, to modify player physics, all mods that touch player physics have to use this API. - -## Functions -### `playerphysics.add_physics_factor(player, attribute, id, value)` -Adds a factor for a player physic and updates the player physics immediately. - -#### Parameters -* `player`: Player object -* `attribute`: Which of the physical attributes to change. Any of the numeric values of `set_physics_override` (e.g. `"speed"`, `"jump"`, `"gravity"`) -* `id`: Unique identifier for this factor. Identifiers are stored on a per-player per-attribute type basis -* `value`: The factor to add to the list of products - -If a factor for the same player, attribute and `id` already existed, it will be overwritten. - -### `playerphysics.remove_physics_factor(player, attribute, id)` -Removes the physics factor of the given ID and updates the player's physics. - -#### Parameters -Same as in `playerphysics.add_physics_factor`, except there is no `value` argument. - -## Examples -### Speed changes -Let's assume this mod is used by 3 different mods all trying to change the speed: -Potions, Exhaustion and Electrocution. -Here's what it could look like: - -Potions mod: -``` -playerphysics.add_physics_factor(player, "speed", "run_potion", 2) -``` - -Exhaustion mod: -``` -playerphysics.add_physics_factor(player, "jump", "exhausted", 0.75) -``` - -Electrocution mod: -``` -playerphysics.add_physics_factor(player, "jump", "shocked", 0.9) -``` - -When the 3 mods have done their change, the real player speed is simply the product of all factors, that is: - -2 * 0.75 * 0.9 = 1.35 - -The final player speed is thus 135%. - -### Speed changes, part 2 - -Let's take the example above. -Now if the Electrocution mod is done with shocking the player, it just needs to call: - -``` -playerphysics.remove_physics_factor(player, "jump", "shocked") -``` - -The effect is now gone, so the new player speed will be: - -2 * 0.75 = 1.5 - -### Sleeping -To simulate sleeping by preventing all player movement, this can be done with this easy trick: - -``` -playerphysics.add_physics_factor(player, "speed", "sleeping", 0) -playerphysics.add_physics_factor(player, "jump", "sleeping", 0) -``` - -This works regardless of the other factors because 0 times anything equals 0. diff --git a/mods/PLAYER/playerphysics/init.lua b/mods/PLAYER/playerphysics/init.lua deleted file mode 100644 index 50d6454d3..000000000 --- a/mods/PLAYER/playerphysics/init.lua +++ /dev/null @@ -1,45 +0,0 @@ -playerphysics = {} - -local function calculate_attribute_product(player, attribute) - local a = minetest.deserialize(player:get_meta():get_string("playerphysics:physics")) - local product = 1 - if a == nil or a[attribute] == nil then - return product - end - local factors = a[attribute] - if type(factors) == "table" then - for _, factor in pairs(factors) do - product = product * factor - end - end - return product -end - -function playerphysics.add_physics_factor(player, attribute, id, value) - local meta = player:get_meta() - local a = minetest.deserialize(meta:get_string("playerphysics:physics")) - if a == nil then - a = { [attribute] = { [id] = value } } - elseif a[attribute] == nil then - a[attribute] = { [id] = value } - else - a[attribute][id] = value - end - meta:set_string("playerphysics:physics", minetest.serialize(a)) - local raw_value = calculate_attribute_product(player, attribute) - player:set_physics_override({[attribute] = raw_value}) -end - -function playerphysics.remove_physics_factor(player, attribute, id) - local meta = player:get_meta() - local a = minetest.deserialize(meta:get_string("playerphysics:physics")) - if a == nil or a[attribute] == nil then - -- Nothing to remove - return - else - a[attribute][id] = nil - end - meta:set_string("playerphysics:physics", minetest.serialize(a)) - local raw_value = calculate_attribute_product(player, attribute) - player:set_physics_override({[attribute] = raw_value}) -end diff --git a/mods/PLAYER/playerphysics/mod.conf b/mods/PLAYER/playerphysics/mod.conf deleted file mode 100644 index 1c2f2fa07..000000000 --- a/mods/PLAYER/playerphysics/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = playerphysics -author = Wuzzy -description = This mod makes it possible for multiple mods to modify player physics (speed, jumping strength, gravity) without conflict. diff --git a/mods/mcljepc_core/blocks.lua b/mods/mcljepc_core/blocks.lua new file mode 100644 index 000000000..d8fa2f2a9 --- /dev/null +++ b/mods/mcljepc_core/blocks.lua @@ -0,0 +1,46 @@ + +local blocks = { + grass = { + description = "Grass", + -- color = "#8EB971", + -- Color picked to be much lighter than above from MCL2, but still mostly green + color = "#58ff3a", + tiles = { "mcl_core_grass_block_top.png" } + -- tiles = { terrain(0) } + }, + cobblestone = { + description = "Cobblestone", + tiles = { "default_cobble.png" }, + -- tiles = { terrain(1) } + } +} + +for name, def in pairs(blocks) do + if not def.groups then def.groups = {} end + if not def.unbreakable then + def.groups.instantly = 3 + end + + def.drop = "" + + def.stack_max = 1 + + minetest.register_node("mcljepc_core:"..name, def) +end + +minetest.register_craftitem("mcljepc_core:block", { + inventory_image = "blank.png", + wield_scale = {x = 0, y = 0, z = 0}, + on_place = function(itemstack, user, pointed_thing) + local nodename = "mcljepc_core:cobblestone" + if pointed_thing.above.y == 0 then + nodename = "mcljepc_core:grass" + end + + minetest.set_node(pointed_thing.above, { name = nodename }) + end, + on_drop = function(itemstack, dropper, pos) + return itemstack + end +}) + diff --git a/mods/mcljepc_core/helpers.lua b/mods/mcljepc_core/helpers.lua new file mode 100644 index 000000000..99321cf5d --- /dev/null +++ b/mods/mcljepc_core/helpers.lua @@ -0,0 +1,12 @@ +--- Misc. Helper functions + +function atlas_id(tex, id) + local x = id % 16 + local y = math.floor(id / 16) + + return tex..".png^[sheet:16x16:"..x..","..y +end + +function terrain(id) + return atlas_id("terrain", id) +end diff --git a/mods/mcljepc_core/init.lua b/mods/mcljepc_core/init.lua new file mode 100644 index 000000000..3fcdc8ddb --- /dev/null +++ b/mods/mcljepc_core/init.lua @@ -0,0 +1,15 @@ +dofile(minetest.get_modpath("mccnt_core") .. "/helpers.lua") +dofile(minetest.get_modpath("mcljepc_core") .. "/blocks.lua") + +minetest.register_item(":", { + type = "none", + --wield_image = "hand.png", + wield_scale = {x = 0.5, y = 1, z = 4}, + range = 10, + tool_capabilities = { + max_drop_level = 3, + groupcaps = { + instantly = {times = {[3] = 0}, uses = 0, maxlevel = 256} + } + } +}) diff --git a/mods/mcljepc_core/mod.conf b/mods/mcljepc_core/mod.conf new file mode 100644 index 000000000..5bcf4156c --- /dev/null +++ b/mods/mcljepc_core/mod.conf @@ -0,0 +1 @@ +name = mcljepc_core diff --git a/mods/ITEMS/mcl_core/textures/default_cobble.png b/mods/mcljepc_core/textures/default_cobble.png similarity index 100% rename from mods/ITEMS/mcl_core/textures/default_cobble.png rename to mods/mcljepc_core/textures/default_cobble.png diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_grass_block_top.png b/mods/mcljepc_core/textures/mcl_core_grass_block_top.png similarity index 100% rename from mods/ITEMS/mcl_core/textures/mcl_core_grass_block_top.png rename to mods/mcljepc_core/textures/mcl_core_grass_block_top.png diff --git a/mods/mcljepc_gui/init.lua b/mods/mcljepc_gui/init.lua new file mode 100644 index 000000000..e970651e2 --- /dev/null +++ b/mods/mcljepc_gui/init.lua @@ -0,0 +1,14 @@ +minetest.register_on_joinplayer(function(player) + player:hud_set_hotbar_itemcount(1) + + player:hud_set_hotbar_image("blank.png") + player:hud_set_hotbar_selected_image("blank.png") + + player:set_inventory_formspec("") + + player:get_inventory():set_stack("main", 1, ItemStack("mcljepc_core:block")) +end) + +minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing) + return true +end) diff --git a/mods/mcljepc_gui/mod.conf b/mods/mcljepc_gui/mod.conf new file mode 100644 index 000000000..77cba3bdf --- /dev/null +++ b/mods/mcljepc_gui/mod.conf @@ -0,0 +1,2 @@ +name = mcljepc_gui +depends = mcljepc_core diff --git a/mods/mcljepc_mapgen/init.lua b/mods/mcljepc_mapgen/init.lua new file mode 100644 index 000000000..f68b64abd --- /dev/null +++ b/mods/mcljepc_mapgen/init.lua @@ -0,0 +1,40 @@ + +local data = {} + +local mg = { + blocks = { + grass = minetest.get_content_id("mcljepc_core:grass"), + dirt = minetest.get_content_id("mcljepc_core:cobblestone"), + }, + size = 128, + depth = 64 +} + +if minetest.get_mapgen_setting('mg_name') == "singlenode" then + +minetest.register_on_generated(function(minp, maxp, blockseed) + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax} + vm:get_data(data) + + for z = minp.z, maxp.z do + for y = minp.y, maxp.y do + local posi = area:index(minp.x, y, z) + for x = minp.x, maxp.x do + if (x >= -mg.size and x <= mg.size) and (z >= -mg.size and z <= mg.size) then + if y >= -mg.depth and y <= -1 then + data[posi] = mg.blocks.dirt + elseif y == 0 then + data[posi] = mg.blocks.grass + end + end + + posi = posi + 1 + end + end end + + vm:set_data(data) + vm:write_to_map() +end) + +end diff --git a/mods/mcljepc_mapgen/mod.conf b/mods/mcljepc_mapgen/mod.conf new file mode 100644 index 000000000..cdae4b81d --- /dev/null +++ b/mods/mcljepc_mapgen/mod.conf @@ -0,0 +1,2 @@ +name = mcljepc_mapgen +depends = mcljepc_core diff --git a/settingtypes.txt b/settingtypes.txt deleted file mode 100644 index 8a0ebcce8..000000000 --- a/settingtypes.txt +++ /dev/null @@ -1,159 +0,0 @@ -# This file contains settings of MineClone 2 that can be changed in -# minetest.conf - -[World] -# In creative mode, players are able to dig all kind of blocks -# instantly, and have access to unlimited resources. -# Items are not used up, and blocks do not drop. -# Some of the functionality is only available if this setting is present -# at startup. -# This setting may be removed in later version in favor of -# per-player Creative Mode. -creative_mode (Creative mode) bool false - -# Fire spreads and flammable blocks might be destroyed by nearby fire. -# Destructive fire may cause severe destruction. -# Fire blocks will be non-destructive and stops spreading when this -# setting is disabled, but they still deal damage to creatures. -enable_fire (Destructive and spreading fire) bool true - -# If enabled, the weather will change naturally over time. -mcl_doWeatherCycle (Change weather) bool true - -# If enabled, breaking blocks will cause them to drop as item. -# Note that blocks never have drops when in Creative Mode. -mcl_doTileDrops (Blocks have drops) bool true - -# If enabled, TNT explosions destroy blocks. -mcl_tnt_griefing (TNT destroys blocks) bool true - -[Players] -# If enabled, players respawn at the bed they last lay on instead of normal -# spawn. -# This setting is only read at startup. -enable_bed_respawn (Respawn at bed) bool true - -# How many players have to sleep to skip the night, in percent. -# Setting to 0 will mean 1 player is always enough to skip the night. Setting above 100 will prevent skipping the night. -# 100 by default. -# The setting can be changed ingame using `/set mcl_playersSleepingPercentage ` -mcl_playersSleepingPercentage (Players Sleeping Percentage) int 100 - -# Normally, players drop all their items when they die. Enable this -# setting, so players always keep their inventory on death. -mcl_keepInventory (Keep inventory on death) bool false - -# If enabled, chat messages are shown to everyone when a player dies. -mcl_showDeathMessages (Show death messages) bool true - -# If enabled, the recipe book will progressively be filled with new recipes that can be crafted from all items you ever have had in your inventory. -# Recommended for new players and for a spoiler-free gameplay experience. -# If disabled, all recipes will be shown. -mcl_craftguide_progressive_mode (Learn crafting recipes progressively) bool true - -[Mobs] -# If enabled, mobs will spawn naturally. This does not affect -# affect mob spawners. -# This setting is only read at startup. -mobs_spawn (Spawn mobs naturally) bool true - -# Controls the overall amount of mobs that spawn. The higher the number, -# the less often mobs will spawn. This does not affect mob spawners. -mobs_spawn_chance (Mob spawn chance) float 2.5 0.0 - -# If enabled, only peaceful mobs will appear naturally. This does not -# affect mob spawners. -# This setting is only read at startup. -only_peaceful_mobs (Spawn only peaceful mobs) bool false - -# Allow mobs to spawn in protected areas. This does not affect -# mob spawners. -mobs_spawn_protected (Mobs spawn in protected areas) bool false - -# Mobs difficulty. This is a number that will affect the initial and maximum -# health and the amount of damage that mobs deal. Health and damage will -# be multiplied with this number. -mob_difficulty (Mob difficulty factor) float 1.0 0.0 - -# If enabled, mobs might drop items when they die. -mobs_drop_items (Mobs drop items) bool true - -# If enabled, mobs can take, place, change and destroy blocks around them. -mobs_griefing (Mobs change blocks) bool true - -# If enabled, mobs won't damage particles when they got hurt. -mobs_disable_blood (Disable mob damage particles) bool false - -[Audio] -# Enable flame sound. -flame_sound (Flame sound) bool true - -[Graphics] -# How many vertical animation frames the fire texture (fire_basic_flame_animated.png) has. -# This may vary depending on the texture pack you use. -# Form: Image height / Image width -fire_animation_frames (Fire Animation Frames) int 8 - -# Whether to animate chests when open / close -animated_chests (Animated chests) bool true - -# The maximum number of boss bars to simultaniously display on the screen -max_bossbars (Maximum Boss bars) int 5 - -[Experimental] -# Whether ice is translucent. If disabled, ice is fully opaque. -# -# Note: As of Minetest version 5.1.0, translucent ice above oceans -# will look weird, there's a lot of flashing/blinking going on -# due to bugs in Minetest's implementation of translucency. -# See also: https://github.com/minetest/minetest/issues/95 -mcl_translucent_ice (Translucent ice) bool false - -# Whether to generate fallen logs in some biomes. -# They might not always look pretty and have strange overhangs. -mcl_generate_fallen_logs (Generate fallen logs) bool false - -# If enabled, the “flat” map generator generates a Classic Superflat world: -# Completely flat, 1 layer of grass blocks on top of 2 layers of dirt on -# top of a final layer of bedrock. No caves, trees or plants. -# Also, if enabled, the setting “mgflat_flags” is ignored. -# If disabled, Minetest's default flat map generator is used, that is, trees, -# caves, and a deeper underground can be generated. -# -# Caution: Change this setting with care! -# If you change this setting, then play on an existing flat world -# that started with a different setting (e.g. you changed from superflat -# from “enabled” to “disabled”), there will be continuity errors when players -# reach new areas. Most importantly, the void is much higher in Superflat than -# in “normal” Flat. -# But creating new flat worlds after changing this setting should be safe. -mcl_superflat_classic (Classic superflat map generation) bool false - -# If disabled, no ores will be generated. -mcl_generate_ores (Generate Ores) bool true - -# If disabled, command blocks will be unusuable (but still present). -mcl_enable_commandblocks (Enable Command Blocks) bool true - -# Make some blocks emit decorative particles like flames. This setting -# specifies the detail level of particles, with higher levels being -# more CPU demanding. -# WARNING: This setting has quite poor performance and can slow down your -# game by a lot. -mcl_node_particles (Block particles detail level) enum none high,medium,low,none - -# Enable hard overiding of builtin commands. -mcl_builtin_commands_overide (Enable hard overiding of builtin commands.) bool true - -# If enabled, this will substitute a few blocks in village schematics so they blend into normal, snowy, and sandy areas. Defaults to true. -basic_pseudobiome_villages (Enables very basic, and experimental "pseudobiome-based" villages) bool true - -# If enabled, will run an LBM to fix the top 1/2 of double plants in mcimported worlds; defaults to true. -fix_doubleplants (Mcimport double plant fixes) bool true - -# Allow players to create Minecraft-like maps. -enable_real_maps (Enable Real Maps) bool true - -[Debugging] -# If enabled, this will show the itemstring of an item in the description. -mcl_item_id_debug (Item ID Debug) bool false \ No newline at end of file diff --git a/tools/generate_ingame_credits.lua b/tools/generate_ingame_credits.lua deleted file mode 100755 index db124aaf6..000000000 --- a/tools/generate_ingame_credits.lua +++ /dev/null @@ -1,50 +0,0 @@ -#! /usr/bin/env lua --- Script to automatically generate mods/HUD/mcl_credits/people.lua from CREDITS.md --- Run from MCL2 root folder - -local colors = { - ["Creator of MineClone"] = "0x0A9400", - ["Creator of MineClone2"] = "0xFBF837", - ["Maintainers"] = "0xFF51D5", - ["Developers"] = "0xF84355", - ["Contributors"] = "0x52FF00", - ["MineClone5"] = "0xA60014", - ["Original Mod Authors"] = "0x343434", - ["3D Models"] = "0x0019FF", - ["Textures"] = "0xFF9705", - ["Translations"] = "0x00FF60", - ["Funders"] = "0xF7FF00", - ["Special thanks"] = "0x00E9FF", -} - -local from = io.open("CREDITS.md", "r") -local to = io.open("mods/HUD/mcl_credits/people.lua", "w") - -to:write([[ -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) - -]]) - -to:write("return {\n") - -local started_block = false - -for line in from:lines() do - if line:find("## ") == 1 then - if started_block then - to:write("\t}},\n") - end - local title = line:sub(4, #line) - to:write("\t{S(\"" .. title .. "\"), " .. (colors[title] or "0xFFFFFF") .. ", {\n") - started_block = true - elseif line:find("*") == 1 then - to:write("\t\t\"" .. line:sub(3, #line) .. "\",\n") - end -end - -if started_block then - to:write("\t}},\n") -end - -to:write("}\n")